From 8f9d1d4df02c65c3bbb3f950b5384eb9472fa879 Mon Sep 17 00:00:00 2001 From: Dominik Csapak Date: Thu, 15 Sep 2022 11:13:41 +0200 Subject: [PATCH] import 8.23.1 source Signed-off-by: Dominik Csapak --- Makefile | 2 +- eslint/{.nycrc => .c8rc} | 0 eslint/.eslintignore | 1 + eslint/.eslintrc.js | 89 +- eslint/.github/ISSUE_TEMPLATE.md | 53 - eslint/.github/ISSUE_TEMPLATE/NEW_SYNTAX.md | 43 - eslint/.github/ISSUE_TEMPLATE/bug-report.yml | 2 +- eslint/.github/ISSUE_TEMPLATE/new-syntax.yml | 60 + eslint/.github/PULL_REQUEST_TEMPLATE.md | 5 +- eslint/.github/dependabot.yml | 6 + eslint/.github/workflows/ci.yml | 32 +- eslint/.github/workflows/codeql-analysis.yml | 14 +- eslint/.github/workflows/stale.yml | 2 +- eslint/.markdownlint.yml | 6 +- eslint/CHANGELOG.md | 330 ++ eslint/CONTRIBUTING.md | 2 +- eslint/Makefile.js | 396 +- eslint/README.md | 44 +- eslint/bin/eslint.js | 16 +- eslint/conf/globals.js | 7 +- eslint/docs/.eleventy.js | 500 ++ eslint/docs/README.md | 30 +- .../architecture/dependency.svg | 52 - .../code-path-analysis/README.md | 1 - .../example-dowhilestatement.svg | 100 - .../example-forinstatement.svg | 148 - .../example-forstatement-for-ever.svg | 63 - .../example-forstatement.svg | 201 - .../example-hello-world.svg | 48 - .../example-ifstatement-chain.svg | 203 - .../example-ifstatement.svg | 122 - .../example-switchstatement-has-default.svg | 279 - .../example-switchstatement.svg | 232 - ...example-trystatement-try-catch-finally.svg | 137 - .../example-trystatement-try-catch.svg | 186 - .../example-trystatement-try-finally.svg | 139 - .../example-when-there-is-a-function-f.svg | 99 - .../example-when-there-is-a-function-g.svg | 47 - .../example-whilestatement.svg | 172 - .../code-path-analysis/helo.svg | 113 - .../loop-event-example-for-1.svg | 84 - .../loop-event-example-for-2.svg | 110 - .../loop-event-example-for-3.svg | 115 - .../loop-event-example-for-4.svg | 115 - .../loop-event-example-for-5.svg | 149 - .../loop-event-example-while-1.svg | 82 - .../loop-event-example-while-2.svg | 87 - .../loop-event-example-while-3.svg | 121 - eslint/docs/package.json | 48 + eslint/docs/rules/id-blacklist.md | 3 - eslint/docs/rules/no-control-regex.md | 34 - eslint/docs/src/_data/config.json | 4 + eslint/docs/src/_data/eslintVersion.js | 34 + .../docs/src/_data/further_reading_links.json | 702 +++ eslint/docs/src/_data/helpers.js | 31 + eslint/docs/src/_data/languages.json | 27 + eslint/docs/src/_data/links.json | 22 + eslint/docs/src/_data/navigation.json | 24 + eslint/docs/src/_data/rule_versions.json | 329 ++ eslint/docs/src/_data/rules.json | 2105 ++++++++ eslint/docs/src/_data/rules_meta.json | 2487 +++++++++ eslint/docs/src/_data/site.js | 26 + eslint/docs/src/_data/sites/en.yml | 117 + eslint/docs/src/_data/versions.json | 4 + .../src/_includes/components/_component.njk | 3 + .../src/_includes/components/alert.macro.html | 38 + .../_includes/components/button.macro.html | 26 + .../src/_includes/components/code-tabs.html | 21 + .../src/_includes/components/docs-index.html | 29 + .../src/_includes/components/docs-toc.html | 8 + .../src/_includes/components/hero.macro.html | 29 + .../components/language-switcher.html | 24 + .../docs/src/_includes/components/logo.html | 21 + .../src/_includes/components/nav-search.html | 11 + .../components/nav-version-switcher.html | 25 + .../src/_includes/components/navigation.html | 26 + .../components/related-rules.macro.html | 14 + .../components/rule-categories.macro.html | 56 + .../_includes/components/rule-list.macro.html | 3 + .../src/_includes/components/rule.macro.html | 51 + .../docs/src/_includes/components/search.html | 22 + .../_includes/components/social-icons.html | 57 + .../_includes/components/theme-switcher.html | 28 + .../components/version-switcher.html | 25 + eslint/docs/src/_includes/layouts/base.html | 157 + .../src/_includes/layouts/components.html | 46 + eslint/docs/src/_includes/layouts/doc.html | 107 + eslint/docs/src/_includes/layouts/main.html | 12 + .../src/_includes/partials/analytics.html | 24 + .../src/_includes/partials/carbon-ad.html | 13 + .../src/_includes/partials/docs-footer.html | 14 + .../src/_includes/partials/docs-header.html | 8 + .../_includes/partials/docs-left-sidebar.html | 0 .../_includes/partials/languages-list.html | 5 + .../src/_includes/partials/site-footer.html | 24 + .../src/_includes/partials/versions-list.html | 7 + eslint/docs/{ => src}/about/index.md | 6 +- eslint/docs/src/assets/fonts/Consolas.woff | Bin 0 -> 199344 bytes .../assets/fonts/Inter-Regular-subset.woff2 | Bin 0 -> 88772 bytes .../fonts/Inter-Regular-subset.zopfli.woff | Bin 0 -> 116524 bytes .../assets/fonts/Inter-SemiBold-subset.woff2 | Bin 0 -> 96824 bytes .../fonts/Inter-SemiBold-subset.zopfli.woff | Bin 0 -> 126432 bytes .../Inter/Inter-VariableFont_slnt,wght.ttf | Bin 0 -> 748068 bytes eslint/docs/src/assets/fonts/Inter/OFL.txt | 93 + eslint/docs/src/assets/fonts/Inter/README.txt | 72 + .../assets/fonts/Inter/static/Inter-Black.ttf | Bin 0 -> 294396 bytes .../assets/fonts/Inter/static/Inter-Bold.ttf | Bin 0 -> 293448 bytes .../fonts/Inter/static/Inter-ExtraBold.ttf | Bin 0 -> 294072 bytes .../fonts/Inter/static/Inter-ExtraLight.ttf | Bin 0 -> 288400 bytes .../assets/fonts/Inter/static/Inter-Light.ttf | Bin 0 -> 288088 bytes .../fonts/Inter/static/Inter-Medium.ttf | Bin 0 -> 292140 bytes .../Inter/static/Inter-Regular-subset.ttf | Bin 0 -> 261112 bytes .../fonts/Inter/static/Inter-Regular.ttf | Bin 0 -> 287928 bytes .../Inter/static/Inter-SemiBold-subset.ttf | Bin 0 -> 266160 bytes .../fonts/Inter/static/Inter-SemiBold.ttf | Bin 0 -> 293028 bytes .../assets/fonts/Inter/static/Inter-Thin.ttf | Bin 0 -> 288568 bytes .../fonts/SpaceGrotesk-Medium-subset.woff2 | Bin 0 -> 28480 bytes .../SpaceGrotesk-Medium-subset.zopfli.woff | Bin 0 -> 36224 bytes .../fonts/SpaceMono-Regular-subset.woff2 | Bin 0 -> 29972 bytes .../SpaceMono-Regular-subset.zopfli.woff | Bin 0 -> 38840 bytes .../src/assets/fonts/Space_Grotesk/OFL.txt | 93 + .../src/assets/fonts/Space_Grotesk/README.txt | 67 + .../SpaceGrotesk-VariableFont_wght.ttf | Bin 0 -> 134112 bytes .../static/SpaceGrotesk-Bold.ttf | Bin 0 -> 86400 bytes .../static/SpaceGrotesk-Light.ttf | Bin 0 -> 86556 bytes .../static/SpaceGrotesk-Medium-subset.ttf | Bin 0 -> 76920 bytes .../static/SpaceGrotesk-Medium.ttf | Bin 0 -> 86528 bytes .../static/SpaceGrotesk-Regular.ttf | Bin 0 -> 86504 bytes .../static/SpaceGrotesk-SemiBold.ttf | Bin 0 -> 86452 bytes .../docs/src/assets/fonts/Space_Mono/OFL.txt | 93 + .../fonts/Space_Mono/SpaceMono-Bold.ttf | Bin 0 -> 86740 bytes .../fonts/Space_Mono/SpaceMono-BoldItalic.ttf | Bin 0 -> 95396 bytes .../fonts/Space_Mono/SpaceMono-Italic.ttf | Bin 0 -> 103628 bytes .../Space_Mono/SpaceMono-Regular-subset.ttf | Bin 0 -> 84504 bytes .../fonts/Space_Mono/SpaceMono-Regular.ttf | Bin 0 -> 90972 bytes eslint/docs/src/assets/images/404.png | Bin 0 -> 256992 bytes .../assets/images/architecture/dependency.svg | 1 + .../example-dowhilestatement.svg | 1 + .../example-forinstatement.svg | 1 + .../example-forstatement-for-ever.svg | 1 + .../example-forstatement.svg | 1 + .../example-hello-world.svg | 1 + .../example-ifstatement-chain.svg | 1 + .../example-ifstatement.svg | 1 + .../example-switchstatement-has-default.svg | 1 + .../example-switchstatement.svg | 1 + ...example-trystatement-try-catch-finally.svg | 1 + .../example-trystatement-try-catch.svg | 1 + .../example-trystatement-try-finally.svg | 1 + .../example-when-there-is-a-function-f.svg | 1 + .../example-when-there-is-a-function-g.svg | 1 + .../example-whilestatement.svg | 1 + .../assets/images/code-path-analysis/helo.svg | 1 + .../loop-event-example-for-1.svg | 1 + .../loop-event-example-for-2.svg | 1 + .../loop-event-example-for-3.svg | 1 + .../loop-event-example-for-4.svg | 1 + .../loop-event-example-for-5.svg | 1 + .../loop-event-example-while-1.svg | 1 + .../loop-event-example-while-2.svg | 1 + .../loop-event-example-while-3.svg | 1 + .../src/assets/images/icons/arrow-left.svg | 1 + .../src/assets/images/icons/arrow-right.svg | 1 + .../assets/images/icons/arrow-top-right.svg | 1 + .../src/assets/images/icons/chevron-down.svg | 1 + eslint/docs/src/assets/images/icons/copy.svg | 1 + .../docs/src/assets/images/icons/correct.svg | 1 + .../docs/src/assets/images/icons/discord.svg | 1 + .../docs/src/assets/images/icons/facebook.svg | 1 + .../images/icons/features-list-icon.svg | 1 + .../assets/images/icons/github-icon-mono.svg | 1 + .../src/assets/images/icons/github-img.svg | 1 + .../src/assets/images/icons/github-large.svg | 1 + .../src/assets/images/icons/github-small.svg | 1 + .../docs/src/assets/images/icons/github.svg | 1 + .../docs/src/assets/images/icons/google.svg | 1 + .../src/assets/images/icons/incorrect.svg | 1 + .../src/assets/images/icons/languages.svg | 1 + .../assets/images/icons/learn-more-arrow.svg | 1 + eslint/docs/src/assets/images/icons/link.svg | 1 + .../docs/src/assets/images/icons/linkedin.svg | 1 + eslint/docs/src/assets/images/icons/menu.svg | 1 + .../src/assets/images/icons/minus-circle.svg | 1 + eslint/docs/src/assets/images/icons/npm.svg | 1 + .../images/icons/open-collectione-mono.svg | 1 + .../images/icons/opencollective-img.svg | 1 + .../src/assets/images/icons/plus-circle.svg | 1 + .../docs/src/assets/images/icons/search.svg | 1 + .../docs/src/assets/images/icons/twitter.svg | 1 + .../src/assets/images/logo/brand-colors.svg | 1 + eslint/docs/src/assets/js/components-index.js | 35 + .../docs/src/assets/js/css-vars-ponyfill@2.js | 47 + eslint/docs/src/assets/js/focus-visible.js | 305 ++ eslint/docs/src/assets/js/inert-polyfill.js | 23 + eslint/docs/src/assets/js/main.js | 282 + eslint/docs/src/assets/js/search.js | 191 + eslint/docs/src/assets/js/tabs.js | 337 ++ eslint/docs/src/assets/js/themes.js | 48 + eslint/docs/src/assets/scss/carbon-ads.scss | 115 + .../src/assets/scss/components/alert.scss | 134 + .../src/assets/scss/components/buttons.scss | 79 + .../assets/scss/components/docs-index.scss | 166 + .../scss/components/docs-navigation.scss | 155 + .../docs/src/assets/scss/components/hero.scss | 60 + .../src/assets/scss/components/index.scss | 110 + .../scss/components/language-switcher.scss | 32 + .../src/assets/scss/components/resources.scss | 71 + .../src/assets/scss/components/rules.scss | 202 + .../src/assets/scss/components/search.scss | 165 + .../assets/scss/components/social-icons.scss | 23 + .../docs/src/assets/scss/components/tabs.scss | 68 + .../scss/components/theme-switcher.scss | 84 + .../docs/src/assets/scss/components/toc.scss | 118 + .../scss/components/version-switcher.scss | 4 + eslint/docs/src/assets/scss/docs-footer.scss | 50 + eslint/docs/src/assets/scss/docs-header.scss | 40 + eslint/docs/src/assets/scss/docs.scss | 155 + eslint/docs/src/assets/scss/forms.scss | 54 + eslint/docs/src/assets/scss/foundations.scss | 444 ++ eslint/docs/src/assets/scss/languages.scss | 52 + eslint/docs/src/assets/scss/print.scss | 207 + eslint/docs/src/assets/scss/styles.scss | 37 + .../src/assets/scss/syntax-highlighter.scss | 130 + .../docs/src/assets/scss/tokens/spacing.scss | 77 + .../docs/src/assets/scss/tokens/themes.scss | 158 + .../src/assets/scss/tokens/typography.scss | 79 + eslint/docs/src/assets/scss/tokens/ui.scss | 8 + eslint/docs/src/assets/scss/utilities.scss | 174 + eslint/docs/src/assets/scss/versions.scss | 47 + .../developer-guide/architecture/index.md} | 15 +- .../developer-guide/code-conventions.md | 8 +- .../developer-guide/code-path-analysis.md | 58 +- .../developer-guide/contributing/changes.md | 12 +- .../developer-guide/contributing/index.md} | 29 +- .../developer-guide/contributing/new-rules.md | 10 +- .../contributing/pull-requests.md | 69 +- .../contributing/reporting-bugs.md | 8 +- .../contributing/rule-changes.md | 10 +- .../contributing/working-on-issues.md | 6 +- .../development-environment.md | 31 +- .../developer-guide/index.md} | 24 +- .../{ => src}/developer-guide/nodejs-api.md | 115 +- .../package-json-conventions.md | 89 + .../scope-manager-interface.md | 11 +- .../{ => src}/developer-guide/selectors.md | 12 +- .../developer-guide/shareable-configs.md | 11 +- .../{ => src}/developer-guide/source-code.md | 21 +- .../{ => src}/developer-guide/unit-tests.md | 25 +- .../working-with-custom-formatters.md | 45 +- .../working-with-custom-parsers.md | 13 +- .../developer-guide/working-with-plugins.md | 19 +- .../working-with-rules-deprecated.md | 24 +- .../developer-guide/working-with-rules.md | 61 +- eslint/docs/src/library/alert.md | 23 + eslint/docs/src/library/buttons.md | 36 + eslint/docs/src/library/code-blocks.md | 95 + eslint/docs/src/library/code-tabs.md | 9 + eslint/docs/src/library/language-switcher.md | 5 + eslint/docs/src/library/library.json | 4 + eslint/docs/src/library/link-card.md | 15 + eslint/docs/src/library/related-rules.md | 17 + eslint/docs/src/library/rule-categories.md | 43 + eslint/docs/src/library/rule-list.md | 25 + eslint/docs/src/library/rule.md | 72 + eslint/docs/src/library/social-icons.md | 5 + eslint/docs/src/library/theme-switcher.md | 5 + eslint/docs/src/library/version-switcher.md | 5 + .../{ => src}/maintainer-guide/governance.md | 40 +- .../maintainer-guide/index.md} | 20 +- .../docs/{ => src}/maintainer-guide/issues.md | 11 +- .../maintainer-guide/pullrequests.md | 19 +- .../{ => src}/maintainer-guide/releases.md | 13 +- .../maintainer-guide/working-groups.md | 6 +- eslint/docs/src/pages/404.html | 29 + eslint/docs/src/pages/component-library.html | 9 + eslint/docs/src/pages/index.md | 21 + eslint/docs/src/pages/languages.md | 21 + eslint/docs/src/pages/pages.11tydata.json | 3 + eslint/docs/src/pages/rules.md | 88 + eslint/docs/src/pages/versions.md | 21 + eslint/docs/{ => src}/rules/accessor-pairs.md | 54 +- .../{ => src}/rules/array-bracket-newline.md | 62 +- .../{ => src}/rules/array-bracket-spacing.md | 58 +- .../{ => src}/rules/array-callback-return.md | 29 +- .../{ => src}/rules/array-element-newline.md | 101 +- .../docs/{ => src}/rules/arrow-body-style.md | 38 +- eslint/docs/{ => src}/rules/arrow-parens.md | 37 +- eslint/docs/{ => src}/rules/arrow-spacing.md | 32 +- .../docs/{ => src}/rules/block-scoped-var.md | 21 +- eslint/docs/{ => src}/rules/block-spacing.md | 27 +- eslint/docs/{ => src}/rules/brace-style.md | 53 +- .../docs/{ => src}/rules/callback-return.md | 37 +- eslint/docs/{ => src}/rules/camelcase.md | 73 +- .../{ => src}/rules/capitalized-comments.md | 56 +- .../{ => src}/rules/class-methods-use-this.md | 43 +- eslint/docs/{ => src}/rules/comma-dangle.md | 56 +- eslint/docs/{ => src}/rules/comma-spacing.md | 98 +- eslint/docs/{ => src}/rules/comma-style.md | 47 +- eslint/docs/{ => src}/rules/complexity.md | 55 +- .../rules/computed-property-spacing.md | 60 +- .../docs/{ => src}/rules/consistent-return.md | 27 +- .../docs/{ => src}/rules/consistent-this.md | 23 +- .../docs/{ => src}/rules/constructor-super.md | 14 +- eslint/docs/{ => src}/rules/curly.md | 52 +- .../docs/{ => src}/rules/default-case-last.md | 27 +- eslint/docs/{ => src}/rules/default-case.md | 28 +- .../{ => src}/rules/default-param-last.md | 14 +- eslint/docs/{ => src}/rules/dot-location.md | 32 +- eslint/docs/{ => src}/rules/dot-notation.md | 28 +- eslint/docs/{ => src}/rules/eol-last.md | 24 +- eslint/docs/{ => src}/rules/eqeqeq.md | 28 +- eslint/docs/{ => src}/rules/for-direction.md | 19 +- .../docs/{ => src}/rules/func-call-spacing.md | 48 +- .../{ => src}/rules/func-name-matching.md | 35 +- eslint/docs/{ => src}/rules/func-names.md | 69 +- eslint/docs/{ => src}/rules/func-style.md | 33 +- .../rules/function-call-argument-newline.md | 44 +- .../{ => src}/rules/function-paren-newline.md | 56 +- .../{ => src}/rules/generator-star-spacing.md | 38 +- eslint/docs/{ => src}/rules/generator-star.md | 15 +- eslint/docs/{ => src}/rules/getter-return.md | 28 +- eslint/docs/{ => src}/rules/global-require.md | 48 +- eslint/docs/{ => src}/rules/global-strict.md | 10 +- .../{ => src}/rules/grouped-accessor-pairs.md | 57 +- eslint/docs/{ => src}/rules/guard-for-in.md | 29 +- .../{ => src}/rules/handle-callback-err.md | 27 +- eslint/docs/src/rules/id-blacklist.md | 8 + eslint/docs/{ => src}/rules/id-denylist.md | 31 +- eslint/docs/{ => src}/rules/id-length.md | 53 +- eslint/docs/{ => src}/rules/id-match.md | 39 +- .../rules/implicit-arrow-linebreak.md | 37 +- eslint/docs/{ => src}/rules/indent-legacy.md | 146 +- eslint/docs/{ => src}/rules/indent.md | 232 +- .../docs/{ => src}/rules/init-declarations.md | 27 +- eslint/docs/{ => src}/rules/jsx-quotes.md | 30 +- eslint/docs/{ => src}/rules/key-spacing.md | 90 +- .../docs/{ => src}/rules/keyword-spacing.md | 53 +- .../{ => src}/rules/line-comment-position.md | 39 +- .../docs/{ => src}/rules/linebreak-style.md | 28 +- .../{ => src}/rules/lines-around-comment.md | 165 +- .../{ => src}/rules/lines-around-directive.md | 55 +- .../rules/lines-between-class-members.md | 40 +- .../{ => src}/rules/max-classes-per-file.md | 27 +- eslint/docs/{ => src}/rules/max-depth.md | 39 +- eslint/docs/{ => src}/rules/max-len.md | 67 +- .../{ => src}/rules/max-lines-per-function.md | 75 +- eslint/docs/{ => src}/rules/max-lines.md | 69 +- .../{ => src}/rules/max-nested-callbacks.md | 41 +- eslint/docs/{ => src}/rules/max-params.md | 31 +- .../rules/max-statements-per-line.md | 41 +- eslint/docs/{ => src}/rules/max-statements.md | 39 +- .../rules/multiline-comment-style.md | 33 +- .../docs/{ => src}/rules/multiline-ternary.md | 40 +- eslint/docs/{ => src}/rules/new-cap.md | 75 +- eslint/docs/{ => src}/rules/new-parens.md | 28 +- .../docs/{ => src}/rules/newline-after-var.md | 26 +- .../{ => src}/rules/newline-before-return.md | 24 +- .../rules/newline-per-chained-call.md | 16 +- eslint/docs/{ => src}/rules/no-alert.md | 21 +- .../{ => src}/rules/no-array-constructor.md | 23 +- .../{ => src}/rules/no-arrow-condition.md | 22 +- .../rules/no-async-promise-executor.md | 16 +- .../docs/{ => src}/rules/no-await-in-loop.md | 15 +- eslint/docs/{ => src}/rules/no-bitwise.md | 23 +- .../{ => src}/rules/no-buffer-constructor.md | 25 +- eslint/docs/{ => src}/rules/no-caller.md | 15 +- .../{ => src}/rules/no-case-declarations.md | 22 +- .../docs/{ => src}/rules/no-catch-shadow.md | 15 +- .../docs/{ => src}/rules/no-class-assign.md | 36 +- .../docs/{ => src}/rules/no-comma-dangle.md | 18 +- .../{ => src}/rules/no-compare-neg-zero.md | 22 +- eslint/docs/{ => src}/rules/no-cond-assign.md | 28 +- .../{ => src}/rules/no-confusing-arrow.md | 62 +- eslint/docs/{ => src}/rules/no-console.md | 27 +- .../docs/{ => src}/rules/no-const-assign.md | 32 +- .../rules/no-constant-binary-expression.md | 81 + .../{ => src}/rules/no-constant-condition.md | 30 +- .../{ => src}/rules/no-constructor-return.md | 15 +- eslint/docs/{ => src}/rules/no-continue.md | 19 +- eslint/docs/src/rules/no-control-regex.md | 80 + eslint/docs/{ => src}/rules/no-debugger.md | 30 +- eslint/docs/{ => src}/rules/no-delete-var.md | 12 +- eslint/docs/{ => src}/rules/no-div-regex.md | 22 +- eslint/docs/{ => src}/rules/no-dupe-args.md | 16 +- .../{ => src}/rules/no-dupe-class-members.md | 16 +- .../docs/{ => src}/rules/no-dupe-else-if.md | 28 +- eslint/docs/{ => src}/rules/no-dupe-keys.md | 16 +- .../docs/{ => src}/rules/no-duplicate-case.md | 31 +- .../{ => src}/rules/no-duplicate-imports.md | 31 +- eslint/docs/{ => src}/rules/no-else-return.md | 24 +- .../rules/no-empty-character-class.md | 16 +- eslint/docs/{ => src}/rules/no-empty-class.md | 18 +- .../docs/{ => src}/rules/no-empty-function.md | 61 +- eslint/docs/{ => src}/rules/no-empty-label.md | 28 +- .../docs/{ => src}/rules/no-empty-pattern.md | 16 +- eslint/docs/{ => src}/rules/no-empty.md | 26 +- eslint/docs/{ => src}/rules/no-eq-null.md | 21 +- eslint/docs/{ => src}/rules/no-eval.md | 53 +- eslint/docs/{ => src}/rules/no-ex-assign.md | 22 +- .../docs/{ => src}/rules/no-extend-native.md | 21 +- eslint/docs/{ => src}/rules/no-extra-bind.md | 24 +- .../{ => src}/rules/no-extra-boolean-cast.md | 26 +- eslint/docs/{ => src}/rules/no-extra-label.md | 26 +- .../docs/{ => src}/rules/no-extra-parens.md | 92 +- eslint/docs/{ => src}/rules/no-extra-semi.md | 26 +- .../docs/{ => src}/rules/no-extra-strict.md | 26 +- eslint/docs/{ => src}/rules/no-fallthrough.md | 59 +- .../{ => src}/rules/no-floating-decimal.md | 16 +- eslint/docs/{ => src}/rules/no-func-assign.md | 20 +- .../docs/{ => src}/rules/no-global-assign.md | 42 +- .../{ => src}/rules/no-implicit-coercion.md | 58 +- .../{ => src}/rules/no-implicit-globals.md | 65 +- .../docs/{ => src}/rules/no-implied-eval.md | 21 +- .../docs/{ => src}/rules/no-import-assign.md | 16 +- .../{ => src}/rules/no-inline-comments.md | 31 +- .../{ => src}/rules/no-inner-declarations.md | 26 +- .../docs/{ => src}/rules/no-invalid-regexp.md | 24 +- .../docs/{ => src}/rules/no-invalid-this.md | 43 +- .../rules/no-irregular-whitespace.md | 86 +- eslint/docs/{ => src}/rules/no-iterator.md | 23 +- eslint/docs/{ => src}/rules/no-label-var.md | 25 +- eslint/docs/{ => src}/rules/no-labels.md | 33 +- eslint/docs/{ => src}/rules/no-lone-blocks.md | 19 +- eslint/docs/{ => src}/rules/no-lonely-if.md | 16 +- eslint/docs/{ => src}/rules/no-loop-func.md | 15 +- .../{ => src}/rules/no-loss-of-precision.md | 18 +- .../docs/{ => src}/rules/no-magic-numbers.md | 59 +- .../rules/no-misleading-character-class.md | 18 +- .../{ => src}/rules/no-mixed-operators.md | 68 +- .../docs/{ => src}/rules/no-mixed-requires.md | 27 +- .../rules/no-mixed-spaces-and-tabs.md | 24 +- .../docs/{ => src}/rules/no-multi-assign.md | 27 +- .../docs/{ => src}/rules/no-multi-spaces.md | 68 +- eslint/docs/{ => src}/rules/no-multi-str.md | 15 +- .../rules/no-multiple-empty-lines.md | 46 +- .../{ => src}/rules/no-native-reassign.md | 43 +- .../{ => src}/rules/no-negated-condition.md | 15 +- .../docs/{ => src}/rules/no-negated-in-lhs.md | 17 +- .../docs/{ => src}/rules/no-nested-ternary.md | 21 +- eslint/docs/{ => src}/rules/no-new-func.md | 15 +- eslint/docs/{ => src}/rules/no-new-object.md | 23 +- eslint/docs/{ => src}/rules/no-new-require.md | 15 +- eslint/docs/{ => src}/rules/no-new-symbol.md | 23 +- .../docs/{ => src}/rules/no-new-wrappers.md | 29 +- eslint/docs/{ => src}/rules/no-new.md | 15 +- .../rules/no-nonoctal-decimal-escape.md | 28 +- eslint/docs/{ => src}/rules/no-obj-calls.md | 20 +- .../docs/{ => src}/rules/no-octal-escape.md | 15 +- eslint/docs/{ => src}/rules/no-octal.md | 16 +- .../docs/{ => src}/rules/no-param-reassign.md | 37 +- eslint/docs/{ => src}/rules/no-path-concat.md | 15 +- eslint/docs/{ => src}/rules/no-plusplus.md | 23 +- eslint/docs/{ => src}/rules/no-process-env.md | 23 +- .../docs/{ => src}/rules/no-process-exit.md | 15 +- .../rules/no-promise-executor-return.md | 25 +- eslint/docs/{ => src}/rules/no-proto.md | 21 +- .../{ => src}/rules/no-prototype-builtins.md | 16 +- eslint/docs/{ => src}/rules/no-redeclare.md | 32 +- .../docs/{ => src}/rules/no-regex-spaces.md | 26 +- .../docs/{ => src}/rules/no-reserved-keys.md | 24 +- .../{ => src}/rules/no-restricted-exports.md | 51 +- .../{ => src}/rules/no-restricted-globals.md | 29 +- .../{ => src}/rules/no-restricted-imports.md | 144 +- .../{ => src}/rules/no-restricted-modules.md | 27 +- .../rules/no-restricted-properties.md | 35 +- .../{ => src}/rules/no-restricted-syntax.md | 29 +- .../docs/{ => src}/rules/no-return-assign.md | 23 +- .../docs/{ => src}/rules/no-return-await.md | 30 +- eslint/docs/{ => src}/rules/no-script-url.md | 17 +- eslint/docs/{ => src}/rules/no-self-assign.md | 30 +- .../docs/{ => src}/rules/no-self-compare.md | 11 +- eslint/docs/{ => src}/rules/no-sequences.md | 31 +- .../docs/{ => src}/rules/no-setter-return.md | 26 +- .../rules/no-shadow-restricted-names.md | 28 +- eslint/docs/{ => src}/rules/no-shadow.md | 79 +- .../{ => src}/rules/no-space-before-semi.md | 24 +- eslint/docs/{ => src}/rules/no-spaced-func.md | 18 +- .../docs/{ => src}/rules/no-sparse-arrays.md | 22 +- eslint/docs/{ => src}/rules/no-sync.md | 23 +- eslint/docs/{ => src}/rules/no-tabs.md | 19 +- .../rules/no-template-curly-in-string.md | 15 +- eslint/docs/{ => src}/rules/no-ternary.md | 21 +- .../{ => src}/rules/no-this-before-super.md | 16 +- .../docs/{ => src}/rules/no-throw-literal.md | 19 +- .../{ => src}/rules/no-trailing-spaces.md | 24 +- eslint/docs/{ => src}/rules/no-undef-init.md | 34 +- eslint/docs/{ => src}/rules/no-undef.md | 52 +- eslint/docs/{ => src}/rules/no-undefined.md | 39 +- .../{ => src}/rules/no-underscore-dangle.md | 84 +- .../rules/no-unexpected-multiline.md | 30 +- .../rules/no-unmodified-loop-condition.md | 15 +- .../{ => src}/rules/no-unneeded-ternary.md | 29 +- .../{ => src}/rules/no-unreachable-loop.md | 37 +- eslint/docs/{ => src}/rules/no-unreachable.md | 24 +- .../docs/{ => src}/rules/no-unsafe-finally.md | 28 +- .../{ => src}/rules/no-unsafe-negation.md | 46 +- .../rules/no-unsafe-optional-chaining.md | 28 +- .../{ => src}/rules/no-unused-expressions.md | 59 +- .../docs/{ => src}/rules/no-unused-labels.md | 28 +- .../rules/no-unused-private-class-members.md | 15 +- eslint/docs/{ => src}/rules/no-unused-vars.md | 105 +- .../{ => src}/rules/no-use-before-define.md | 97 +- .../rules/no-useless-backreference.md | 34 +- .../docs/{ => src}/rules/no-useless-call.md | 29 +- .../docs/{ => src}/rules/no-useless-catch.md | 16 +- .../rules/no-useless-computed-key.md | 32 +- .../docs/{ => src}/rules/no-useless-concat.md | 15 +- .../{ => src}/rules/no-useless-constructor.md | 15 +- .../docs/{ => src}/rules/no-useless-escape.md | 25 +- .../docs/{ => src}/rules/no-useless-rename.md | 48 +- .../docs/{ => src}/rules/no-useless-return.md | 16 +- eslint/docs/{ => src}/rules/no-var.md | 16 +- eslint/docs/{ => src}/rules/no-void.md | 35 +- .../{ => src}/rules/no-warning-comments.md | 81 +- .../rules/no-whitespace-before-property.md | 16 +- eslint/docs/{ => src}/rules/no-with.md | 22 +- eslint/docs/{ => src}/rules/no-wrap-func.md | 18 +- .../rules/nonblock-statement-body-position.md | 42 +- .../{ => src}/rules/object-curly-newline.md | 81 +- .../{ => src}/rules/object-curly-spacing.md | 52 +- .../rules/object-property-newline.md | 42 +- .../docs/{ => src}/rules/object-shorthand.md | 87 +- .../rules/one-var-declaration-per-line.md | 28 +- eslint/docs/{ => src}/rules/one-var.md | 113 +- .../{ => src}/rules/operator-assignment.md | 24 +- .../{ => src}/rules/operator-linebreak.md | 58 +- eslint/docs/{ => src}/rules/padded-blocks.md | 88 +- .../rules/padding-line-between-statements.md | 167 +- .../{ => src}/rules/prefer-arrow-callback.md | 22 +- eslint/docs/{ => src}/rules/prefer-const.md | 48 +- .../{ => src}/rules/prefer-destructuring.md | 50 +- .../rules/prefer-exponentiation-operator.md | 24 +- .../rules/prefer-named-capture-group.md | 21 +- .../rules/prefer-numeric-literals.md | 16 +- .../docs/src/rules/prefer-object-has-own.md | 65 + .../{ => src}/rules/prefer-object-spread.md | 36 +- .../rules/prefer-promise-reject-errors.md | 32 +- eslint/docs/{ => src}/rules/prefer-reflect.md | 131 +- .../{ => src}/rules/prefer-regex-literals.md | 24 +- .../{ => src}/rules/prefer-rest-params.md | 21 +- eslint/docs/{ => src}/rules/prefer-spread.md | 21 +- .../docs/{ => src}/rules/prefer-template.md | 24 +- eslint/docs/{ => src}/rules/quote-props.md | 64 +- eslint/docs/{ => src}/rules/quotes.md | 54 +- eslint/docs/{ => src}/rules/radix.md | 30 +- .../{ => src}/rules/require-atomic-updates.md | 27 +- eslint/docs/{ => src}/rules/require-await.md | 21 +- eslint/docs/{ => src}/rules/require-jsdoc.md | 21 +- .../{ => src}/rules/require-unicode-regexp.md | 15 +- eslint/docs/{ => src}/rules/require-yield.md | 22 +- .../{ => src}/rules/rest-spread-spacing.md | 30 +- eslint/docs/{ => src}/rules/semi-spacing.md | 38 +- eslint/docs/{ => src}/rules/semi-style.md | 38 +- eslint/docs/{ => src}/rules/semi.md | 58 +- eslint/docs/{ => src}/rules/sort-imports.md | 88 +- eslint/docs/{ => src}/rules/sort-keys.md | 180 +- eslint/docs/{ => src}/rules/sort-vars.md | 28 +- .../rules/space-after-function-name.md | 18 +- .../{ => src}/rules/space-after-keywords.md | 26 +- .../{ => src}/rules/space-before-blocks.md | 61 +- .../rules/space-before-function-paren.md | 56 +- .../space-before-function-parentheses.md | 50 +- .../{ => src}/rules/space-before-keywords.md | 42 +- .../docs/{ => src}/rules/space-in-brackets.md | 86 +- .../docs/{ => src}/rules/space-in-parens.md | 106 +- .../docs/{ => src}/rules/space-infix-ops.md | 18 +- .../rules/space-return-throw-case.md | 18 +- .../docs/{ => src}/rules/space-unary-ops.md | 32 +- .../{ => src}/rules/space-unary-word-ops.md | 38 +- eslint/docs/{ => src}/rules/spaced-comment.md | 112 +- .../{ => src}/rules/spaced-line-comment.md | 42 +- eslint/docs/{ => src}/rules/strict.md | 82 +- .../{ => src}/rules/switch-colon-spacing.md | 32 +- .../{ => src}/rules/symbol-description.md | 21 +- .../{ => src}/rules/template-curly-spacing.md | 24 +- .../{ => src}/rules/template-tag-spacing.md | 34 +- eslint/docs/{ => src}/rules/unicode-bom.md | 24 +- eslint/docs/{ => src}/rules/use-isnan.md | 36 +- eslint/docs/{ => src}/rules/valid-jsdoc.md | 64 +- eslint/docs/{ => src}/rules/valid-typeof.md | 32 +- eslint/docs/{ => src}/rules/vars-on-top.md | 45 +- eslint/docs/{ => src}/rules/wrap-iife.md | 40 +- eslint/docs/{ => src}/rules/wrap-regex.md | 16 +- .../{ => src}/rules/yield-star-spacing.md | 30 +- eslint/docs/{ => src}/rules/yoda.md | 38 +- eslint/docs/src/src.json | 3 + eslint/docs/src/static/apple-touch-icon.png | Bin 0 -> 6725 bytes eslint/docs/src/static/favicon-32x32.png | Bin 0 -> 1944 bytes eslint/docs/src/static/favicon.ico | Bin 0 -> 15406 bytes eslint/docs/src/static/favicon.png | Bin 0 -> 4244 bytes eslint/docs/src/static/feed.njk | 39 + eslint/docs/src/static/icon-192.png | Bin 0 -> 15636 bytes eslint/docs/src/static/icon-512.png | Bin 0 -> 4244 bytes eslint/docs/src/static/icon.svg | 1 + eslint/docs/src/static/manifest.webmanifest | 6 + eslint/docs/src/static/robots.njk | 7 + eslint/docs/src/static/serviceworker.js | 0 eslint/docs/src/static/sitemap.njk | 14 + .../user-guide/command-line-interface.md | 241 +- .../configuring/configuration-files-new.md | 565 ++ .../configuring/configuration-files.md | 35 +- .../user-guide/configuring/ignoring-code.md | 63 +- .../docs/src/user-guide/configuring/index.md | 61 + .../configuring/language-options.md | 21 +- .../user-guide/configuring/plugins.md | 15 +- .../{ => src}/user-guide/configuring/rules.md | 43 +- .../formatters/html-formatter-example.html | 203 + .../docs/src/user-guide/formatters/index.md | 243 + .../{ => src}/user-guide/getting-started.md | 49 +- .../README.md => src/user-guide/index.md} | 36 +- .../docs/{ => src}/user-guide/integrations.md | 15 +- .../user-guide/migrating-from-jscs.md | 66 +- .../user-guide/migrating-to-1.0.0.md | 6 +- .../user-guide/migrating-to-2.0.0.md | 10 +- .../user-guide/migrating-to-3.0.0.md | 6 +- .../user-guide/migrating-to-4.0.0.md | 6 +- .../user-guide/migrating-to-5.0.0.md | 8 +- .../user-guide/migrating-to-6.0.0.md | 6 +- .../user-guide/migrating-to-7.0.0.md | 102 +- .../user-guide/migrating-to-8.0.0.md | 69 +- .../{ => src}/user-guide/rule-deprecation.md | 6 +- eslint/docs/user-guide/configuring/README.md | 52 - eslint/eslint.config.js | 231 + eslint/lib/cli-engine/cli-engine.js | 24 +- eslint/lib/cli-engine/file-enumerator.js | 10 +- eslint/lib/cli-engine/formatters/html.js | 8 +- eslint/lib/cli-engine/lint-result-cache.js | 2 +- eslint/lib/cli.js | 152 +- eslint/lib/config/default-config.js | 23 +- eslint/lib/config/flat-config-array.js | 123 +- eslint/lib/config/flat-config-helpers.js | 48 +- eslint/lib/config/rule-validator.js | 40 +- eslint/lib/eslint/eslint.js | 31 +- eslint/lib/eslint/flat-eslint.js | 1176 ++++ eslint/lib/eslint/index.js | 4 +- eslint/lib/init/autoconfig.js | 351 -- eslint/lib/init/config-file.js | 144 - eslint/lib/init/config-initializer.js | 709 --- eslint/lib/init/npm-utils.js | 179 - eslint/lib/init/source-code-utils.js | 110 - eslint/lib/linter/apply-disable-directives.js | 117 +- .../code-path-analysis/code-path-segment.js | 6 +- .../code-path-analysis/code-path-state.js | 16 +- .../linter/code-path-analysis/code-path.js | 2 +- .../code-path-analysis/debug-helpers.js | 6 +- .../linter/code-path-analysis/id-generator.js | 4 +- eslint/lib/linter/config-comment-parser.js | 3 +- eslint/lib/linter/linter.js | 202 +- eslint/lib/linter/timing.js | 11 +- eslint/lib/options.js | 532 +- eslint/lib/rule-tester/flat-rule-tester.js | 1042 ++++ eslint/lib/rule-tester/rule-tester.js | 68 +- eslint/lib/rules/accessor-pairs.js | 10 +- eslint/lib/rules/array-bracket-newline.js | 2 +- eslint/lib/rules/array-bracket-spacing.js | 2 +- eslint/lib/rules/array-callback-return.js | 4 +- eslint/lib/rules/array-element-newline.js | 2 +- eslint/lib/rules/arrow-body-style.js | 2 +- eslint/lib/rules/arrow-parens.js | 2 +- eslint/lib/rules/arrow-spacing.js | 2 +- eslint/lib/rules/block-scoped-var.js | 2 +- eslint/lib/rules/block-spacing.js | 2 +- eslint/lib/rules/brace-style.js | 2 +- eslint/lib/rules/callback-return.js | 6 +- eslint/lib/rules/camelcase.js | 14 +- eslint/lib/rules/capitalized-comments.js | 4 +- eslint/lib/rules/class-methods-use-this.js | 2 +- eslint/lib/rules/comma-dangle.js | 30 +- eslint/lib/rules/comma-spacing.js | 78 +- eslint/lib/rules/comma-style.js | 2 +- eslint/lib/rules/complexity.js | 2 +- eslint/lib/rules/computed-property-spacing.js | 2 +- eslint/lib/rules/consistent-return.js | 2 +- eslint/lib/rules/consistent-this.js | 4 +- eslint/lib/rules/constructor-super.js | 2 +- eslint/lib/rules/curly.js | 2 +- eslint/lib/rules/default-case-last.js | 2 +- eslint/lib/rules/default-case.js | 2 +- eslint/lib/rules/default-param-last.js | 2 +- eslint/lib/rules/dot-location.js | 2 +- eslint/lib/rules/dot-notation.js | 6 +- eslint/lib/rules/eol-last.js | 2 +- eslint/lib/rules/eqeqeq.js | 2 +- eslint/lib/rules/for-direction.js | 2 +- eslint/lib/rules/func-call-spacing.js | 2 +- eslint/lib/rules/func-name-matching.js | 2 +- eslint/lib/rules/func-names.js | 2 +- eslint/lib/rules/func-style.js | 2 +- .../rules/function-call-argument-newline.js | 2 +- eslint/lib/rules/function-paren-newline.js | 21 +- eslint/lib/rules/generator-star-spacing.js | 2 +- eslint/lib/rules/getter-return.js | 2 +- eslint/lib/rules/global-require.js | 11 +- eslint/lib/rules/grouped-accessor-pairs.js | 2 +- eslint/lib/rules/guard-for-in.js | 2 +- eslint/lib/rules/handle-callback-err.js | 2 +- eslint/lib/rules/id-blacklist.js | 2 +- eslint/lib/rules/id-denylist.js | 2 +- eslint/lib/rules/id-length.js | 2 +- eslint/lib/rules/id-match.js | 38 +- eslint/lib/rules/implicit-arrow-linebreak.js | 2 +- eslint/lib/rules/indent-legacy.js | 14 +- eslint/lib/rules/indent.js | 100 +- eslint/lib/rules/index.js | 2 + eslint/lib/rules/init-declarations.js | 2 +- eslint/lib/rules/jsx-quotes.js | 4 +- eslint/lib/rules/key-spacing.js | 7 +- eslint/lib/rules/keyword-spacing.js | 34 +- eslint/lib/rules/line-comment-position.js | 2 +- eslint/lib/rules/linebreak-style.js | 2 +- eslint/lib/rules/lines-around-comment.js | 23 +- eslint/lib/rules/lines-around-directive.js | 2 +- .../lib/rules/lines-between-class-members.js | 2 +- eslint/lib/rules/max-classes-per-file.js | 2 +- eslint/lib/rules/max-depth.js | 2 +- eslint/lib/rules/max-len.js | 2 +- eslint/lib/rules/max-lines-per-function.js | 24 +- eslint/lib/rules/max-lines.js | 6 +- eslint/lib/rules/max-nested-callbacks.js | 2 +- eslint/lib/rules/max-params.js | 2 +- eslint/lib/rules/max-statements-per-line.js | 2 +- eslint/lib/rules/max-statements.js | 4 +- eslint/lib/rules/multiline-comment-style.js | 2 +- eslint/lib/rules/multiline-ternary.js | 2 +- eslint/lib/rules/new-cap.js | 6 +- eslint/lib/rules/new-parens.js | 2 +- eslint/lib/rules/newline-after-var.js | 2 +- eslint/lib/rules/newline-before-return.js | 4 +- eslint/lib/rules/newline-per-chained-call.js | 2 +- eslint/lib/rules/no-alert.js | 2 +- eslint/lib/rules/no-array-constructor.js | 2 +- eslint/lib/rules/no-async-promise-executor.js | 2 +- eslint/lib/rules/no-await-in-loop.js | 2 +- eslint/lib/rules/no-bitwise.js | 6 +- eslint/lib/rules/no-buffer-constructor.js | 2 +- eslint/lib/rules/no-caller.js | 2 +- eslint/lib/rules/no-case-declarations.js | 2 +- eslint/lib/rules/no-catch-shadow.js | 2 +- eslint/lib/rules/no-class-assign.js | 2 +- eslint/lib/rules/no-compare-neg-zero.js | 2 +- eslint/lib/rules/no-cond-assign.js | 2 +- eslint/lib/rules/no-confusing-arrow.js | 10 +- eslint/lib/rules/no-console.js | 4 +- eslint/lib/rules/no-const-assign.js | 2 +- .../rules/no-constant-binary-expression.js | 500 ++ eslint/lib/rules/no-constant-condition.js | 157 +- eslint/lib/rules/no-constructor-return.js | 2 +- eslint/lib/rules/no-continue.js | 2 +- eslint/lib/rules/no-control-regex.js | 35 +- eslint/lib/rules/no-debugger.js | 2 +- eslint/lib/rules/no-delete-var.js | 2 +- eslint/lib/rules/no-div-regex.js | 2 +- eslint/lib/rules/no-dupe-args.js | 2 +- eslint/lib/rules/no-dupe-class-members.js | 2 +- eslint/lib/rules/no-dupe-else-if.js | 2 +- eslint/lib/rules/no-dupe-keys.js | 2 +- eslint/lib/rules/no-duplicate-case.js | 2 +- eslint/lib/rules/no-duplicate-imports.js | 2 +- eslint/lib/rules/no-else-return.js | 2 +- eslint/lib/rules/no-empty-character-class.js | 2 +- eslint/lib/rules/no-empty-function.js | 4 +- eslint/lib/rules/no-empty-pattern.js | 2 +- eslint/lib/rules/no-empty.js | 2 +- eslint/lib/rules/no-eq-null.js | 2 +- eslint/lib/rules/no-eval.js | 43 +- eslint/lib/rules/no-ex-assign.js | 2 +- eslint/lib/rules/no-extend-native.js | 2 +- eslint/lib/rules/no-extra-bind.js | 2 +- eslint/lib/rules/no-extra-boolean-cast.js | 10 +- eslint/lib/rules/no-extra-label.js | 2 +- eslint/lib/rules/no-extra-parens.js | 6 +- eslint/lib/rules/no-extra-semi.js | 4 +- eslint/lib/rules/no-fallthrough.js | 13 +- eslint/lib/rules/no-floating-decimal.js | 2 +- eslint/lib/rules/no-func-assign.js | 2 +- eslint/lib/rules/no-global-assign.js | 4 +- eslint/lib/rules/no-implicit-coercion.js | 18 +- eslint/lib/rules/no-implicit-globals.js | 2 +- eslint/lib/rules/no-implied-eval.js | 2 +- eslint/lib/rules/no-import-assign.js | 2 +- eslint/lib/rules/no-inline-comments.js | 2 +- eslint/lib/rules/no-inner-declarations.js | 2 +- eslint/lib/rules/no-invalid-regexp.js | 2 +- eslint/lib/rules/no-invalid-this.js | 107 +- eslint/lib/rules/no-irregular-whitespace.js | 2 +- eslint/lib/rules/no-iterator.js | 2 +- eslint/lib/rules/no-label-var.js | 2 +- eslint/lib/rules/no-labels.js | 4 +- eslint/lib/rules/no-lone-blocks.js | 4 +- eslint/lib/rules/no-lonely-if.js | 2 +- eslint/lib/rules/no-loop-func.js | 4 +- eslint/lib/rules/no-loss-of-precision.js | 2 +- eslint/lib/rules/no-magic-numbers.js | 8 +- .../rules/no-misleading-character-class.js | 109 +- eslint/lib/rules/no-mixed-operators.js | 4 +- eslint/lib/rules/no-mixed-requires.js | 4 +- eslint/lib/rules/no-mixed-spaces-and-tabs.js | 2 +- eslint/lib/rules/no-multi-assign.js | 2 +- eslint/lib/rules/no-multi-spaces.js | 4 +- eslint/lib/rules/no-multi-str.js | 2 +- eslint/lib/rules/no-multiple-empty-lines.js | 2 +- eslint/lib/rules/no-native-reassign.js | 4 +- eslint/lib/rules/no-negated-condition.js | 2 +- eslint/lib/rules/no-negated-in-lhs.js | 2 +- eslint/lib/rules/no-nested-ternary.js | 2 +- eslint/lib/rules/no-new-func.js | 2 +- eslint/lib/rules/no-new-object.js | 4 +- eslint/lib/rules/no-new-require.js | 2 +- eslint/lib/rules/no-new-symbol.js | 2 +- eslint/lib/rules/no-new-wrappers.js | 4 +- eslint/lib/rules/no-new.js | 2 +- .../lib/rules/no-nonoctal-decimal-escape.js | 2 +- eslint/lib/rules/no-obj-calls.js | 2 +- eslint/lib/rules/no-octal-escape.js | 2 +- eslint/lib/rules/no-octal.js | 6 +- eslint/lib/rules/no-param-reassign.js | 2 +- eslint/lib/rules/no-path-concat.js | 2 +- eslint/lib/rules/no-plusplus.js | 2 +- eslint/lib/rules/no-process-env.js | 2 +- eslint/lib/rules/no-process-exit.js | 2 +- .../lib/rules/no-promise-executor-return.js | 2 +- eslint/lib/rules/no-proto.js | 2 +- eslint/lib/rules/no-prototype-builtins.js | 8 +- eslint/lib/rules/no-redeclare.js | 2 +- eslint/lib/rules/no-regex-spaces.js | 2 +- eslint/lib/rules/no-restricted-exports.js | 14 +- eslint/lib/rules/no-restricted-globals.js | 2 +- eslint/lib/rules/no-restricted-imports.js | 116 +- eslint/lib/rules/no-restricted-modules.js | 5 +- eslint/lib/rules/no-restricted-properties.js | 2 +- eslint/lib/rules/no-restricted-syntax.js | 2 +- eslint/lib/rules/no-return-assign.js | 2 +- eslint/lib/rules/no-return-await.js | 2 +- eslint/lib/rules/no-script-url.js | 2 +- eslint/lib/rules/no-self-assign.js | 4 +- eslint/lib/rules/no-self-compare.js | 2 +- eslint/lib/rules/no-sequences.js | 2 +- eslint/lib/rules/no-setter-return.js | 2 +- .../lib/rules/no-shadow-restricted-names.js | 2 +- eslint/lib/rules/no-shadow.js | 147 +- eslint/lib/rules/no-spaced-func.js | 2 +- eslint/lib/rules/no-sparse-arrays.js | 4 +- eslint/lib/rules/no-sync.js | 2 +- eslint/lib/rules/no-tabs.js | 2 +- .../lib/rules/no-template-curly-in-string.js | 2 +- eslint/lib/rules/no-ternary.js | 2 +- eslint/lib/rules/no-this-before-super.js | 2 +- eslint/lib/rules/no-throw-literal.js | 2 +- eslint/lib/rules/no-trailing-spaces.js | 2 +- eslint/lib/rules/no-undef-init.js | 2 +- eslint/lib/rules/no-undef.js | 2 +- eslint/lib/rules/no-undefined.js | 2 +- eslint/lib/rules/no-underscore-dangle.js | 35 +- eslint/lib/rules/no-unexpected-multiline.js | 2 +- .../lib/rules/no-unmodified-loop-condition.js | 2 +- eslint/lib/rules/no-unneeded-ternary.js | 2 +- eslint/lib/rules/no-unreachable-loop.js | 2 +- eslint/lib/rules/no-unreachable.js | 2 +- eslint/lib/rules/no-unsafe-finally.js | 2 +- eslint/lib/rules/no-unsafe-negation.js | 2 +- .../lib/rules/no-unsafe-optional-chaining.js | 2 +- eslint/lib/rules/no-unused-expressions.js | 4 +- eslint/lib/rules/no-unused-labels.js | 2 +- .../rules/no-unused-private-class-members.js | 2 +- eslint/lib/rules/no-unused-vars.js | 41 +- eslint/lib/rules/no-use-before-define.js | 19 +- eslint/lib/rules/no-useless-backreference.js | 2 +- eslint/lib/rules/no-useless-call.js | 2 +- eslint/lib/rules/no-useless-catch.js | 2 +- eslint/lib/rules/no-useless-computed-key.js | 4 +- eslint/lib/rules/no-useless-concat.js | 2 +- eslint/lib/rules/no-useless-constructor.js | 2 +- eslint/lib/rules/no-useless-escape.js | 2 +- eslint/lib/rules/no-useless-rename.js | 14 +- eslint/lib/rules/no-useless-return.js | 2 +- eslint/lib/rules/no-var.js | 4 +- eslint/lib/rules/no-void.js | 2 +- eslint/lib/rules/no-warning-comments.js | 89 +- .../rules/no-whitespace-before-property.js | 2 +- eslint/lib/rules/no-with.js | 2 +- .../rules/nonblock-statement-body-position.js | 2 +- eslint/lib/rules/object-curly-newline.js | 2 +- eslint/lib/rules/object-curly-spacing.js | 2 +- eslint/lib/rules/object-property-newline.js | 2 +- eslint/lib/rules/object-shorthand.js | 17 +- .../lib/rules/one-var-declaration-per-line.js | 2 +- eslint/lib/rules/one-var.js | 2 +- eslint/lib/rules/operator-assignment.js | 18 +- eslint/lib/rules/operator-linebreak.js | 2 +- eslint/lib/rules/padded-blocks.js | 4 +- .../rules/padding-line-between-statements.js | 8 +- eslint/lib/rules/prefer-arrow-callback.js | 6 +- eslint/lib/rules/prefer-const.js | 18 +- eslint/lib/rules/prefer-destructuring.js | 2 +- .../rules/prefer-exponentiation-operator.js | 2 +- .../lib/rules/prefer-named-capture-group.js | 2 +- eslint/lib/rules/prefer-numeric-literals.js | 2 +- eslint/lib/rules/prefer-object-has-own.js | 112 + eslint/lib/rules/prefer-object-spread.js | 2 +- .../lib/rules/prefer-promise-reject-errors.js | 2 +- eslint/lib/rules/prefer-reflect.js | 6 +- eslint/lib/rules/prefer-regex-literals.js | 220 +- eslint/lib/rules/prefer-rest-params.js | 4 +- eslint/lib/rules/prefer-spread.js | 2 +- eslint/lib/rules/prefer-template.js | 4 +- eslint/lib/rules/quote-props.js | 6 +- eslint/lib/rules/quotes.js | 17 +- eslint/lib/rules/radix.js | 2 +- eslint/lib/rules/require-atomic-updates.js | 2 +- eslint/lib/rules/require-await.js | 2 +- eslint/lib/rules/require-jsdoc.js | 2 +- eslint/lib/rules/require-unicode-regexp.js | 2 +- eslint/lib/rules/require-yield.js | 3 +- eslint/lib/rules/rest-spread-spacing.js | 2 +- eslint/lib/rules/semi-spacing.js | 2 +- eslint/lib/rules/semi-style.js | 2 +- eslint/lib/rules/semi.js | 2 +- eslint/lib/rules/sort-imports.js | 2 +- eslint/lib/rules/sort-keys.js | 45 +- eslint/lib/rules/sort-vars.js | 2 +- eslint/lib/rules/space-before-blocks.js | 2 +- .../lib/rules/space-before-function-paren.js | 2 +- eslint/lib/rules/space-in-parens.js | 2 +- eslint/lib/rules/space-infix-ops.js | 2 +- eslint/lib/rules/space-unary-ops.js | 2 +- eslint/lib/rules/spaced-comment.js | 4 +- eslint/lib/rules/strict.js | 2 +- eslint/lib/rules/switch-colon-spacing.js | 2 +- eslint/lib/rules/symbol-description.js | 2 +- eslint/lib/rules/template-curly-spacing.js | 2 +- eslint/lib/rules/template-tag-spacing.js | 2 +- eslint/lib/rules/unicode-bom.js | 2 +- eslint/lib/rules/use-isnan.js | 2 +- eslint/lib/rules/utils/ast-utils.js | 244 +- eslint/lib/rules/valid-jsdoc.js | 4 +- eslint/lib/rules/valid-typeof.js | 48 +- eslint/lib/rules/vars-on-top.js | 2 +- eslint/lib/rules/wrap-iife.js | 2 +- eslint/lib/rules/wrap-regex.js | 2 +- eslint/lib/rules/yield-star-spacing.js | 2 +- eslint/lib/rules/yoda.js | 4 +- eslint/lib/shared/deprecation-warnings.js | 9 +- eslint/lib/shared/logging.js | 2 +- eslint/lib/shared/types.js | 43 +- eslint/lib/source-code/token-store/cursor.js | 2 +- eslint/lib/unsupported-api.js | 4 + eslint/messages/all-files-ignored.js | 2 +- eslint/messages/extend-config-missing.js | 2 +- eslint/messages/failed-to-read-json.js | 2 +- eslint/messages/file-not-found.js | 2 +- eslint/messages/no-config-found.js | 4 +- eslint/messages/plugin-invalid.js | 2 +- eslint/messages/plugin-missing.js | 2 +- .../print-config-with-directory-path.js | 2 +- eslint/messages/whitespace-found.js | 2 +- eslint/package.json | 72 +- eslint/templates/blogpost.md.ejs | 7 +- eslint/templates/formatter-examples.md.ejs | 15 +- .../tests/_utils/test-lazy-loading-rules.js | 66 + eslint/tests/bin/eslint.js | 65 +- .../autoconfig/source-with-comments.js | 6 - eslint/tests/fixtures/autoconfig/source.js | 3 - eslint/tests/fixtures/bin/eslint.config.js | 5 + .../deprecated-rule-config/eslint.config.js | 5 + .../config-hierarchy/broken/add-conf.js | 5 + .../config-hierarchy/broken/override-conf.js | 5 + .../config-initializer/lib/doubleQuotes.js | 1 - .../config-initializer/lib/no-semi.js | 1 - .../new-es-features/new-es-features.js | 3 - .../parse-error/parse-error.js | 1 - .../config-initializer/singleQuotes.js | 1 - .../config-initializer/tests/console-log.js | 1 - .../config-initializer/tests/doubleQuotes.js | 1 - .../fixtures/configurations/env-browser.js | 11 + .../tests/fixtures/configurations/env-node.js | 13 + eslint/tests/fixtures/configurations/es6.js | 7 + .../configurations/plugins-with-prefix.js | 5 + .../fixtures/configurations/processors.js | 12 + .../fixtures/configurations/quotes-error.js | 5 + .../fixtures/configurations/semi-error.js | 6 + eslint/tests/fixtures/eslint.config.js | 6 + .../.eslintignoreForNegationTest | 1 + .../.eslintignoreWithEscapedBrackets | 3 + .../fixtures/ignored-paths/brackets/[index.js | 1 + .../ignored-paths/brackets/[index].js | 1 + .../fixtures/ignored-paths/brackets/index.js | 1 + .../fixtures/ignored-paths/brackets/index].js | 1 + .../fixtures/lazy-loading-rules/.eslintrc.js | 6 + .../tests/fixtures/lazy-loading-rules/foo.js | 1 + .../fixtures/max-warnings/eslint.config.js | 5 + .../{identifer-type.js => identifier-type.js} | 0 .../arrow-function-return-type.js | 660 +++ eslint/tests/fixtures/rules/eslint.js | 10 + eslint/tests/fixtures/rules/missing-rule.js | 5 + .../fixtures/shallow-glob/eslint.config.js | 5 + .../fixtures/shallow-glob/subdir/broken.js | 1 + .../shallow-glob/subdir/subsubdir/broken.js | 1 + .../shallow-glob/subdir/subsubdir/plain.jsx | 1 + .../shallow-glob/target-dir/passing.js | 1 + .../rule-tester/modify-ast-at-first.js | 52 +- .../testers/rule-tester/modify-ast-at-last.js | 52 +- .../testers/rule-tester/modify-ast.js | 22 +- .../fixtures/testers/rule-tester/no-eval.js | 28 +- .../testers/rule-tester/no-invalid-args.js | 28 +- .../testers/rule-tester/no-invalid-schema.js | 34 +- .../rule-tester/no-schema-violation.js | 35 +- .../testers/rule-tester/no-test-filename | 24 +- .../testers/rule-tester/no-test-global.js | 34 +- .../testers/rule-tester/no-test-settings.js | 29 +- .../fixtures/testers/rule-tester/no-var.js | 6 +- eslint/tests/lib/cli-engine/cli-engine.js | 175 +- .../tests/lib/cli-engine/file-enumerator.js | 2 +- eslint/tests/lib/cli.js | 1732 +++--- eslint/tests/lib/config/flat-config-array.js | 105 +- .../tests/lib/config/flat-config-helpers.js | 102 + eslint/tests/lib/eslint/eslint.config.js | 11 + eslint/tests/lib/eslint/eslint.js | 176 +- eslint/tests/lib/eslint/flat-eslint.js | 4746 +++++++++++++++++ eslint/tests/lib/init/autoconfig.js | 385 -- eslint/tests/lib/init/config-file.js | 159 - eslint/tests/lib/init/config-initializer.js | 577 -- eslint/tests/lib/init/npm-utils.js | 228 - eslint/tests/lib/init/source-code-utils.js | 250 - .../lib/linter/apply-disable-directives.js | 607 ++- .../linter/code-path-analysis/code-path.js | 4 +- .../tests/lib/linter/config-comment-parser.js | 2 +- eslint/tests/lib/linter/linter.js | 2057 ++++++- .../tests/lib/linter/node-event-generator.js | 6 +- eslint/tests/lib/options.js | 576 +- .../tests/lib/rule-tester/flat-rule-tester.js | 2625 +++++++++ eslint/tests/lib/rule-tester/rule-tester.js | 475 +- .../tests/lib/rules/array-bracket-newline.js | 2 +- eslint/tests/lib/rules/arrow-parens.js | 6 +- eslint/tests/lib/rules/camelcase.js | 145 + eslint/tests/lib/rules/comma-dangle.js | 84 + eslint/tests/lib/rules/comma-spacing.js | 55 +- .../lib/rules/computed-property-spacing.js | 83 + .../tests/lib/rules/function-paren-newline.js | 57 + eslint/tests/lib/rules/id-match.js | 224 +- eslint/tests/lib/rules/indent.js | 758 +++ eslint/tests/lib/rules/key-spacing.js | 178 +- eslint/tests/lib/rules/keyword-spacing.js | 228 + .../tests/lib/rules/lines-around-comment.js | 87 + .../tests/lib/rules/max-lines-per-function.js | 256 +- eslint/tests/lib/rules/no-confusing-arrow.js | 52 +- .../rules/no-constant-binary-expression.js | 313 ++ .../tests/lib/rules/no-constant-condition.js | 52 +- eslint/tests/lib/rules/no-control-regex.js | 41 +- eslint/tests/lib/rules/no-eval.js | 23 + eslint/tests/lib/rules/no-extra-parens.js | 11 +- eslint/tests/lib/rules/no-fallthrough.js | 83 + eslint/tests/lib/rules/no-inline-comments.js | 3 + eslint/tests/lib/rules/no-invalid-this.js | 78 +- .../rules/no-misleading-character-class.js | 434 +- eslint/tests/lib/rules/no-multi-assign.js | 2 +- eslint/tests/lib/rules/no-octal.js | 22 +- eslint/tests/lib/rules/no-redeclare.js | 4 +- .../tests/lib/rules/no-restricted-exports.js | 66 +- .../tests/lib/rules/no-restricted-imports.js | 343 +- eslint/tests/lib/rules/no-self-assign.js | 19 + eslint/tests/lib/rules/no-shadow.js | 256 +- .../tests/lib/rules/no-underscore-dangle.js | 29 +- eslint/tests/lib/rules/no-unused-vars.js | 253 + .../tests/lib/rules/no-use-before-define.js | 153 +- eslint/tests/lib/rules/no-useless-rename.js | 74 + eslint/tests/lib/rules/no-warning-comments.js | 188 +- eslint/tests/lib/rules/object-shorthand.js | 90 + eslint/tests/lib/rules/operator-assignment.js | 141 +- .../rules/padding-line-between-statements.js | 4 +- eslint/tests/lib/rules/prefer-const.js | 72 + .../tests/lib/rules/prefer-object-has-own.js | 461 ++ .../tests/lib/rules/prefer-regex-literals.js | 2297 +++++++- eslint/tests/lib/rules/prefer-template.js | 181 + eslint/tests/lib/rules/quotes.js | 10 + eslint/tests/lib/rules/sort-keys.js | 487 +- eslint/tests/lib/rules/space-unary-ops.js | 2 +- eslint/tests/lib/rules/utils/ast-utils.js | 14 +- eslint/tests/lib/rules/utils/fix-tracker.js | 2 +- eslint/tests/lib/rules/valid-typeof.js | 55 +- eslint/tests/lib/rules/wrap-iife.js | 4 +- eslint/tests/lib/unsupported-api.js | 8 + .../tests/{lib/init => tools}/config-rule.js | 6 +- eslint/tools/code-sample-minimizer.js | 6 +- eslint/{lib/init => tools}/config-rule.js | 2 +- eslint/tools/fetch-docs-links.js | 112 + .../tools/internal-rules/no-invalid-meta.js | 2 +- .../event-generator-tester.js | 6 +- eslint/tools/rule-types.json | 2 + 1088 files changed, 53172 insertions(+), 12509 deletions(-) rename eslint/{.nycrc => .c8rc} (100%) delete mode 100644 eslint/.github/ISSUE_TEMPLATE.md delete mode 100644 eslint/.github/ISSUE_TEMPLATE/NEW_SYNTAX.md create mode 100644 eslint/.github/ISSUE_TEMPLATE/new-syntax.yml create mode 100644 eslint/.github/dependabot.yml create mode 100644 eslint/docs/.eleventy.js delete mode 100644 eslint/docs/developer-guide/architecture/dependency.svg delete mode 100644 eslint/docs/developer-guide/code-path-analysis/README.md delete mode 100644 eslint/docs/developer-guide/code-path-analysis/example-dowhilestatement.svg delete mode 100644 eslint/docs/developer-guide/code-path-analysis/example-forinstatement.svg delete mode 100644 eslint/docs/developer-guide/code-path-analysis/example-forstatement-for-ever.svg delete mode 100644 eslint/docs/developer-guide/code-path-analysis/example-forstatement.svg delete mode 100644 eslint/docs/developer-guide/code-path-analysis/example-hello-world.svg delete mode 100644 eslint/docs/developer-guide/code-path-analysis/example-ifstatement-chain.svg delete mode 100644 eslint/docs/developer-guide/code-path-analysis/example-ifstatement.svg delete mode 100644 eslint/docs/developer-guide/code-path-analysis/example-switchstatement-has-default.svg delete mode 100644 eslint/docs/developer-guide/code-path-analysis/example-switchstatement.svg delete mode 100644 eslint/docs/developer-guide/code-path-analysis/example-trystatement-try-catch-finally.svg delete mode 100644 eslint/docs/developer-guide/code-path-analysis/example-trystatement-try-catch.svg delete mode 100644 eslint/docs/developer-guide/code-path-analysis/example-trystatement-try-finally.svg delete mode 100644 eslint/docs/developer-guide/code-path-analysis/example-when-there-is-a-function-f.svg delete mode 100644 eslint/docs/developer-guide/code-path-analysis/example-when-there-is-a-function-g.svg delete mode 100644 eslint/docs/developer-guide/code-path-analysis/example-whilestatement.svg delete mode 100644 eslint/docs/developer-guide/code-path-analysis/helo.svg delete mode 100644 eslint/docs/developer-guide/code-path-analysis/loop-event-example-for-1.svg delete mode 100644 eslint/docs/developer-guide/code-path-analysis/loop-event-example-for-2.svg delete mode 100644 eslint/docs/developer-guide/code-path-analysis/loop-event-example-for-3.svg delete mode 100644 eslint/docs/developer-guide/code-path-analysis/loop-event-example-for-4.svg delete mode 100644 eslint/docs/developer-guide/code-path-analysis/loop-event-example-for-5.svg delete mode 100644 eslint/docs/developer-guide/code-path-analysis/loop-event-example-while-1.svg delete mode 100644 eslint/docs/developer-guide/code-path-analysis/loop-event-example-while-2.svg delete mode 100644 eslint/docs/developer-guide/code-path-analysis/loop-event-example-while-3.svg create mode 100644 eslint/docs/package.json delete mode 100644 eslint/docs/rules/id-blacklist.md delete mode 100644 eslint/docs/rules/no-control-regex.md create mode 100644 eslint/docs/src/_data/config.json create mode 100644 eslint/docs/src/_data/eslintVersion.js create mode 100644 eslint/docs/src/_data/further_reading_links.json create mode 100644 eslint/docs/src/_data/helpers.js create mode 100644 eslint/docs/src/_data/languages.json create mode 100644 eslint/docs/src/_data/links.json create mode 100644 eslint/docs/src/_data/navigation.json create mode 100644 eslint/docs/src/_data/rule_versions.json create mode 100644 eslint/docs/src/_data/rules.json create mode 100644 eslint/docs/src/_data/rules_meta.json create mode 100644 eslint/docs/src/_data/site.js create mode 100644 eslint/docs/src/_data/sites/en.yml create mode 100644 eslint/docs/src/_data/versions.json create mode 100644 eslint/docs/src/_includes/components/_component.njk create mode 100644 eslint/docs/src/_includes/components/alert.macro.html create mode 100644 eslint/docs/src/_includes/components/button.macro.html create mode 100644 eslint/docs/src/_includes/components/code-tabs.html create mode 100644 eslint/docs/src/_includes/components/docs-index.html create mode 100644 eslint/docs/src/_includes/components/docs-toc.html create mode 100644 eslint/docs/src/_includes/components/hero.macro.html create mode 100644 eslint/docs/src/_includes/components/language-switcher.html create mode 100644 eslint/docs/src/_includes/components/logo.html create mode 100644 eslint/docs/src/_includes/components/nav-search.html create mode 100644 eslint/docs/src/_includes/components/nav-version-switcher.html create mode 100644 eslint/docs/src/_includes/components/navigation.html create mode 100644 eslint/docs/src/_includes/components/related-rules.macro.html create mode 100644 eslint/docs/src/_includes/components/rule-categories.macro.html create mode 100644 eslint/docs/src/_includes/components/rule-list.macro.html create mode 100644 eslint/docs/src/_includes/components/rule.macro.html create mode 100644 eslint/docs/src/_includes/components/search.html create mode 100644 eslint/docs/src/_includes/components/social-icons.html create mode 100644 eslint/docs/src/_includes/components/theme-switcher.html create mode 100644 eslint/docs/src/_includes/components/version-switcher.html create mode 100644 eslint/docs/src/_includes/layouts/base.html create mode 100644 eslint/docs/src/_includes/layouts/components.html create mode 100644 eslint/docs/src/_includes/layouts/doc.html create mode 100644 eslint/docs/src/_includes/layouts/main.html create mode 100644 eslint/docs/src/_includes/partials/analytics.html create mode 100644 eslint/docs/src/_includes/partials/carbon-ad.html create mode 100644 eslint/docs/src/_includes/partials/docs-footer.html create mode 100644 eslint/docs/src/_includes/partials/docs-header.html create mode 100644 eslint/docs/src/_includes/partials/docs-left-sidebar.html create mode 100644 eslint/docs/src/_includes/partials/languages-list.html create mode 100644 eslint/docs/src/_includes/partials/site-footer.html create mode 100644 eslint/docs/src/_includes/partials/versions-list.html rename eslint/docs/{ => src}/about/index.md (98%) create mode 100644 eslint/docs/src/assets/fonts/Consolas.woff create mode 100644 eslint/docs/src/assets/fonts/Inter-Regular-subset.woff2 create mode 100644 eslint/docs/src/assets/fonts/Inter-Regular-subset.zopfli.woff create mode 100644 eslint/docs/src/assets/fonts/Inter-SemiBold-subset.woff2 create mode 100644 eslint/docs/src/assets/fonts/Inter-SemiBold-subset.zopfli.woff create mode 100644 eslint/docs/src/assets/fonts/Inter/Inter-VariableFont_slnt,wght.ttf create mode 100644 eslint/docs/src/assets/fonts/Inter/OFL.txt create mode 100644 eslint/docs/src/assets/fonts/Inter/README.txt create mode 100644 eslint/docs/src/assets/fonts/Inter/static/Inter-Black.ttf create mode 100644 eslint/docs/src/assets/fonts/Inter/static/Inter-Bold.ttf create mode 100644 eslint/docs/src/assets/fonts/Inter/static/Inter-ExtraBold.ttf create mode 100644 eslint/docs/src/assets/fonts/Inter/static/Inter-ExtraLight.ttf create mode 100644 eslint/docs/src/assets/fonts/Inter/static/Inter-Light.ttf create mode 100644 eslint/docs/src/assets/fonts/Inter/static/Inter-Medium.ttf create mode 100644 eslint/docs/src/assets/fonts/Inter/static/Inter-Regular-subset.ttf create mode 100644 eslint/docs/src/assets/fonts/Inter/static/Inter-Regular.ttf create mode 100644 eslint/docs/src/assets/fonts/Inter/static/Inter-SemiBold-subset.ttf create mode 100644 eslint/docs/src/assets/fonts/Inter/static/Inter-SemiBold.ttf create mode 100644 eslint/docs/src/assets/fonts/Inter/static/Inter-Thin.ttf create mode 100644 eslint/docs/src/assets/fonts/SpaceGrotesk-Medium-subset.woff2 create mode 100644 eslint/docs/src/assets/fonts/SpaceGrotesk-Medium-subset.zopfli.woff create mode 100644 eslint/docs/src/assets/fonts/SpaceMono-Regular-subset.woff2 create mode 100644 eslint/docs/src/assets/fonts/SpaceMono-Regular-subset.zopfli.woff create mode 100644 eslint/docs/src/assets/fonts/Space_Grotesk/OFL.txt create mode 100644 eslint/docs/src/assets/fonts/Space_Grotesk/README.txt create mode 100644 eslint/docs/src/assets/fonts/Space_Grotesk/SpaceGrotesk-VariableFont_wght.ttf create mode 100644 eslint/docs/src/assets/fonts/Space_Grotesk/static/SpaceGrotesk-Bold.ttf create mode 100644 eslint/docs/src/assets/fonts/Space_Grotesk/static/SpaceGrotesk-Light.ttf create mode 100644 eslint/docs/src/assets/fonts/Space_Grotesk/static/SpaceGrotesk-Medium-subset.ttf create mode 100644 eslint/docs/src/assets/fonts/Space_Grotesk/static/SpaceGrotesk-Medium.ttf create mode 100644 eslint/docs/src/assets/fonts/Space_Grotesk/static/SpaceGrotesk-Regular.ttf create mode 100644 eslint/docs/src/assets/fonts/Space_Grotesk/static/SpaceGrotesk-SemiBold.ttf create mode 100644 eslint/docs/src/assets/fonts/Space_Mono/OFL.txt create mode 100644 eslint/docs/src/assets/fonts/Space_Mono/SpaceMono-Bold.ttf create mode 100644 eslint/docs/src/assets/fonts/Space_Mono/SpaceMono-BoldItalic.ttf create mode 100644 eslint/docs/src/assets/fonts/Space_Mono/SpaceMono-Italic.ttf create mode 100644 eslint/docs/src/assets/fonts/Space_Mono/SpaceMono-Regular-subset.ttf create mode 100644 eslint/docs/src/assets/fonts/Space_Mono/SpaceMono-Regular.ttf create mode 100644 eslint/docs/src/assets/images/404.png create mode 100644 eslint/docs/src/assets/images/architecture/dependency.svg create mode 100644 eslint/docs/src/assets/images/code-path-analysis/example-dowhilestatement.svg create mode 100644 eslint/docs/src/assets/images/code-path-analysis/example-forinstatement.svg create mode 100644 eslint/docs/src/assets/images/code-path-analysis/example-forstatement-for-ever.svg create mode 100644 eslint/docs/src/assets/images/code-path-analysis/example-forstatement.svg create mode 100644 eslint/docs/src/assets/images/code-path-analysis/example-hello-world.svg create mode 100644 eslint/docs/src/assets/images/code-path-analysis/example-ifstatement-chain.svg create mode 100644 eslint/docs/src/assets/images/code-path-analysis/example-ifstatement.svg create mode 100644 eslint/docs/src/assets/images/code-path-analysis/example-switchstatement-has-default.svg create mode 100644 eslint/docs/src/assets/images/code-path-analysis/example-switchstatement.svg create mode 100644 eslint/docs/src/assets/images/code-path-analysis/example-trystatement-try-catch-finally.svg create mode 100644 eslint/docs/src/assets/images/code-path-analysis/example-trystatement-try-catch.svg create mode 100644 eslint/docs/src/assets/images/code-path-analysis/example-trystatement-try-finally.svg create mode 100644 eslint/docs/src/assets/images/code-path-analysis/example-when-there-is-a-function-f.svg create mode 100644 eslint/docs/src/assets/images/code-path-analysis/example-when-there-is-a-function-g.svg create mode 100644 eslint/docs/src/assets/images/code-path-analysis/example-whilestatement.svg create mode 100644 eslint/docs/src/assets/images/code-path-analysis/helo.svg create mode 100644 eslint/docs/src/assets/images/code-path-analysis/loop-event-example-for-1.svg create mode 100644 eslint/docs/src/assets/images/code-path-analysis/loop-event-example-for-2.svg create mode 100644 eslint/docs/src/assets/images/code-path-analysis/loop-event-example-for-3.svg create mode 100644 eslint/docs/src/assets/images/code-path-analysis/loop-event-example-for-4.svg create mode 100644 eslint/docs/src/assets/images/code-path-analysis/loop-event-example-for-5.svg create mode 100644 eslint/docs/src/assets/images/code-path-analysis/loop-event-example-while-1.svg create mode 100644 eslint/docs/src/assets/images/code-path-analysis/loop-event-example-while-2.svg create mode 100644 eslint/docs/src/assets/images/code-path-analysis/loop-event-example-while-3.svg create mode 100644 eslint/docs/src/assets/images/icons/arrow-left.svg create mode 100644 eslint/docs/src/assets/images/icons/arrow-right.svg create mode 100644 eslint/docs/src/assets/images/icons/arrow-top-right.svg create mode 100644 eslint/docs/src/assets/images/icons/chevron-down.svg create mode 100644 eslint/docs/src/assets/images/icons/copy.svg create mode 100644 eslint/docs/src/assets/images/icons/correct.svg create mode 100644 eslint/docs/src/assets/images/icons/discord.svg create mode 100644 eslint/docs/src/assets/images/icons/facebook.svg create mode 100644 eslint/docs/src/assets/images/icons/features-list-icon.svg create mode 100644 eslint/docs/src/assets/images/icons/github-icon-mono.svg create mode 100644 eslint/docs/src/assets/images/icons/github-img.svg create mode 100644 eslint/docs/src/assets/images/icons/github-large.svg create mode 100644 eslint/docs/src/assets/images/icons/github-small.svg create mode 100644 eslint/docs/src/assets/images/icons/github.svg create mode 100644 eslint/docs/src/assets/images/icons/google.svg create mode 100644 eslint/docs/src/assets/images/icons/incorrect.svg create mode 100644 eslint/docs/src/assets/images/icons/languages.svg create mode 100644 eslint/docs/src/assets/images/icons/learn-more-arrow.svg create mode 100644 eslint/docs/src/assets/images/icons/link.svg create mode 100644 eslint/docs/src/assets/images/icons/linkedin.svg create mode 100644 eslint/docs/src/assets/images/icons/menu.svg create mode 100644 eslint/docs/src/assets/images/icons/minus-circle.svg create mode 100644 eslint/docs/src/assets/images/icons/npm.svg create mode 100644 eslint/docs/src/assets/images/icons/open-collectione-mono.svg create mode 100644 eslint/docs/src/assets/images/icons/opencollective-img.svg create mode 100644 eslint/docs/src/assets/images/icons/plus-circle.svg create mode 100644 eslint/docs/src/assets/images/icons/search.svg create mode 100644 eslint/docs/src/assets/images/icons/twitter.svg create mode 100644 eslint/docs/src/assets/images/logo/brand-colors.svg create mode 100644 eslint/docs/src/assets/js/components-index.js create mode 100644 eslint/docs/src/assets/js/css-vars-ponyfill@2.js create mode 100644 eslint/docs/src/assets/js/focus-visible.js create mode 100644 eslint/docs/src/assets/js/inert-polyfill.js create mode 100644 eslint/docs/src/assets/js/main.js create mode 100644 eslint/docs/src/assets/js/search.js create mode 100644 eslint/docs/src/assets/js/tabs.js create mode 100644 eslint/docs/src/assets/js/themes.js create mode 100644 eslint/docs/src/assets/scss/carbon-ads.scss create mode 100644 eslint/docs/src/assets/scss/components/alert.scss create mode 100644 eslint/docs/src/assets/scss/components/buttons.scss create mode 100644 eslint/docs/src/assets/scss/components/docs-index.scss create mode 100644 eslint/docs/src/assets/scss/components/docs-navigation.scss create mode 100644 eslint/docs/src/assets/scss/components/hero.scss create mode 100644 eslint/docs/src/assets/scss/components/index.scss create mode 100644 eslint/docs/src/assets/scss/components/language-switcher.scss create mode 100644 eslint/docs/src/assets/scss/components/resources.scss create mode 100644 eslint/docs/src/assets/scss/components/rules.scss create mode 100644 eslint/docs/src/assets/scss/components/search.scss create mode 100644 eslint/docs/src/assets/scss/components/social-icons.scss create mode 100644 eslint/docs/src/assets/scss/components/tabs.scss create mode 100644 eslint/docs/src/assets/scss/components/theme-switcher.scss create mode 100644 eslint/docs/src/assets/scss/components/toc.scss create mode 100644 eslint/docs/src/assets/scss/components/version-switcher.scss create mode 100644 eslint/docs/src/assets/scss/docs-footer.scss create mode 100644 eslint/docs/src/assets/scss/docs-header.scss create mode 100644 eslint/docs/src/assets/scss/docs.scss create mode 100644 eslint/docs/src/assets/scss/forms.scss create mode 100644 eslint/docs/src/assets/scss/foundations.scss create mode 100644 eslint/docs/src/assets/scss/languages.scss create mode 100644 eslint/docs/src/assets/scss/print.scss create mode 100644 eslint/docs/src/assets/scss/styles.scss create mode 100644 eslint/docs/src/assets/scss/syntax-highlighter.scss create mode 100644 eslint/docs/src/assets/scss/tokens/spacing.scss create mode 100644 eslint/docs/src/assets/scss/tokens/themes.scss create mode 100644 eslint/docs/src/assets/scss/tokens/typography.scss create mode 100644 eslint/docs/src/assets/scss/tokens/ui.scss create mode 100644 eslint/docs/src/assets/scss/utilities.scss create mode 100644 eslint/docs/src/assets/scss/versions.scss rename eslint/docs/{developer-guide/architecture.md => src/developer-guide/architecture/index.md} (96%) rename eslint/docs/{ => src}/developer-guide/code-conventions.md (71%) rename eslint/docs/{ => src}/developer-guide/code-path-analysis.md (83%) rename eslint/docs/{ => src}/developer-guide/contributing/changes.md (77%) rename eslint/docs/{developer-guide/contributing/README.md => src/developer-guide/contributing/index.md} (72%) rename eslint/docs/{ => src}/developer-guide/contributing/new-rules.md (94%) rename eslint/docs/{ => src}/developer-guide/contributing/pull-requests.md (88%) rename eslint/docs/{ => src}/developer-guide/contributing/reporting-bugs.md (77%) rename eslint/docs/{ => src}/developer-guide/contributing/rule-changes.md (81%) rename eslint/docs/{ => src}/developer-guide/contributing/working-on-issues.md (98%) rename eslint/docs/{ => src}/developer-guide/development-environment.md (89%) rename eslint/docs/{developer-guide/README.md => src/developer-guide/index.md} (82%) rename eslint/docs/{ => src}/developer-guide/nodejs-api.md (91%) create mode 100644 eslint/docs/src/developer-guide/package-json-conventions.md rename eslint/docs/{ => src}/developer-guide/scope-manager-interface.md (98%) rename eslint/docs/{ => src}/developer-guide/selectors.md (94%) rename eslint/docs/{ => src}/developer-guide/shareable-configs.md (97%) rename eslint/docs/{ => src}/developer-guide/source-code.md (87%) rename eslint/docs/{ => src}/developer-guide/unit-tests.md (79%) rename eslint/docs/{ => src}/developer-guide/working-with-custom-formatters.md (86%) rename eslint/docs/{ => src}/developer-guide/working-with-custom-parsers.md (91%) rename eslint/docs/{ => src}/developer-guide/working-with-plugins.md (94%) rename eslint/docs/{ => src}/developer-guide/working-with-rules-deprecated.md (98%) rename eslint/docs/{ => src}/developer-guide/working-with-rules.md (94%) create mode 100644 eslint/docs/src/library/alert.md create mode 100644 eslint/docs/src/library/buttons.md create mode 100644 eslint/docs/src/library/code-blocks.md create mode 100644 eslint/docs/src/library/code-tabs.md create mode 100644 eslint/docs/src/library/language-switcher.md create mode 100644 eslint/docs/src/library/library.json create mode 100644 eslint/docs/src/library/link-card.md create mode 100644 eslint/docs/src/library/related-rules.md create mode 100644 eslint/docs/src/library/rule-categories.md create mode 100644 eslint/docs/src/library/rule-list.md create mode 100644 eslint/docs/src/library/rule.md create mode 100644 eslint/docs/src/library/social-icons.md create mode 100644 eslint/docs/src/library/theme-switcher.md create mode 100644 eslint/docs/src/library/version-switcher.md rename eslint/docs/{ => src}/maintainer-guide/governance.md (80%) rename eslint/docs/{maintainer-guide/README.md => src/maintainer-guide/index.md} (62%) rename eslint/docs/{ => src}/maintainer-guide/issues.md (98%) rename eslint/docs/{ => src}/maintainer-guide/pullrequests.md (91%) rename eslint/docs/{ => src}/maintainer-guide/releases.md (95%) rename eslint/docs/{ => src}/maintainer-guide/working-groups.md (96%) create mode 100644 eslint/docs/src/pages/404.html create mode 100644 eslint/docs/src/pages/component-library.html create mode 100644 eslint/docs/src/pages/index.md create mode 100644 eslint/docs/src/pages/languages.md create mode 100644 eslint/docs/src/pages/pages.11tydata.json create mode 100644 eslint/docs/src/pages/rules.md create mode 100644 eslint/docs/src/pages/versions.md rename eslint/docs/{ => src}/rules/accessor-pairs.md (88%) rename eslint/docs/{ => src}/rules/array-bracket-newline.md (93%) rename eslint/docs/{ => src}/rules/array-bracket-spacing.md (94%) rename eslint/docs/{ => src}/rules/array-callback-return.md (95%) rename eslint/docs/{ => src}/rules/array-element-newline.md (91%) rename eslint/docs/{ => src}/rules/arrow-body-style.md (94%) rename eslint/docs/{ => src}/rules/arrow-parens.md (94%) rename eslint/docs/{ => src}/rules/arrow-spacing.md (91%) rename eslint/docs/{ => src}/rules/block-scoped-var.md (85%) rename eslint/docs/{ => src}/rules/block-spacing.md (88%) rename eslint/docs/{ => src}/rules/brace-style.md (94%) rename eslint/docs/{ => src}/rules/callback-return.md (92%) rename eslint/docs/{ => src}/rules/camelcase.md (95%) rename eslint/docs/{ => src}/rules/capitalized-comments.md (96%) rename eslint/docs/{ => src}/rules/class-methods-use-this.md (90%) rename eslint/docs/{ => src}/rules/comma-dangle.md (95%) rename eslint/docs/{ => src}/rules/comma-spacing.md (59%) rename eslint/docs/{ => src}/rules/comma-style.md (92%) rename eslint/docs/{ => src}/rules/complexity.md (76%) rename eslint/docs/{ => src}/rules/computed-property-spacing.md (83%) rename eslint/docs/{ => src}/rules/consistent-return.md (95%) rename eslint/docs/{ => src}/rules/consistent-this.md (93%) rename eslint/docs/{ => src}/rules/constructor-super.md (92%) rename eslint/docs/{ => src}/rules/curly.md (94%) rename eslint/docs/{ => src}/rules/default-case-last.md (86%) rename eslint/docs/{ => src}/rules/default-case.md (93%) rename eslint/docs/{ => src}/rules/default-param-last.md (86%) rename eslint/docs/{ => src}/rules/dot-location.md (90%) rename eslint/docs/{ => src}/rules/dot-notation.md (94%) rename eslint/docs/{ => src}/rules/eol-last.md (82%) rename eslint/docs/{ => src}/rules/eqeqeq.md (95%) rename eslint/docs/{ => src}/rules/for-direction.md (82%) rename eslint/docs/{ => src}/rules/func-call-spacing.md (81%) rename eslint/docs/{ => src}/rules/func-name-matching.md (96%) rename eslint/docs/{ => src}/rules/func-names.md (91%) rename eslint/docs/{ => src}/rules/func-style.md (93%) rename eslint/docs/{ => src}/rules/function-call-argument-newline.md (89%) rename eslint/docs/{ => src}/rules/function-paren-newline.md (94%) rename eslint/docs/{ => src}/rules/generator-star-spacing.md (94%) rename eslint/docs/{ => src}/rules/generator-star.md (88%) rename eslint/docs/{ => src}/rules/getter-return.md (82%) rename eslint/docs/{ => src}/rules/global-require.md (83%) rename eslint/docs/{ => src}/rules/global-strict.md (90%) rename eslint/docs/{ => src}/rules/grouped-accessor-pairs.md (86%) rename eslint/docs/{ => src}/rules/guard-for-in.md (73%) rename eslint/docs/{ => src}/rules/handle-callback-err.md (89%) create mode 100644 eslint/docs/src/rules/id-blacklist.md rename eslint/docs/{ => src}/rules/id-denylist.md (76%) rename eslint/docs/{ => src}/rules/id-length.md (95%) rename eslint/docs/{ => src}/rules/id-match.md (95%) rename eslint/docs/{ => src}/rules/implicit-arrow-linebreak.md (76%) rename eslint/docs/{ => src}/rules/indent-legacy.md (95%) rename eslint/docs/{ => src}/rules/indent.md (93%) rename eslint/docs/{ => src}/rules/init-declarations.md (94%) rename eslint/docs/{ => src}/rules/jsx-quotes.md (91%) rename eslint/docs/{ => src}/rules/key-spacing.md (94%) rename eslint/docs/{ => src}/rules/keyword-spacing.md (93%) rename eslint/docs/{ => src}/rules/line-comment-position.md (93%) rename eslint/docs/{ => src}/rules/linebreak-style.md (93%) rename eslint/docs/{ => src}/rules/lines-around-comment.md (92%) rename eslint/docs/{ => src}/rules/lines-around-directive.md (93%) rename eslint/docs/{ => src}/rules/lines-between-class-members.md (90%) rename eslint/docs/{ => src}/rules/max-classes-per-file.md (81%) rename eslint/docs/{ => src}/rules/max-depth.md (86%) rename eslint/docs/{ => src}/rules/max-len.md (92%) rename eslint/docs/{ => src}/rules/max-lines-per-function.md (89%) rename eslint/docs/{ => src}/rules/max-lines.md (82%) rename eslint/docs/{ => src}/rules/max-nested-callbacks.md (73%) rename eslint/docs/{ => src}/rules/max-params.md (78%) rename eslint/docs/{ => src}/rules/max-statements-per-line.md (86%) rename eslint/docs/{ => src}/rules/max-statements.md (89%) rename eslint/docs/{ => src}/rules/multiline-comment-style.md (93%) rename eslint/docs/{ => src}/rules/multiline-ternary.md (89%) rename eslint/docs/{ => src}/rules/new-cap.md (94%) rename eslint/docs/{ => src}/rules/new-parens.md (82%) rename eslint/docs/{ => src}/rules/newline-after-var.md (95%) rename eslint/docs/{ => src}/rules/newline-before-return.md (93%) rename eslint/docs/{ => src}/rules/newline-per-chained-call.md (95%) rename eslint/docs/{ => src}/rules/no-alert.md (88%) rename eslint/docs/{ => src}/rules/no-array-constructor.md (85%) rename eslint/docs/{ => src}/rules/no-arrow-condition.md (79%) rename eslint/docs/{ => src}/rules/no-async-promise-executor.md (93%) rename eslint/docs/{ => src}/rules/no-await-in-loop.md (96%) rename eslint/docs/{ => src}/rules/no-bitwise.md (90%) rename eslint/docs/{ => src}/rules/no-buffer-constructor.md (79%) rename eslint/docs/{ => src}/rules/no-caller.md (91%) rename eslint/docs/{ => src}/rules/no-case-declarations.md (92%) rename eslint/docs/{ => src}/rules/no-catch-shadow.md (92%) rename eslint/docs/{ => src}/rules/no-class-assign.md (86%) rename eslint/docs/{ => src}/rules/no-comma-dangle.md (84%) rename eslint/docs/{ => src}/rules/no-compare-neg-zero.md (62%) rename eslint/docs/{ => src}/rules/no-cond-assign.md (94%) rename eslint/docs/{ => src}/rules/no-confusing-arrow.md (55%) rename eslint/docs/{ => src}/rules/no-console.md (94%) rename eslint/docs/{ => src}/rules/no-const-assign.md (87%) create mode 100644 eslint/docs/src/rules/no-constant-binary-expression.md rename eslint/docs/{ => src}/rules/no-constant-condition.md (86%) rename eslint/docs/{ => src}/rules/no-constructor-return.md (89%) rename eslint/docs/{ => src}/rules/no-continue.md (90%) create mode 100644 eslint/docs/src/rules/no-control-regex.md rename eslint/docs/{ => src}/rules/no-debugger.md (81%) rename eslint/docs/{ => src}/rules/no-delete-var.md (83%) rename eslint/docs/{ => src}/rules/no-div-regex.md (72%) rename eslint/docs/{ => src}/rules/no-dupe-args.md (90%) rename eslint/docs/{ => src}/rules/no-dupe-class-members.md (92%) rename eslint/docs/{ => src}/rules/no-dupe-else-if.md (94%) rename eslint/docs/{ => src}/rules/no-dupe-keys.md (85%) rename eslint/docs/{ => src}/rules/no-duplicate-case.md (73%) rename eslint/docs/{ => src}/rules/no-duplicate-imports.md (92%) rename eslint/docs/{ => src}/rules/no-else-return.md (94%) rename eslint/docs/{ => src}/rules/no-empty-character-class.md (89%) rename eslint/docs/{ => src}/rules/no-empty-class.md (75%) rename eslint/docs/{ => src}/rules/no-empty-function.md (94%) rename eslint/docs/{ => src}/rules/no-empty-label.md (73%) rename eslint/docs/{ => src}/rules/no-empty-pattern.md (93%) rename eslint/docs/{ => src}/rules/no-empty.md (90%) rename eslint/docs/{ => src}/rules/no-eq-null.md (91%) rename eslint/docs/{ => src}/rules/no-eval.md (88%) rename eslint/docs/{ => src}/rules/no-ex-assign.md (60%) rename eslint/docs/{ => src}/rules/no-extend-native.md (93%) rename eslint/docs/{ => src}/rules/no-extra-bind.md (86%) rename eslint/docs/{ => src}/rules/no-extra-boolean-cast.md (93%) rename eslint/docs/{ => src}/rules/no-extra-label.md (86%) rename eslint/docs/{ => src}/rules/no-extra-parens.md (90%) rename eslint/docs/{ => src}/rules/no-extra-semi.md (86%) rename eslint/docs/{ => src}/rules/no-extra-strict.md (72%) rename eslint/docs/{ => src}/rules/no-fallthrough.md (80%) rename eslint/docs/{ => src}/rules/no-floating-decimal.md (91%) rename eslint/docs/{ => src}/rules/no-func-assign.md (89%) rename eslint/docs/{ => src}/rules/no-global-assign.md (88%) rename eslint/docs/{ => src}/rules/no-implicit-coercion.md (78%) rename eslint/docs/{ => src}/rules/no-implicit-globals.md (92%) rename eslint/docs/{ => src}/rules/no-implied-eval.md (93%) rename eslint/docs/{ => src}/rules/no-import-assign.md (92%) rename eslint/docs/{ => src}/rules/no-inline-comments.md (93%) rename eslint/docs/{ => src}/rules/no-inner-declarations.md (92%) rename eslint/docs/{ => src}/rules/no-invalid-regexp.md (86%) rename eslint/docs/{ => src}/rules/no-invalid-this.md (88%) rename eslint/docs/{ => src}/rules/no-irregular-whitespace.md (78%) rename eslint/docs/{ => src}/rules/no-iterator.md (71%) rename eslint/docs/{ => src}/rules/no-label-var.md (78%) rename eslint/docs/{ => src}/rules/no-labels.md (92%) rename eslint/docs/{ => src}/rules/no-lone-blocks.md (93%) rename eslint/docs/{ => src}/rules/no-lonely-if.md (91%) rename eslint/docs/{ => src}/rules/no-loop-func.md (95%) rename eslint/docs/{ => src}/rules/no-loss-of-precision.md (78%) rename eslint/docs/{ => src}/rules/no-magic-numbers.md (93%) rename eslint/docs/{ => src}/rules/no-misleading-character-class.md (94%) rename eslint/docs/{ => src}/rules/no-mixed-operators.md (88%) rename eslint/docs/{ => src}/rules/no-mixed-requires.md (96%) rename eslint/docs/{ => src}/rules/no-mixed-spaces-and-tabs.md (84%) rename eslint/docs/{ => src}/rules/no-multi-assign.md (89%) rename eslint/docs/{ => src}/rules/no-multi-spaces.md (88%) rename eslint/docs/{ => src}/rules/no-multi-str.md (86%) rename eslint/docs/{ => src}/rules/no-multiple-empty-lines.md (84%) rename eslint/docs/{ => src}/rules/no-native-reassign.md (86%) rename eslint/docs/{ => src}/rules/no-negated-condition.md (88%) rename eslint/docs/{ => src}/rules/no-negated-in-lhs.md (86%) rename eslint/docs/{ => src}/rules/no-nested-ternary.md (80%) rename eslint/docs/{ => src}/rules/no-new-func.md (94%) rename eslint/docs/{ => src}/rules/no-new-object.md (87%) rename eslint/docs/{ => src}/rules/no-new-require.md (92%) rename eslint/docs/{ => src}/rules/no-new-symbol.md (80%) rename eslint/docs/{ => src}/rules/no-new-wrappers.md (90%) rename eslint/docs/{ => src}/rules/no-new.md (90%) rename eslint/docs/{ => src}/rules/no-nonoctal-decimal-escape.md (81%) rename eslint/docs/{ => src}/rules/no-obj-calls.md (92%) rename eslint/docs/{ => src}/rules/no-octal-escape.md (86%) rename eslint/docs/{ => src}/rules/no-octal.md (87%) rename eslint/docs/{ => src}/rules/no-param-reassign.md (91%) rename eslint/docs/{ => src}/rules/no-path-concat.md (95%) rename eslint/docs/{ => src}/rules/no-plusplus.md (91%) rename eslint/docs/{ => src}/rules/no-process-env.md (77%) rename eslint/docs/{ => src}/rules/no-process-exit.md (95%) rename eslint/docs/{ => src}/rules/no-promise-executor-return.md (87%) rename eslint/docs/{ => src}/rules/no-proto.md (86%) rename eslint/docs/{ => src}/rules/no-prototype-builtins.md (94%) rename eslint/docs/{ => src}/rules/no-redeclare.md (89%) rename eslint/docs/{ => src}/rules/no-regex-spaces.md (86%) rename eslint/docs/{ => src}/rules/no-reserved-keys.md (85%) rename eslint/docs/{ => src}/rules/no-restricted-exports.md (78%) rename eslint/docs/{ => src}/rules/no-restricted-globals.md (91%) rename eslint/docs/{ => src}/rules/no-restricted-imports.md (76%) rename eslint/docs/{ => src}/rules/no-restricted-modules.md (95%) rename eslint/docs/{ => src}/rules/no-restricted-properties.md (92%) rename eslint/docs/{ => src}/rules/no-restricted-syntax.md (87%) rename eslint/docs/{ => src}/rules/no-return-assign.md (95%) rename eslint/docs/{ => src}/rules/no-return-await.md (75%) rename eslint/docs/{ => src}/rules/no-script-url.md (70%) rename eslint/docs/{ => src}/rules/no-self-assign.md (84%) rename eslint/docs/{ => src}/rules/no-self-compare.md (91%) rename eslint/docs/{ => src}/rules/no-sequences.md (95%) rename eslint/docs/{ => src}/rules/no-setter-return.md (89%) rename eslint/docs/{ => src}/rules/no-shadow-restricted-names.md (79%) rename eslint/docs/{ => src}/rules/no-shadow.md (68%) rename eslint/docs/{ => src}/rules/no-space-before-semi.md (75%) rename eslint/docs/{ => src}/rules/no-spaced-func.md (77%) rename eslint/docs/{ => src}/rules/no-sparse-arrays.md (88%) rename eslint/docs/{ => src}/rules/no-sync.md (94%) rename eslint/docs/{ => src}/rules/no-tabs.md (91%) rename eslint/docs/{ => src}/rules/no-template-curly-in-string.md (91%) rename eslint/docs/{ => src}/rules/no-ternary.md (81%) rename eslint/docs/{ => src}/rules/no-this-before-super.md (92%) rename eslint/docs/{ => src}/rules/no-throw-literal.md (93%) rename eslint/docs/{ => src}/rules/no-trailing-spaces.md (92%) rename eslint/docs/{ => src}/rules/no-undef-init.md (92%) rename eslint/docs/{ => src}/rules/no-undef.md (77%) rename eslint/docs/{ => src}/rules/no-undefined.md (67%) rename eslint/docs/{ => src}/rules/no-underscore-dangle.md (72%) rename eslint/docs/{ => src}/rules/no-unexpected-multiline.md (89%) rename eslint/docs/{ => src}/rules/no-unmodified-loop-condition.md (94%) rename eslint/docs/{ => src}/rules/no-unneeded-ternary.md (92%) rename eslint/docs/{ => src}/rules/no-unreachable-loop.md (93%) rename eslint/docs/{ => src}/rules/no-unreachable.md (94%) rename eslint/docs/{ => src}/rules/no-unsafe-finally.md (95%) rename eslint/docs/{ => src}/rules/no-unsafe-negation.md (85%) rename eslint/docs/{ => src}/rules/no-unsafe-optional-chaining.md (89%) rename eslint/docs/{ => src}/rules/no-unused-expressions.md (95%) rename eslint/docs/{ => src}/rules/no-unused-labels.md (85%) rename eslint/docs/{ => src}/rules/no-unused-private-class-members.md (92%) rename eslint/docs/{ => src}/rules/no-unused-vars.md (87%) rename eslint/docs/{ => src}/rules/no-use-before-define.md (78%) rename eslint/docs/{ => src}/rules/no-useless-backreference.md (93%) rename eslint/docs/{ => src}/rules/no-useless-call.md (91%) rename eslint/docs/{ => src}/rules/no-useless-catch.md (90%) rename eslint/docs/{ => src}/rules/no-useless-computed-key.md (93%) rename eslint/docs/{ => src}/rules/no-useless-concat.md (91%) rename eslint/docs/{ => src}/rules/no-useless-constructor.md (91%) rename eslint/docs/{ => src}/rules/no-useless-escape.md (85%) rename eslint/docs/{ => src}/rules/no-useless-rename.md (80%) rename eslint/docs/{ => src}/rules/no-useless-return.md (91%) rename eslint/docs/{ => src}/rules/no-var.md (92%) rename eslint/docs/{ => src}/rules/no-void.md (84%) rename eslint/docs/{ => src}/rules/no-warning-comments.md (58%) rename eslint/docs/{ => src}/rules/no-whitespace-before-property.md (90%) rename eslint/docs/{ => src}/rules/no-with.md (76%) rename eslint/docs/{ => src}/rules/no-wrap-func.md (73%) rename eslint/docs/{ => src}/rules/nonblock-statement-body-position.md (90%) rename eslint/docs/{ => src}/rules/object-curly-newline.md (95%) rename eslint/docs/{ => src}/rules/object-curly-spacing.md (92%) rename eslint/docs/{ => src}/rules/object-property-newline.md (93%) rename eslint/docs/{ => src}/rules/object-shorthand.md (77%) rename eslint/docs/{ => src}/rules/one-var-declaration-per-line.md (89%) rename eslint/docs/{ => src}/rules/one-var.md (94%) rename eslint/docs/{ => src}/rules/operator-assignment.md (93%) rename eslint/docs/{ => src}/rules/operator-linebreak.md (94%) rename eslint/docs/{ => src}/rules/padded-blocks.md (92%) rename eslint/docs/{ => src}/rules/padding-line-between-statements.md (59%) rename eslint/docs/{ => src}/rules/prefer-arrow-callback.md (86%) rename eslint/docs/{ => src}/rules/prefer-const.md (94%) rename eslint/docs/{ => src}/rules/prefer-destructuring.md (91%) rename eslint/docs/{ => src}/rules/prefer-exponentiation-operator.md (66%) rename eslint/docs/{ => src}/rules/prefer-named-capture-group.md (89%) rename eslint/docs/{ => src}/rules/prefer-numeric-literals.md (92%) create mode 100644 eslint/docs/src/rules/prefer-object-has-own.md rename eslint/docs/{ => src}/rules/prefer-object-spread.md (72%) rename eslint/docs/{ => src}/rules/prefer-promise-reject-errors.md (82%) rename eslint/docs/{ => src}/rules/prefer-reflect.md (93%) rename eslint/docs/{ => src}/rules/prefer-regex-literals.md (89%) rename eslint/docs/{ => src}/rules/prefer-rest-params.md (91%) rename eslint/docs/{ => src}/rules/prefer-spread.md (92%) rename eslint/docs/{ => src}/rules/prefer-template.md (84%) rename eslint/docs/{ => src}/rules/quote-props.md (93%) rename eslint/docs/{ => src}/rules/quotes.md (92%) rename eslint/docs/{ => src}/rules/radix.md (93%) rename eslint/docs/{ => src}/rules/require-atomic-updates.md (97%) rename eslint/docs/{ => src}/rules/require-await.md (94%) rename eslint/docs/{ => src}/rules/require-jsdoc.md (96%) rename eslint/docs/{ => src}/rules/require-unicode-regexp.md (94%) rename eslint/docs/{ => src}/rules/require-yield.md (83%) rename eslint/docs/{ => src}/rules/rest-spread-spacing.md (93%) rename eslint/docs/{ => src}/rules/semi-spacing.md (92%) rename eslint/docs/{ => src}/rules/semi-style.md (84%) rename eslint/docs/{ => src}/rules/semi.md (91%) rename eslint/docs/{ => src}/rules/sort-imports.md (93%) rename eslint/docs/{ => src}/rules/sort-keys.md (75%) rename eslint/docs/{ => src}/rules/sort-vars.md (91%) rename eslint/docs/{ => src}/rules/space-after-function-name.md (85%) rename eslint/docs/{ => src}/rules/space-after-keywords.md (84%) rename eslint/docs/{ => src}/rules/space-before-blocks.md (92%) rename eslint/docs/{ => src}/rules/space-before-function-paren.md (95%) rename eslint/docs/{ => src}/rules/space-before-function-parentheses.md (89%) rename eslint/docs/{ => src}/rules/space-before-keywords.md (85%) rename eslint/docs/{ => src}/rules/space-in-brackets.md (91%) rename eslint/docs/{ => src}/rules/space-in-parens.md (92%) rename eslint/docs/{ => src}/rules/space-infix-ops.md (84%) rename eslint/docs/{ => src}/rules/space-return-throw-case.md (75%) rename eslint/docs/{ => src}/rules/space-unary-ops.md (94%) rename eslint/docs/{ => src}/rules/space-unary-word-ops.md (56%) rename eslint/docs/{ => src}/rules/spaced-comment.md (92%) rename eslint/docs/{ => src}/rules/spaced-line-comment.md (84%) rename eslint/docs/{ => src}/rules/strict.md (88%) rename eslint/docs/{ => src}/rules/switch-colon-spacing.md (79%) rename eslint/docs/{ => src}/rules/symbol-description.md (84%) rename eslint/docs/{ => src}/rules/template-curly-spacing.md (91%) rename eslint/docs/{ => src}/rules/template-tag-spacing.md (77%) rename eslint/docs/{ => src}/rules/unicode-bom.md (91%) rename eslint/docs/{ => src}/rules/use-isnan.md (96%) rename eslint/docs/{ => src}/rules/valid-jsdoc.md (97%) rename eslint/docs/{ => src}/rules/valid-typeof.md (87%) rename eslint/docs/{ => src}/rules/vars-on-top.md (79%) rename eslint/docs/{ => src}/rules/wrap-iife.md (93%) rename eslint/docs/{ => src}/rules/wrap-regex.md (85%) rename eslint/docs/{ => src}/rules/yield-star-spacing.md (89%) rename eslint/docs/{ => src}/rules/yoda.md (93%) create mode 100644 eslint/docs/src/src.json create mode 100644 eslint/docs/src/static/apple-touch-icon.png create mode 100644 eslint/docs/src/static/favicon-32x32.png create mode 100644 eslint/docs/src/static/favicon.ico create mode 100644 eslint/docs/src/static/favicon.png create mode 100644 eslint/docs/src/static/feed.njk create mode 100644 eslint/docs/src/static/icon-192.png create mode 100644 eslint/docs/src/static/icon-512.png create mode 100644 eslint/docs/src/static/icon.svg create mode 100644 eslint/docs/src/static/manifest.webmanifest create mode 100644 eslint/docs/src/static/robots.njk create mode 100644 eslint/docs/src/static/serviceworker.js create mode 100644 eslint/docs/src/static/sitemap.njk rename eslint/docs/{ => src}/user-guide/command-line-interface.md (79%) create mode 100644 eslint/docs/src/user-guide/configuring/configuration-files-new.md rename eslint/docs/{ => src}/user-guide/configuring/configuration-files.md (92%) rename eslint/docs/{ => src}/user-guide/configuring/ignoring-code.md (87%) create mode 100644 eslint/docs/src/user-guide/configuring/index.md rename eslint/docs/{ => src}/user-guide/configuring/language-options.md (87%) rename eslint/docs/{ => src}/user-guide/configuring/plugins.md (95%) rename eslint/docs/{ => src}/user-guide/configuring/rules.md (83%) create mode 100644 eslint/docs/src/user-guide/formatters/html-formatter-example.html create mode 100644 eslint/docs/src/user-guide/formatters/index.md rename eslint/docs/{ => src}/user-guide/getting-started.md (74%) rename eslint/docs/{user-guide/README.md => src/user-guide/index.md} (66%) rename eslint/docs/{ => src}/user-guide/integrations.md (92%) rename eslint/docs/{ => src}/user-guide/migrating-from-jscs.md (88%) rename eslint/docs/{ => src}/user-guide/migrating-to-1.0.0.md (99%) rename eslint/docs/{ => src}/user-guide/migrating-to-2.0.0.md (97%) rename eslint/docs/{ => src}/user-guide/migrating-to-3.0.0.md (99%) rename eslint/docs/{ => src}/user-guide/migrating-to-4.0.0.md (99%) rename eslint/docs/{ => src}/user-guide/migrating-to-5.0.0.md (99%) rename eslint/docs/{ => src}/user-guide/migrating-to-6.0.0.md (99%) rename eslint/docs/{ => src}/user-guide/migrating-to-7.0.0.md (84%) rename eslint/docs/{ => src}/user-guide/migrating-to-8.0.0.md (89%) rename eslint/docs/{ => src}/user-guide/rule-deprecation.md (96%) delete mode 100644 eslint/docs/user-guide/configuring/README.md create mode 100644 eslint/eslint.config.js create mode 100644 eslint/lib/eslint/flat-eslint.js delete mode 100644 eslint/lib/init/autoconfig.js delete mode 100644 eslint/lib/init/config-file.js delete mode 100644 eslint/lib/init/config-initializer.js delete mode 100644 eslint/lib/init/npm-utils.js delete mode 100644 eslint/lib/init/source-code-utils.js create mode 100644 eslint/lib/rule-tester/flat-rule-tester.js create mode 100644 eslint/lib/rules/no-constant-binary-expression.js create mode 100644 eslint/lib/rules/prefer-object-has-own.js create mode 100644 eslint/tests/_utils/test-lazy-loading-rules.js delete mode 100644 eslint/tests/fixtures/autoconfig/source-with-comments.js delete mode 100644 eslint/tests/fixtures/autoconfig/source.js create mode 100644 eslint/tests/fixtures/bin/eslint.config.js create mode 100644 eslint/tests/fixtures/cli-engine/deprecated-rule-config/eslint.config.js create mode 100644 eslint/tests/fixtures/config-hierarchy/broken/add-conf.js create mode 100644 eslint/tests/fixtures/config-hierarchy/broken/override-conf.js delete mode 100644 eslint/tests/fixtures/config-initializer/lib/doubleQuotes.js delete mode 100644 eslint/tests/fixtures/config-initializer/lib/no-semi.js delete mode 100644 eslint/tests/fixtures/config-initializer/new-es-features/new-es-features.js delete mode 100644 eslint/tests/fixtures/config-initializer/parse-error/parse-error.js delete mode 100644 eslint/tests/fixtures/config-initializer/singleQuotes.js delete mode 100644 eslint/tests/fixtures/config-initializer/tests/console-log.js delete mode 100644 eslint/tests/fixtures/config-initializer/tests/doubleQuotes.js create mode 100644 eslint/tests/fixtures/configurations/env-browser.js create mode 100644 eslint/tests/fixtures/configurations/env-node.js create mode 100644 eslint/tests/fixtures/configurations/es6.js create mode 100644 eslint/tests/fixtures/configurations/plugins-with-prefix.js create mode 100644 eslint/tests/fixtures/configurations/processors.js create mode 100644 eslint/tests/fixtures/configurations/quotes-error.js create mode 100644 eslint/tests/fixtures/configurations/semi-error.js create mode 100644 eslint/tests/fixtures/eslint.config.js create mode 100644 eslint/tests/fixtures/ignored-paths/.eslintignoreForNegationTest create mode 100644 eslint/tests/fixtures/ignored-paths/.eslintignoreWithEscapedBrackets create mode 100644 eslint/tests/fixtures/ignored-paths/brackets/[index.js create mode 100644 eslint/tests/fixtures/ignored-paths/brackets/[index].js create mode 100644 eslint/tests/fixtures/ignored-paths/brackets/index.js create mode 100644 eslint/tests/fixtures/ignored-paths/brackets/index].js create mode 100644 eslint/tests/fixtures/lazy-loading-rules/.eslintrc.js create mode 100644 eslint/tests/fixtures/lazy-loading-rules/foo.js create mode 100644 eslint/tests/fixtures/max-warnings/eslint.config.js rename eslint/tests/fixtures/parsers/arrow-parens/{identifer-type.js => identifier-type.js} (100%) create mode 100644 eslint/tests/fixtures/parsers/function-paren-newline/arrow-function-return-type.js create mode 100644 eslint/tests/fixtures/rules/eslint.js create mode 100644 eslint/tests/fixtures/rules/missing-rule.js create mode 100644 eslint/tests/fixtures/shallow-glob/eslint.config.js create mode 100644 eslint/tests/fixtures/shallow-glob/subdir/broken.js create mode 100644 eslint/tests/fixtures/shallow-glob/subdir/subsubdir/broken.js create mode 100644 eslint/tests/fixtures/shallow-glob/subdir/subsubdir/plain.jsx create mode 100644 eslint/tests/fixtures/shallow-glob/target-dir/passing.js create mode 100644 eslint/tests/lib/config/flat-config-helpers.js create mode 100644 eslint/tests/lib/eslint/eslint.config.js create mode 100644 eslint/tests/lib/eslint/flat-eslint.js delete mode 100644 eslint/tests/lib/init/autoconfig.js delete mode 100644 eslint/tests/lib/init/config-file.js delete mode 100644 eslint/tests/lib/init/config-initializer.js delete mode 100644 eslint/tests/lib/init/npm-utils.js delete mode 100644 eslint/tests/lib/init/source-code-utils.js create mode 100644 eslint/tests/lib/rule-tester/flat-rule-tester.js create mode 100644 eslint/tests/lib/rules/no-constant-binary-expression.js create mode 100644 eslint/tests/lib/rules/prefer-object-has-own.js rename eslint/tests/{lib/init => tools}/config-rule.js (98%) rename eslint/{lib/init => tools}/config-rule.js (99%) create mode 100644 eslint/tools/fetch-docs-links.js diff --git a/Makefile b/Makefile index ec492fa..66b36f6 100644 --- a/Makefile +++ b/Makefile @@ -10,7 +10,7 @@ DSC=${PACKAGE}_${DEB_VERSION_UPSTREAM_REVISION}.dsc SRCDIR=src UPSTREAM=eslint -UPSTREAMTAG=v8.4.0 +UPSTREAMTAG=v8.23.1 BUILDSRC=${UPSTREAM}-${UPSTREAMTAG} all: ${DEB} diff --git a/eslint/.nycrc b/eslint/.c8rc similarity index 100% rename from eslint/.nycrc rename to eslint/.c8rc diff --git a/eslint/.eslintignore b/eslint/.eslintignore index b8414c9..905f2a3 100644 --- a/eslint/.eslintignore +++ b/eslint/.eslintignore @@ -1,6 +1,7 @@ /build/** /coverage/** /docs/** +!/docs/.eleventy.js /jsdoc/** /templates/** /tests/bench/** diff --git a/eslint/.eslintrc.js b/eslint/.eslintrc.js index f97d93a..1a39568 100644 --- a/eslint/.eslintrc.js +++ b/eslint/.eslintrc.js @@ -1,10 +1,26 @@ +/* + * IMPORTANT! + * + * Any changes made to this file must also be made to eslint.config.js. + * + * Internally, ESLint is using the eslint.config.js file to lint itself. + * This file is needed too, because: + * + * 1. There are tests that expect .eslintrc.js to be present to actually run. + * 2. ESLint VS Code extension expects eslintrc config files to be + * present to work correctly. + * + * Once we no longer need to support both eslintrc and flat config, we will + * remove this file. + */ + + "use strict"; const path = require("path"); const INTERNAL_FILES = { CLI_ENGINE_PATTERN: "lib/cli-engine/**/*", - INIT_PATTERN: "lib/init/**/*", LINTER_PATTERN: "lib/linter/**/*", RULE_TESTER_PATTERN: "lib/rule-tester/**/*", RULES_PATTERN: "lib/rules/**/*", @@ -47,8 +63,7 @@ module.exports = { "internal-rules" ], extends: [ - "eslint", - "plugin:eslint-plugin/recommended" + "eslint" ], parserOptions: { ecmaVersion: 2021 @@ -64,21 +79,29 @@ module.exports = { } }, rules: { - "eslint-plugin/prefer-message-ids": "error", - "eslint-plugin/prefer-output-null": "error", - "eslint-plugin/prefer-placeholders": "error", - "eslint-plugin/prefer-replace-text": "error", - "eslint-plugin/report-message-format": ["error", "[^a-z].*\\.$"], - "eslint-plugin/require-meta-docs-description": "error", - "eslint-plugin/test-case-property-ordering": "error", - "eslint-plugin/test-case-shorthand-strings": "error", "internal-rules/multiline-comment-style": "error" }, overrides: [ + { + files: ["tools/*.js"], + rules: { + "no-console": "off" + } + }, { files: ["lib/rules/*", "tools/internal-rules/*"], excludedFiles: ["index.js"], + extends: [ + "plugin:eslint-plugin/rules-recommended" + ], rules: { + "eslint-plugin/no-missing-message-ids": "error", + "eslint-plugin/no-unused-message-ids": "error", + "eslint-plugin/prefer-message-ids": "error", + "eslint-plugin/prefer-placeholders": "error", + "eslint-plugin/prefer-replace-text": "error", + "eslint-plugin/report-message-format": ["error", "[^a-z].*\\.$"], + "eslint-plugin/require-meta-docs-description": ["error", { pattern: "^(Enforce|Require|Disallow)" }], "internal-rules/no-invalid-meta": "error" } }, @@ -89,6 +112,17 @@ module.exports = { "eslint-plugin/require-meta-docs-url": ["error", { pattern: "https://eslint.org/docs/rules/{{name}}" }] } }, + { + files: ["tests/lib/rules/*", "tests/tools/internal-rules/*"], + extends: [ + "plugin:eslint-plugin/tests-recommended" + ], + rules: { + "eslint-plugin/prefer-output-null": "error", + "eslint-plugin/test-case-property-ordering": "error", + "eslint-plugin/test-case-shorthand-strings": "error" + } + }, { files: ["tests/**/*"], env: { mocha: true }, @@ -105,7 +139,7 @@ module.exports = { files: ["lib/*"], excludedFiles: ["lib/unsupported-api.js"], rules: { - "node/no-restricted-require": ["error", [ + "n/no-restricted-require": ["error", [ ...createInternalFilesPatterns() ]] } @@ -113,29 +147,18 @@ module.exports = { { files: [INTERNAL_FILES.CLI_ENGINE_PATTERN], rules: { - "node/no-restricted-require": ["error", [ - ...createInternalFilesPatterns(INTERNAL_FILES.CLI_ENGINE_PATTERN), - resolveAbsolutePath("lib/init/index.js") - ]] - } - }, - { - files: [INTERNAL_FILES.INIT_PATTERN], - rules: { - "node/no-restricted-require": ["error", [ - ...createInternalFilesPatterns(INTERNAL_FILES.INIT_PATTERN), - resolveAbsolutePath("lib/rule-tester/index.js") + "n/no-restricted-require": ["error", [ + ...createInternalFilesPatterns(INTERNAL_FILES.CLI_ENGINE_PATTERN) ]] } }, { files: [INTERNAL_FILES.LINTER_PATTERN], rules: { - "node/no-restricted-require": ["error", [ + "n/no-restricted-require": ["error", [ ...createInternalFilesPatterns(INTERNAL_FILES.LINTER_PATTERN), "fs", resolveAbsolutePath("lib/cli-engine/index.js"), - resolveAbsolutePath("lib/init/index.js"), resolveAbsolutePath("lib/rule-tester/index.js") ]] } @@ -143,11 +166,10 @@ module.exports = { { files: [INTERNAL_FILES.RULES_PATTERN], rules: { - "node/no-restricted-require": ["error", [ + "n/no-restricted-require": ["error", [ ...createInternalFilesPatterns(INTERNAL_FILES.RULES_PATTERN), "fs", resolveAbsolutePath("lib/cli-engine/index.js"), - resolveAbsolutePath("lib/init/index.js"), resolveAbsolutePath("lib/linter/index.js"), resolveAbsolutePath("lib/rule-tester/index.js"), resolveAbsolutePath("lib/source-code/index.js") @@ -157,10 +179,9 @@ module.exports = { { files: ["lib/shared/**/*"], rules: { - "node/no-restricted-require": ["error", [ + "n/no-restricted-require": ["error", [ ...createInternalFilesPatterns(), resolveAbsolutePath("lib/cli-engine/index.js"), - resolveAbsolutePath("lib/init/index.js"), resolveAbsolutePath("lib/linter/index.js"), resolveAbsolutePath("lib/rule-tester/index.js"), resolveAbsolutePath("lib/source-code/index.js") @@ -170,11 +191,10 @@ module.exports = { { files: [INTERNAL_FILES.SOURCE_CODE_PATTERN], rules: { - "node/no-restricted-require": ["error", [ + "n/no-restricted-require": ["error", [ ...createInternalFilesPatterns(INTERNAL_FILES.SOURCE_CODE_PATTERN), "fs", resolveAbsolutePath("lib/cli-engine/index.js"), - resolveAbsolutePath("lib/init/index.js"), resolveAbsolutePath("lib/linter/index.js"), resolveAbsolutePath("lib/rule-tester/index.js"), resolveAbsolutePath("lib/rules/index.js") @@ -184,10 +204,9 @@ module.exports = { { files: [INTERNAL_FILES.RULE_TESTER_PATTERN], rules: { - "node/no-restricted-require": ["error", [ + "n/no-restricted-require": ["error", [ ...createInternalFilesPatterns(INTERNAL_FILES.RULE_TESTER_PATTERN), - resolveAbsolutePath("lib/cli-engine/index.js"), - resolveAbsolutePath("lib/init/index.js") + resolveAbsolutePath("lib/cli-engine/index.js") ]] } } diff --git a/eslint/.github/ISSUE_TEMPLATE.md b/eslint/.github/ISSUE_TEMPLATE.md deleted file mode 100644 index 3af794a..0000000 --- a/eslint/.github/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,53 +0,0 @@ - - -**Tell us about your environment** - - - -* **ESLint Version:** -* **Node Version:** -* **npm Version:** - -**What parser (default, `@babel/eslint-parser`, `@typescript-eslint/parser`, etc.) are you using?** - -**Please show your full configuration:** - -
-Configuration - - -```js - -``` - -
- -**What did you do? Please include the actual source code causing the issue, as well as the command that you used to run ESLint.** - - -```js - -``` - - -```bash - -``` - -**What did you expect to happen?** - -**What actually happened? Please include the actual, raw output from ESLint.** diff --git a/eslint/.github/ISSUE_TEMPLATE/NEW_SYNTAX.md b/eslint/.github/ISSUE_TEMPLATE/NEW_SYNTAX.md deleted file mode 100644 index e03cb6e..0000000 --- a/eslint/.github/ISSUE_TEMPLATE/NEW_SYNTAX.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -name: "\U0001F4DD Request new syntax support" -about: Request new stage 4 syntax be supported. -title: '' -labels: - - core - - new syntax -assignees: '' - ---- - - - -**What is the name of the syntax to implement?** - - - -**Please provide the TC39 URL for the syntax proposal:** - - - -**Please provide some example code for the new syntax:** - -```js -// example code here -``` - -## Implementation Checklist - -Please check off all items that have already been completed. Be sure to paste the pull request URLs next to each item so we can verify the work as done. - -- [ ] Ecma262 update: -- [ ] ESTree update: -- [ ] Acorn update: -- [ ] `eslint-visitor-keys` update: -- [ ] `espree` update: -- [ ] `eslint-scope` update: -- [ ] `eslint` update: - -**Are you willing to submit a pull request to implement this syntax?** diff --git a/eslint/.github/ISSUE_TEMPLATE/bug-report.yml b/eslint/.github/ISSUE_TEMPLATE/bug-report.yml index 8c477f4..18c1353 100644 --- a/eslint/.github/ISSUE_TEMPLATE/bug-report.yml +++ b/eslint/.github/ISSUE_TEMPLATE/bug-report.yml @@ -39,7 +39,7 @@ body: attributes: label: What did you do? description: | - Please include a *minimal* reproduction case with source code, configuration file, any other information about how you're using ESLint. You can use Markdown in this field. + Please include a *minimal* reproduction case. If possible, include a link to a reproduction of the problem in the [ESLint demo](https://eslint.org/demo). Otherwise, include source code, configuration file(s), and any other information about how you're using ESLint. You can use Markdown in this field. value: |
Configuration diff --git a/eslint/.github/ISSUE_TEMPLATE/new-syntax.yml b/eslint/.github/ISSUE_TEMPLATE/new-syntax.yml new file mode 100644 index 0000000..467ff0f --- /dev/null +++ b/eslint/.github/ISSUE_TEMPLATE/new-syntax.yml @@ -0,0 +1,60 @@ +name: "\U0001F4DD Request for new syntax support" +description: "Request new stage 4 syntax be supported." +labels: + - core + - new syntax +body: +- type: markdown + attributes: + value: By opening an issue, you agree to abide by the [Open JS Foundation Code of Conduct](https://eslint.org/conduct). +- type: input + attributes: + label: Syntax name + description: What is the name of the syntax to implement? + placeholder: e.g. "class fields" + validations: + required: true +- type: textarea + attributes: + label: Syntax proposal URL + description: Please provide the TC39 URL for the syntax proposal. + placeholder: e.g. https://github.com/tc39/proposal-top-level-await + validations: + required: true +- type: textarea + attributes: + label: Example code + description: Please provide some example code for the new syntax. + render: js + validations: + required: true +- type: checkboxes + attributes: + label: Implementation Checklist + description: | + Please check off all items that have already been completed. Be sure to paste the pull request URLs next to each item so we can verify the work as done. + options: + - label: "Ecma262 update: " + required: false + - label: "ESTree update: " + required: false + - label: "Acorn update: " + required: false + - label: "`eslint-visitor-keys` update: " + required: false + - label: "`espree` update: " + required: false + - label: "`eslint-scope` update: " + required: false + - label: "`eslint` update: " + required: false +- type: checkboxes + attributes: + label: Participation + options: + - label: I am willing to submit a pull request for this change. + required: false +- type: textarea + attributes: + label: Additional comments + description: Is there anything else that's important for the team to know? diff --git a/eslint/.github/PULL_REQUEST_TEMPLATE.md b/eslint/.github/PULL_REQUEST_TEMPLATE.md index e2d7566..8c4bf8e 100644 --- a/eslint/.github/PULL_REQUEST_TEMPLATE.md +++ b/eslint/.github/PULL_REQUEST_TEMPLATE.md @@ -1,7 +1,7 @@ #### Prerequisites checklist @@ -42,5 +42,6 @@ #### What changes did you make? (Give an overview) - #### Is there anything you'd like reviewers to focus on? + + diff --git a/eslint/.github/dependabot.yml b/eslint/.github/dependabot.yml new file mode 100644 index 0000000..5ace460 --- /dev/null +++ b/eslint/.github/dependabot.yml @@ -0,0 +1,6 @@ +version: 2 +updates: + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" diff --git a/eslint/.github/workflows/ci.yml b/eslint/.github/workflows/ci.yml index 1087ab4..9401ec5 100644 --- a/eslint/.github/workflows/ci.yml +++ b/eslint/.github/workflows/ci.yml @@ -1,17 +1,20 @@ name: CI on: push: - branches: [master, main] + branches: [main] pull_request: - branches: [master, main] + branches: [main] + +permissions: + contents: read jobs: verify_files: name: Verify Files runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v2 + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 with: node-version: '16.x' - name: Install Packages @@ -22,22 +25,27 @@ jobs: run: node Makefile checkRuleFiles - name: Check Licenses run: node Makefile checkLicenses + - name: Install Docs Packages + working-directory: docs + run: npm install + - name: Lint Docs JS Files + run: node Makefile lintDocsJS test_on_node: name: Test strategy: matrix: os: [ubuntu-latest] - node: [17.x, 16.x, 14.x, 12.x, "12.22.0"] + node: [18.x, 17.x, 16.x, 14.x, 12.x, "12.22.0"] include: - os: windows-latest - node: "12.x" + node: "16.x" - os: macOS-latest - node: "12.x" + node: "16.x" runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v2 + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 with: node-version: ${{ matrix.node }} - name: Install Packages @@ -51,10 +59,10 @@ jobs: name: Browser Test runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v2 + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 with: - node-version: '12' + node-version: '16' - name: Install Packages run: npm install - name: Test diff --git a/eslint/.github/workflows/codeql-analysis.yml b/eslint/.github/workflows/codeql-analysis.yml index ef362a4..e2995e6 100644 --- a/eslint/.github/workflows/codeql-analysis.yml +++ b/eslint/.github/workflows/codeql-analysis.yml @@ -13,10 +13,10 @@ name: "CodeQL" on: push: - branches: [master, main] + branches: [main] pull_request: # The branches below must be a subset of the branches above - branches: [master, main] + branches: [main] schedule: - cron: '28 17 * * 5' @@ -39,11 +39,11 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v2 + uses: actions/checkout@v3 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@v1 + uses: github/codeql-action/init@v2 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -54,10 +54,10 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@v1 + uses: github/codeql-action/autobuild@v2 # ℹ️ Command-line programs to run using the OS shell. - # 📚 https://git.io/JvXDl + # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines # and modify them (or add more) to build your code if your project @@ -68,4 +68,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v1 + uses: github/codeql-action/analyze@v2 diff --git a/eslint/.github/workflows/stale.yml b/eslint/.github/workflows/stale.yml index 4574022..8680ebd 100644 --- a/eslint/.github/workflows/stale.yml +++ b/eslint/.github/workflows/stale.yml @@ -18,7 +18,7 @@ jobs: pull-requests: write steps: - - uses: actions/stale@v3 + - uses: actions/stale@v5 with: repo-token: ${{ secrets.GITHUB_TOKEN }} days-before-stale: 60 diff --git a/eslint/.markdownlint.yml b/eslint/.markdownlint.yml index c37cf77..79c1f0f 100644 --- a/eslint/.markdownlint.yml +++ b/eslint/.markdownlint.yml @@ -2,10 +2,11 @@ default: true # Exclusions for deliberate/widespread violations MD002: false # First header should be a h1 header +MD004: # Unordered list style + style: asterisk MD007: # Unordered list indentation indent: 4 MD013: false # Line length -MD014: false # Dollar signs used before commands without showing output MD019: false # Multiple spaces after hash on atx style header MD021: false # Multiple spaces inside hashes on closed atx style header MD024: false # Multiple headers with the same content @@ -14,4 +15,5 @@ MD029: false # Ordered list item prefix MD030: false # Spaces after list markers MD033: false # Allow inline HTML MD041: false # First line in file should be a top level header -MD046: false # Code block style +MD046: # Code block style + style: fenced diff --git a/eslint/CHANGELOG.md b/eslint/CHANGELOG.md index 3b78599..be53ce6 100644 --- a/eslint/CHANGELOG.md +++ b/eslint/CHANGELOG.md @@ -1,3 +1,333 @@ +v8.23.1 - September 12, 2022 + +* [`b719893`](https://github.com/eslint/eslint/commit/b71989388a921886caa4c6cb48729bbf60c46100) fix: Upgrade eslintrc to stop redefining plugins (#16297) (Brandon Mills) +* [`734b54e`](https://github.com/eslint/eslint/commit/734b54eb9c6c4839c0f99ebe18dc5695754aac1d) fix: improve autofix for the `prefer-const` rule (#16292) (Nitin Kumar) +* [`6a923ff`](https://github.com/eslint/eslint/commit/6a923ff9257a4f009cefed049ebb59a4b5acdab5) fix: Ensure that glob patterns are normalized (#16287) (Nicholas C. Zakas) +* [`38e8171`](https://github.com/eslint/eslint/commit/38e8171d9b170f400ac340368d044b2093114e94) perf: migrate rbTree to js-sdsl (#16267) (Zilong Yao) +* [`16cba3f`](https://github.com/eslint/eslint/commit/16cba3f31294a673721864267aa13ea35233326b) docs: fix mobile double tap issue (#16293) (Sam Chen) +* [`c6900f8`](https://github.com/eslint/eslint/commit/c6900f89a89f3de5d3c50c69a1bc62eac6eb76d7) fix: Ensure globbing doesn't include subdirectories (#16272) (Nicholas C. Zakas) +* [`e098b5f`](https://github.com/eslint/eslint/commit/e098b5f80472e80c70603306e77e14ea15f1a93b) docs: keyboard control to search results (#16222) (Shanmughapriyan S) +* [`1b5b2a7`](https://github.com/eslint/eslint/commit/1b5b2a7de504f2971a6a488d8a57442e73b56a51) docs: add Consolas font and prioritize resource loading (#16225) (Amaresh S M) +* [`1c388fb`](https://github.com/eslint/eslint/commit/1c388fb37739cc09dbd0b4aa59e9d45674280ad5) chore: switch nyc to c8 (#16263) (唯然) +* [`67db10c`](https://github.com/eslint/eslint/commit/67db10c51dbb871a201eab444f6a73fbc1e4fc75) chore: enable linting `.eleventy.js` again (#16274) (Milos Djermanovic) +* [`1ae8236`](https://github.com/eslint/eslint/commit/1ae8236a2e71c9dead20ba9da60d8cc9e317859a) docs: copy & use main package version in docs on release (#16252) (Jugal Thakkar) +* [`42bfbd7`](https://github.com/eslint/eslint/commit/42bfbd7b7b91106e5f279a05f40c20769e3cd29f) chore: fix `npm run perf` crashes (#16258) (唯然) +* [`279f0af`](https://github.com/eslint/eslint/commit/279f0afc14617c037da482919942beef87f56e45) docs: Improve id-denylist documentation (#16223) (Mert Ciflikli) + +v8.23.0 - August 26, 2022 + +* [`2e004ab`](https://github.com/eslint/eslint/commit/2e004ab990a4a5a4efc44974da005d2161490256) chore: upgrade @eslint/eslintrc@1.3.1 (#16249) (Milos Djermanovic) +* [`d35fbbe`](https://github.com/eslint/eslint/commit/d35fbbef895e8f4ac6eaf1756349230769a02b4d) chore: Upgrade to espree@9.4.0 (#16243) (Milos Djermanovic) +* [`3e5839e`](https://github.com/eslint/eslint/commit/3e5839ecae96aecfbc1ac9526e88e0105e671032) feat: Enable eslint.config.js lookup from CLI (#16235) (Nicholas C. Zakas) +* [`30b1a2d`](https://github.com/eslint/eslint/commit/30b1a2dac9060673101485841c4c7521675bf917) feat: add `allowEmptyCase` option to no-fallthrough rule (#15887) (Amaresh S M) +* [`ed26229`](https://github.com/eslint/eslint/commit/ed26229a19359b356f3a401698488c1707d4c029) test: add no-extra-parens tests with rest properties (#16236) (Milos Djermanovic) +* [`deaf69f`](https://github.com/eslint/eslint/commit/deaf69ffd8f9b97b4b8c29a244a79969ff14c80a) chore: fix off-by-one `min-width: 1023px` media queries (#15974) (Milos Djermanovic) +* [`63dec9f`](https://github.com/eslint/eslint/commit/63dec9fdee793be9bf2939e1bda0717b9cc6dcf8) refactor: simplify `parseListConfig` (#16241) (Milos Djermanovic) +* [`43f03aa`](https://github.com/eslint/eslint/commit/43f03aa96b632039b1d9cad097a70b227bb7d348) feat: no-warning-comments support comments with decoration (#16120) (Lachlan Hunt) +* [`b1918da`](https://github.com/eslint/eslint/commit/b1918da0f6cb8fe690c7377667616ec7cb57111e) docs: package.json conventions (#16206) (Patrick McElhaney) +* [`0e03c33`](https://github.com/eslint/eslint/commit/0e03c333a70bebd00307deead0befa519f983f44) docs: remove word immediately (#16217) (Strek) +* [`c6790db`](https://github.com/eslint/eslint/commit/c6790db6494e64a5261d74c0f3c4dc6139c59435) docs: add anchor link for "migrating from jscs" (#16207) (Percy Ma) +* [`7137344`](https://github.com/eslint/eslint/commit/71373442c42b356f34179dba18f860e1d79a780d) docs: auto-generation edit link (#16213) (Percy Ma) + +v8.22.0 - August 13, 2022 + +* [`2b97607`](https://github.com/eslint/eslint/commit/2b97607675e1d0920a3abedd736e2ae00ed26d52) feat: Implement caching for FlatESLint (#16190) (Nicholas C. Zakas) +* [`fd5d3d3`](https://github.com/eslint/eslint/commit/fd5d3d37c97001fad1d9ae4386f76b3587cceba9) feat: add `methodsIgnorePattern` option to object-shorthand rule (#16185) (Milos Djermanovic) +* [`9f5a752`](https://github.com/eslint/eslint/commit/9f5a75206675f2404ad6733640cf05ab44b02274) docs: optimize image assets (#16170) (Sam Chen) +* [`61b2948`](https://github.com/eslint/eslint/commit/61b2948cb71ec505d2f7e904c7ad77ee1da64db2) docs: add svgo command to pre commit hook (#16178) (Amaresh S M) +* [`784096d`](https://github.com/eslint/eslint/commit/784096d37808e59ce8cc07c3c18018b31a31c3f8) docs: improve search result UI (#16187) (Sam Chen) +* [`d0f4cb4`](https://github.com/eslint/eslint/commit/d0f4cb42e86b4b9c7bdf91e88a4ec0d36074f36b) docs: use shorthand property name in example (#16180) (Kevin Elliott) +* [`10a6e0e`](https://github.com/eslint/eslint/commit/10a6e0e14488e4ae9ab267fb5db2ec0c5bb85d59) chore: remove deploy workflow for playground (#16186) (Milos Djermanovic) + +v8.21.0 - August 1, 2022 + +* [`7b43ea1`](https://github.com/eslint/eslint/commit/7b43ea14a8af5fc3dbac38fa9d5bc71741328c16) feat: Implement FlatESLint (#16149) (Nicholas C. Zakas) +* [`8892511`](https://github.com/eslint/eslint/commit/889251194867b1f394c571a5982249329fa44cfd) chore: Upgrade to Espree 9.3.3 (#16173) (Brandon Mills) +* [`92bf49a`](https://github.com/eslint/eslint/commit/92bf49a4b39dde728fbc6d348e62c7009e21cf7d) feat: improve the key width calculation in `key-spacing` rule (#16154) (Nitin Kumar) +* [`c461542`](https://github.com/eslint/eslint/commit/c4615421cb4825e2ad22e275ec9439756d56299c) feat: add new `allowLineSeparatedGroups` option to the `sort-keys` rule (#16138) (Nitin Kumar) +* [`1cdcbca`](https://github.com/eslint/eslint/commit/1cdcbca8a961a057a9db40df412f249545befe2b) feat: add deprecation warnings for legacy API in `RuleTester` (#16063) (Nitin Kumar) +* [`0396775`](https://github.com/eslint/eslint/commit/03967755270ae28eec651281c50b6990d3983f48) fix: lines-around-comment apply `allowBlockStart` for switch statements (#16153) (Nitin Kumar) +* [`2aadc93`](https://github.com/eslint/eslint/commit/2aadc93272f1ab7f40246c6b18c4056660f2b3a2) docs: add anchors to headings inside docs content (#16134) (Strek) +* [`1233bee`](https://github.com/eslint/eslint/commit/1233beea3938fc4234c8f75917776832226fc3c8) chore: switch to eslint-plugin-node's maintained fork (#16150) (唯然) +* [`97b95c0`](https://github.com/eslint/eslint/commit/97b95c068d5b35fae68ca919257b61430271ac76) chore: upgrade puppeteer v13 (#16151) (唯然) + +v8.20.0 - July 16, 2022 + +* [`bbf8df4`](https://github.com/eslint/eslint/commit/bbf8df41c901d41753ca4f3f0baf021944782597) chore: Mark autogenerated release blog post as draft (#16130) (Nicholas C. Zakas) +* [`845c4f4`](https://github.com/eslint/eslint/commit/845c4f40274ccb3727c624db44c7a23aafa71318) docs: Add website team details (#16115) (Nicholas C. Zakas) +* [`5a0dfdb`](https://github.com/eslint/eslint/commit/5a0dfdb9938ffdcea52047466bac11ea983f4b29) docs: Link to blog post in no-constant-binary-expression (#16112) (Jordan Eldredge) +* [`bc692a9`](https://github.com/eslint/eslint/commit/bc692a9bf5c664c646ce386eff44eb706c231127) docs: remove install command (#16084) (Strek) +* [`30be0ed`](https://github.com/eslint/eslint/commit/30be0ed4d84dd436e6c2e345e264c10b2bd37308) fix: no-warning-comments rule escapes special RegEx characters in terms (#16090) (Lachlan Hunt) +* [`ca83178`](https://github.com/eslint/eslint/commit/ca83178b18cd5d649bd52a20aef8f8b3f48d3085) feat: catch preprocess errors (#16105) (JounQin) +* [`49ca3f0`](https://github.com/eslint/eslint/commit/49ca3f090425e06fdf6e66bcf2415508c46671e1) docs: don't show toc when content not found (#16095) (Amaresh S M) +* [`ba19e3f`](https://github.com/eslint/eslint/commit/ba19e3f80a32ceae82e0ed6c0acf16061d8370da) docs: enhance 404 page UI (#16097) (Amaresh S M) +* [`bfe5e88`](https://github.com/eslint/eslint/commit/bfe5e884098874bb512609bcd94a5e5ed797839d) fix: ignore spacing before `]` and `}` in comma-spacing (#16113) (Milos Djermanovic) +* [`a75d3b4`](https://github.com/eslint/eslint/commit/a75d3b47b84f59c080c0c8301ae859fa64aa0f0f) docs: remove unused meta.docs.category field in working-with-rules page (#16109) (Brandon Scott) +* [`cdc0206`](https://github.com/eslint/eslint/commit/cdc020639022dd931863460273de61f4ed4ce0f8) docs: add formatters page edit link (#16094) (Amaresh S M) +* [`4d1ed22`](https://github.com/eslint/eslint/commit/4d1ed22dede531108c8a7899d513f64f0662c135) docs: preselect default theme (#16098) (Strek) +* [`4b79612`](https://github.com/eslint/eslint/commit/4b79612f0bdf860142401033f32fe9a5b8cd7d03) docs: add missing correct/incorrect containers (#16087) (Milos Djermanovic) +* [`09f6acb`](https://github.com/eslint/eslint/commit/09f6acbf2136e3084a3174607ab29a48d5d519b0) docs: fix UI bug on rules index and details pages (#16082) (Deepshika S) +* [`f5db264`](https://github.com/eslint/eslint/commit/f5db264931fd6259e064b5cf24b4233f5aaa4c7d) docs: remove remaining duplicate rule descriptions (#16093) (Milos Djermanovic) +* [`32a6b2a`](https://github.com/eslint/eslint/commit/32a6b2a5caae8fa3734dfbdb9640bb4963fc5f4f) docs: Add scroll behaviour smooth (#16056) (Amaresh S M) +* [`eee4306`](https://github.com/eslint/eslint/commit/eee43067f635c0ec3b61e416f47849029d12268d) chore: update internal lint dependencies (#16088) (Bryan Mishkin) +* [`9615a42`](https://github.com/eslint/eslint/commit/9615a42c9f065188024423a28b603cb93dad18d4) chore: update formatter examples template to avoid markdown lint error (#16085) (Milos Djermanovic) +* [`62541ed`](https://github.com/eslint/eslint/commit/62541edf5843ff8e01f14f870701d5df0b2c1cb5) chore: fix markdown linting error (#16083) (唯然) + +v8.19.0 - July 1, 2022 + +* [`7023628`](https://github.com/eslint/eslint/commit/7023628eb3af1bcc0151afab2bf617217fae51b1) feat: add importNames support for patterns in no-restricted-imports (#16059) (Brandon Scott) +* [`472c368`](https://github.com/eslint/eslint/commit/472c3681364833f697d726abc3c33fbe2663eeb7) feat: fix handling of blockless `with` statements in indent rule (#16068) (Milos Djermanovic) +* [`fc81848`](https://github.com/eslint/eslint/commit/fc81848238ee0f6ff93615875ea4b8e95dc09249) fix: throw helpful exception when rule has wrong return type (#16075) (Bryan Mishkin) +* [`e884933`](https://github.com/eslint/eslint/commit/e88493395b3be2b08e14e9b84d20d2733f78582c) chore: use `github-slugger` for markdown anchors (#16067) (Strek) +* [`02e9cb0`](https://github.com/eslint/eslint/commit/02e9cb01e7663af3a3fd16725afc7d71e73b9eed) chore: revamp carbon ad style (#16078) (Amaresh S M) +* [`3ae0574`](https://github.com/eslint/eslint/commit/3ae0574fc78c4a2b406625e4792cb2859cb9bcb1) docs: Remove duplicate rule descriptions (#16052) (Amaresh S M) +* [`b6aee95`](https://github.com/eslint/eslint/commit/b6aee9591ecc2e2f5738ab8bef20faac1e05b5c3) chore: remove unwanted comments from rules markdown (#16054) (Strek) +* [`f50cf43`](https://github.com/eslint/eslint/commit/f50cf436aaa5dff1273f4753dd3fc6782f95a045) docs: Add base href to each page to fix relative URLs (#16046) (Nicholas C. Zakas) +* [`6840940`](https://github.com/eslint/eslint/commit/6840940a766d671831d5cee0e3c0e2f4e642632a) chore: correctly use .markdownlintignore in Makefile (#16060) (Bryan Mishkin) +* [`ae4b449`](https://github.com/eslint/eslint/commit/ae4b449719d496fd611903d596341ec4c1d81c16) docs: make logo link clickable on small width screens (#16058) (Milos Djermanovic) +* [`280f898`](https://github.com/eslint/eslint/commit/280f898bff9b809327e4c94cea3632ba95af4485) docs: use only fenced code blocks (#16044) (Milos Djermanovic) +* [`f5d63b9`](https://github.com/eslint/eslint/commit/f5d63b9e15d9f325ef4953b683cb67133b05e9ea) docs: add listener only if element exists (#16045) (Amaresh S M) +* [`8b639cc`](https://github.com/eslint/eslint/commit/8b639ccb2fb0f0a7d7aaee1f1fc2881a237de95d) docs: add missing migrating-to-8.0.0 in the user guide (#16048) (唯然) +* [`b8e68c1`](https://github.com/eslint/eslint/commit/b8e68c1f7e2b8fa5c108216f74dcd3100aa33b0f) docs: Update release process (#16036) (Nicholas C. Zakas) +* [`48904fb`](https://github.com/eslint/eslint/commit/48904fb00fc5001e534034e2e513ca99f3ada35e) chore: add missing images (#16017) (Amaresh S M) +* [`910f741`](https://github.com/eslint/eslint/commit/910f741885a18b7744d4125e98e554312bc873eb) chore: add architecture to nav (#16039) (Strek) +* [`9bb24c1`](https://github.com/eslint/eslint/commit/9bb24c1deb7ab6743080520d11aefe9c6b8b8f2d) chore: add correct incorrect in all rules doc (#16021) (Deepshika S) +* [`5a96af8`](https://github.com/eslint/eslint/commit/5a96af853dcbe29c9f125a63528f3fec9fc0aae8) chore: prepare versions data file (#16035) (Nicholas C. Zakas) +* [`50afe6f`](https://github.com/eslint/eslint/commit/50afe6fe8c92a1d5d52415e149d52e1e129c3cc7) chore: Included githubactions in the dependabot config (#15985) (Naveen) +* [`6d0cb11`](https://github.com/eslint/eslint/commit/6d0cb11c6d134896d8920c9bf3cc3e492f0eb8e2) docs: remove table of contents from markdown text (#15999) (Nitin Kumar) +* [`473411e`](https://github.com/eslint/eslint/commit/473411e61d46c2bbac70e9a66d434d477851d98a) chore: add deploy workflow for playground (#16034) (Milos Djermanovic) +* [`a30b66c`](https://github.com/eslint/eslint/commit/a30b66c030bf45864784c0550276267e5a146697) chore: fix print style (#16025) (Amaresh S M) +* [`f4dad59`](https://github.com/eslint/eslint/commit/f4dad59e5c7e966291d6f8c1456a465ae5629061) chore: add noindex meta tag (#16016) (Milos Djermanovic) +* [`db387a8`](https://github.com/eslint/eslint/commit/db387a87b23c398ed691ba35bdf3b6aa7dcfe750) chore: fix sitemap (#16026) (Milos Djermanovic) +* [`285fbc5`](https://github.com/eslint/eslint/commit/285fbc5e6a92c50e1195f252675b599ecd929b9d) chore: remove TOC from printable (#16020) (Strek) +* [`8e84c21`](https://github.com/eslint/eslint/commit/8e84c2148cc2d25a7076e73233ae41bc1a000a53) chore: remove ligatures from fonts (#16019) (Strek) + +v8.18.0 - June 17, 2022 + +* [`f6e2e63`](https://github.com/eslint/eslint/commit/f6e2e632fa3710cfa467b15350b08dea6e0e3dfc) chore: fix 'replaced by' rule list (#16007) (Milos Djermanovic) +* [`ed49f15`](https://github.com/eslint/eslint/commit/ed49f15fad96060501927ca27ebda1a4c736ed04) build: remove unwanted parallel and image-min for dev server (#15986) (Strek) +* [`4871047`](https://github.com/eslint/eslint/commit/4871047dbd0c5ef5e4089425a85ac85dcd9cf263) docs: Update analytics, canonical URL, ads (#15996) (Nicholas C. Zakas) +* [`d94dc84`](https://github.com/eslint/eslint/commit/d94dc84ae76a36b4ee9268c40d8536d2f5b1c63c) chore: remove unused deprecation warnings (#15994) (Francesco Trotta) +* [`a6273b8`](https://github.com/eslint/eslint/commit/a6273b83b103c463937936ef2404575758a7baa4) feat: account for rule creation time in performance reports (#15982) (Nitin Kumar) +* [`cddad14`](https://github.com/eslint/eslint/commit/cddad1495fbc1750c26330f7aadc6647e2eebac3) docs: Add correct/incorrect containers (#15998) (Nicholas C. Zakas) +* [`b04bc6f`](https://github.com/eslint/eslint/commit/b04bc6f1d558d9ad5eb57383a779fec5a170b3d3) docs: Add rules meta info to rule pages (#15902) (Nicholas C. Zakas) +* [`f364d47`](https://github.com/eslint/eslint/commit/f364d47013d146cdea42b27a7b24d105223f5ffe) fix: Make no-unused-vars treat for..of loops same as for..in loops (#15868) (Alex Bass) +* [`1324f10`](https://github.com/eslint/eslint/commit/1324f10ac58d3685fdb656a4fc9d1e5c9d035e42) docs: unify the wording referring to optional exception (#15893) (Abdelrahman Elkady) +* [`cdcf11e`](https://github.com/eslint/eslint/commit/cdcf11e457a2455bd8875d78651fec55dd148139) chore: fix versions link (#15995) (Milos Djermanovic) +* [`d2a8715`](https://github.com/eslint/eslint/commit/d2a871543a12143fa0ecea13d7508021fd019031) chore: add trailing slash to `pathPrefix` (#15993) (Milos Djermanovic) +* [`58a1bf0`](https://github.com/eslint/eslint/commit/58a1bf0de33adb1d54c8051090f01984daa08c86) chore: tweak URL rewriting for local previews (#15992) (Milos Djermanovic) +* [`ad54d02`](https://github.com/eslint/eslint/commit/ad54d0246797cdd849948e7a5d31571c498af7aa) docs: add missing trailing slash to some internal links (#15991) (Milos Djermanovic) +* [`80404d2`](https://github.com/eslint/eslint/commit/80404d28f040df49706ba2c1e954aee945711aa9) chore: remove docs deploy workflow (#15984) (Nicholas C. Zakas) +* [`df7768e`](https://github.com/eslint/eslint/commit/df7768e16a5ab55da97749bb89ff19f98ce0cc6c) docs: Switch to version-relative URLs (#15978) (Nicholas C. Zakas) +* [`71bc750`](https://github.com/eslint/eslint/commit/71bc75012b1377d3c7e57deea0ad06f99c4c65bf) chore: Set permissions for GitHub actions (#15971) (Naveen) +* [`90ff647`](https://github.com/eslint/eslint/commit/90ff64742ede6ef29018cb967fc4f20d7b85b592) chore: avoid generating subdirectories for each page on new docs site (#15967) (Milos Djermanovic) +* [`21d6479`](https://github.com/eslint/eslint/commit/21d647904dc30f9484b22acdd9243a6d0ecfba38) docs: change some absolute links to relative (#15970) (Milos Djermanovic) +* [`f31216a`](https://github.com/eslint/eslint/commit/f31216a90a6204ed1fd56547772376a10f5d3ebb) docs: Update README team and sponsors (ESLint Jenkins) + +v8.17.0 - June 3, 2022 + +* [`b915018`](https://github.com/eslint/eslint/commit/b9150186bcc0f2732a69ab0ebd83a9b2fb2e6552) docs: Update website UI to latest (#15944) (Nicholas C. Zakas) +* [`55319e1`](https://github.com/eslint/eslint/commit/55319e133f0862a008db3557d7350f154f2c784f) feat: fix indent bug with semicolon-first style (#15951) (Milos Djermanovic) +* [`f6d7920`](https://github.com/eslint/eslint/commit/f6d79209821241c8e03c183b5844a024da0efe8a) feat: add `allowNamedExports` option to no-use-before-define (#15953) (Milos Djermanovic) +* [`f0bb609`](https://github.com/eslint/eslint/commit/f0bb6099668f54ae6f444126b90dbb1146248146) docs: Update Exponentiation operator MDN link (#15960) (Pranjal Jain) +* [`da694b9`](https://github.com/eslint/eslint/commit/da694b9d7cb0247541bcabbf943d1289e0e30167) chore: avoid theme flashes (#15927) (Strek) +* [`baa0153`](https://github.com/eslint/eslint/commit/baa01530469ec233fb60380a0960c1550f9d9a45) docs: Use correct past tense "left" instead of "leaved" (#15950) (Frederik Braun) +* [`f836743`](https://github.com/eslint/eslint/commit/f836743e95cb8ad3bdd4e88687dbe2f16bfade62) chore: Use build hook for docs deploy (#15945) (Nicholas C. Zakas) +* [`ce035e5`](https://github.com/eslint/eslint/commit/ce035e5fac632ba8d4f1860f92465f22d6b44d42) test: cleanup typos (#15937) (Nick Schonning) +* [`1351a9b`](https://github.com/eslint/eslint/commit/1351a9b875aa32a8961a68457dde03ede9ef7c78) docs: Add Resources section to rule pages (#15901) (Nicholas C. Zakas) +* [`68cf0fb`](https://github.com/eslint/eslint/commit/68cf0fb7f645da5d992a5e749fc6c1311d30e75a) docs: cleanup typos (#15936) (Nick Schonning) +* [`54c0953`](https://github.com/eslint/eslint/commit/54c09530c778eb4076d89777165d59db96c9acb5) fix: cleanup typos (#15939) (Nick Schonning) +* [`845a7af`](https://github.com/eslint/eslint/commit/845a7af90ce03b383c8f09654ac049fc161dbb9f) fix: typo ocatal -> octal (#15940) (Nick Schonning) +* [`10249ad`](https://github.com/eslint/eslint/commit/10249ad1a961463b6b347be71c074951ab8e2652) chore: use addEventListener instead of addListener (#15923) (Amaresh S M) +* [`5f5c1fb`](https://github.com/eslint/eslint/commit/5f5c1fb1083573ea511d0dae7913651db0dca772) chore: lint eleventy config file (#15904) (Milos Djermanovic) +* [`8513d37`](https://github.com/eslint/eslint/commit/8513d37c725509c9e9ec1dbbc431f20d32632cf3) chore: update Rule typedefs (#15915) (Milos Djermanovic) +* [`13b62ae`](https://github.com/eslint/eslint/commit/13b62aeb710a68e5d838a4d3847c487af1ba9520) docs: use-dart-sass instead of node-sass (#15912) (Deepshika S) +* [`c81c5d6`](https://github.com/eslint/eslint/commit/c81c5d6ef1ba5808cca95ab965a162802af9b7cc) docs: add social media links (#15920) (Deepshika S) +* [`0d6a50b`](https://github.com/eslint/eslint/commit/0d6a50b41f2fe444fd222463adad48473eaf9b7d) docs: fix openjs link (#15917) (Amaresh S M) +* [`54910f5`](https://github.com/eslint/eslint/commit/54910f5a3bf6615f8ac03d33fd26fc1fa6dea21f) docs: display version in mobile view (#15909) (Amaresh S M) +* [`55534f1`](https://github.com/eslint/eslint/commit/55534f1a7040fad94bb5726759fbb9acb60d1c24) test: ensure no-restricted-imports works with NodeJS imports (#15907) (Nick Mazuk) + +v8.16.0 - May 20, 2022 + +* [`1768d0d`](https://github.com/eslint/eslint/commit/1768d0de58e10046ed3e54f0fa52be48ba41f12b) chore: upgrade @eslint/eslintrc@1.3.0 (#15903) (Milos Djermanovic) +* [`050d5f4`](https://github.com/eslint/eslint/commit/050d5f4e0456ae9a9d769f4306bc0d60058b0898) docs: Static further reading links (#15890) (Nicholas C. Zakas) +* [`cab0c22`](https://github.com/eslint/eslint/commit/cab0c2287e12561d869dfcfcd1c4e14c9d6d70d5) feat: add Unicode flag suggestion in no-misleading-character-class (#15867) (Milos Djermanovic) +* [`c686e4c`](https://github.com/eslint/eslint/commit/c686e4c4a04525118f5585fd76bdba59dddf3a97) chore: Add deploy workflow for docs site (#15894) (Nicholas C. Zakas) +* [`38ae956`](https://github.com/eslint/eslint/commit/38ae9564a41e1d38adad55976565d85c5c981e1d) feat: check Unicode code point escapes in no-control-regex (#15862) (Milos Djermanovic) +* [`36287c0`](https://github.com/eslint/eslint/commit/36287c00d56596fbb2672cfe3f9b9dd24b2926da) docs: fix absolute paths in related rules shortcode to work from /docs (#15892) (Milos Djermanovic) +* [`90b6990`](https://github.com/eslint/eslint/commit/90b69901efd265fd11425540928793f1387095cc) docs: fix absolute links in rule macro to work from /docs (#15891) (Milos Djermanovic) +* [`f437249`](https://github.com/eslint/eslint/commit/f437249a3bedb47155d33ac753b821ae31b814fa) docs: Adjust docs site path prefix (#15889) (Nicholas C. Zakas) +* [`6e16025`](https://github.com/eslint/eslint/commit/6e16025e8fbffa0e1d0c977cb4b6eae30a502d9b) docs: update 'Related Rules' and 'Further Reading' in remaining rules (#15884) (Milos Djermanovic) +* [`c7894cd`](https://github.com/eslint/eslint/commit/c7894cd433319e09b10a80b260a5398dac0d5dab) chore: enable some rules from eslint-plugin-unicorn internally (#15878) (Bryan Mishkin) +* [`ea65cb5`](https://github.com/eslint/eslint/commit/ea65cb5435162ad29559d175e68f5b6d97e6cdcc) chore: upgrade eslint-plugin-eslint-plugin@^4.2.0 (#15882) (唯然) +* [`cc29c69`](https://github.com/eslint/eslint/commit/cc29c696a08430fcbf202482306b8c3dbccc0257) chore: Upgrade official GitHub actions to latest versions (#15880) (Darius Dzien) +* [`5891c75`](https://github.com/eslint/eslint/commit/5891c7533f500110129fdea7b9b63c8a409da0bd) chore: Refactor rule docs format (#15869) (Nicholas C. Zakas) +* [`ee69cd3`](https://github.com/eslint/eslint/commit/ee69cd30b3551b3adebfd959a44a9a149221946a) feat: Update global variables (#15871) (Sébastien Règne) +* [`1d39f69`](https://github.com/eslint/eslint/commit/1d39f698a22e2995bbfcf90b6dafd196a173092a) docs: remove confusing examples for no-mixed-operators (#15875) (Milos Djermanovic) +* [`3071d76`](https://github.com/eslint/eslint/commit/3071d76772c002bd7b03053be5be54da52c01242) docs: Fix some grammar issues (#15837) (byodian) +* [`3f09aab`](https://github.com/eslint/eslint/commit/3f09aab709980ca974b721de474be2dd183409a2) fix: function-paren-newline crash on "new new Foo();" (#15850) (coderaiser) + +v8.15.0 - May 6, 2022 + +* [`1ba6a92`](https://github.com/eslint/eslint/commit/1ba6a926eedcfe725900ed95cf029cff02d0355a) chore: upgrade @eslint/eslintrc@1.2.3 (#15847) (Milos Djermanovic) +* [`8bf9440`](https://github.com/eslint/eslint/commit/8bf9440ac47907ffd27aba095428908e7ddeae8a) fix: "use strict" should not trigger strict mode in ES3 (#15846) (Milos Djermanovic) +* [`28116cc`](https://github.com/eslint/eslint/commit/28116ccce4b99da3d5aa9b8994dd3652df7b1cab) docs: update AST node names link in no-restricted-syntax (#15843) (Milos Djermanovic) +* [`8167aa7`](https://github.com/eslint/eslint/commit/8167aa7d43d00f1a0e8400f73c0dd66798fd4c56) chore: bump version of minimatch due to security issue PRISMA-2022-0039 (#15774) (Jan Opravil) +* [`272965f`](https://github.com/eslint/eslint/commit/272965feda8adfbf5bfa0e01b37df27ce70fc9fd) docs: fix h1 heading on formatters page (#15834) (Milos Djermanovic) +* [`a798166`](https://github.com/eslint/eslint/commit/a7981669fffe33deaf4fbe295f660edc8ccad4cd) docs: update example for running individual rule tests (#15833) (Milos Djermanovic) +* [`b8995a4`](https://github.com/eslint/eslint/commit/b8995a40087f3a1e4e87c239951f91ddaac73571) chore: Implement docs site (#15815) (Nicholas C. Zakas) +* [`ab37d3b`](https://github.com/eslint/eslint/commit/ab37d3ba302856007beb833c34b56658a34bbb5d) feat: add `enforceInClassFields` option to no-underscore-dangle (#15818) (Roberto Cestari) +* [`57e732b`](https://github.com/eslint/eslint/commit/57e732be4e349470fad3e3cc44d96bf0746a598b) docs: mark `SourceCode#getJSDocComment` deprecated in working-with-rules (#15829) (Milos Djermanovic) +* [`9a90abf`](https://github.com/eslint/eslint/commit/9a90abf59e31247c03a24ca789cd6157504f63ed) docs: update docs directory in working-with-rules (#15830) (Milos Djermanovic) +* [`810adda`](https://github.com/eslint/eslint/commit/810addac9b958c03d69f5f8f21d47ff7fb4c5db6) docs: add more examples for prefer-object-spread (#15831) (coderaiser) +* [`06b1edb`](https://github.com/eslint/eslint/commit/06b1edb68f251558601bf68d47e6bbde693089c9) docs: clarify no-control-regex rule (#15808) (Milos Djermanovic) +* [`6494e3e`](https://github.com/eslint/eslint/commit/6494e3e8916f0a07226bdd8c8f6b2c5f0884bf6b) chore: update link in `codeql-analysis.yml` (#15817) (Milos Djermanovic) +* [`9ecd42f`](https://github.com/eslint/eslint/commit/9ecd42f36462331a0d697e74323a4d24f0cf02fc) docs: Fixed typo in code comment (#15812) (Addison G) +* [`36503ec`](https://github.com/eslint/eslint/commit/36503ec8b6fca292be8e584792fc2ad056df4d2f) chore: enable no-constant-binary-expression in eslint-config-eslint (#15807) (唯然) +* [`de992b7`](https://github.com/eslint/eslint/commit/de992b7016e3d91092de7748f0375943ad2c77f0) docs: remove links to 2fa document (#15804) (Milos Djermanovic) +* [`5222659`](https://github.com/eslint/eslint/commit/52226593974fc7fcb60f1be73b165863b3d1a7fb) docs: fix 'Related Rules' heading in no-constant-binary-expression (#15799) (Milos Djermanovic) +* [`e70ae81`](https://github.com/eslint/eslint/commit/e70ae8116256e5b69c6eac1ed71c0fa33a8e6d7a) docs: Update README team and sponsors (ESLint Jenkins) + +v8.14.0 - April 22, 2022 + +* [`35fa1dd`](https://github.com/eslint/eslint/commit/35fa1dd8932ef3e55c37ec0e4b73b5d88f187e69) fix: allow project paths to have URL-encoded characters (#15795) (Milos Djermanovic) +* [`735458c`](https://github.com/eslint/eslint/commit/735458cc96d4ecdb4ed97448b63ed4a579890b13) chore: add static frontmatter to no-constant-binary-expression docs (#15798) (Milos Djermanovic) +* [`ab6363d`](https://github.com/eslint/eslint/commit/ab6363dffb9dfd9c6a9abb5292fc712745fe7a64) feat: Add rule no-constant-binary-expression (#15296) (Jordan Eldredge) +* [`db28f2c`](https://github.com/eslint/eslint/commit/db28f2c9ea6b654f615daf2f7e6f1a2034b85062) chore: Add static frontmatter to docs (#15782) (Nicholas C. Zakas) +* [`c2407e8`](https://github.com/eslint/eslint/commit/c2407e81caf2d50325d9aa09bae70d38615ddf2c) build: add node v18 (#15791) (唯然) +* [`413f1d5`](https://github.com/eslint/eslint/commit/413f1d55f0ad05b6fe75bdde6df423253806797d) fix: update `astUtils.isDirectiveComment` with `globals` and `exported` (#15775) (Milos Djermanovic) +* [`3bca59e`](https://github.com/eslint/eslint/commit/3bca59e30de73fb82d4def262ae1df72089df80d) chore: markdownlint autofix on commit (#15783) (Nicholas C. Zakas) + +v8.13.0 - April 8, 2022 + +* [`274acbd`](https://github.com/eslint/eslint/commit/274acbd56537f6b8199da1ac9e7bced74ae81b56) feat: fix no-eval logic for `this` in arrow functions (#15755) (Milos Djermanovic) +* [`bb4c0d5`](https://github.com/eslint/eslint/commit/bb4c0d530a231a8a14ed70ad61c06e284bbaaef0) chore: Refactor docs to work with docs.eslint.org (#15744) (Nicholas C. Zakas) +* [`97b57ae`](https://github.com/eslint/eslint/commit/97b57ae3ebae9150456f5516c64b6d2ba75b4038) fix: invalid operator in operator-assignment messages (#15759) (Milos Djermanovic) +* [`c32482e`](https://github.com/eslint/eslint/commit/c32482e4fd4ad09f3d5fd960dc1fb7c1b4e56f23) docs: Typo in space-infix-ops docs (#15754) (kmin-jeong) +* [`f2c2d35`](https://github.com/eslint/eslint/commit/f2c2d350425268efa4b78ee6e0a2df8860e0efad) docs: disambiguate types `FormatterFunction` and `LoadedFormatter` (#15727) (Francesco Trotta) +* [`d36f12f`](https://github.com/eslint/eslint/commit/d36f12f71b3e4f9e9552f1054d7a75be4dc03671) chore: remove `lib/init` from eslint config (#15748) (Milos Djermanovic) +* [`a59a4e6`](https://github.com/eslint/eslint/commit/a59a4e6e9217b3cc503c0a702b9e3b02b20b980d) chore: replace `trimLeft`/`trimRight` with `trimStart`/`trimEnd` (#15750) (Milos Djermanovic) + +v8.12.0 - March 25, 2022 + +* [`685a67a`](https://github.com/eslint/eslint/commit/685a67a62bdea19ca9ce12008a034b8d31162422) feat: fix logic for top-level `this` in no-invalid-this and no-eval (#15712) (Milos Djermanovic) +* [`18f5e05`](https://github.com/eslint/eslint/commit/18f5e05bce10503186989d81ca484abb185a2c9d) chore: padding-line-between-statements remove useless `additionalItems` (#15706) (Martin Sadovy) + +v8.11.0 - March 11, 2022 + +* [`6814922`](https://github.com/eslint/eslint/commit/68149221637faa8e4f2718773e751126b7ae8ac9) fix: escaping for square brackets in ignore patterns (#15666) (Milos Djermanovic) +* [`c481cec`](https://github.com/eslint/eslint/commit/c481cecacc728618832b4044374e445d332b4381) docs: add fast-eslint-8 to atom integrations (userguide) (#15695) (db developer) +* [`800bd25`](https://github.com/eslint/eslint/commit/800bd258e4484de24323809ebbf13fc72fcbabac) feat: add `destructuredArrayIgnorePattern` option in `no-unused-vars` (#15649) (Nitin Kumar) +* [`8933fe7`](https://github.com/eslint/eslint/commit/8933fe7afcc7cdd99cc0efccc08e8fe3a5e2996f) feat: Catch `undefined` and `Boolean()` in no-constant-condition (#15613) (Jordan Eldredge) +* [`d2255db`](https://github.com/eslint/eslint/commit/d2255db24526de604b4a34e90c870158c4ea277e) docs: Add clarification about `eslint-enable` (#15680) (dosisod) +* [`385c9ad`](https://github.com/eslint/eslint/commit/385c9ad685b24b1821ec4085596b3aad299fb751) chore: rm trailing space in docs (#15689) (唯然) +* [`f90fd9d`](https://github.com/eslint/eslint/commit/f90fd9d779a5b28dfd15ca3f993e6b3cd09e71e8) feat: Add ESLint favicon to the HTML report document (#15671) (Mahdi Hosseinzadeh) +* [`8b9433c`](https://github.com/eslint/eslint/commit/8b9433c90c842d8ec06f633df7fbba6ac6d5036b) docs: add object pattern to first section of computed-property-spacing (#15679) (Milos Djermanovic) +* [`de800c3`](https://github.com/eslint/eslint/commit/de800c3c0b8e3f85921b40eaa97134fef12effa2) docs: link to minimatch docs added. (#15688) (Gaurav Tewari) +* [`57b8a57`](https://github.com/eslint/eslint/commit/57b8a57be75ed2379fe39c93168175090dfe4cdd) feat: `valid-typeof` always ban `undefined` (#15635) (Zzzen) +* [`8f675b1`](https://github.com/eslint/eslint/commit/8f675b1f7f6c0591abe36c20410d226bd9e1faa6) docs: sort-imports add single named import example (#15675) (Arye Eidelman) +* [`c178ce7`](https://github.com/eslint/eslint/commit/c178ce7044b5c19db2f4aabfdbe58003db5062fd) fix: extend the autofix range in comma-dangle to ensure the last element (#15669) (Milos Djermanovic) + +v8.10.0 - February 25, 2022 + +* [`cdc5802`](https://github.com/eslint/eslint/commit/cdc58025d9a8b522f516c3665d225b69a76c4ee1) fix: Avoid `__dirname` for built-in configs (#15616) (DoZerg) +* [`7cec74e`](https://github.com/eslint/eslint/commit/7cec74e842b6e51da1b00a9e9b2c9da97dd17362) chore: upgrade @eslint/eslintrc@1.2.0 (#15648) (Milos Djermanovic) +* [`6e2c325`](https://github.com/eslint/eslint/commit/6e2c325324479df1b3f868cf00a529b67d2c3d82) feat: Add `ignoreOnInitialization` option to no-shadow rule (#14963) (Soufiane Boutahlil) +* [`1005bd5`](https://github.com/eslint/eslint/commit/1005bd525a08208fee124149a6ad4cf9da20d7d5) docs: update CLA information (#15630) (Nitin Kumar) +* [`5d65c3b`](https://github.com/eslint/eslint/commit/5d65c3bc1e514ed07406c502437a1642913b27ed) docs: Fix typo in `no-irregular-whitespace` (#15634) (Ryota Sekiya) +* [`11c8580`](https://github.com/eslint/eslint/commit/11c8580de0dcedd5577cffe2b23d23a322cc97df) chore: read `ESLINT_MOCHA_TIMEOUT` env var in Makefile.js (#15626) (Piggy) +* [`b93af98`](https://github.com/eslint/eslint/commit/b93af98b3c417225a027cabc964c38e779adb945) docs: add links between rules about whitespace around block curly braces (#15625) (Milos Djermanovic) +* [`ebc0460`](https://github.com/eslint/eslint/commit/ebc0460c411ea608ba5bab05829a1fd122fe21e8) docs: update babel links (#15624) (Milos Djermanovic) +* [`115cae5`](https://github.com/eslint/eslint/commit/115cae54125b9ef509af90620f51d4a692b51ab7) feat: `--debug` prints time it takes to parse a file (#15609) (Bartek Iwańczuk) +* [`345e70d`](https://github.com/eslint/eslint/commit/345e70d9d6490fb12b18953f56f3cea28fd61d83) feat: Add `onlyOneSimpleParam` option to no-confusing-arrow rule (#15566) (Gautam Arora) +* [`bfaa548`](https://github.com/eslint/eslint/commit/bfaa5488bbc794c0d160fb55bd277a2c618953b2) test: add integration tests with built-in configs (#15612) (Milos Djermanovic) +* [`39a2fb3`](https://github.com/eslint/eslint/commit/39a2fb3f448a7096bfb2fc172fef6cc3f6a7ed3b) perf: fix lazy loading of core rules (#15606) (Milos Djermanovic) +* [`3fc9196`](https://github.com/eslint/eslint/commit/3fc919626ef6a00e35bb6b559b60a1e89cf6ca1a) chore: include `tests/conf` in test runs (#15610) (Milos Djermanovic) +* [`ee7c5d1`](https://github.com/eslint/eslint/commit/ee7c5d14a2cb5ce352d1851cec858b942572d2cc) fix: false positive in `camelcase` with combined properties (#15581) (Nitin Kumar) + +v8.9.0 - February 11, 2022 + +* [`68f64a9`](https://github.com/eslint/eslint/commit/68f64a9218341e5e9d83270c72587e1b413846de) feat: update eslint-scope to ignore `"use strict"` directives in ES3 (#15595) (Milos Djermanovic) +* [`db57639`](https://github.com/eslint/eslint/commit/db576396d20f5e31af1a90f8e5d88e08284a1672) feat: add `es2016`, `es2018`, `es2019`, and `es2022` environments (#15587) (Milos Djermanovic) +* [`586d45c`](https://github.com/eslint/eslint/commit/586d45c54b8468fb23376b7b2aedf984cf701cc2) chore: Upgrade to espree@9.3.1 (#15600) (Milos Djermanovic) +* [`623e1e2`](https://github.com/eslint/eslint/commit/623e1e28643381025b393a379493d9baea9b4869) chore: Upgrade to eslint-visitor-keys@3.3.0 (#15599) (Milos Djermanovic) +* [`570a036`](https://github.com/eslint/eslint/commit/570a03699c5abfbcde39bb00fba39329695771e5) docs: add `one-var` example with `for-loop` initializer (#15596) (Milos Djermanovic) +* [`2dc38aa`](https://github.com/eslint/eslint/commit/2dc38aa653f1d5137a9abf82024c67a11620bb7c) feat: fix bug with arrow function return types in function-paren-newline (#15541) (Milos Djermanovic) +* [`355b23d`](https://github.com/eslint/eslint/commit/355b23d0c4e050be4e53292f552a47c10ec6e00e) chore: fix outdated link to Code of Conduct in PR template (#15578) (Rich Trott) +* [`417191d`](https://github.com/eslint/eslint/commit/417191dff0dbfa353675c409e25f27f578ee1559) docs: Remove the $ prefix in terminal commands (#15565) (Andreas Lewis) +* [`389ff34`](https://github.com/eslint/eslint/commit/389ff34e26cb8ebad49e5ace0280a1f859f8d7ca) docs: add missing `Variable#scope` property in the scope manager docs (#15571) (Milos Djermanovic) +* [`b10fef2`](https://github.com/eslint/eslint/commit/b10fef25c99134d514fec4ddde19302661db5974) ci: use Node 16 for browser test (#15569) (Milos Djermanovic) +* [`f63795d`](https://github.com/eslint/eslint/commit/f63795dc710f6394d884932034a3e0cbe48f4ad2) docs: no-eval replace dead link with working one (#15568) (rasenplanscher) +* [`6f940c3`](https://github.com/eslint/eslint/commit/6f940c3ce715327f282c197d0f71b91848e5d83d) feat: Implement FlatRuleTester (#15519) (Nicholas C. Zakas) +* [`0383591`](https://github.com/eslint/eslint/commit/0383591a6cd7083455af9e34fa9333da7fed46bf) docs: Remove old Markdown issue template (#15556) (Brandon Mills) +* [`92f89fb`](https://github.com/eslint/eslint/commit/92f89fb0647fef10468fd70d6782a845d75330e3) chore: suggest demo link in bug report template (#15557) (Brandon Mills) +* [`a8dd5a2`](https://github.com/eslint/eslint/commit/a8dd5a286bcb68595b85cd29490e081251a2c3c7) docs: add 'when not to use it' section in no-duplicate-case docs (#15563) (Milos Djermanovic) +* [`1ad439e`](https://github.com/eslint/eslint/commit/1ad439ed1d6c4ee50183c8f5d146a771e6c1be4c) docs: add missed verb in docs (#15550) (Jeff Mosawy) + +v8.8.0 - January 28, 2022 + +* [`5d60812`](https://github.com/eslint/eslint/commit/5d60812d440762dff72420714273c714c4c5d074) feat: implement rfc 2021-suppression-support (#15459) (Yiwei Ding) +* [`5769cc2`](https://github.com/eslint/eslint/commit/5769cc23eca7197bb5993a0201cc269a056d4dfd) docs: fix relative link (#15544) (Nick Schonning) +* [`ccbc35f`](https://github.com/eslint/eslint/commit/ccbc35ff3ebc89bb524a8fd8dc60df9408e58275) docs: trimmed rules h1s to just be rule names (#15514) (Josh Goldberg) +* [`851f1f1`](https://github.com/eslint/eslint/commit/851f1f18bd1a5da32c1b645bfcb28fadc627ad9e) docs: fixed typo in comment (#15531) (Jiapei Liang) +* [`7d7af55`](https://github.com/eslint/eslint/commit/7d7af55759eab2328aeeb71098d91f4a5e41b269) docs: address upcoming violation of markdownlint rule MD050/strong-style (#15529) (David Anson) + +v8.7.0 - January 15, 2022 + +* [`369fb1b`](https://github.com/eslint/eslint/commit/369fb1b066279d761e59502111c2580834a41648) chore: Upgrade to eslint-visitor-keys@3.2.0 (#15526) (Brandon Mills) +* [`a8db9a5`](https://github.com/eslint/eslint/commit/a8db9a597672d3f9122f1cc8de8dfeb6a7f6aeac) fix: no-invalid-this false positive in class field initializer (#15495) (Milos Djermanovic) +* [`19ad061`](https://github.com/eslint/eslint/commit/19ad061290e1e97f760cfdce90a651cea9042c32) feat: no-restricted-imports support casing (#15439) (gfyoung) +* [`f50f849`](https://github.com/eslint/eslint/commit/f50f849d2d2d92f28a944846cda209eaf624b9f4) docs: Update CLI docs to prefer local install (#15513) (Nicholas C. Zakas) +* [`0469eb1`](https://github.com/eslint/eslint/commit/0469eb1028e82e71a2da8608a1b8864dc3f47f24) docs: Update shell code fences for new website (#15522) (Olga) +* [`02d6426`](https://github.com/eslint/eslint/commit/02d642690282189664b9551e02fb7ff0e4b5c4fb) fix: Correctly consume RuleTester statics (#15507) (Brad Zacher) +* [`db15802`](https://github.com/eslint/eslint/commit/db15802ec4d129c89e563a4bf43ec610292695ab) fix: Add property `fatalErrorCount` to ignored file results (#15520) (Francesco Trotta) +* [`03ac8cf`](https://github.com/eslint/eslint/commit/03ac8cfc773279c01a62897692160f9a883ff4f5) fix: Prevent false positives with no-constant-condition (#15486) (Jordan Eldredge) +* [`564ecdb`](https://github.com/eslint/eslint/commit/564ecdb992c6e236fa3ca903f8b2a645afc32d7e) feat: Support arbitrary module namespace names in no-restricted-imports (#15491) (Milos Djermanovic) +* [`968a02a`](https://github.com/eslint/eslint/commit/968a02af455f76446269afe07191c6aa37d44a88) feat: Support arbitrary module namespace names in no-useless-rename (#15493) (Milos Djermanovic) +* [`ba6317b`](https://github.com/eslint/eslint/commit/ba6317b4031c9f782b317bd1d9913e70b5625f28) ci: remove master branch from CI configs (#15501) (Milos Djermanovic) +* [`0d2b9a6`](https://github.com/eslint/eslint/commit/0d2b9a6dfa544f7ab084425eafc90a90aa14bcae) feat: move `eslint --init` to @eslint/create-config (#15150) (唯然) +* [`79b6340`](https://github.com/eslint/eslint/commit/79b6340d6ced0ad62628de6e51dce18d50a5be9f) chore: fixed typo in client-Engine (#15497) (Abhay Gupta) +* [`127f524`](https://github.com/eslint/eslint/commit/127f524337f92dd72d36e71e646c91c9715ad444) feat: false negative with `property` option in `id-match` (#15474) (Nitin Kumar) +* [`359b2c1`](https://github.com/eslint/eslint/commit/359b2c18233cb48f7dae9433a877e5727fab3411) feat: Support arbitrary module namespace names in the camelcase rule (#15490) (Milos Djermanovic) +* [`3549571`](https://github.com/eslint/eslint/commit/3549571702dc3e0d9a4d3de615adb6abb13859c4) feat: Support arbitrary module namespace names in the quotes rule (#15479) (Milos Djermanovic) +* [`5563c45`](https://github.com/eslint/eslint/commit/5563c454901aafd54e01521e923cdcbaf051b08d) feat: Support arbitrary module namespace names in keyword-spacing (#15481) (Milos Djermanovic) +* [`fd3683f`](https://github.com/eslint/eslint/commit/fd3683f2f5ead78a2444163cab6849784a966a0a) feat: Support arbitrary module namespace names in no-restricted-exports (#15478) (Milos Djermanovic) +* [`6278281`](https://github.com/eslint/eslint/commit/6278281fab5e1a9623c32ace62a050561e1c0a21) chore: switch `new syntax` issue template to forms (#15480) (Nitin Kumar) + +v8.6.0 - December 31, 2021 + +* [`3a384fc`](https://github.com/eslint/eslint/commit/3a384fc287cebb7be5fe5ed95497d578437a503a) chore: Upgrade espree to 9.3.0 (#15473) (Brandon Mills) +* [`1443cc2`](https://github.com/eslint/eslint/commit/1443cc2fc8785157936b864258924fe9bcd23210) chore: Update blogpost.md.ejs (#15468) (Nicholas C. Zakas) +* [`6c4dee2`](https://github.com/eslint/eslint/commit/6c4dee2e87dac8d0751ce2426ded651ed0986112) docs: Document homedir is a configuration root (#15469) (Bas Bosman) +* [`6802a54`](https://github.com/eslint/eslint/commit/6802a54837ea008bef4d5ae11522941693ba5ef6) feat: handle logical assignment in no-self-assign (#14152) (Zzzen) +* [`3b38018`](https://github.com/eslint/eslint/commit/3b38018ef5cb004ad5bc011de726bd2df2eb2f3f) feat: allow to define `eslint-disable-next-line` in multiple lines (#15436) (Nitin Kumar) +* [`51c37b1`](https://github.com/eslint/eslint/commit/51c37b118aed9c0d7a0efd40c491efca04c82ef9) docs: consistency changes (#15404) (Bas Bosman) +* [`28e907a`](https://github.com/eslint/eslint/commit/28e907a4ca05a026d156f814f4118f8fe713e99d) refactor: remove unused parameter in `linter.js` (#15451) (Milos Djermanovic) +* [`eaa08d3`](https://github.com/eslint/eslint/commit/eaa08d3055b195bce59cc96bb63ac29038cd7c7d) test: add tests for `allowReserved` parser option with flat config (#15450) (Milos Djermanovic) +* [`9d6fe5a`](https://github.com/eslint/eslint/commit/9d6fe5a6b65f397bafc5eb0a995e96717cdc9b53) feat: false negative with `onlyDeclarations` + `properties` in id-match (#15431) (Nitin Kumar) +* [`775d181`](https://github.com/eslint/eslint/commit/775d18138244a28ebe1cb92849cd0f4e8cd27672) docs: Mention character classes in no-useless-escape (#15421) (Sebastian Simon) + +v8.5.0 - December 17, 2021 + +* [`7d832d4`](https://github.com/eslint/eslint/commit/7d832d4ad55f3c987aca8d858809cbcb77697648) fix: improve `prefer-template` fixer (#15230) (Nitin Kumar) +* [`94e77a6`](https://github.com/eslint/eslint/commit/94e77a693fd5124c9057320310b41e92567d7e76) feat: Suggestions support for `prefer-regex-literals` (#15077) (Yash Singh) +* [`314c84c`](https://github.com/eslint/eslint/commit/314c84c1b83b32e75587ce7a77130eac7e2a8f49) docs: add an incorrect code example in for-direction (#15434) (Holger Jeromin) +* [`981fb48`](https://github.com/eslint/eslint/commit/981fb48991448bec171d7d4332d7dc514252f83f) fix: do not report global references in `id-match` rule (#15420) (Nitin Kumar) +* [`3928175`](https://github.com/eslint/eslint/commit/3928175d01c6ac2b37147b3256c56df8faf2c6c4) docs: add destructuring examples for `computed-property-spacing` (#15423) (Nitin Kumar) +* [`225f211`](https://github.com/eslint/eslint/commit/225f2111ebcfc6bcd2d475f5261c85eb00fb0191) test: add destructuring test cases for `computed-property-spacing` (#15424) (Nitin Kumar) +* [`f13d4a6`](https://github.com/eslint/eslint/commit/f13d4a6cf7c7ff6160be7426fc6fe02e3e37a0b7) fix: improve autofix of `prefer-object-has-own` (#15419) (Nitin Kumar) +* [`f4559a0`](https://github.com/eslint/eslint/commit/f4559a0f7150ad7494658bd5ea846cfca5073caf) fix: add helpful message when test case has non-string code/name (#15425) (Bryan Mishkin) +* [`a53e59e`](https://github.com/eslint/eslint/commit/a53e59eab7da52e3df095a679a6fdab74a7bce6f) docs: add more examples for `array-element-newline` rule (#15427) (Nitin Kumar) +* [`f2c7ba6`](https://github.com/eslint/eslint/commit/f2c7ba6c34c8943dc24a1c41317d536c1a63cb36) ci: use node v16 for `macOS` and `windows` jobs (#15418) (Nitin Kumar) +* [`eafaf52`](https://github.com/eslint/eslint/commit/eafaf52464c01072fcf7be2bd2d91cd0b3ae67d0) feat: add `prefer-object-has-own` rule (#15346) (Nitin Kumar) +* [`74cf0a0`](https://github.com/eslint/eslint/commit/74cf0a040e1a83990d8d7eb57e1f5ce919a11ebe) docs: update CLA info (#15370) (Nitin Kumar) +* [`e84195e`](https://github.com/eslint/eslint/commit/e84195ea39b5cf54d7a551c62671af80b859f1ac) docs: fix heading level for an option in `class-methods-use-this` rule (#15399) (Takuya Fukuju) + +v8.4.1 - December 6, 2021 + +* [`234e3d9`](https://github.com/eslint/eslint/commit/234e3d98eeab8956cefb14c982b9c348c21bb2d9) fix: revert changes to reported locations in max-lines-per-function (#15397) (Milos Djermanovic) +* [`fa4d483`](https://github.com/eslint/eslint/commit/fa4d4830a0e77f92154079ada17ffb893ce64232) docs: fix typo in example for `sort-keys` rule (#15393) (Nitin Kumar) + v8.4.0 - December 3, 2021 * [`efede90`](https://github.com/eslint/eslint/commit/efede90d59edc5cca9cd739df7e98f1ff00ca37d) chore: upgrade @eslint/eslintrc@1.0.5 (#15389) (Milos Djermanovic) diff --git a/eslint/CONTRIBUTING.md b/eslint/CONTRIBUTING.md index 8f2246f..40163d8 100644 --- a/eslint/CONTRIBUTING.md +++ b/eslint/CONTRIBUTING.md @@ -19,7 +19,7 @@ To report a security vulnerability in ESLint, please use our [HackerOne program] ## Contributing Code -Please sign our [Contributor License Agreement](https://cla.js.foundation/eslint/eslint) and read over the [Pull Request Guidelines](https://eslint.org/docs/developer-guide/contributing/pull-requests). +In order to submit code or documentation to an ESLint project, you’ll be asked to sign our CLA when you send your first pull request. (Read more about the Open JS Foundation CLA process at .) Also, please read over the [Pull Request Guidelines](https://eslint.org/docs/developer-guide/contributing/pull-requests). ## Full Documentation diff --git a/eslint/Makefile.js b/eslint/Makefile.js index 3730e9b..cbfc0c0 100644 --- a/eslint/Makefile.js +++ b/eslint/Makefile.js @@ -12,9 +12,9 @@ const checker = require("npm-license"), ReleaseOps = require("eslint-release"), - dateformat = require("dateformat"), fs = require("fs"), glob = require("glob"), + marked = require("marked"), markdownlint = require("markdownlint"), os = require("os"), path = require("path"), @@ -22,6 +22,7 @@ const checker = require("npm-license"), ejs = require("ejs"), loadPerf = require("load-perf"), yaml = require("js-yaml"), + ignore = require("ignore"), { CLIEngine } = require("./lib/cli-engine"), builtinRules = require("./lib/rules/index"); @@ -32,7 +33,7 @@ require("shelljs/make"); * @see https://github.com/shelljs/shelljs/blob/124d3349af42cb794ae8f78fc9b0b538109f7ca7/make.js#L4 * @see https://github.com/DefinitelyTyped/DefinitelyTyped/blob/3aa2d09b6408380598cfb802743b07e1edb725f3/types/shelljs/make.d.ts#L8-L11 */ -const { cat, cd, cp, echo, exec, exit, find, ls, mkdir, pwd, rm, test } = require("shelljs"); +const { cat, cd, echo, exec, exit, find, ls, mkdir, pwd, test } = require("shelljs"); //------------------------------------------------------------------------------ // Settings @@ -59,8 +60,10 @@ const NODE = "node ", // intentional extra space TEMP_DIR = "./tmp/", DEBUG_DIR = "./debug/", BUILD_DIR = "build", - DOCS_DIR = "../website/docs", - SITE_DIR = "../website/", + SITE_DIR = "../eslint.org", + DOCS_DIR = "./docs", + DOCS_SRC_DIR = path.join(DOCS_DIR, "src"), + DOCS_DATA_DIR = path.join(DOCS_SRC_DIR, "_data"), PERF_TMP_DIR = path.join(TEMP_DIR, "eslint", "performance"), // Utilities - intentional extra space at the end of each string @@ -70,15 +73,20 @@ const NODE = "node ", // intentional extra space // Files RULE_FILES = glob.sync("lib/rules/*.js").filter(filePath => path.basename(filePath) !== "index.js"), JSON_FILES = find("conf/").filter(fileType("json")), - MARKDOWNLINT_IGNORED_FILES = fs.readFileSync(path.join(__dirname, ".markdownlintignore"), "utf-8").split("\n"), - MARKDOWN_FILES_ARRAY = find("docs/").concat(ls(".")).filter(fileType("md")).filter(file => !MARKDOWNLINT_IGNORED_FILES.includes(file)), - TEST_FILES = "\"tests/{bin,lib,tools}/**/*.js\"", - PERF_ESLINTRC = path.join(PERF_TMP_DIR, "eslintrc.yml"), + MARKDOWNLINT_IGNORE_INSTANCE = ignore().add(fs.readFileSync(path.join(__dirname, ".markdownlintignore"), "utf-8")), + MARKDOWN_FILES_ARRAY = MARKDOWNLINT_IGNORE_INSTANCE.filter(find("docs/").concat(ls(".")).filter(fileType("md"))), + TEST_FILES = "\"tests/{bin,conf,lib,tools}/**/*.js\"", + PERF_ESLINTRC = path.join(PERF_TMP_DIR, "eslint.config.js"), PERF_MULTIFILES_TARGET_DIR = path.join(PERF_TMP_DIR, "eslint"), - PERF_MULTIFILES_TARGETS = `"${PERF_MULTIFILES_TARGET_DIR + path.sep}{lib,tests${path.sep}lib}${path.sep}**${path.sep}*.js"`, + + /* + * glob arguments with Windows separator `\` don't work: + * https://github.com/eslint/eslint/issues/16259 + */ + PERF_MULTIFILES_TARGETS = `"${TEMP_DIR}eslint/performance/eslint/{lib,tests/lib}/**/*.js"`, // Settings - MOCHA_TIMEOUT = 10000; + MOCHA_TIMEOUT = parseInt(process.env.ESLINT_MOCHA_TIMEOUT, 10) || 10000; //------------------------------------------------------------------------------ // Helpers @@ -143,10 +151,10 @@ function generateBlogPost(releaseInfo, prereleaseMajorVersion) { now = new Date(), month = now.getMonth() + 1, day = now.getDate(), - filename = `../website/_posts/${now.getFullYear()}-${ + filename = path.join(SITE_DIR, `src/content/blog/${now.getFullYear()}-${ month < 10 ? `0${month}` : month}-${ day < 10 ? `0${day}` : day}-eslint-v${ - releaseInfo.version}-released.md`; + releaseInfo.version}-released.md`); output.to(filename); } @@ -154,21 +162,16 @@ function generateBlogPost(releaseInfo, prereleaseMajorVersion) { /** * Generates a doc page with formatter result examples * @param {Object} formatterInfo Linting results from each formatter - * @param {string} [prereleaseVersion] The version used for a prerelease. This - * changes where the output is stored. * @returns {void} */ -function generateFormatterExamples(formatterInfo, prereleaseVersion) { +function generateFormatterExamples(formatterInfo) { const output = ejs.render(cat("./templates/formatter-examples.md.ejs"), formatterInfo); - let filename = "../website/docs/user-guide/formatters/index.md", - htmlFilename = "../website/docs/user-guide/formatters/html-formatter-example.html"; - - if (prereleaseVersion) { - filename = filename.replace("/docs", `/docs/${prereleaseVersion}`); - htmlFilename = htmlFilename.replace("/docs", `/docs/${prereleaseVersion}`); - if (!test("-d", path.dirname(filename))) { - mkdir(path.dirname(filename)); - } + const outputDir = path.join(DOCS_SRC_DIR, "user-guide/formatters/"), + filename = path.join(outputDir, "index.md"), + htmlFilename = path.join(outputDir, "html-formatter-example.html"); + + if (!test("-d", outputDir)) { + mkdir(outputDir); } output.to(filename); @@ -180,10 +183,13 @@ function generateFormatterExamples(formatterInfo, prereleaseVersion) { * @returns {void} */ function generateRuleIndexPage() { - const outputFile = "../website/_data/rules.yml", + const docsSiteOutputFile = path.join(DOCS_DATA_DIR, "rules.json"), + docsSiteMetaOutputFile = path.join(DOCS_DATA_DIR, "rules_meta.json"), ruleTypes = "conf/rule-type-list.json", ruleTypesData = JSON.parse(cat(path.resolve(ruleTypes))); + const meta = {}; + RULE_FILES .map(filename => [filename, path.basename(filename, ".js")]) .sort((a, b) => a[1].localeCompare(b[1])) @@ -192,6 +198,20 @@ function generateRuleIndexPage() { const basename = pair[1]; const rule = require(path.resolve(filename)); + /* + * Eleventy interprets the {{ }} in messages as being variables, + * which can cause an error if there's syntax it doesn't expect. + * Because we don't use this info in the website anyway, it's safer + * to just remove it. + * + * Also removing the schema because we don't need it. + */ + meta[basename] = { + ...rule.meta, + schema: void 0, + messages: void 0 + }; + if (rule.meta.deprecated) { ruleTypesData.deprecated.rules.push({ name: basename, @@ -218,9 +238,9 @@ function generateRuleIndexPage() { // `.rules` will be `undefined` if all rules in category are deprecated. ruleTypesData.types = ruleTypesData.types.filter(ruleType => !!ruleType.rules); - const output = yaml.dump(ruleTypesData, { sortKeys: true }); + JSON.stringify(ruleTypesData, null, 4).to(docsSiteOutputFile); + JSON.stringify(meta, null, 4).to(docsSiteMetaOutputFile); - output.to(outputFile); } /** @@ -234,18 +254,14 @@ function commitSiteToGit(tag) { cd(SITE_DIR); exec("git add -A ."); - exec(`git commit -m "Autogenerated new docs and demo at ${dateformat(new Date())}"`); - - if (tag) { - exec(`git tag ${tag}`); - } - - exec("git fetch origin && git rebase origin/master"); + exec(`git commit -m "Added release blog post for ${tag}"`); + exec(`git tag ${tag}`); + exec("git fetch origin && git rebase origin/main"); cd(currentDir); } /** - * Publishes the changes in an adjacent `website` repository to the remote. The + * Publishes the changes in an adjacent `eslint.org` repository to the remote. The * site should already have local commits (e.g. from running `commitSiteToGit`). * @returns {void} */ @@ -253,7 +269,7 @@ function publishSite() { const currentDir = pwd(); cd(SITE_DIR); - exec("git push origin master --tags"); + exec("git push origin HEAD --tags"); cd(currentDir); } @@ -270,6 +286,17 @@ function generateRelease() { target.gensite(); generateBlogPost(releaseInfo); commitSiteToGit(`v${releaseInfo.version}`); + + echo("Updating version in docs package"); + const docsPackagePath = path.join(__dirname, "docs", "package.json"); + const docsPackage = require(docsPackagePath); + + docsPackage.version = releaseInfo.version; + fs.writeFileSync(docsPackagePath, `${JSON.stringify(docsPackage, null, 4)}\n`); + + echo("Updating commit with docs data"); + exec("git add docs/ && git commit --amend --no-edit"); + exec(`git tag -a -f v${releaseInfo.version} -m ${releaseInfo.version}`); } /** @@ -317,6 +344,10 @@ function generatePrerelease(prereleaseId) { */ function publishRelease() { ReleaseOps.publishRelease(); + + // push to latest branch to trigger docs deploy + exec("git push origin HEAD:latest -f"); + publishSite(); } @@ -481,8 +512,17 @@ target.lint = function([fix = false] = []) { let errors = 0, lastReturn; + /* + * In order to successfully lint JavaScript files in the `docs` directory, dependencies declared in `docs/package.json` + * would have to be installed in `docs/node_modules`. In particular, eslint-plugin-node rules examine `docs/node_modules` + * when analyzing `require()` calls from CJS modules in the `docs` directory. Since our release process does not run `npm install` + * in the `docs` directory, linting would fail and break the release. Also, working on the main `eslint` package does not require + * installing dependencies declared in `docs/package.json`, so most contributors will not have `docs/node_modules` locally. + * Therefore, we add `--ignore-pattern docs` to exclude linting the `docs` directory from this command. + * There is a separate command `target.lintDocsJS` for linting JavaScript files in the `docs` directory. + */ echo("Validating JavaScript files"); - lastReturn = exec(`${ESLINT}${fix ? "--fix" : ""} .`); + lastReturn = exec(`${ESLINT}${fix ? "--fix" : ""} . --ignore-pattern docs`); if (lastReturn.code !== 0) { errors++; } @@ -501,6 +541,21 @@ target.lint = function([fix = false] = []) { } }; +target.lintDocsJS = function([fix = false] = []) { + let errors = 0; + + echo("Validating JavaScript files in the docs directory"); + const lastReturn = exec(`${ESLINT}${fix ? "--fix" : ""} docs/.eleventy.js`); + + if (lastReturn.code !== 0) { + errors++; + } + + if (errors) { + exit(1); + } +}; + target.fuzz = function({ amount = 1000, fuzzBrokenAutofixes = false } = {}) { const fuzzerRunner = require("./tools/fuzzer-runner"); const fuzzResults = fuzzerRunner.run({ amount, fuzzBrokenAutofixes }); @@ -546,12 +601,12 @@ target.mocha = () => { echo("Running unit tests"); - lastReturn = exec(`${getBinFile("nyc")} -- ${MOCHA} --forbid-only -R progress -t ${MOCHA_TIMEOUT} -c ${TEST_FILES}`); + lastReturn = exec(`${getBinFile("c8")} -- ${MOCHA} --forbid-only -R progress -t ${MOCHA_TIMEOUT} -c ${TEST_FILES}`); if (lastReturn.code !== 0) { errors++; } - lastReturn = exec(`${getBinFile("nyc")} check-coverage --statement 98 --branch 97 --function 98 --lines 98`); + lastReturn = exec(`${getBinFile("c8")} check-coverage --statement 98 --branch 97 --function 98 --lines 98`); if (lastReturn.code !== 0) { errors++; } @@ -582,48 +637,14 @@ target.test = function() { target.checkLicenses(); }; -target.gensite = function(prereleaseVersion) { - echo("Generating eslint.org"); - - let docFiles = [ - "/rules/", - "/user-guide/", - "/maintainer-guide/", - "/developer-guide/", - "/about/" - ]; - - // append version - if (prereleaseVersion) { - docFiles = docFiles.map(docFile => `/${prereleaseVersion}${docFile}`); - } - - // 1. create temp and build directory - echo("> Creating a temporary directory (Step 1)"); - if (!test("-d", TEMP_DIR)) { - mkdir(TEMP_DIR); - } - - // 2. remove old files from the site - echo("> Removing old files (Step 2)"); - docFiles.forEach(filePath => { - const fullPath = path.join(DOCS_DIR, filePath), - htmlFullPath = fullPath.replace(".md", ".html"); - - if (test("-f", fullPath)) { - rm("-rf", fullPath); +target.gensite = function() { + echo("Generating documentation"); - if (filePath.indexOf(".md") >= 0 && test("-f", htmlFullPath)) { - rm("-rf", htmlFullPath); - } - } - }); + const DOCS_RULES_DIR = path.join(DOCS_SRC_DIR, "rules"); + const RULE_VERSIONS_FILE = path.join(DOCS_SRC_DIR, "_data/rule_versions.json"); - // 3. Copy docs folder to a temporary directory - echo("> Copying the docs folder (Step 3)"); - cp("-rf", "docs/*", TEMP_DIR); - - let versions = test("-f", "./versions.json") ? JSON.parse(cat("./versions.json")) : {}; + // Set up rule version information + let versions = test("-f", RULE_VERSIONS_FILE) ? JSON.parse(cat(RULE_VERSIONS_FILE)) : {}; if (!versions.added) { versions = { @@ -632,149 +653,45 @@ target.gensite = function(prereleaseVersion) { }; } - const { Linter } = require("."); - const rules = new Linter().getRules(); - - const RECOMMENDED_TEXT = "\n\n(recommended) The `\"extends\": \"eslint:recommended\"` property in a configuration file enables this rule."; - const FIXABLE_TEXT = "\n\n(fixable) The `--fix` option on the [command line](../user-guide/command-line-interface#fixing-problems) can automatically fix some of the problems reported by this rule."; - const HAS_SUGGESTIONS_TEXT = "\n\n(hasSuggestions) Some problems reported by this rule are manually fixable by editor [suggestions](../developer-guide/working-with-rules#providing-suggestions)."; + // 1. Update rule meta data by checking rule docs - important to catch removed rules + echo("> Updating rule version meta data (Step 1)"); + const ruleDocsFiles = find(DOCS_RULES_DIR); - // 4. Loop through all files in temporary directory - process.stdout.write("> Updating files (Steps 4-9): 0/... - ...\r"); - const tempFiles = find(TEMP_DIR); - const length = tempFiles.length; - - tempFiles.forEach((filename, i) => { + ruleDocsFiles.forEach((filename, i) => { if (test("-f", filename) && path.extname(filename) === ".md") { - const rulesUrl = "https://github.com/eslint/eslint/tree/HEAD/lib/rules/", - testsUrl = "https://github.com/eslint/eslint/tree/HEAD/tests/lib/rules/", - docsUrl = "https://github.com/eslint/eslint/tree/HEAD/docs/rules/", - baseName = path.basename(filename), - sourceBaseName = `${path.basename(filename, ".md")}.js`, - sourcePath = path.join("lib/rules", sourceBaseName), - ruleName = path.basename(filename, ".md"), - filePath = path.join("docs", path.relative("tmp", filename)); - let text = cat(filename), - ruleType = "", - title; - - process.stdout.write(`> Updating files (Steps 4-9): ${i}/${length} - ${filePath + " ".repeat(30)}\r`); - - // 5. Prepend page title and layout variables at the top of rules - if (path.dirname(filename).indexOf("rules") >= 0) { - - // Find out if the rule requires a special docs portion (e.g. if it is recommended and/or fixable) - const rule = rules.get(ruleName); - const isRecommended = rule && rule.meta.docs.recommended; - const isFixable = rule && rule.meta.fixable; - const hasSuggestions = rule && rule.meta.hasSuggestions; - - // Incorporate the special portion into the documentation content - const textSplit = text.split("\n"); - const ruleHeading = textSplit[0]; - const ruleDocsContent = textSplit.slice(1).join("\n"); - - text = `${ruleHeading}${isRecommended ? RECOMMENDED_TEXT : ""}${isFixable ? FIXABLE_TEXT : ""}${hasSuggestions ? HAS_SUGGESTIONS_TEXT : ""}\n${ruleDocsContent}`; - title = `${ruleName} - Rules`; - - if (rule && rule.meta) { - ruleType = `rule_type: ${rule.meta.type}`; - } - } else { + echo(`> Updating rule version meta data (Step 1: ${i + 1}/${ruleDocsFiles.length}): ${filename}`); - // extract the title from the file itself - title = text.match(/#([^#].+)\n/u); - if (title) { - title = title[1].trim(); - } else { - title = "Documentation"; - } - } + const baseName = path.basename(filename, ".md"), + sourceBaseName = `${baseName}.js`, + sourcePath = path.join("lib/rules", sourceBaseName); - text = [ - "---", - `title: ${title}`, - "layout: doc", - `edit_link: https://github.com/eslint/eslint/edit/main/${filePath}`, - ruleType, - "---", - "", - "", - text - ].join("\n"); - - // 6. Remove .md extension for relative links and change README to empty string - text = text.replace(/\((?!https?:\/\/)([^)]*?)\.md(.*?)\)/gu, "($1$2)").replace("README.html", ""); - - // 7. Check if there's a trailing white line at the end of the file, if there isn't one, add it - if (!/\n$/u.test(text)) { - text = `${text}\n`; + if (!versions.added[baseName]) { + versions.added[baseName] = getFirstVersionOfFile(sourcePath); } - // 8. Append first version of ESLint rule was added at. - if (filename.indexOf("rules/") !== -1) { - if (!versions.added[baseName]) { - versions.added[baseName] = getFirstVersionOfFile(sourcePath); - } - const added = versions.added[baseName]; - - if (!versions.removed[baseName] && !test("-f", sourcePath)) { - versions.removed[baseName] = getFirstVersionOfDeletion(sourcePath); - } - const removed = versions.removed[baseName]; - - text += "\n## Version\n\n"; - text += removed - ? `This rule was introduced in ESLint ${added} and removed in ${removed}.\n` - : `This rule was introduced in ESLint ${added}.\n`; - - text += "\n## Resources\n\n"; - if (!removed) { - text += `* [Rule source](${rulesUrl}${sourceBaseName})\n`; - text += `* [Test source](${testsUrl}${sourceBaseName})\n`; - } - text += `* [Documentation source](${docsUrl}${baseName})\n`; + if (!versions.removed[baseName] && !test("-f", sourcePath)) { + versions.removed[baseName] = getFirstVersionOfDeletion(sourcePath); } - // 9. Update content of the file with changes - text.to(filename.replace("README.md", "index.md")); } }); - JSON.stringify(versions).to("./versions.json"); - echo(`> Updating files (Steps 4-9)${" ".repeat(50)}`); - // 10. Copy temporary directory to site's docs folder - echo("> Copying the temporary directory into the site's docs folder (Step 10)"); - let outputDir = DOCS_DIR; + JSON.stringify(versions, null, 4).to(RULE_VERSIONS_FILE); - if (prereleaseVersion) { - outputDir += `/${prereleaseVersion}`; - if (!test("-d", outputDir)) { - mkdir(outputDir); - } - } - cp("-rf", `${TEMP_DIR}*`, outputDir); + // 2. Generate rules index page meta data + echo("> Generating the rules index page (Step 2)"); + generateRuleIndexPage(); - // 11. Generate rules index page - if (prereleaseVersion) { - echo("> Skipping generating rules index page because this is a prerelease (Step 11)"); - } else { - echo("> Generating the rules index page (Step 11)"); - generateRuleIndexPage(); - } + // 3. Create Example Formatter Output Page + echo("> Creating the formatter examples (Step 3)"); + generateFormatterExamples(getFormatterResults()); - // 12. Delete temporary directory - echo("> Removing the temporary directory (Step 12)"); - rm("-rf", TEMP_DIR); - - // 13. Create Example Formatter Output Page - echo("> Creating the formatter examples (Step 14)"); - generateFormatterExamples(getFormatterResults(), prereleaseVersion); - - echo("Done generating eslint.org"); + echo("Done generating documentation"); }; +target.generateRuleIndexPage = generateRuleIndexPage; + target.webpack = function(mode = "none") { exec(`${getBinFile("webpack")} --mode=${mode} --output-path=${BUILD_DIR}`); }; @@ -788,9 +705,11 @@ target.checkRuleFiles = function() { RULE_FILES.forEach(filename => { const basename = path.basename(filename, ".js"); - const docFilename = `docs/rules/${basename}.md`; + const docFilename = `docs/src/rules/${basename}.md`; const docText = cat(docFilename); + const docMarkdown = marked.lexer(docText, { gfm: true, silent: false }); const ruleCode = cat(filename); + const knownHeaders = ["Rule Details", "Options", "Environments", "Examples", "Known Limitations", "When Not To Use It", "Compatibility"]; /** * Check if basename is present in rule-types.json file. @@ -806,21 +725,42 @@ target.checkRuleFiles = function() { * @param {string} id id to check for * @returns {boolean} true if present * @private + * @todo Will remove this check when the main heading is automatically generated from rule metadata. */ function hasIdInTitle(id) { - const idOldAtEndOfTitleRegExp = new RegExp(`^# (.*?) \\(${id}\\)`, "u"); // original format - const idNewAtBeginningOfTitleRegExp = new RegExp(`^# ${id}: `, "u"); // new format is same as rules index + return new RegExp(`title: ${id}`, "u").test(docText); + } + + /** + * Check if all H2 headers are known and in the expected order + * Only H2 headers are checked as H1 and H3 are variable and/or rule specific. + * @returns {boolean} true if all headers are known and in the right order + */ + function hasKnownHeaders() { + const headers = docMarkdown.filter(token => token.type === "heading" && token.depth === 2).map(header => header.text); + + for (const header of headers) { + if (!knownHeaders.includes(header)) { + return false; + } + } + /* - * 1. Added support for new format. - * 2. Will remove support for old format after all docs files have new format. - * 3. Will remove this check when the main heading is automatically generated from rule metadata. + * Check only the subset of used headers for the correct order */ + const presentHeaders = knownHeaders.filter(header => headers.includes(header)); - return idNewAtBeginningOfTitleRegExp.test(docText) || idOldAtEndOfTitleRegExp.test(docText); + for (let i = 0; i < presentHeaders.length; ++i) { + if (presentHeaders[i] !== headers[i]) { + return false; + } + } + + return true; } /** - * Check if deprecated information is in rule code and READNE.md. + * Check if deprecated information is in rule code and README.md. * @returns {boolean} true if present * @private */ @@ -848,11 +788,17 @@ target.checkRuleFiles = function() { errors++; } else { - // check for proper doc format + // check for proper doc h1 format if (!hasIdInTitle(basename)) { console.error("Missing id in the doc page's title of rule %s", basename); errors++; } + + // check for proper doc headers + if (!hasKnownHeaders()) { + console.error("Unknown or misplaced header in the doc page of rule %s, allowed headers (and their order) are: '%s'", basename, knownHeaders.join("', '")); + errors++; + } } // check for recommended configuration @@ -977,19 +923,21 @@ function downloadMultifilesTestTarget(cb) { * @returns {void} */ function createConfigForPerformanceTest() { - const content = [ - "root: true", - "env:", - " node: true", - " es6: true", - "rules:" - ]; + let rules = ""; for (const [ruleId] of builtinRules) { - content.push(` ${ruleId}: 1`); + rules += (` "${ruleId}": 1,\n`); + } + + const content = ` +module.exports = [{ + "languageOptions": {sourceType: "commonjs"}, + "rules": { + ${rules} } +}];`; - content.join("\n").to(PERF_ESLINTRC); + content.to(PERF_ESLINTRC); } /** @@ -1049,7 +997,7 @@ function time(cmd, runs, runNumber, results, cb) { function runPerformanceTest(title, targets, multiplier, cb) { const cpuSpeed = os.cpus()[0].speed, max = multiplier / cpuSpeed, - cmd = `${ESLINT}--config "${PERF_ESLINTRC}" --no-eslintrc --no-ignore ${targets}`; + cmd = `${ESLINT}--config "${PERF_ESLINTRC}" --no-config-lookup --no-ignore ${targets}`; echo(""); echo(title); diff --git a/eslint/README.md b/eslint/README.md index e8b005d..309db3d 100644 --- a/eslint/README.md +++ b/eslint/README.md @@ -45,27 +45,21 @@ ESLint is a tool for identifying and reporting on patterns found in ECMAScript/J Prerequisites: [Node.js](https://nodejs.org/) (`^12.22.0`, `^14.17.0`, or `>=16.0.0`) built with SSL support. (If you are using an official Node.js distribution, SSL is always built in.) -You can install ESLint using npm: +You can install and configure ESLint using this command: -```sh -$ npm install eslint --save-dev -``` - -You should then set up a configuration file: - -```sh -$ ./node_modules/.bin/eslint --init +```shell +npm init @eslint/config ``` After that, you can run ESLint on any file or directory like this: -```sh -$ ./node_modules/.bin/eslint yourfile.js +```shell +./node_modules/.bin/eslint yourfile.js ``` ## Configuration -After running `eslint --init`, you'll have a `.eslintrc` file in your directory. In it, you'll see some rules configured like this: +After running `npm init @eslint/config`, you'll have a `.eslintrc` file in your directory. In it, you'll see some rules configured like this: ```json { @@ -129,7 +123,7 @@ ESLint has full support for ECMAScript 3, 5 (default), 2015, 2016, 2017, 2018, 2 ESLint's parser only officially supports the latest final ECMAScript standard. We will make changes to core rules in order to avoid crashes on stage 3 ECMAScript syntax proposals (as long as they are implemented using the correct experimental ESTree syntax). We may make changes to core rules to better work with language extensions (such as JSX, Flow, and TypeScript) on a case-by-case basis. -In other cases (including if rules need to warn on more or fewer cases due to new syntax, rather than just not crashing), we recommend you use other parsers and/or rule plugins. If you are using Babel, you can use the [babel-eslint](https://github.com/babel/babel-eslint) parser and [eslint-plugin-babel](https://github.com/babel/eslint-plugin-babel) to use any option available in Babel. +In other cases (including if rules need to warn on more or fewer cases due to new syntax, rather than just not crashing), we recommend you use other parsers and/or rule plugins. If you are using Babel, you can use [@babel/eslint-parser](https://www.npmjs.com/package/@babel/eslint-parser) and [@babel/eslint-plugin](https://www.npmjs.com/package/@babel/eslint-plugin) to use any option available in Babel. Once a language feature has been adopted into the ECMAScript standard (stage 4 according to the [TC39 process](https://tc39.github.io/process-document/)), we will accept issues and pull requests related to the new feature, subject to our [contributing guidelines](https://eslint.org/docs/developer-guide/contributing). Until then, please use the appropriate parser and plugin(s) for your experimental feature. @@ -235,15 +229,15 @@ Milos Djermanovic The people who review and implement new features.
- -
-Toru Nagashima -
-

唯然
+
+ +
+Nitin Kumar +
### Committers @@ -261,6 +255,11 @@ Brett Zamir Bryan Mishkin + +
+Sara Soueidan +
+
Pig Fang @@ -275,11 +274,6 @@ Anix
YeonJuan
- - -
-Nitin Kumar -
@@ -292,9 +286,9 @@ The following companies, organizations, and individuals support ESLint's ongoing

Platinum Sponsors

Automattic

Gold Sponsors

-

Contra Nx (by Nrwl) Chrome's Web Framework & Tools Performance Fund Salesforce Airbnb Coinbase American Express Substack

Silver Sponsors

+

Salesforce Airbnb American Express

Silver Sponsors

Liftoff

Bronze Sponsors

-

SumatoSoft Anagram Solver VPS Server Icons8: free icons, photos, illustrations, and music Discord ThemeIsle Fire Stick Tricks Practice Ignition

+

launchdarkly Nx (by Nrwl) Anagram Solver VPS Icons8: free icons, photos, illustrations, and music Discord ThemeIsle Ignition HeroCoders

## Technology Sponsors diff --git a/eslint/bin/eslint.js b/eslint/bin/eslint.js index 6b05356..7094ac7 100755 --- a/eslint/bin/eslint.js +++ b/eslint/bin/eslint.js @@ -9,9 +9,6 @@ "use strict"; -// to use V8's code cache to speed up instantiation time -require("v8-compile-cache"); - // must do this initialization *before* other requires in order to work if (process.argv.includes("--debug")) { require("debug").enable("eslint:*,-eslint:code-path,eslintrc:*"); @@ -69,7 +66,7 @@ function getErrorMessage(error) { // Lazy loading because this is used only if an error happened. const util = require("util"); - // Foolproof -- thirdparty module might throw non-object. + // Foolproof -- third-party module might throw non-object. if (typeof error !== "object" || error === null) { return String(error); } @@ -124,13 +121,20 @@ ${message}`); // Call the config initializer if `--init` is present. if (process.argv.includes("--init")) { - await require("../lib/init/config-initializer").initializeConfig(); + + // `eslint --init` has been moved to `@eslint/create-config` + console.warn("You can also run this command directly using 'npm init @eslint/config'."); + + const spawn = require("cross-spawn"); + + spawn.sync("npm", ["init", "@eslint/config"], { encoding: "utf8", stdio: "inherit" }); return; } // Otherwise, call the CLI. process.exitCode = await require("../lib/cli").execute( process.argv, - process.argv.includes("--stdin") ? await readStdin() : null + process.argv.includes("--stdin") ? await readStdin() : null, + true ); }()).catch(onFatalError); diff --git a/eslint/conf/globals.js b/eslint/conf/globals.js index 076ffb2..6018b7a 100644 --- a/eslint/conf/globals.js +++ b/eslint/conf/globals.js @@ -124,6 +124,10 @@ const es2022 = { ...es2021 }; +const es2023 = { + ...es2022 +}; + //----------------------------------------------------------------------------- // Exports @@ -140,5 +144,6 @@ module.exports = { es2019, es2020, es2021, - es2022 + es2022, + es2023 }; diff --git a/eslint/docs/.eleventy.js b/eslint/docs/.eleventy.js new file mode 100644 index 0000000..b3e3026 --- /dev/null +++ b/eslint/docs/.eleventy.js @@ -0,0 +1,500 @@ +"use strict"; + +const eleventyNavigationPlugin = require("@11ty/eleventy-navigation"); +const syntaxHighlight = require("@11ty/eleventy-plugin-syntaxhighlight"); +const pluginRss = require("@11ty/eleventy-plugin-rss"); +const pluginTOC = require("eleventy-plugin-nesting-toc"); +const markdownItAnchor = require("markdown-it-anchor"); +const markdownItContainer = require("markdown-it-container"); +const Image = require("@11ty/eleventy-img"); +const path = require("path"); +const { slug } = require("github-slugger"); +const yaml = require("js-yaml"); + +const { + DateTime +} = require("luxon"); + +module.exports = function(eleventyConfig) { + + /* + * The docs stored in the eslint repo are loaded through eslint.org at + * at /docs/head to show the most recent version of the documentation + * based on the HEAD commit. This gives users a preview of what's coming + * in the next release. This is the way that the site works locally so + * it's easier to see if URLs are broken. + * + * When a release is published, HEAD is pushed to the "latest" branch. + * Netlify deploys that branch as well, and in that case, we want the + * docs to be loaded from /docs/latest on eslint.org. + * + * The path prefix is turned off for deploy previews so we can properly + * see changes before deployed. + */ + + let pathPrefix = "/docs/head/"; + + if (process.env.CONTEXT === "deploy-preview") { + pathPrefix = "/"; + } else if (process.env.BRANCH === "latest") { + pathPrefix = "/docs/latest/"; + } + + //------------------------------------------------------------------------------ + // Data + //------------------------------------------------------------------------------ + + // Load site-specific data + const siteName = process.env.ESLINT_SITE_NAME || "en"; + + eleventyConfig.addGlobalData("site_name", siteName); + eleventyConfig.addGlobalData("GIT_BRANCH", process.env.BRANCH); + eleventyConfig.addGlobalData("NOINDEX", process.env.BRANCH !== "latest"); + eleventyConfig.addDataExtension("yml", contents => yaml.load(contents)); + + //------------------------------------------------------------------------------ + // Filters + //------------------------------------------------------------------------------ + + eleventyConfig.addFilter("limitTo", (arr, limit) => arr.slice(0, limit)); + + eleventyConfig.addFilter("jsonify", variable => JSON.stringify(variable)); + + /** + * Takes in a string and converts to a slug + * @param {string} text text to be converted into slug + * @returns {string} slug to be used as anchors + */ + function slugify(text) { + return slug(text.replace(/[<>()[\]{}]/gu, "")) + // eslint-disable-next-line no-control-regex -- used regex from https://github.com/eslint/archive-website/blob/master/_11ty/plugins/markdown-plugins.js#L37 + .replace(/[^\u{00}-\u{FF}]/gu, ""); + } + + eleventyConfig.addFilter("slugify", str => { + if (!str) { + return ""; + } + + return slugify(str); + }); + + eleventyConfig.addFilter("URIencode", str => { + if (!str) { + return ""; + } + return encodeURI(str); + }); + + /* order collection by the order specified in the front matter */ + eleventyConfig.addFilter("sortByPageOrder", values => values.slice().sort((a, b) => a.data.order - b.data.order)); + + eleventyConfig.addFilter("readableDate", dateObj => { + + // turn it into a JS Date string + const date = new Date(dateObj); + + // pass it to luxon for formatting + return DateTime.fromJSDate(date).toFormat("dd MMM, yyyy"); + }); + + eleventyConfig.addFilter("blogPermalinkDate", dateObj => { + + // turn it into a JS Date string + const date = new Date(dateObj); + + // pass it to luxon for formatting + return DateTime.fromJSDate(date).toFormat("yyyy/MM"); + }); + + eleventyConfig.addFilter("readableDateFromISO", ISODate => DateTime.fromISO(ISODate).toUTC().toLocaleString(DateTime.DATE_FULL)); + + eleventyConfig.addFilter("dollars", value => new Intl.NumberFormat("en-US", { + style: "currency", + currency: "USD" + }).format(value)); + + /* + * parse markdown from includes, used for author bios + * Source: https://github.com/11ty/eleventy/issues/658 + */ + eleventyConfig.addFilter("markdown", value => { + const markdown = require("markdown-it")({ + html: true + }); + + return markdown.render(value); + }); + + /* + * Removes `.html` suffix from the given url. + * `page.url` will include the `.html` suffix for all documents + * except for those written as `index.html` (their `page.url` ends with a `/`). + */ + eleventyConfig.addFilter("prettyURL", url => { + if (url.endsWith(".html")) { + return url.slice(0, -".html".length); + } + + return url; + }); + + //------------------------------------------------------------------------------ + // Plugins + //------------------------------------------------------------------------------ + + eleventyConfig.addPlugin(eleventyNavigationPlugin); + eleventyConfig.addPlugin(syntaxHighlight, { + alwaysWrapLineHighlights: true + }); + eleventyConfig.addPlugin(pluginRss); + eleventyConfig.addPlugin(pluginTOC, { + tags: ["h2", "h3", "h4"], + wrapper: "nav", // Element to put around the root `ol` + wrapperClass: "c-toc", // Class for the element around the root `ol` + headingText: "", // Optional text to show in heading above the wrapper element + headingTag: "h2" // Heading tag when showing heading above the wrapper element + }); + + /** @typedef {import("markdown-it/lib/token")} MarkdownItToken A MarkdownIt token. */ + + /** + * Generates HTML markup for an inline alert. + * @param {"warning"|"tip"|"important"} type The type of alert to create. + * @param {Array} tokens Array of MarkdownIt tokens to use. + * @param {number} index The index of the current token in the tokens array. + * @returns {string} The markup for the alert. + */ + function generateAlertMarkup(type, tokens, index) { + if (tokens[index].nesting === 1) { + return ` + + `.trim(); + } + + const markdownIt = require("markdown-it"); + + eleventyConfig.setLibrary("md", + markdownIt({ html: true, linkify: true, typographer: true }) + .use(markdownItAnchor, { + slugify + }) + .use(markdownItContainer, "correct", {}) + .use(markdownItContainer, "incorrect", {}) + .use(markdownItContainer, "warning", { + render(tokens, idx) { + return generateAlertMarkup("warning", tokens, idx); + } + }) + .use(markdownItContainer, "tip", { + render(tokens, idx) { + return generateAlertMarkup("tip", tokens, idx); + } + }) + .use(markdownItContainer, "important", { + render(tokens, idx) { + return generateAlertMarkup("important", tokens, idx); + } + }) + .disable("code")); + + //------------------------------------------------------------------------------ + // Shortcodes + //------------------------------------------------------------------------------ + + eleventyConfig.addNunjucksShortcode("link", function(url) { + + // eslint-disable-next-line no-invalid-this -- Eleventy API + const urlData = this.ctx.further_reading_links[url]; + + if (!urlData) { + throw new Error(`Data missing for ${url}`); + } + + const { + domain, + title, + logo + } = urlData; + + return ` + `; + }); + + eleventyConfig.addShortcode("fixable", () => ` +
+ 🛠 Fixable +

+ if some problems reported by the rule are automatically fixable by the --fix command line option +

+
`); + + eleventyConfig.addShortcode("recommended", () => ` +
+ ✅ Recommended +

+ if the "extends": "eslint:recommended" property in a configuration file enables the rule. +

+
`); + + eleventyConfig.addShortcode("hasSuggestions", () => ` +
+ 💡 hasSuggestions +

+ if some problems reported by the rule are manually fixable by editor suggestions +

+
`); + + eleventyConfig.addShortcode("related_rules", arr => { + const rules = arr; + let items = ""; + + rules.forEach(rule => { + const listItem = ``; + + items += listItem; + }); + + return ` + `; + }); + + eleventyConfig.addShortcode("important", (text, url) => ` +
+ +
+ Important +
${text}
+ Learn more +
+
`); + + eleventyConfig.addShortcode("warning", (text, url) => ` +
+ +
+ Warning +
${text}
+ Learn more +
+
`); + + eleventyConfig.addShortcode("tip", (text, url) => ` +
+ +
+ Tip +
${text}
+ Learn more +
+
`); + + + eleventyConfig.addWatchTarget("./src/assets/"); + + //------------------------------------------------------------------------------ + // File PassThroughs + //------------------------------------------------------------------------------ + + eleventyConfig.addPassthroughCopy({ + "./src/static": "/" + }); + + eleventyConfig.addPassthroughCopy("./src/assets/"); + + eleventyConfig.addPassthroughCopy({ + "./src/content/**/*.png": "/assets/images" + }); + + eleventyConfig.addPassthroughCopy({ + "./src/content/**/*.jpg": "/assets/images" + }); + + eleventyConfig.addPassthroughCopy({ + "./src/content/**/*.jpeg": "/assets/images" + }); + + eleventyConfig.addPassthroughCopy({ + "./src/content/**/*.svg": "/assets/images" + }); + + eleventyConfig.addPassthroughCopy({ + "./src/content/**/*.mp4": "/assets/videos" + }); + + eleventyConfig.addPassthroughCopy({ + "./src/content/**/*.pdf": "/assets/documents" + }); + + eleventyConfig.addPassthroughCopy({ + "./node_modules/algoliasearch/dist/algoliasearch-lite.esm.browser.js": "/assets/js/algoliasearch.js" + }); + + //------------------------------------------------------------------------------ + // Collections + //------------------------------------------------------------------------------ + + eleventyConfig.addCollection("docs", collection => collection.getFilteredByGlob("./src/**/**/*.md")); + + eleventyConfig.addCollection("library", collection => collection.getFilteredByGlob("./src/library/**/*.md")); + + + // START, eleventy-img (https://www.11ty.dev/docs/plugins/image/) + /* eslint-disable-next-line jsdoc/require-jsdoc + -- + This shortcode is currently unused. If we are going to use it, add JSDoc + and describe what exactly is this doing. + */ + function imageShortcode(source, alt, cls, sizes = "(max-width: 768px) 100vw, 50vw") { + const options = { + widths: [600, 900, 1500], + formats: ["webp", "jpeg"], + urlPath: "/assets/images/", + outputDir: "./_site/assets/images/", + filenameFormat(id, src, width, format) { + const extension = path.extname(src); + const name = path.basename(src, extension); + + return `${name}-${width}w.${format}`; + } + }; + + /** + * Resolves source + * @returns {string} URL or a local file path + */ + function getSRC() { + if (source.startsWith("http://") || source.startsWith("https://")) { + return source; + } + + /* + * for convenience, you only need to use the image's name in the shortcode, + * and this will handle appending the full path to it + */ + return path.join("./src/assets/images/", source); + } + + const fullSrc = getSRC(); + + + // generate images + Image(fullSrc, options); // eslint-disable-line new-cap -- `Image` is a function + + const imageAttributes = { + alt, + class: cls, + sizes, + loading: "lazy", + decoding: "async" + }; + + // get metadata + const metadata = Image.statsSync(fullSrc, options); + + return Image.generateHTML(metadata, imageAttributes); + } + eleventyConfig.addShortcode("image", imageShortcode); + + // END, eleventy-img + + //------------------------------------------------------------------------------ + // Settings + //------------------------------------------------------------------------------ + + /* + * When we run `eleventy --serve`, Eleventy 1.x uses browser-sync to serve the content. + * By default, browser-sync (more precisely, underlying serve-static) will not serve + * `foo/bar.html` when we request `foo/bar`. Thus, we need to rewrite URLs to append `.html` + * so that pretty links without `.html` can work in a local development environment. + * + * There's no need to rewrite URLs that end with `/`, because that already works well + * (server will return the content of `index.html` in the directory). + * URLs with a file extension, like main.css, main.js, sitemap.xml, etc. should not be rewritten + */ + eleventyConfig.setBrowserSyncConfig({ + middleware: (req, res, next) => { + if (!/(?:\.[a-zA-Z][^/]*|\/)$/u.test(req.url)) { + req.url += ".html"; + } + return next(); + } + }); + + /* + * Generate the sitemap only in certain contexts to prevent unwanted discovery of sitemaps that + * contain URLs we'd prefer not to appear in search results (URLs in sitemaps are considered important). + * In particular, we don't want to deploy https://eslint.org/docs/head/sitemap.xml + * We want to generate the sitemap for: + * - Local previews + * - Netlify deploy previews + * - Netlify production deploy of the `latest` branch (https://eslint.org/docs/latest/sitemap.xml) + * + * Netlify always sets `CONTEXT` environment variable. If it isn't set, we assume this is a local build. + */ + if ( + process.env.CONTEXT && // if this is a build on Netlify ... + process.env.CONTEXT !== "deploy-preview" && // ... and not for a deploy preview ... + process.env.BRANCH !== "latest" // .. and not of the `latest` branch ... + ) { + eleventyConfig.ignores.add("src/static/sitemap.njk"); // ... then don't generate the sitemap. + } + + + return { + passthroughFileCopy: true, + + pathPrefix, + + markdownTemplateEngine: "njk", + dataTemplateEngine: "njk", + htmlTemplateEngine: "njk", + + dir: { + input: "src", + includes: "_includes", + layouts: "_includes/layouts", + data: "_data", + output: "_site" + } + }; +}; diff --git a/eslint/docs/README.md b/eslint/docs/README.md index 8f5223a..ee5f64e 100644 --- a/eslint/docs/README.md +++ b/eslint/docs/README.md @@ -1,17 +1,27 @@ -# Documentation +# ESLint Documentation -Welcome to our documentation pages! What would you like to view? +## Run Locally -## [User Guide](user-guide) +```shell +npm start +``` -Intended for end users of ESLint. Contains information about core rules, configuration, command line options, formatters, and integrations, -as well as guides for migrating from earlier versions of ESLint. +## Scripts -## [Developer Guide](developer-guide) +To update the links data file, run this from the root folder (not the `docs` folder): -Intended for contributors to ESLint and people who wish to extend ESLint. Contains information about contributing to ESLint; creating custom -rules, configurations, plugins, and formatters; and information about our architecture and Node.js API. +```shell +npm run docs:update-links +``` -## [Maintainer Guide](maintainer-guide) +To lint JS files, run this from the root folder (not the `docs` folder): -Intended for maintainers of ESLint. +```shell +npm run lint:docsjs +``` + +To autofix JS files, run this from the root folder (not the `docs` folder): + +```shell +npm run fix:docsjs +``` diff --git a/eslint/docs/developer-guide/architecture/dependency.svg b/eslint/docs/developer-guide/architecture/dependency.svg deleted file mode 100644 index 3b0c74c..0000000 --- a/eslint/docs/developer-guide/architecture/dependency.svg +++ /dev/null @@ -1,52 +0,0 @@ -binlibeslint.jscli.jsapi.jsinitcli-enginelintersource-coderule-testerrules \ No newline at end of file diff --git a/eslint/docs/developer-guide/code-path-analysis/README.md b/eslint/docs/developer-guide/code-path-analysis/README.md deleted file mode 100644 index 2b6fd74..0000000 --- a/eslint/docs/developer-guide/code-path-analysis/README.md +++ /dev/null @@ -1 +0,0 @@ -[Code Path Analysis Details](../code-path-analysis.md) diff --git a/eslint/docs/developer-guide/code-path-analysis/example-dowhilestatement.svg b/eslint/docs/developer-guide/code-path-analysis/example-dowhilestatement.svg deleted file mode 100644 index 4a3d528..0000000 --- a/eslint/docs/developer-guide/code-path-analysis/example-dowhilestatement.svg +++ /dev/null @@ -1,100 +0,0 @@ - - - -_anonymous_0 - -initial - - - -s1_1 - - - - - - - - - - - - - -Program -DoWhileStatement - - -initial->s1_1 - - - - -final - - - - -s1_2 - - - - - - - - - - - - - -BlockStatement -ExpressionStatement -CallExpression -Identifier (foo) -ExpressionStatement -CallExpression -Identifier (bar) -Identifier (a) - - -s1_1->s1_2 - - - - -s1_2->s1_2 - - - - -s1_3 - - - - - - - - - - - - - -DoWhileStatement:exit -Program:exit - - -s1_2->s1_3 - - - - -s1_3->final - - - - - \ No newline at end of file diff --git a/eslint/docs/developer-guide/code-path-analysis/example-forinstatement.svg b/eslint/docs/developer-guide/code-path-analysis/example-forinstatement.svg deleted file mode 100644 index 00da11e..0000000 --- a/eslint/docs/developer-guide/code-path-analysis/example-forinstatement.svg +++ /dev/null @@ -1,148 +0,0 @@ - - - -_anonymous_0 - -initial - - - -s1_1 - - - - - - - - - - - - - -Program -ForInStatement - - -initial->s1_1 - - - - -final - - - - -s1_3 - - - - - - - - - - - - - -Identifier (obj) - - -s1_1->s1_3 - - - - -s1_2 - - - - - - - - - - - - - -VariableDeclaration -VariableDeclarator -Identifier (key) - - -s1_3->s1_2 - - - - -s1_5 - - - - - - - - - - - - - -ForInStatement:exit -Program:exit - - -s1_3->s1_5 - - - - -s1_4 - - - - - - - - - - - - - -BlockStatement -ExpressionStatement -CallExpression -Identifier (foo) -Identifier (key) - - -s1_2->s1_4 - - - - -s1_4->s1_2 - - - - -s1_4->s1_5 - - - - -s1_5->final - - - - - \ No newline at end of file diff --git a/eslint/docs/developer-guide/code-path-analysis/example-forstatement-for-ever.svg b/eslint/docs/developer-guide/code-path-analysis/example-forstatement-for-ever.svg deleted file mode 100644 index b4bdb23..0000000 --- a/eslint/docs/developer-guide/code-path-analysis/example-forstatement-for-ever.svg +++ /dev/null @@ -1,63 +0,0 @@ - - - -_anonymous_0 - -initial - - - -s1_1 - - - - - - - - - - - - - -Program -ForStatement - - -initial->s1_1 - - - - -s1_2 - - - - - - - - - - - - - -BlockStatement -ExpressionStatement -CallExpression -Identifier (foo) - - -s1_1->s1_2 - - - - -s1_2->s1_2 - - - - - \ No newline at end of file diff --git a/eslint/docs/developer-guide/code-path-analysis/example-forstatement.svg b/eslint/docs/developer-guide/code-path-analysis/example-forstatement.svg deleted file mode 100644 index 376d91b..0000000 --- a/eslint/docs/developer-guide/code-path-analysis/example-forstatement.svg +++ /dev/null @@ -1,201 +0,0 @@ - - - -_anonymous_0 - -initial - - - -s1_1 - - - - - - - - - - - - - -Program -ForStatement -VariableDeclaration -VariableDeclarator -Identifier (i) -Literal (0) - - -initial->s1_1 - - - - -final - - - - -s1_2 - - - - - - - - - - - - - -BinaryExpression -Identifier (i) -Literal (10) - - -s1_1->s1_2 - - - - -s1_3 - - - - - - - - - - - - - -BlockStatement -ExpressionStatement -CallExpression -Identifier (foo) -IfStatement -Identifier (b) - - -s1_2->s1_3 - - - - -s1_8 - - - - - - - - - - - - - -ForStatement:exit -Program:exit - - -s1_2->s1_8 - - - - -s1_5 - - - - - - - - - - - - - -BlockStatement -BreakStatement - - -s1_3->s1_5 - - - - -s1_7 - - - - - - - - - - - - - -ExpressionStatement -CallExpression -Identifier (bar) - - -s1_3->s1_7 - - - - -s1_5->s1_8 - - - - -s1_4 - - - - - - - - - - - - - -UpdateExpression -Identifier (i) - - -s1_7->s1_4 - - - - -s1_4->s1_2 - - - - -s1_8->final - - - - - \ No newline at end of file diff --git a/eslint/docs/developer-guide/code-path-analysis/example-hello-world.svg b/eslint/docs/developer-guide/code-path-analysis/example-hello-world.svg deleted file mode 100644 index 26c4038..0000000 --- a/eslint/docs/developer-guide/code-path-analysis/example-hello-world.svg +++ /dev/null @@ -1,48 +0,0 @@ - - - -_anonymous_0 - -initial - - - -s1_1 - - - - - - - - - - - - - -Program -ExpressionStatement -CallExpression -MemberExpression -Identifier (console) -Identifier (log) -Literal (Hello world!) - - -initial->s1_1 - - - - -final - - - - -s1_1->final - - - - - \ No newline at end of file diff --git a/eslint/docs/developer-guide/code-path-analysis/example-ifstatement-chain.svg b/eslint/docs/developer-guide/code-path-analysis/example-ifstatement-chain.svg deleted file mode 100644 index 88c2b6e..0000000 --- a/eslint/docs/developer-guide/code-path-analysis/example-ifstatement-chain.svg +++ /dev/null @@ -1,203 +0,0 @@ - - - -_anonymous_0 - -initial - - - -s1_1 - - - - - - - - - - - - - -Program -IfStatement -Identifier (a) - - -initial->s1_1 - - - - -final - - - - -s1_2 - - - - - - - - - - - - - -BlockStatement -ExpressionStatement -CallExpression -Identifier (foo) - - -s1_1->s1_2 - - - - -s1_3 - - - - - - - - - - - - - -IfStatement -Identifier (b) - - -s1_1->s1_3 - - - - -s1_9 - - - - - - - - - - - - - -IfStatement:exit -Program:exit - - -s1_2->s1_9 - - - - -s1_9->final - - - - -s1_4 - - - - - - - - - - - - - -BlockStatement -ExpressionStatement -CallExpression -Identifier (bar) - - -s1_3->s1_4 - - - - -s1_5 - - - - - - - - - - - - - -IfStatement -Identifier (c) - - -s1_3->s1_5 - - - - -s1_4->s1_9 - - - - -s1_5->s1_9 - - - - -s1_6 - - - - - - - - - - - - - -BlockStatement -ExpressionStatement -CallExpression -Identifier (hoge) - - -s1_5->s1_6 - - - - -s1_6->s1_9 - - - - - \ No newline at end of file diff --git a/eslint/docs/developer-guide/code-path-analysis/example-ifstatement.svg b/eslint/docs/developer-guide/code-path-analysis/example-ifstatement.svg deleted file mode 100644 index 7ea670a..0000000 --- a/eslint/docs/developer-guide/code-path-analysis/example-ifstatement.svg +++ /dev/null @@ -1,122 +0,0 @@ - - - -_anonymous_0 - -initial - - - -s1_1 - - - - - - - - - - - - - -Program -IfStatement -Identifier (a) - - -initial->s1_1 - - - - -final - - - - -s1_2 - - - - - - - - - - - - - -BlockStatement -ExpressionStatement -CallExpression -Identifier (foo) - - -s1_1->s1_2 - - - - -s1_3 - - - - - - - - - - - - - -BlockStatement -ExpressionStatement -CallExpression -Identifier (bar) - - -s1_1->s1_3 - - - - -s1_4 - - - - - - - - - - - - - -IfStatement:exit -Program:exit - - -s1_2->s1_4 - - - - -s1_4->final - - - - -s1_3->s1_4 - - - - - \ No newline at end of file diff --git a/eslint/docs/developer-guide/code-path-analysis/example-switchstatement-has-default.svg b/eslint/docs/developer-guide/code-path-analysis/example-switchstatement-has-default.svg deleted file mode 100644 index 26c45fa..0000000 --- a/eslint/docs/developer-guide/code-path-analysis/example-switchstatement-has-default.svg +++ /dev/null @@ -1,279 +0,0 @@ - - - -_anonymous_0 - -initial - - - -s1_1 - - - - - - - - - - - - - -Program -SwitchStatement -Identifier (a) -SwitchCase -Literal (0) - - -initial->s1_1 - - - - -final - - - - -s1_2 - - - - - - - - - - - - - -ExpressionStatement -CallExpression -Identifier (foo) -BreakStatement - - -s1_1->s1_2 - - - - -s1_4 - - - - - - - - - - - - - -SwitchCase -Literal (1) - - -s1_1->s1_4 - - - - -s1_14 - - - - - - - - - - - - - -SwitchStatement:exit -Program:exit - - -s1_2->s1_14 - - - - -s1_7 - - - - - - - - - - - - - -ExpressionStatement -CallExpression -Identifier (bar) - - -s1_9 - - - - - - - - - - - - - -ExpressionStatement -CallExpression -Identifier (hoge) -BreakStatement - - -s1_7->s1_9 - - - - -s1_9->s1_14 - - - - -s1_12 - - - - - - - - - - - - - -ExpressionStatement -CallExpression -Identifier (fuga) -BreakStatement - - -s1_12->s1_14 - - - - -s1_14->final - - - - -s1_4->s1_7 - - - - -s1_6 - - - - - - - - - - - - - -SwitchCase -Literal (2) - - -s1_4->s1_6 - - - - -s1_6->s1_7 - - - - -s1_8 - - - - - - - - - - - - - -SwitchCase -Literal (3) - - -s1_6->s1_8 - - - - -s1_8->s1_9 - - - - -s1_11 - - - - - - - - - - - - - -SwitchCase - - -s1_8->s1_11 - - - - -s1_11->s1_12 - - - - - \ No newline at end of file diff --git a/eslint/docs/developer-guide/code-path-analysis/example-switchstatement.svg b/eslint/docs/developer-guide/code-path-analysis/example-switchstatement.svg deleted file mode 100644 index 778017e..0000000 --- a/eslint/docs/developer-guide/code-path-analysis/example-switchstatement.svg +++ /dev/null @@ -1,232 +0,0 @@ - - - -_anonymous_0 - -initial - - - -s1_1 - - - - - - - - - - - - - -Program -SwitchStatement -Identifier (a) -SwitchCase -Literal (0) - - -initial->s1_1 - - - - -final - - - - -s1_2 - - - - - - - - - - - - - -ExpressionStatement -CallExpression -Identifier (foo) -BreakStatement - - -s1_1->s1_2 - - - - -s1_4 - - - - - - - - - - - - - -SwitchCase -Literal (1) - - -s1_1->s1_4 - - - - -s1_11 - - - - - - - - - - - - - -SwitchStatement:exit -Program:exit - - -s1_2->s1_11 - - - - -s1_7 - - - - - - - - - - - - - -ExpressionStatement -CallExpression -Identifier (bar) - - -s1_9 - - - - - - - - - - - - - -ExpressionStatement -CallExpression -Identifier (hoge) -BreakStatement - - -s1_7->s1_9 - - - - -s1_9->s1_11 - - - - -s1_11->final - - - - -s1_4->s1_7 - - - - -s1_6 - - - - - - - - - - - - - -SwitchCase -Literal (2) - - -s1_4->s1_6 - - - - -s1_6->s1_7 - - - - -s1_8 - - - - - - - - - - - - - -SwitchCase -Literal (3) - - -s1_6->s1_8 - - - - -s1_8->s1_9 - - - - -s1_8->s1_11 - - - - - \ No newline at end of file diff --git a/eslint/docs/developer-guide/code-path-analysis/example-trystatement-try-catch-finally.svg b/eslint/docs/developer-guide/code-path-analysis/example-trystatement-try-catch-finally.svg deleted file mode 100644 index fbc0083..0000000 --- a/eslint/docs/developer-guide/code-path-analysis/example-trystatement-try-catch-finally.svg +++ /dev/null @@ -1,137 +0,0 @@ - - - -_anonymous_0 - -initial - - - -s1_1 - - - - - - - - - - - - - -Program -TryStatement -BlockStatement -ExpressionStatement -CallExpression -Identifier (foo) - - -initial->s1_1 - - - - -final - - - - -s1_2 - - - - - - - - - - - - - -ExpressionStatement -CallExpression -Identifier (bar) - - -s1_1->s1_2 - - - - -s1_3 - - - - - - - - - - - - - -CatchClause -Identifier (err) -BlockStatement -ExpressionStatement -CallExpression -Identifier (hoge) -Identifier (err) - - -s1_1->s1_3 - - - - -s1_2->s1_3 - - - - -s1_4 - - - - - - - - - - - - - -BlockStatement -ExpressionStatement -CallExpression -Identifier (fuga) -ExpressionStatement -CallExpression -Identifier (last) - - -s1_2->s1_4 - - - - -s1_3->s1_4 - - - - -s1_4->final - - - - - \ No newline at end of file diff --git a/eslint/docs/developer-guide/code-path-analysis/example-trystatement-try-catch.svg b/eslint/docs/developer-guide/code-path-analysis/example-trystatement-try-catch.svg deleted file mode 100644 index c6f1879..0000000 --- a/eslint/docs/developer-guide/code-path-analysis/example-trystatement-try-catch.svg +++ /dev/null @@ -1,186 +0,0 @@ - - - -_anonymous_0 - -initial - - - -s1_1 - - - - - - - - - - - - - -Program -TryStatement -BlockStatement -ExpressionStatement -CallExpression -Identifier (foo) - - -initial->s1_1 - - - - -final - - - - -s1_2 - - - - - - - - - - - - - -IfStatement -Identifier (a) - - -s1_1->s1_2 - - - - -s1_6 - - - - - - - - - - - - - -CatchClause -Identifier (err) -BlockStatement -ExpressionStatement -CallExpression -Identifier (hoge) -Identifier (err) - - -s1_1->s1_6 - - - - -s1_3 - - - - - - - - - - - - - -BlockStatement -ThrowStatement -NewExpression -Identifier (Error) - - -s1_2->s1_3 - - - - -s1_5 - - - - - - - - - - - - - -ExpressionStatement -CallExpression -Identifier (bar) - - -s1_2->s1_5 - - - - -s1_3->s1_6 - - - - -s1_5->s1_6 - - - - -s1_7 - - - - - - - - - - - - - -ExpressionStatement -CallExpression -Identifier (last) - - -s1_5->s1_7 - - - - -s1_6->s1_7 - - - - -s1_7->final - - - - - \ No newline at end of file diff --git a/eslint/docs/developer-guide/code-path-analysis/example-trystatement-try-finally.svg b/eslint/docs/developer-guide/code-path-analysis/example-trystatement-try-finally.svg deleted file mode 100644 index 8b1fb92..0000000 --- a/eslint/docs/developer-guide/code-path-analysis/example-trystatement-try-finally.svg +++ /dev/null @@ -1,139 +0,0 @@ - - - -_anonymous_0 - -initial - - - -s1_1 - - - - - - - - - - - - - -Program -TryStatement -BlockStatement -ExpressionStatement -CallExpression -Identifier (foo) - - -initial->s1_1 - - - - -final - - - - -thrown - -✘ - - -s1_2 - - - - - - - - - - - - - -ExpressionStatement -CallExpression -Identifier (bar) - - -s1_1->s1_2 - - - - -s1_4 - - - - - - - - - - - - - -BlockStatement -ExpressionStatement -CallExpression -Identifier (fuga) - - -s1_1->s1_4 - - - - -s1_3 - - - - - - - - - - - - - -BlockStatement -ExpressionStatement -CallExpression -Identifier (fuga) -ExpressionStatement -CallExpression -Identifier (last) - - -s1_2->s1_3 - - - - -s1_2->s1_4 - - - - -s1_3->final - - - - -s1_4->thrown - - - - - \ No newline at end of file diff --git a/eslint/docs/developer-guide/code-path-analysis/example-when-there-is-a-function-f.svg b/eslint/docs/developer-guide/code-path-analysis/example-when-there-is-a-function-f.svg deleted file mode 100644 index a912700..0000000 --- a/eslint/docs/developer-guide/code-path-analysis/example-when-there-is-a-function-f.svg +++ /dev/null @@ -1,99 +0,0 @@ - - - -_anonymous_0 - -initial - - - -s2_1 - - - - - - - - - - - - - -FunctionDeclaration -Identifier (foo) -Identifier (a) -BlockStatement -IfStatement -Identifier (a) - - -initial->s2_1 - - - - -final - - - - -s2_2 - - - - - - - - - - - - - -BlockStatement -ReturnStatement - - -s2_1->s2_2 - - - - -s2_4 - - - - - - - - - - - - - -ExpressionStatement -CallExpression -Identifier (bar) - - -s2_1->s2_4 - - - - -s2_2->final - - - - -s2_4->final - - - - - \ No newline at end of file diff --git a/eslint/docs/developer-guide/code-path-analysis/example-when-there-is-a-function-g.svg b/eslint/docs/developer-guide/code-path-analysis/example-when-there-is-a-function-g.svg deleted file mode 100644 index 7bde3ea..0000000 --- a/eslint/docs/developer-guide/code-path-analysis/example-when-there-is-a-function-g.svg +++ /dev/null @@ -1,47 +0,0 @@ - - - -_anonymous_0 - -initial - - - -s1_1 - - - - - - - - - - - - - -Program -FunctionDeclaration -ExpressionStatement -CallExpression -Identifier (foo) -Literal (false) - - -initial->s1_1 - - - - -final - - - - -s1_1->final - - - - - \ No newline at end of file diff --git a/eslint/docs/developer-guide/code-path-analysis/example-whilestatement.svg b/eslint/docs/developer-guide/code-path-analysis/example-whilestatement.svg deleted file mode 100644 index d833dc0..0000000 --- a/eslint/docs/developer-guide/code-path-analysis/example-whilestatement.svg +++ /dev/null @@ -1,172 +0,0 @@ - - - -_anonymous_0 - -initial - - - -s1_1 - - - - - - - - - - - - - -Program -WhileStatement - - -initial->s1_1 - - - - -final - - - - -s1_2 - - - - - - - - - - - - - -Identifier (a) - - -s1_1->s1_2 - - - - -s1_3 - - - - - - - - - - - - - -BlockStatement -ExpressionStatement -CallExpression -Identifier (foo) -IfStatement -Identifier (b) - - -s1_2->s1_3 - - - - -s1_7 - - - - - - - - - - - - - -WhileStatement:exit -Program:exit - - -s1_2->s1_7 - - - - -s1_4 - - - - - - - - - - - - - -BlockStatement -ContinueStatement - - -s1_3->s1_4 - - - - -s1_6 - - - - - - - - - - - - - -ExpressionStatement -CallExpression -Identifier (bar) - - -s1_3->s1_6 - - - - -s1_4->s1_2 - - - - -s1_7->final - - - - -s1_6->s1_2 - - - - - \ No newline at end of file diff --git a/eslint/docs/developer-guide/code-path-analysis/helo.svg b/eslint/docs/developer-guide/code-path-analysis/helo.svg deleted file mode 100644 index e2dd9f2..0000000 --- a/eslint/docs/developer-guide/code-path-analysis/helo.svg +++ /dev/null @@ -1,113 +0,0 @@ - - - -Code Path 1 -initial - - -s1_1 - - - - - - - - - - - - - -Program -IfStatement -LogicalExpression -Identifier (a) - -initial->s1_1 - - - -final - - - -s1_2 - - - - - - - - - - - - - -Identifier (b) - -s1_1->s1_2 - - - -s1_4 - - - - - - - - - - - - - -ExpressionStatement -CallExpression -Identifier (bar) - -s1_1->s1_4 - - - -s1_3 - - - - - - - - - - - - - -BlockStatement -ExpressionStatement -CallExpression -Identifier (foo) - -s1_2->s1_3 - - - -s1_2->s1_4 - - - -s1_3->s1_4 - - - -s1_4->final - - - - - \ No newline at end of file diff --git a/eslint/docs/developer-guide/code-path-analysis/loop-event-example-for-1.svg b/eslint/docs/developer-guide/code-path-analysis/loop-event-example-for-1.svg deleted file mode 100644 index 4975540..0000000 --- a/eslint/docs/developer-guide/code-path-analysis/loop-event-example-for-1.svg +++ /dev/null @@ -1,84 +0,0 @@ - - - -_anonymous_0 - -initial - - - -s1_1 - - - - - - - - - - - - - -Program -ForStatement -VariableDeclaration -VariableDeclarator -Identifier (i) -Literal (0) - - -initial->s1_1 - - - - -s1_2 - - - - - - - - - - - - - -BinaryExpression -Identifier (i) -Literal (10) - - -s1_1->s1_2 - - - - -s1_4 - - - - - - - - - - - - - -UpdateExpression -Identifier (i) - - -s1_2->s1_4 - - - - - \ No newline at end of file diff --git a/eslint/docs/developer-guide/code-path-analysis/loop-event-example-for-2.svg b/eslint/docs/developer-guide/code-path-analysis/loop-event-example-for-2.svg deleted file mode 100644 index d35bddf..0000000 --- a/eslint/docs/developer-guide/code-path-analysis/loop-event-example-for-2.svg +++ /dev/null @@ -1,110 +0,0 @@ - - - -_anonymous_0 - -initial - - - -s1_1 - - - - - - - - - - - - - -Program -ForStatement -VariableDeclaration -VariableDeclarator -Identifier (i) -Literal (0) - - -initial->s1_1 - - - - -s1_2 - - - - - - - - - - - - - -BinaryExpression -Identifier (i) -Literal (10) - - -s1_1->s1_2 - - - - -s1_3 - - - - - - - - - - - - - -BlockStatement -ExpressionStatement -CallExpression -Identifier (foo) -Identifier (i) - - -s1_2->s1_3 - - - - -s1_4 - - - - - - - - - - - - - -UpdateExpression -Identifier (i) - - -s1_2->s1_4 - - - - - \ No newline at end of file diff --git a/eslint/docs/developer-guide/code-path-analysis/loop-event-example-for-3.svg b/eslint/docs/developer-guide/code-path-analysis/loop-event-example-for-3.svg deleted file mode 100644 index a1af0e6..0000000 --- a/eslint/docs/developer-guide/code-path-analysis/loop-event-example-for-3.svg +++ /dev/null @@ -1,115 +0,0 @@ - - - -_anonymous_0 - -initial - - - -s1_1 - - - - - - - - - - - - - -Program -ForStatement -VariableDeclaration -VariableDeclarator -Identifier (i) -Literal (0) - - -initial->s1_1 - - - - -s1_2 - - - - - - - - - - - - - -BinaryExpression -Identifier (i) -Literal (10) - - -s1_1->s1_2 - - - - -s1_3 - - - - - - - - - - - - - -BlockStatement -ExpressionStatement -CallExpression -Identifier (foo) -Identifier (i) - - -s1_2->s1_3 - - - - -s1_4 - - - - - - - - - - - - - -UpdateExpression -Identifier (i) - - -s1_3->s1_4 - - - - -s1_4->s1_2 - - - - - \ No newline at end of file diff --git a/eslint/docs/developer-guide/code-path-analysis/loop-event-example-for-4.svg b/eslint/docs/developer-guide/code-path-analysis/loop-event-example-for-4.svg deleted file mode 100644 index a4ee87e..0000000 --- a/eslint/docs/developer-guide/code-path-analysis/loop-event-example-for-4.svg +++ /dev/null @@ -1,115 +0,0 @@ - - - -_anonymous_0 - -initial - - - -s1_1 - - - - - - - - - - - - - -Program -ForStatement -VariableDeclaration -VariableDeclarator -Identifier (i) -Literal (0) - - -initial->s1_1 - - - - -s1_2 - - - - - - - - - - - - - -BinaryExpression -Identifier (i) -Literal (10) - - -s1_1->s1_2 - - - - -s1_3 - - - - - - - - - - - - - -BlockStatement -ExpressionStatement -CallExpression -Identifier (foo) -Identifier (i) - - -s1_2->s1_3 - - - - -s1_4 - - - - - - - - - - - - - -UpdateExpression -Identifier (i) - - -s1_3->s1_4 - - - - -s1_4->s1_2 - - - - - \ No newline at end of file diff --git a/eslint/docs/developer-guide/code-path-analysis/loop-event-example-for-5.svg b/eslint/docs/developer-guide/code-path-analysis/loop-event-example-for-5.svg deleted file mode 100644 index cba3a01..0000000 --- a/eslint/docs/developer-guide/code-path-analysis/loop-event-example-for-5.svg +++ /dev/null @@ -1,149 +0,0 @@ - - - -_anonymous_0 - -initial - - - -s1_1 - - - - - - - - - - - - - -Program -ForStatement -VariableDeclaration -VariableDeclarator -Identifier (i) -Literal (0) - - -initial->s1_1 - - - - -final - - - - -s1_2 - - - - - - - - - - - - - -BinaryExpression -Identifier (i) -Literal (10) - - -s1_1->s1_2 - - - - -s1_3 - - - - - - - - - - - - - -BlockStatement -ExpressionStatement -CallExpression -Identifier (foo) -Identifier (i) - - -s1_2->s1_3 - - - - -s1_5 - - - - - - - - - - - - - -ExpressionStatement -CallExpression -Identifier (bar) - - -s1_2->s1_5 - - - - -s1_4 - - - - - - - - - - - - - -UpdateExpression -Identifier (i) - - -s1_3->s1_4 - - - - -s1_4->s1_2 - - - - -s1_5->final - - - - - \ No newline at end of file diff --git a/eslint/docs/developer-guide/code-path-analysis/loop-event-example-while-1.svg b/eslint/docs/developer-guide/code-path-analysis/loop-event-example-while-1.svg deleted file mode 100644 index 8036529..0000000 --- a/eslint/docs/developer-guide/code-path-analysis/loop-event-example-while-1.svg +++ /dev/null @@ -1,82 +0,0 @@ - - - -_anonymous_0 - -initial - - - -s1_1 - - - - - - - - - - - - - -Program -WhileStatement - - -initial->s1_1 - - - - -s1_2 - - - - - - - - - - - - - -Identifier (a) - - -s1_1->s1_2 - - - - -s1_3 - - - - - - - - - - - - - -BlockStatement -ExpressionStatement -AssignmentExpression -Identifier (a) -CallExpression -Identifier (foo) - - -s1_2->s1_3 - - - - - \ No newline at end of file diff --git a/eslint/docs/developer-guide/code-path-analysis/loop-event-example-while-2.svg b/eslint/docs/developer-guide/code-path-analysis/loop-event-example-while-2.svg deleted file mode 100644 index 63355dd..0000000 --- a/eslint/docs/developer-guide/code-path-analysis/loop-event-example-while-2.svg +++ /dev/null @@ -1,87 +0,0 @@ - - - -_anonymous_0 - -initial - - - -s1_1 - - - - - - - - - - - - - -Program -WhileStatement - - -initial->s1_1 - - - - -s1_2 - - - - - - - - - - - - - -Identifier (a) - - -s1_1->s1_2 - - - - -s1_3 - - - - - - - - - - - - - -BlockStatement -ExpressionStatement -AssignmentExpression -Identifier (a) -CallExpression -Identifier (foo) - - -s1_2->s1_3 - - - - -s1_3->s1_2 - - - - - \ No newline at end of file diff --git a/eslint/docs/developer-guide/code-path-analysis/loop-event-example-while-3.svg b/eslint/docs/developer-guide/code-path-analysis/loop-event-example-while-3.svg deleted file mode 100644 index cb21c43..0000000 --- a/eslint/docs/developer-guide/code-path-analysis/loop-event-example-while-3.svg +++ /dev/null @@ -1,121 +0,0 @@ - - - -_anonymous_0 - -initial - - - -s1_1 - - - - - - - - - - - - - -Program -WhileStatement - - -initial->s1_1 - - - - -final - - - - -s1_2 - - - - - - - - - - - - - -Identifier (a) - - -s1_1->s1_2 - - - - -s1_3 - - - - - - - - - - - - - -BlockStatement -ExpressionStatement -AssignmentExpression -Identifier (a) -CallExpression -Identifier (foo) - - -s1_2->s1_3 - - - - -s1_4 - - - - - - - - - - - - - -ExpressionStatement -CallExpression -Identifier (bar) - - -s1_2->s1_4 - - - - -s1_3->s1_2 - - - - -s1_4->final - - - - - \ No newline at end of file diff --git a/eslint/docs/package.json b/eslint/docs/package.json new file mode 100644 index 0000000..788af86 --- /dev/null +++ b/eslint/docs/package.json @@ -0,0 +1,48 @@ +{ + "name": "docs-eslint", + "private": true, + "version": "8.23.1", + "description": "", + "main": "index.js", + "keywords": [], + "author": "", + "license": "ISC", + "files": [], + "scripts": { + "images": "imagemin '_site/assets/images' --out-dir='_site/assets/images'", + "watch:sass": "sass --watch --poll src/assets/scss:src/assets/css", + "watch:eleventy": "eleventy --serve --port=2023", + "build:sass": "sass --style=compressed src/assets/scss:src/assets/css --no-source-map", + "build:eleventy": "npx @11ty/eleventy", + "start": "npm-run-all build:sass --parallel watch:*", + "build": "npm-run-all build:sass build:eleventy images" + }, + "devDependencies": { + "@11ty/eleventy": "^1.0.1", + "@11ty/eleventy-img": "^1.0.0", + "@11ty/eleventy-navigation": "^0.3.2", + "@11ty/eleventy-plugin-rss": "^1.1.1", + "@11ty/eleventy-plugin-syntaxhighlight": "^3.1.2", + "@types/markdown-it": "^12.2.3", + "algoliasearch": "^4.12.1", + "dom-parser": "^0.1.6", + "eleventy-plugin-nesting-toc": "^1.3.0", + "eleventy-plugin-page-assets": "^0.3.0", + "eleventy-plugin-reading-time": "^0.0.1", + "github-slugger": "^1.4.0", + "imagemin": "^8.0.1", + "imagemin-cli": "^7.0.0", + "js-yaml": "^3.14.1", + "luxon": "^2.4.0", + "markdown-it": "^12.2.0", + "markdown-it-anchor": "^8.1.2", + "markdown-it-container": "^3.0.0", + "netlify-cli": "^10.3.1", + "npm-run-all": "^4.1.5", + "rimraf": "^3.0.2", + "sass": "^1.52.1" + }, + "engines": { + "node": ">=14.0.0" + } +} diff --git a/eslint/docs/rules/id-blacklist.md b/eslint/docs/rules/id-blacklist.md deleted file mode 100644 index 87a7d95..0000000 --- a/eslint/docs/rules/id-blacklist.md +++ /dev/null @@ -1,3 +0,0 @@ -# disallow specified identifiers (id-blacklist) - -This rule was **deprecated** in ESLint v7.5.0 and replaced by the [id-denylist](id-denylist.md) rule. diff --git a/eslint/docs/rules/no-control-regex.md b/eslint/docs/rules/no-control-regex.md deleted file mode 100644 index 01a55fb..0000000 --- a/eslint/docs/rules/no-control-regex.md +++ /dev/null @@ -1,34 +0,0 @@ -# disallow control characters in regular expressions (no-control-regex) - -Control characters are special, invisible characters in the ASCII range 0-31. These characters are rarely used in JavaScript strings so a regular expression containing these characters is most likely a mistake. - -## Rule Details - -This rule disallows control characters in regular expressions. - -Examples of **incorrect** code for this rule: - -```js -/*eslint no-control-regex: "error"*/ - -var pattern1 = /\x1f/; -var pattern2 = new RegExp("\x1f"); -``` - -Examples of **correct** code for this rule: - -```js -/*eslint no-control-regex: "error"*/ - -var pattern1 = /\x20/; -var pattern2 = new RegExp("\x20"); -``` - -## When Not To Use It - -If you need to use control character pattern matching, then you should turn this rule off. - -## Related Rules - -* [no-div-regex](no-div-regex.md) -* [no-regex-spaces](no-regex-spaces.md) diff --git a/eslint/docs/src/_data/config.json b/eslint/docs/src/_data/config.json new file mode 100644 index 0000000..4acb482 --- /dev/null +++ b/eslint/docs/src/_data/config.json @@ -0,0 +1,4 @@ +{ + "lang": "en", + "version": "7.26.0" +} diff --git a/eslint/docs/src/_data/eslintVersion.js b/eslint/docs/src/_data/eslintVersion.js new file mode 100644 index 0000000..2496427 --- /dev/null +++ b/eslint/docs/src/_data/eslintVersion.js @@ -0,0 +1,34 @@ +/** + * @fileoverview Data file for package information + * @author Nicholas C. Zakas + */ + +//----------------------------------------------------------------------------- +// Requirements +//----------------------------------------------------------------------------- + +const fs = require("fs"); +const path = require("path"); + +//----------------------------------------------------------------------------- +// Initialization +//----------------------------------------------------------------------------- + +const pkgPath = path.resolve(__dirname, "../../package.json"); +const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf8")); +const { ESLINT_VERSION } = process.env; + +//----------------------------------------------------------------------------- +// Exports +//----------------------------------------------------------------------------- + +/* + * Because we want to differentiate between the development branch and the + * most recent release, we need a way to override the version. The + * ESLINT_VERSION environment variable allows us to set this to override + * the value displayed on the website. The most common case is we will set + * this equal to "HEAD" for the version that is currently in development on + * GitHub. Otherwise, we will use the version from package.json. + */ + +module.exports = ESLINT_VERSION ?? pkg.version; diff --git a/eslint/docs/src/_data/further_reading_links.json b/eslint/docs/src/_data/further_reading_links.json new file mode 100644 index 0000000..dc81f7f --- /dev/null +++ b/eslint/docs/src/_data/further_reading_links.json @@ -0,0 +1,702 @@ +{ + "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/set": { + "domain": "developer.mozilla.org", + "url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/set", + "logo": "https://developer.mozilla.org/favicon-48x48.cbbd161b.png", + "title": "setter - JavaScript | MDN", + "description": "The set syntax binds an object property to a function to be called when there is an attempt to set that property." + }, + "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get": { + "domain": "developer.mozilla.org", + "url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get", + "logo": "https://developer.mozilla.org/favicon-48x48.cbbd161b.png", + "title": "getter - JavaScript | MDN", + "description": "The get syntax binds an object property to a function that will be called when that property is looked up." + }, + "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects": { + "domain": "developer.mozilla.org", + "url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects", + "logo": "https://developer.mozilla.org/favicon-48x48.cbbd161b.png", + "title": "Working with objects - JavaScript | MDN", + "description": "JavaScript is designed on a simple object-based paradigm. An object is a collection of properties, and a property is an association between a name (or key) and a value. A property’s value can be a function, in which case the property is known as a method. In addition to objects that are predefined i…" + }, + "https://github.com/airbnb/javascript#arrows--one-arg-parens": { + "domain": "github.com", + "url": "https://github.com/airbnb/javascript#arrows--one-arg-parens", + "logo": "https://github.com/fluidicon.png", + "title": "GitHub - airbnb/javascript: JavaScript Style Guide", + "description": "JavaScript Style Guide. Contribute to airbnb/javascript development by creating an account on GitHub." + }, + "https://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html": { + "domain": "www.adequatelygood.com", + "url": "https://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html", + "logo": "https://www.adequatelygood.com/favicon.ico", + "title": "JavaScript Scoping and Hoisting", + "description": null + }, + "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var#var_hoisting": { + "domain": "developer.mozilla.org", + "url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var#var_hoisting", + "logo": "https://developer.mozilla.org/favicon-48x48.cbbd161b.png", + "title": "var - JavaScript | MDN", + "description": "The var statement declares a function-scoped or globally-scoped variable, optionally initializing it to a value." + }, + "https://en.wikipedia.org/wiki/Indent_style": { + "domain": "en.wikipedia.org", + "url": "https://en.wikipedia.org/wiki/Indent_style", + "logo": "https://en.wikipedia.org/static/apple-touch/wikipedia.png", + "title": "Indentation style - Wikipedia", + "description": null + }, + "https://github.com/maxogden/art-of-node#callbacks": { + "domain": "github.com", + "url": "https://github.com/maxogden/art-of-node#callbacks", + "logo": "https://github.com/fluidicon.png", + "title": "GitHub - maxogden/art-of-node: a short introduction to node.js", + "description": ":snowflake: a short introduction to node.js. Contribute to maxogden/art-of-node development by creating an account on GitHub." + }, + "https://web.archive.org/web/20171224042620/https://docs.nodejitsu.com/articles/errors/what-are-the-error-conventions/": { + "domain": "web.archive.org", + "url": "https://web.archive.org/web/20171224042620/https://docs.nodejitsu.com/articles/errors/what-are-the-error-conventions/", + "logo": "https://archive.org/favicon.ico", + "title": "What are the error conventions? - docs.nodejitsu.com", + "description": "docs.nodejitsu.com is a growing collection of how-to articles for node.js, written by the community and curated by Nodejitsu and friends. These articles range from basic to advanced, and provide relevant code samples and insights into the design and philosophy of node itself." + }, + "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes": { + "domain": "developer.mozilla.org", + "url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes", + "logo": "https://developer.mozilla.org/favicon-48x48.cbbd161b.png", + "title": "Classes - JavaScript | MDN", + "description": "Classes are a template for creating objects. They encapsulate data with code to work on that data. Classes in JS are built on prototypes but also have some syntax and semantics that are not shared with ES5 class-like semantics." + }, + "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/static": { + "domain": "developer.mozilla.org", + "url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/static", + "logo": "https://developer.mozilla.org/favicon-48x48.cbbd161b.png", + "title": "static - JavaScript | MDN", + "description": "The static keyword defines a static method or property for a class, or a class static initialization block (see the link for more information about this usage). Neither static methods nor static properties can be called on instances of the class. Instead, they’re called on the class itself." + }, + "https://www.crockford.com/code.html": { + "domain": "www.crockford.com", + "url": "https://www.crockford.com/code.html", + "logo": "https://www.crockford.com/favicon.png", + "title": "Code Conventions for the JavaScript Programming Language", + "description": null + }, + "https://dojotoolkit.org/reference-guide/1.9/developer/styleguide.html": { + "domain": "dojotoolkit.org", + "url": "https://dojotoolkit.org/reference-guide/1.9/developer/styleguide.html", + "logo": "https://dojotoolkit.org/images/favicons/apple-touch-icon-152x152.png", + "title": "Dojo Style Guide — The Dojo Toolkit - Reference Guide", + "description": null + }, + "https://gist.github.com/isaacs/357981": { + "domain": "gist.github.com", + "url": "https://gist.github.com/isaacs/357981", + "logo": "https://gist.github.com/fluidicon.png", + "title": "A better coding convention for lists and object literals in JavaScript", + "description": "A better coding convention for lists and object literals in JavaScript - comma-first-var.js" + }, + "https://en.wikipedia.org/wiki/Cyclomatic_complexity": { + "domain": "en.wikipedia.org", + "url": "https://en.wikipedia.org/wiki/Cyclomatic_complexity", + "logo": "https://en.wikipedia.org/static/apple-touch/wikipedia.png", + "title": "Cyclomatic complexity - Wikipedia", + "description": null + }, + "https://ariya.io/2012/12/complexity-analysis-of-javascript-code": { + "domain": "ariya.io", + "url": "https://ariya.io/2012/12/complexity-analysis-of-javascript-code", + "logo": "https://ariya.io/favicon.ico", + "title": "Complexity Analysis of JavaScript Code", + "description": "Nobody likes to read complex code, especially if it’s someone’s else code. A preventive approach to block any complex code entering the application is by watching its complexity carefully." + }, + "https://craftsmanshipforsoftware.com/2015/05/25/complexity-for-javascript/": { + "domain": "craftsmanshipforsoftware.com", + "url": "https://craftsmanshipforsoftware.com/2015/05/25/complexity-for-javascript/", + "logo": "https://s0.wp.com/i/webclip.png", + "title": "Complexity for JavaScript", + "description": "The control of complexity control presents the core problem of software development. The huge variety of decisions a developer faces on a day-to-day basis cry for methods of controlling and contain…" + }, + "https://web.archive.org/web/20160808115119/http://jscomplexity.org/complexity": { + "domain": "web.archive.org", + "url": "https://web.archive.org/web/20160808115119/http://jscomplexity.org/complexity", + "logo": "https://archive.org/favicon.ico", + "title": "About complexity | JSComplexity.org", + "description": "A discussion of software complexity metrics and how they are calculated." + }, + "https://github.com/eslint/eslint/issues/4808#issuecomment-167795140": { + "domain": "github.com", + "url": "https://github.com/eslint/eslint/issues/4808#issuecomment-167795140", + "logo": "https://github.com/fluidicon.png", + "title": "Complexity has no default · Issue #4808 · eslint/eslint", + "description": "Enabling the complexity rule with only a severity has no effect. We have tried to give sane defaults to all rules, and I think this should be no exception. I don't know what a good number would..." + }, + "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/switch": { + "domain": "developer.mozilla.org", + "url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/switch", + "logo": "https://developer.mozilla.org/favicon-48x48.cbbd161b.png", + "title": "switch - JavaScript | MDN", + "description": "The switch statement evaluates an expression, matching the expression’s value to a case clause, and executes statements associated with that case, as well as statements in cases that follow the matching case." + }, + "https://web.archive.org/web/20201112040809/http://markdaggett.com/blog/2013/02/15/functions-explained/": { + "domain": "web.archive.org", + "url": "https://web.archive.org/web/20201112040809/http://markdaggett.com/blog/2013/02/15/functions-explained/", + "logo": "https://web.archive.org/web/20201112040809im_/http://markdaggett.com/favicon.ico", + "title": "Functions Explained - Mark Daggett’s Blog", + "description": "A Deep Dive into JavaScript Functions\nBased on my readership I have to assume most of you are familiar with JavaScript already. Therefore, it may …" + }, + "https://2ality.com/2015/09/function-names-es6.html": { + "domain": "2ality.com", + "url": "https://2ality.com/2015/09/function-names-es6.html", + "logo": "https://2ality.com/img/favicon.png", + "title": "The names of functions in ES6", + "description": null + }, + "https://leanpub.com/understandinges6/read/#leanpub-auto-generators": { + "domain": "leanpub.com", + "url": "https://leanpub.com/understandinges6/read/#leanpub-auto-generators", + "logo": "https://leanpub.com/understandinges6/read/favicons/mstile-310x310.png", + "title": "Read Understanding ECMAScript 6 | Leanpub", + "description": null + }, + "https://leanpub.com/understandinges6/read/#leanpub-auto-accessor-properties": { + "domain": "leanpub.com", + "url": "https://leanpub.com/understandinges6/read/#leanpub-auto-accessor-properties", + "logo": "https://leanpub.com/understandinges6/read/favicons/mstile-310x310.png", + "title": "Read Understanding ECMAScript 6 | Leanpub", + "description": null + }, + "https://javascriptweblog.wordpress.com/2011/01/04/exploring-javascript-for-in-loops/": { + "domain": "javascriptweblog.wordpress.com", + "url": "https://javascriptweblog.wordpress.com/2011/01/04/exploring-javascript-for-in-loops/", + "logo": "https://s1.wp.com/i/favicon.ico", + "title": "Exploring JavaScript for-in loops", + "description": "The for-in loop is the only cross-browser technique for iterating the properties of generic objects. There’s a bunch of literature about the dangers of using for-in to iterate arrays and when…" + }, + "https://2ality.com/2012/01/objects-as-maps.html": { + "domain": "2ality.com", + "url": "https://2ality.com/2012/01/objects-as-maps.html", + "logo": "https://2ality.com/img/favicon.png", + "title": "The pitfalls of using objects as maps in JavaScript", + "description": null + }, + "https://web.archive.org/web/20160725154648/http://www.mind2b.com/component/content/article/24-software-module-size-and-file-size": { + "domain": "web.archive.org", + "url": "https://web.archive.org/web/20160725154648/http://www.mind2b.com/component/content/article/24-software-module-size-and-file-size", + "logo": "https://archive.org/favicon.ico", + "title": "Software Module size and file size", + "description": null + }, + "http://book.mixu.net/node/ch7.html": { + "domain": "book.mixu.net", + "url": "http://book.mixu.net/node/ch7.html", + "logo": null, + "title": "7. Control flow - Mixu’s Node book", + "description": null + }, + "https://web.archive.org/web/20220104141150/https://howtonode.org/control-flow": { + "domain": "web.archive.org", + "url": "https://web.archive.org/web/20220104141150/https://howtonode.org/control-flow", + "logo": "https://web.archive.org/web/20220104141150im_/https://howtonode.org/favicon.ico", + "title": "Control Flow in Node - How To Node - NodeJS", + "description": "Learn the zen of coding in NodeJS." + }, + "https://web.archive.org/web/20220127215850/https://howtonode.org/control-flow-part-ii": { + "domain": "web.archive.org", + "url": "https://web.archive.org/web/20220127215850/https://howtonode.org/control-flow-part-ii", + "logo": "https://web.archive.org/web/20220127215850im_/https://howtonode.org/favicon.ico", + "title": "Control Flow in Node Part II - How To Node - NodeJS", + "description": "Learn the zen of coding in NodeJS." + }, + "https://nodejs.org/api/buffer.html": { + "domain": "nodejs.org", + "url": "https://nodejs.org/api/buffer.html", + "logo": "https://nodejs.org/favicon.ico", + "title": "Buffer | Node.js v18.2.0 Documentation", + "description": null + }, + "https://github.com/ChALkeR/notes/blob/master/Lets-fix-Buffer-API.md": { + "domain": "github.com", + "url": "https://github.com/ChALkeR/notes/blob/master/Lets-fix-Buffer-API.md", + "logo": "https://github.com/fluidicon.png", + "title": "notes/Lets-fix-Buffer-API.md at master · ChALkeR/notes", + "description": "Some public notes. Contribute to ChALkeR/notes development by creating an account on GitHub." + }, + "https://github.com/nodejs/node/issues/4660": { + "domain": "github.com", + "url": "https://github.com/nodejs/node/issues/4660", + "logo": "https://github.com/fluidicon.png", + "title": "Buffer(number) is unsafe · Issue #4660 · nodejs/node", + "description": "tl;dr This issue proposes: Change new Buffer(number) to return safe, zeroed-out memory Create a new API for creating uninitialized Buffers, Buffer.alloc(number) Update: Jan 15, 2016 Upon further co..." + }, + "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/debugger": { + "domain": "developer.mozilla.org", + "url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/debugger", + "logo": "https://developer.mozilla.org/favicon-48x48.cbbd161b.png", + "title": "debugger - JavaScript | MDN", + "description": "The debugger statement invokes any available debugging functionality, such as setting a breakpoint. If no debugging functionality is available, this statement has no effect." + }, + "https://ericlippert.com/2003/11/01/eval-is-evil-part-one/": { + "domain": "ericlippert.com", + "url": "https://ericlippert.com/2003/11/01/eval-is-evil-part-one/", + "logo": "https://s1.wp.com/i/favicon.ico", + "title": "Eval is evil, part one", + "description": "The eval method — which takes a string containing JScript code, compiles it and runs it — is probably the most powerful and most misused method in JScript. There are a few scenarios in …" + }, + "https://javascriptweblog.wordpress.com/2010/04/19/how-evil-is-eval/": { + "domain": "javascriptweblog.wordpress.com", + "url": "https://javascriptweblog.wordpress.com/2010/04/19/how-evil-is-eval/", + "logo": "https://s1.wp.com/i/favicon.ico", + "title": "How evil is eval?", + "description": "“eval is Evil: The eval function is the most misused feature of JavaScript. Avoid it” Douglas Crockford in JavaScript: The Good Parts I like The Good Parts. It’s essential reading…" + }, + "https://bocoup.com/blog/the-catch-with-try-catch": { + "domain": "bocoup.com", + "url": "https://bocoup.com/blog/the-catch-with-try-catch", + "logo": "https://static3.bocoup.com/assets/2015/10/06163533/favicon.png", + "title": "The", + "description": "I’ve recently been working on an update to JavaScript Debug, which has me doing a lot of cross-browser testing, and I noticed a few “interesting quirks” with try…catch in Internet Explorer 6-8 that I couldn’t find documented anywhere." + }, + "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind": { + "domain": "developer.mozilla.org", + "url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind", + "logo": "https://developer.mozilla.org/favicon-48x48.cbbd161b.png", + "title": "Function.prototype.bind() - JavaScript | MDN", + "description": "The bind() method creates a new function that, when called, has its this keyword set to the provided value, with a given sequence of arguments preceding any provided when the new function is called." + }, + "https://www.smashingmagazine.com/2014/01/understanding-javascript-function-prototype-bind/": { + "domain": "www.smashingmagazine.com", + "url": "https://www.smashingmagazine.com/2014/01/understanding-javascript-function-prototype-bind/", + "logo": "https://www.smashingmagazine.com/images/favicon/apple-touch-icon.png", + "title": "Understanding JavaScript Bind () — Smashing Magazine", + "description": "Function binding is probably your least concern when beginning with JavaScript, but when you realize that you need a solution to the problem of how to keep the context of “this” within another function, then you might not realize that what you actually need is Function.prototype.bind()." + }, + "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence": { + "domain": "developer.mozilla.org", + "url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence", + "logo": "https://developer.mozilla.org/favicon-48x48.cbbd161b.png", + "title": "Operator precedence - JavaScript | MDN", + "description": "Operator precedence determines how operators are parsed concerning each other. Operators with higher precedence become the operands of operators with lower precedence." + }, + "https://es5.github.io/#C": { + "domain": "es5.github.io", + "url": "https://es5.github.io/#C", + "logo": "https://es5.github.io/favicon.ico", + "title": "Annotated ES5", + "description": null + }, + "https://benalman.com/news/2010/11/immediately-invoked-function-expression/": { + "domain": "benalman.com", + "url": "https://benalman.com/news/2010/11/immediately-invoked-function-expression/", + "logo": "https://benalman.com/favicon.ico", + "title": "Ben Alman » Immediately-Invoked Function Expression (IIFE)", + "description": null + }, + "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Undeclared_var": { + "domain": "developer.mozilla.org", + "url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Undeclared_var", + "logo": "https://developer.mozilla.org/favicon-48x48.cbbd161b.png", + "title": "ReferenceError: assignment to undeclared variable “x” - JavaScript | MDN", + "description": "The JavaScript strict mode-only exception “Assignment to undeclared variable” occurs when the value has been assigned to an undeclared variable." + }, + "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let#Temporal_dead_zone": { + "domain": "developer.mozilla.org", + "url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let#Temporal_dead_zone", + "logo": "https://developer.mozilla.org/favicon-48x48.cbbd161b.png", + "title": "let - JavaScript | MDN", + "description": "The let statement declares a block-scoped local variable, optionally initializing it to a value." + }, + "https://es5.github.io/#x7.8.5": { + "domain": "es5.github.io", + "url": "https://es5.github.io/#x7.8.5", + "logo": "https://es5.github.io/favicon.ico", + "title": "Annotated ES5", + "description": null + }, + "https://es5.github.io/#x7.2": { + "domain": "es5.github.io", + "url": "https://es5.github.io/#x7.2", + "logo": "https://es5.github.io/favicon.ico", + "title": "Annotated ES5", + "description": null + }, + "https://web.archive.org/web/20200414142829/http://timelessrepo.com/json-isnt-a-javascript-subset": { + "domain": "web.archive.org", + "url": "https://web.archive.org/web/20200414142829/http://timelessrepo.com/json-isnt-a-javascript-subset", + "logo": "https://archive.org/favicon.ico", + "title": "JSON: The JavaScript subset that isn’t - Timeless", + "description": null + }, + "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators": { + "domain": "developer.mozilla.org", + "url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators", + "logo": "https://developer.mozilla.org/favicon-48x48.cbbd161b.png", + "title": "Iterators and generators - JavaScript | MDN", + "description": "Iterators and Generators bring the concept of iteration directly into the core language and provide a mechanism for customizing the behavior of for...of loops." + }, + "https://kangax.github.io/es5-compat-table/es6/#Iterators": { + "domain": "kangax.github.io", + "url": "https://kangax.github.io/es5-compat-table/es6/#Iterators", + "logo": "https://github.io/favicon.ico", + "title": null, + "description": null + }, + "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Deprecated_and_obsolete_features#Object_methods": { + "domain": "developer.mozilla.org", + "url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Deprecated_and_obsolete_features#Object_methods", + "logo": "https://developer.mozilla.org/favicon-48x48.cbbd161b.png", + "title": "Deprecated and obsolete features - JavaScript | MDN", + "description": "This page lists features of JavaScript that are deprecated (that is, still available but planned for removal) and obsolete (that is, no longer usable)." + }, + "https://www.emacswiki.org/emacs/SmartTabs": { + "domain": "www.emacswiki.org", + "url": "https://www.emacswiki.org/emacs/SmartTabs", + "logo": "https://www.emacswiki.org/favicon.ico", + "title": "EmacsWiki: Smart Tabs", + "description": null + }, + "https://www.ecma-international.org/ecma-262/6.0/#sec-symbol-objects": { + "domain": "www.ecma-international.org", + "url": "https://www.ecma-international.org/ecma-262/6.0/#sec-symbol-objects", + "logo": "https://www.ecma-international.org/ecma-262/6.0/favicon.ico", + "title": "ECMAScript 2015 Language Specification – ECMA-262 6th Edition", + "description": null + }, + "https://www.inkling.com/read/javascript-definitive-guide-david-flanagan-6th/chapter-3/wrapper-objects": { + "domain": "www.inkling.com", + "url": "https://www.inkling.com/read/javascript-definitive-guide-david-flanagan-6th/chapter-3/wrapper-objects", + "logo": "https://inklingstatic.a.ssl.fastly.net/static_assets/20220214.223700z.8c5796a9.docker/images/favicon.ico", + "title": "Unsupported Browser", + "description": null + }, + "https://tc39.es/ecma262/#prod-annexB-NonOctalDecimalEscapeSequence": { + "domain": "tc39.es", + "url": "https://tc39.es/ecma262/#prod-annexB-NonOctalDecimalEscapeSequence", + "logo": "https://tc39.es/ecma262/img/favicon.ico", + "title": "ECMAScript® 2023 Language Specification", + "description": null + }, + "https://es5.github.io/#x15.8": { + "domain": "es5.github.io", + "url": "https://es5.github.io/#x15.8", + "logo": "https://es5.github.io/favicon.ico", + "title": "Annotated ES5", + "description": null + }, + "https://spin.atomicobject.com/2011/04/10/javascript-don-t-reassign-your-function-arguments/": { + "domain": "spin.atomicobject.com", + "url": "https://spin.atomicobject.com/2011/04/10/javascript-don-t-reassign-your-function-arguments/", + "logo": "https://spin.atomicobject.com/wp-content/themes/spin/images/favicon.ico", + "title": "JavaScript: Don’t Reassign Your Function Arguments", + "description": "The point of this post is to raise awareness that reassigning the value of an argument variable mutates the arguments object." + }, + "https://stackoverflow.com/questions/5869216/how-to-store-node-js-deployment-settings-configuration-files": { + "domain": "stackoverflow.com", + "url": "https://stackoverflow.com/questions/5869216/how-to-store-node-js-deployment-settings-configuration-files", + "logo": "https://cdn.sstatic.net/Sites/stackoverflow/Img/apple-touch-icon.png?v=c78bd457575a", + "title": "How to store Node.js deployment settings/configuration files?", + "description": "I have been working on a few Node apps, and I’ve been looking for a good pattern of storing deployment-related settings. In the Django world (where I come from), the common practise would be to hav..." + }, + "https://blog.benhall.me.uk/2012/02/storing-application-config-data-in/": { + "domain": "blog.benhall.me.uk", + "url": "https://blog.benhall.me.uk/2012/02/storing-application-config-data-in/", + "logo": null, + "title": "Storing Node.js application config data – Ben Hall’s Blog", + "description": null + }, + "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise": { + "domain": "developer.mozilla.org", + "url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise", + "logo": "https://developer.mozilla.org/favicon-48x48.cbbd161b.png", + "title": "Promise - JavaScript | MDN", + "description": "The Promise object represents the eventual completion (or failure) of an asynchronous operation and its resulting value." + }, + "https://johnresig.com/blog/objectgetprototypeof/": { + "domain": "johnresig.com", + "url": "https://johnresig.com/blog/objectgetprototypeof/", + "logo": "https://johnresig.com/wp-content/uploads/2017/04/cropped-jeresig-2016.1024-270x270.jpg", + "title": "John Resig - Object.getPrototypeOf", + "description": null + }, + "https://kangax.github.io/compat-table/es5/#Reserved_words_as_property_names": { + "domain": "kangax.github.io", + "url": "https://kangax.github.io/compat-table/es5/#Reserved_words_as_property_names", + "logo": "https://kangax.github.io/compat-table/favicon.ico", + "title": "ECMAScript 5 compatibility table", + "description": null + }, + "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function": { + "domain": "developer.mozilla.org", + "url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function", + "logo": "https://developer.mozilla.org/favicon-48x48.cbbd161b.png", + "title": "async function - JavaScript | MDN", + "description": "An async function is a function declared with the async keyword, and the await keyword is permitted within it. The async and await keywords enable asynchronous, promise-based behavior to be written in a cleaner style, avoiding the need to explicitly configure promise chains." + }, + "https://jakearchibald.com/2017/await-vs-return-vs-return-await/": { + "domain": "jakearchibald.com", + "url": "https://jakearchibald.com/2017/await-vs-return-vs-return-await/", + "logo": "https://jakearchibald.com/c/favicon-67801369.png", + "title": "await vs return vs return await", + "description": null + }, + "https://stackoverflow.com/questions/13497971/what-is-the-matter-with-script-targeted-urls": { + "domain": "stackoverflow.com", + "url": "https://stackoverflow.com/questions/13497971/what-is-the-matter-with-script-targeted-urls", + "logo": "https://cdn.sstatic.net/Sites/stackoverflow/Img/apple-touch-icon.png?v=c78bd457575a", + "title": "What is the matter with script-targeted URLs?", + "description": "I’m using JSHint, and it got the following error: Script URL. Which I noticed that happened because on this particular line there is a string containing a javascript:... URL. I know that JSHint" + }, + "https://es5.github.io/#x15.1.1": { + "domain": "es5.github.io", + "url": "https://es5.github.io/#x15.1.1", + "logo": "https://es5.github.io/favicon.ico", + "title": "Annotated ES5", + "description": null + }, + "https://en.wikipedia.org/wiki/Variable_shadowing": { + "domain": "en.wikipedia.org", + "url": "https://en.wikipedia.org/wiki/Variable_shadowing", + "logo": "https://en.wikipedia.org/static/apple-touch/wikipedia.png", + "title": "Variable shadowing - Wikipedia", + "description": null + }, + "https://www.nczonline.net/blog/2007/09/09/inconsistent-array-literals/": { + "domain": "www.nczonline.net", + "url": "https://www.nczonline.net/blog/2007/09/09/inconsistent-array-literals/", + "logo": "https://www.nczonline.net/images/favicon.png", + "title": "Inconsistent array literals", + "description": "Back at the Rich Web Experience, I helped lead a “birds of a feather” group discussion on JavaScript. In that discussion, someone called me a JavaScript expert. I quickly explained that I don’t..." + }, + "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined": { + "domain": "developer.mozilla.org", + "url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined", + "logo": "https://developer.mozilla.org/favicon-48x48.cbbd161b.png", + "title": "undefined - JavaScript | MDN", + "description": "The global undefined property represents the primitive value undefined. It is one of JavaScript’s primitive types." + }, + "https://javascriptweblog.wordpress.com/2010/08/16/understanding-undefined-and-preventing-referenceerrors/": { + "domain": "javascriptweblog.wordpress.com", + "url": "https://javascriptweblog.wordpress.com/2010/08/16/understanding-undefined-and-preventing-referenceerrors/", + "logo": "https://s1.wp.com/i/favicon.ico", + "title": "Understanding JavaScript’s ‘undefined’", + "description": "Compared to other languages, JavaScript’s concept of undefined is a little confusing. In particular, trying to understand ReferenceErrors (“x is not defined”) and how best to code…" + }, + "https://es5.github.io/#x15.1.1.3": { + "domain": "es5.github.io", + "url": "https://es5.github.io/#x15.1.1.3", + "logo": "https://es5.github.io/favicon.ico", + "title": "Annotated ES5", + "description": null + }, + "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions": { + "domain": "developer.mozilla.org", + "url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions", + "logo": "https://developer.mozilla.org/favicon-48x48.cbbd161b.png", + "title": "Regular expressions - JavaScript | MDN", + "description": "Regular expressions are patterns used to match character combinations in strings. In JavaScript, regular expressions are also objects. These patterns are used with the exec() and test() methods of RegExp, and with the match(), matchAll(), replace(), replaceAll(), search(), and split() methods of S…" + }, + "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/void": { + "domain": "developer.mozilla.org", + "url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/void", + "logo": "https://developer.mozilla.org/favicon-48x48.cbbd161b.png", + "title": "void operator - JavaScript | MDN", + "description": "The void operator evaluates the given expression and then returns undefined." + }, + "https://oreilly.com/javascript/excerpts/javascript-good-parts/bad-parts.html": { + "domain": "oreilly.com", + "url": "https://oreilly.com/javascript/excerpts/javascript-good-parts/bad-parts.html", + "logo": "https://www.oreilly.com/favicon.ico", + "title": "O’Reilly Media - Technology and Business Training", + "description": "Gain technology and business knowledge and hone your skills with learning resources created and curated by O’Reilly’s experts: live online training, video, books, our platform has content from 200+ of the world’s best publishers." + }, + "https://web.archive.org/web/20200717110117/https://yuiblog.com/blog/2006/04/11/with-statement-considered-harmful/": { + "domain": "web.archive.org", + "url": "https://web.archive.org/web/20200717110117/https://yuiblog.com/blog/2006/04/11/with-statement-considered-harmful/", + "logo": "https://web.archive.org/web/20200717110117im_/https://yuiblog.com/favicon.ico", + "title": "with Statement Considered Harmful", + "description": null + }, + "https://jscs-dev.github.io/rule/requireNewlineBeforeSingleStatementsInIf": { + "domain": "jscs-dev.github.io", + "url": "https://jscs-dev.github.io/rule/requireNewlineBeforeSingleStatementsInIf", + "logo": "https://jscs-dev.github.io/favicon.ico", + "title": "JSCS", + "description": null + }, + "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer": { + "domain": "developer.mozilla.org", + "url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer", + "logo": "https://developer.mozilla.org/favicon-48x48.cbbd161b.png", + "title": "Object initializer - JavaScript | MDN", + "description": "Objects can be initialized using new Object(), Object.create(), or using the literal notation (initializer notation). An object initializer is a comma-delimited list of zero or more pairs of property names and associated values of an object, enclosed in curly braces ({})." + }, + "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions": { + "domain": "developer.mozilla.org", + "url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions", + "logo": "https://developer.mozilla.org/favicon-48x48.cbbd161b.png", + "title": "Arrow function expressions - JavaScript | MDN", + "description": "An arrow function expression is a compact alternative to a traditional function expression, but is limited and can’t be used in all situations." + }, + "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment": { + "domain": "developer.mozilla.org", + "url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment", + "logo": "https://developer.mozilla.org/favicon-48x48.cbbd161b.png", + "title": "Destructuring assignment - JavaScript | MDN", + "description": "The destructuring assignment syntax is a JavaScript expression that makes it possible to unpack values from arrays, or properties from objects, into distinct variables." + }, + "https://2ality.com/2015/01/es6-destructuring.html": { + "domain": "2ality.com", + "url": "https://2ality.com/2015/01/es6-destructuring.html", + "logo": "https://2ality.com/img/favicon.png", + "title": "Destructuring and parameter handling in ECMAScript 6", + "description": null + }, + "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Exponentiation": { + "domain": "developer.mozilla.org", + "url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Exponentiation", + "logo": "https://developer.mozilla.org/favicon-48x48.cbbd161b.png", + "title": "Expressions and operators - JavaScript | MDN", + "description": "This chapter documents all the JavaScript language operators, expressions and keywords." + }, + "https://bugs.chromium.org/p/v8/issues/detail?id=5848": { + "domain": "bugs.chromium.org", + "url": "https://bugs.chromium.org/p/v8/issues/detail?id=5848", + "logo": "https://bugs.chromium.org/static/images/monorail.ico", + "title": "5848 - v8 - V8 JavaScript Engine - Monorail", + "description": null + }, + "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwn": { + "domain": "developer.mozilla.org", + "url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwn", + "logo": "https://developer.mozilla.org/favicon-48x48.cbbd161b.png", + "title": "Object.hasOwn() - JavaScript | MDN", + "description": "The Object.hasOwn() static method returns true if the specified object has the indicated property as its own property. If the property is inherited, or does not exist, the method returns false." + }, + "http://bluebirdjs.com/docs/warning-explanations.html#warning-a-promise-was-rejected-with-a-non-error": { + "domain": "bluebirdjs.com", + "url": "http://bluebirdjs.com/docs/warning-explanations.html#warning-a-promise-was-rejected-with-a-non-error", + "logo": "//bluebirdjs.com/img/favicon.png", + "title": "Warning Explanations | bluebird", + "description": "Bluebird is a fully featured JavaScript promises library with unmatched performance." + }, + "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp": { + "domain": "developer.mozilla.org", + "url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp", + "logo": "https://developer.mozilla.org/favicon-48x48.cbbd161b.png", + "title": "RegExp - JavaScript | MDN", + "description": "The RegExp object is used for matching text with a pattern." + }, + "https://mathiasbynens.be/notes/javascript-properties": { + "domain": "mathiasbynens.be", + "url": "https://mathiasbynens.be/notes/javascript-properties", + "logo": "https://mathiasbynens.be/favicon.ico", + "title": "Unquoted property names / object keys in JavaScript · Mathias Bynens", + "description": null + }, + "https://davidwalsh.name/parseint-radix": { + "domain": "davidwalsh.name", + "url": "https://davidwalsh.name/parseint-radix", + "logo": "https://davidwalsh.name/wp-content/themes/punky/images/favicon-144.png", + "title": "parseInt Radix", + "description": "The radix is important if you’re need to guarantee accuracy with variable input (basic number, binary, etc.). For best results, always use a radix of 10!" + }, + "https://github.com/tc39/proposal-object-rest-spread": { + "domain": "github.com", + "url": "https://github.com/tc39/proposal-object-rest-spread", + "logo": "https://github.com/fluidicon.png", + "title": "GitHub - tc39/proposal-object-rest-spread: Rest/Spread Properties for ECMAScript", + "description": "Rest/Spread Properties for ECMAScript. Contribute to tc39/proposal-object-rest-spread development by creating an account on GitHub." + }, + "https://blog.izs.me/2010/12/an-open-letter-to-javascript-leaders-regarding/": { + "domain": "blog.izs.me", + "url": "https://blog.izs.me/2010/12/an-open-letter-to-javascript-leaders-regarding/", + "logo": "https://blog.izs.me/favicon.ico", + "title": "An Open Letter to JavaScript Leaders Regarding Semicolons", + "description": "Writing and Stuff from Isaac Z. Schlueter" + }, + "https://web.archive.org/web/20200420230322/http://inimino.org/~inimino/blog/javascript_semicolons": { + "domain": "web.archive.org", + "url": "https://web.archive.org/web/20200420230322/http://inimino.org/~inimino/blog/javascript_semicolons", + "logo": "https://archive.org/favicon.ico", + "title": "JavaScript Semicolon Insertion", + "description": null + }, + "https://www.ecma-international.org/ecma-262/6.0/#sec-symbol-description": { + "domain": "www.ecma-international.org", + "url": "https://www.ecma-international.org/ecma-262/6.0/#sec-symbol-description", + "logo": "https://www.ecma-international.org/ecma-262/6.0/favicon.ico", + "title": "ECMAScript 2015 Language Specification – ECMA-262 6th Edition", + "description": null + }, + "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#Tagged_template_literals": { + "domain": "developer.mozilla.org", + "url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#Tagged_template_literals", + "logo": "https://developer.mozilla.org/favicon-48x48.cbbd161b.png", + "title": "Template literals (Template strings) - JavaScript | MDN", + "description": "Template literals are literals delimited with backtick (`) characters, allowing for multi-line strings, for string interpolation with embedded expressions, and for special constructs called tagged templates." + }, + "https://exploringjs.com/es6/ch_template-literals.html#_examples-of-using-tagged-template-literals": { + "domain": "exploringjs.com", + "url": "https://exploringjs.com/es6/ch_template-literals.html#_examples-of-using-tagged-template-literals", + "logo": "https://exploringjs.com/es6/images/favicon-128.png", + "title": "8. Template literals", + "description": null + }, + "https://jsdoc.app": { + "domain": "jsdoc.app", + "url": "https://jsdoc.app", + "logo": null, + "title": "Use JSDoc: Index", + "description": "Official documentation for JSDoc 3." + }, + "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof": { + "domain": "developer.mozilla.org", + "url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof", + "logo": "https://developer.mozilla.org/favicon-48x48.cbbd161b.png", + "title": "typeof - JavaScript | MDN", + "description": "The typeof operator returns a string indicating the type of the unevaluated operand." + }, + "https://danhough.com/blog/single-var-pattern-rant/": { + "domain": "danhough.com", + "url": "https://danhough.com/blog/single-var-pattern-rant/", + "logo": "https://danhough.com/img/meta/apple-touch-icon-152x152.png", + "title": "A criticism of the Single Var Pattern in JavaScript, and a simple alternative — Dan Hough", + "description": "Dan Hough is a software developer & consultant, a writer and public speaker." + }, + "https://benalman.com/news/2012/05/multiple-var-statements-javascript/": { + "domain": "benalman.com", + "url": "https://benalman.com/news/2012/05/multiple-var-statements-javascript/", + "logo": "https://benalman.com/favicon.ico", + "title": "Ben Alman » Multiple var statements in JavaScript, not superfluous", + "description": null + }, + "https://en.wikipedia.org/wiki/Yoda_conditions": { + "domain": "en.wikipedia.org", + "url": "https://en.wikipedia.org/wiki/Yoda_conditions", + "logo": "https://en.wikipedia.org/static/apple-touch/wikipedia.png", + "title": "Yoda conditions - Wikipedia", + "description": null + }, + "http://thomas.tuerke.net/on/design/?with=1249091668#msg1146181680": { + "domain": "thomas.tuerke.net", + "url": "http://thomas.tuerke.net/on/design/?with=1249091668#msg1146181680", + "logo": "//thomas.tuerke.net/images/tmtlogo.ico", + "title": "Coding in Style", + "description": "Thomas M. Tuerke topical weblog" + }, + "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Exponentiation": { + "domain": "developer.mozilla.org", + "url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Exponentiation", + "logo": "https://developer.mozilla.org/favicon-48x48.cbbd161b.png", + "title": "Exponentiation (**) - JavaScript | MDN", + "description": "The exponentiation operator (**) returns the result of raising the first operand to the power of the second operand. It is equivalent to Math.pow, except it also accepts BigInts as operands." + }, + "https://eslint.org/blog/2022/07/interesting-bugs-caught-by-no-constant-binary-expression/": { + "domain": "eslint.org", + "url": "https://eslint.org/blog/2022/07/interesting-bugs-caught-by-no-constant-binary-expression/", + "logo": "https://eslint.org/apple-touch-icon.png", + "title": "Interesting bugs caught by no-constant-binary-expression - ESLint - Pluggable JavaScript Linter", + "description": "A pluggable and configurable linter tool for identifying and reporting on patterns in JavaScript. Maintain your code quality with ease." + } +} \ No newline at end of file diff --git a/eslint/docs/src/_data/helpers.js b/eslint/docs/src/_data/helpers.js new file mode 100644 index 0000000..a7c4ef6 --- /dev/null +++ b/eslint/docs/src/_data/helpers.js @@ -0,0 +1,31 @@ +module.exports = { + /** + * Returns some attributes based on whether the link is active or + * a parent of an active item + * + * @param {String} itemUrl is the link in question + * @param {String} pageUrl is the page context + * @returns {String} is the attributes or empty + */ + getLinkActiveState: function(itemUrl, pageUrl) { + let response = ''; + + if (itemUrl === pageUrl) { + response = ' aria-current="page" '; + } + + if (itemUrl.length > 1 && pageUrl.indexOf(itemUrl) === 0) { + response += ' data-current="true" '; + } + + return response; + }, + excludeThis: function(arr, pageUrl) { + var newArray = []; + arr.forEach(item => { + if(item.url !== pageUrl) newArray.push(item); + }); + return newArray; + } + +}; diff --git a/eslint/docs/src/_data/languages.json b/eslint/docs/src/_data/languages.json new file mode 100644 index 0000000..529a9e3 --- /dev/null +++ b/eslint/docs/src/_data/languages.json @@ -0,0 +1,27 @@ +{ + "items": [{ + "flag": "🇺🇸", + "code": "en", + "name": "English (US)", + "url": "https://eslint.org" + }, + { + "flag": "🇯🇵", + "code": "jp", + "name": "Japanese - 日本語", + "url": "https://jp.eslint.org" + }, + { + "flag": "🇫🇷", + "code": "fr", + "name": "Français", + "url": "https://fr.eslint.org" + }, + { + "flag": "🇨🇳", + "code": "cn", + "name": "Chinese - 中文", + "url": "https://cn.eslint.org" + } + ] +} diff --git a/eslint/docs/src/_data/links.json b/eslint/docs/src/_data/links.json new file mode 100644 index 0000000..d9b2973 --- /dev/null +++ b/eslint/docs/src/_data/links.json @@ -0,0 +1,22 @@ +{ + "github": "https://github.com/eslint/eslint", + "twitter": "https://twitter.com/geteslint", + "chat": "https://eslint.org/chat", + "group": "https://groups.google.com/group/eslint", + + "blog": "/blog", + "docs": "/docs/latest/", + "playground": "/play", + "getStarted": "/docs/latest/user-guide/getting-started", + "sponsors": "/sponsors", + "branding": "/branding", + "store": "https://eslint.threadless.com", + "team": "/team", + + "configuring": "https://eslint.org/docs/user-guide/configuring/", + "fixProblems": "https://eslint.org/docs/user-guide/command-line-interface#fixing-problems", + + "donate": "/donate", + "openCollective": "https://opencollective.com/eslint", + "githubSponsors": "https://github.com/sponsors/eslint" +} diff --git a/eslint/docs/src/_data/navigation.json b/eslint/docs/src/_data/navigation.json new file mode 100644 index 0000000..bc83166 --- /dev/null +++ b/eslint/docs/src/_data/navigation.json @@ -0,0 +1,24 @@ +{ + "items": [ + { + "text": "Team", + "url": "https://eslint.org/team/" + }, + { + "text": "Blog", + "url": "https://eslint.org/blog/" + }, + { + "text": "Docs", + "url": "https://eslint.org/docs/" + }, + { + "text": "Store", + "url": "https://eslint.threadless.com" + }, + { + "text": "Playground", + "url": "https://eslint.org/play" + } + ] +} diff --git a/eslint/docs/src/_data/rule_versions.json b/eslint/docs/src/_data/rule_versions.json new file mode 100644 index 0000000..98463d4 --- /dev/null +++ b/eslint/docs/src/_data/rule_versions.json @@ -0,0 +1,329 @@ +{ + "added": { + "accessor-pairs": "0.22.0", + "array-bracket-newline": "4.0.0-alpha.1", + "array-bracket-spacing": "0.24.0", + "array-callback-return": "2.0.0-alpha-1", + "array-element-newline": "4.0.0-rc.0", + "arrow-body-style": "1.8.0", + "arrow-parens": "1.0.0-rc-1", + "arrow-spacing": "1.0.0-rc-1", + "block-scoped-var": "0.1.0", + "block-spacing": "1.2.0", + "brace-style": "0.0.7", + "callback-return": "1.0.0-rc-1", + "camelcase": "0.0.2", + "capitalized-comments": "3.11.0", + "class-methods-use-this": "3.4.0", + "comma-dangle": "0.16.0", + "comma-spacing": "0.9.0", + "comma-style": "0.9.0", + "complexity": "0.0.9", + "computed-property-spacing": "0.23.0", + "consistent-return": "0.4.0", + "consistent-this": "0.0.9", + "constructor-super": "0.24.0", + "curly": "0.0.2", + "default-case-last": "7.0.0-alpha.0", + "default-case": "0.6.0", + "default-param-last": "6.4.0", + "dot-location": "0.21.0", + "dot-notation": "0.0.7", + "eol-last": "0.7.1", + "eqeqeq": "0.0.2", + "for-direction": "4.0.0-beta.0", + "func-call-spacing": "3.3.0", + "func-name-matching": "3.8.0", + "func-names": "0.4.0", + "func-style": "0.2.0", + "function-call-argument-newline": "6.2.0", + "function-paren-newline": "4.6.0", + "generator-star-spacing": "0.17.0", + "generator-star": "0.12.0", + "getter-return": "4.2.0", + "global-require": "1.4.0", + "global-strict": "0.8.0", + "grouped-accessor-pairs": "6.7.0", + "guard-for-in": "0.0.6", + "handle-callback-err": "0.4.5", + "id-blacklist": "2.0.0-beta.2", + "id-denylist": "7.4.0", + "id-length": "1.0.0", + "id-match": "1.0.0", + "implicit-arrow-linebreak": "4.12.0", + "indent-legacy": "4.0.0-alpha.0", + "indent": "0.14.0", + "init-declarations": "1.0.0-rc-1", + "jsx-quotes": "1.4.0", + "key-spacing": "0.9.0", + "keyword-spacing": "2.0.0-beta.1", + "line-comment-position": "3.5.0", + "linebreak-style": "0.21.0", + "lines-around-comment": "0.22.0", + "lines-around-directive": "3.5.0", + "lines-between-class-members": "4.9.0", + "max-classes-per-file": "5.0.0-alpha.3", + "max-depth": "0.0.9", + "max-len": "0.0.9", + "max-lines-per-function": "5.0.0", + "max-lines": "2.12.0", + "max-nested-callbacks": "0.2.0", + "max-params": "0.0.9", + "max-statements-per-line": "2.5.0", + "max-statements": "0.0.9", + "multiline-comment-style": "4.10.0", + "multiline-ternary": "3.1.0", + "new-cap": "0.0.3-0", + "new-parens": "0.0.6", + "newline-after-var": "0.18.0", + "newline-before-return": "2.3.0", + "newline-per-chained-call": "2.0.0-rc.0", + "no-alert": "0.0.5", + "no-array-constructor": "0.4.0", + "no-arrow-condition": "1.8.0", + "no-async-promise-executor": "5.3.0", + "no-await-in-loop": "3.12.0", + "no-bitwise": "0.0.2", + "no-buffer-constructor": "4.0.0-alpha.0", + "no-caller": "0.0.6", + "no-case-declarations": "1.9.0", + "no-catch-shadow": "0.0.9", + "no-class-assign": "1.0.0-rc-1", + "no-comma-dangle": "0.0.9", + "no-compare-neg-zero": "3.17.0", + "no-cond-assign": "0.0.9", + "no-confusing-arrow": "2.0.0-alpha-2", + "no-console": "0.0.2", + "no-const-assign": "1.0.0-rc-1", + "no-constant-binary-expression": "8.14.0", + "no-constant-condition": "0.4.1", + "no-constructor-return": "6.7.0", + "no-continue": "0.19.0", + "no-control-regex": "0.1.0", + "no-debugger": "0.0.2", + "no-delete-var": "0.0.9", + "no-div-regex": "0.1.0", + "no-dupe-args": "0.16.0", + "no-dupe-class-members": "1.2.0", + "no-dupe-else-if": "6.7.0", + "no-dupe-keys": "0.0.9", + "no-duplicate-case": "0.17.0", + "no-duplicate-imports": "2.5.0", + "no-else-return": "0.0.9", + "no-empty-character-class": "0.22.0", + "no-empty-class": "0.0.9", + "no-empty-function": "2.0.0", + "no-empty-label": "0.0.9", + "no-empty-pattern": "1.7.0", + "no-empty": "0.0.2", + "no-eq-null": "0.0.9", + "no-eval": "0.0.2", + "no-ex-assign": "0.0.9", + "no-extend-native": "0.1.4", + "no-extra-bind": "0.8.0", + "no-extra-boolean-cast": "0.4.0", + "no-extra-label": "2.0.0-rc.0", + "no-extra-parens": "0.1.4", + "no-extra-semi": "0.0.9", + "no-extra-strict": "0.3.0", + "no-fallthrough": "0.0.7", + "no-floating-decimal": "0.0.6", + "no-func-assign": "0.0.9", + "no-global-assign": "3.3.0", + "no-implicit-coercion": "1.0.0-rc-2", + "no-implicit-globals": "2.0.0-alpha-1", + "no-implied-eval": "0.0.7", + "no-import-assign": "6.4.0", + "no-inline-comments": "0.10.0", + "no-inner-declarations": "0.6.0", + "no-invalid-regexp": "0.1.4", + "no-invalid-this": "1.0.0-rc-2", + "no-irregular-whitespace": "0.9.0", + "no-iterator": "0.0.9", + "no-label-var": "0.0.9", + "no-labels": "0.4.0", + "no-lone-blocks": "0.4.0", + "no-lonely-if": "0.6.0", + "no-loop-func": "0.0.9", + "no-loss-of-precision": "7.1.0", + "no-magic-numbers": "1.7.0", + "no-misleading-character-class": "5.3.0", + "no-mixed-operators": "2.12.0", + "no-mixed-requires": "0.0.9", + "no-mixed-spaces-and-tabs": "0.7.1", + "no-multi-assign": "3.14.0", + "no-multi-spaces": "0.9.0", + "no-multi-str": "0.0.9", + "no-multiple-empty-lines": "0.9.0", + "no-native-reassign": "0.0.9", + "no-negated-condition": "1.6.0", + "no-negated-in-lhs": "0.1.2", + "no-nested-ternary": "0.2.0", + "no-new-func": "0.0.7", + "no-new-object": "0.0.9", + "no-new-require": "0.6.0", + "no-new-symbol": "2.0.0-beta.1", + "no-new-wrappers": "0.0.6", + "no-new": "0.0.7", + "no-nonoctal-decimal-escape": "7.14.0", + "no-obj-calls": "0.0.9", + "no-octal-escape": "0.0.9", + "no-octal": "0.0.6", + "no-param-reassign": "0.18.0", + "no-path-concat": "0.4.0", + "no-plusplus": "0.0.9", + "no-process-env": "0.9.0", + "no-process-exit": "0.4.0", + "no-promise-executor-return": "7.3.0", + "no-proto": "0.0.9", + "no-prototype-builtins": "2.11.0", + "no-redeclare": "0.0.9", + "no-regex-spaces": "0.4.0", + "no-reserved-keys": "0.8.0", + "no-restricted-exports": "7.0.0-alpha.0", + "no-restricted-globals": "2.3.0", + "no-restricted-imports": "2.0.0-alpha-1", + "no-restricted-modules": "0.6.0", + "no-restricted-properties": "3.5.0", + "no-restricted-syntax": "1.4.0", + "no-return-assign": "0.0.9", + "no-return-await": "3.10.0", + "no-script-url": "0.0.9", + "no-self-assign": "2.0.0-rc.0", + "no-self-compare": "0.0.9", + "no-sequences": "0.5.1", + "no-setter-return": "6.7.0", + "no-shadow-restricted-names": "0.1.4", + "no-shadow": "0.0.9", + "no-space-before-semi": "0.4.3", + "no-spaced-func": "0.1.2", + "no-sparse-arrays": "0.4.0", + "no-sync": "0.0.9", + "no-tabs": "3.2.0", + "no-template-curly-in-string": "3.3.0", + "no-ternary": "0.0.9", + "no-this-before-super": "0.24.0", + "no-throw-literal": "0.15.0", + "no-trailing-spaces": "0.7.1", + "no-undef-init": "0.0.6", + "no-undef": "0.0.9", + "no-undefined": "0.7.1", + "no-underscore-dangle": "0.0.9", + "no-unexpected-multiline": "0.24.0", + "no-unmodified-loop-condition": "2.0.0-alpha-2", + "no-unneeded-ternary": "0.21.0", + "no-unreachable-loop": "7.3.0", + "no-unreachable": "0.0.6", + "no-unsafe-finally": "2.9.0", + "no-unsafe-negation": "3.3.0", + "no-unsafe-optional-chaining": "7.15.0", + "no-unused-expressions": "0.1.0", + "no-unused-labels": "2.0.0-rc.0", + "no-unused-private-class-members": "8.1.0", + "no-unused-vars": "0.0.9", + "no-use-before-define": "0.0.9", + "no-useless-backreference": "7.0.0-alpha.0", + "no-useless-call": "1.0.0-rc-1", + "no-useless-catch": "5.11.0", + "no-useless-computed-key": "2.9.0", + "no-useless-concat": "1.3.0", + "no-useless-constructor": "2.0.0-beta.1", + "no-useless-escape": "2.5.0", + "no-useless-rename": "2.11.0", + "no-useless-return": "3.9.0", + "no-var": "0.12.0", + "no-void": "0.8.0", + "no-warning-comments": "0.4.4", + "no-whitespace-before-property": "2.0.0-beta.1", + "no-with": "0.0.2", + "no-wrap-func": "0.0.9", + "nonblock-statement-body-position": "3.17.0", + "object-curly-newline": "2.12.0", + "object-curly-spacing": "0.22.0", + "object-property-newline": "2.10.0", + "object-shorthand": "0.20.0", + "one-var-declaration-per-line": "2.0.0-beta.3", + "one-var": "0.0.9", + "operator-assignment": "0.10.0", + "operator-linebreak": "0.19.0", + "padded-blocks": "0.9.0", + "padding-line-between-statements": "4.0.0-beta.0", + "prefer-arrow-callback": "1.2.0", + "prefer-const": "0.23.0", + "prefer-destructuring": "3.13.0", + "prefer-exponentiation-operator": "6.7.0", + "prefer-named-capture-group": "5.15.0", + "prefer-numeric-literals": "3.5.0", + "prefer-object-has-own": "8.5.0", + "prefer-object-spread": "5.0.0-alpha.3", + "prefer-promise-reject-errors": "3.14.0", + "prefer-reflect": "1.0.0-rc-2", + "prefer-regex-literals": "6.4.0", + "prefer-rest-params": "2.0.0-alpha-1", + "prefer-spread": "1.0.0-rc-1", + "prefer-template": "1.2.0", + "quote-props": "0.0.6", + "quotes": "0.0.7", + "radix": "0.0.7", + "require-atomic-updates": "5.3.0", + "require-await": "3.11.0", + "require-jsdoc": "1.4.0", + "require-unicode-regexp": "5.3.0", + "require-yield": "1.0.0-rc-1", + "rest-spread-spacing": "2.12.0", + "semi-spacing": "0.16.0", + "semi-style": "4.0.0-beta.0", + "semi": "0.0.6", + "sort-imports": "2.0.0-beta.1", + "sort-keys": "3.3.0", + "sort-vars": "0.2.0", + "space-after-function-name": "0.11.0", + "space-after-keywords": "0.6.0", + "space-before-blocks": "0.9.0", + "space-before-function-paren": "0.18.0", + "space-before-function-parentheses": "0.15.0", + "space-before-keywords": "1.4.0", + "space-in-brackets": "0.4.1", + "space-in-parens": "0.8.0", + "space-infix-ops": "0.2.0", + "space-return-throw-case": "0.1.4", + "space-unary-ops": "0.10.0", + "space-unary-word-ops": "0.1.4", + "spaced-comment": "0.23.0", + "spaced-line-comment": "0.9.0", + "strict": "0.1.0", + "switch-colon-spacing": "4.0.0-beta.0", + "symbol-description": "3.4.0", + "template-curly-spacing": "2.0.0-rc.0", + "template-tag-spacing": "3.15.0", + "unicode-bom": "2.11.0", + "use-isnan": "0.0.6", + "valid-jsdoc": "0.4.0", + "valid-typeof": "0.5.0", + "vars-on-top": "0.8.0", + "wrap-iife": "0.0.9", + "wrap-regex": "0.1.0", + "yield-star-spacing": "2.0.0-alpha-1", + "yoda": "0.7.1" + }, + "removed": { + "generator-star": "1.0.0-rc-1", + "global-strict": "1.0.0-rc-1", + "no-arrow-condition": "2.0.0-beta.3", + "no-comma-dangle": "1.0.0-rc-1", + "no-empty-class": "1.0.0-rc-1", + "no-empty-label": "2.0.0-rc.0", + "no-extra-strict": "1.0.0-rc-1", + "no-reserved-keys": "1.0.0", + "no-space-before-semi": "1.0.0-rc-1", + "no-wrap-func": "1.0.0-rc-1", + "space-after-function-name": "1.0.0-rc-1", + "space-after-keywords": "2.0.0-beta.3", + "space-before-function-parentheses": "1.0.0-rc-1", + "space-before-keywords": "2.0.0-beta.3", + "space-in-brackets": "1.0.0-rc-1", + "space-return-throw-case": "2.0.0-beta.3", + "space-unary-word-ops": "0.10.0", + "spaced-line-comment": "1.0.0-rc-1" + } +} \ No newline at end of file diff --git a/eslint/docs/src/_data/rules.json b/eslint/docs/src/_data/rules.json new file mode 100644 index 0000000..81e0500 --- /dev/null +++ b/eslint/docs/src/_data/rules.json @@ -0,0 +1,2105 @@ +{ + "types": [ + { + "name": "problem", + "displayName": "Possible Problems", + "description": "These rules relate to possible logic errors in code:", + "rules": [ + { + "name": "array-callback-return", + "description": "Enforce `return` statements in callbacks of array methods", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "constructor-super", + "description": "Require `super()` calls in constructors", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "for-direction", + "description": "Enforce \"for\" loop update clause moving the counter in the right direction.", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "getter-return", + "description": "Enforce `return` statements in getters", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-async-promise-executor", + "description": "Disallow using an async function as a Promise executor", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-await-in-loop", + "description": "Disallow `await` inside of loops", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-class-assign", + "description": "Disallow reassigning class members", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-compare-neg-zero", + "description": "Disallow comparing against -0", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-cond-assign", + "description": "Disallow assignment operators in conditional expressions", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-const-assign", + "description": "Disallow reassigning `const` variables", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-constant-binary-expression", + "description": "Disallow expressions where the operation doesn't affect the value", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-constant-condition", + "description": "Disallow constant expressions in conditions", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-constructor-return", + "description": "Disallow returning value from constructor", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-control-regex", + "description": "Disallow control characters in regular expressions", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-debugger", + "description": "Disallow the use of `debugger`", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-dupe-args", + "description": "Disallow duplicate arguments in `function` definitions", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-dupe-class-members", + "description": "Disallow duplicate class members", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-dupe-else-if", + "description": "Disallow duplicate conditions in if-else-if chains", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-dupe-keys", + "description": "Disallow duplicate keys in object literals", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-duplicate-case", + "description": "Disallow duplicate case labels", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-duplicate-imports", + "description": "Disallow duplicate module imports", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-empty-character-class", + "description": "Disallow empty character classes in regular expressions", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-empty-pattern", + "description": "Disallow empty destructuring patterns", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-ex-assign", + "description": "Disallow reassigning exceptions in `catch` clauses", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-fallthrough", + "description": "Disallow fallthrough of `case` statements", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-func-assign", + "description": "Disallow reassigning `function` declarations", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-import-assign", + "description": "Disallow assigning to imported bindings", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-inner-declarations", + "description": "Disallow variable or `function` declarations in nested blocks", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-invalid-regexp", + "description": "Disallow invalid regular expression strings in `RegExp` constructors", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-irregular-whitespace", + "description": "Disallow irregular whitespace", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-loss-of-precision", + "description": "Disallow literal numbers that lose precision", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-misleading-character-class", + "description": "Disallow characters which are made with multiple code points in character class syntax", + "recommended": true, + "fixable": false, + "hasSuggestions": true + }, + { + "name": "no-new-symbol", + "description": "Disallow `new` operators with the `Symbol` object", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-obj-calls", + "description": "Disallow calling global object properties as functions", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-promise-executor-return", + "description": "Disallow returning values from Promise executor functions", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-prototype-builtins", + "description": "Disallow calling some `Object.prototype` methods directly on objects", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-self-assign", + "description": "Disallow assignments where both sides are exactly the same", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-self-compare", + "description": "Disallow comparisons where both sides are exactly the same", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-setter-return", + "description": "Disallow returning values from setters", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-sparse-arrays", + "description": "Disallow sparse arrays", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-template-curly-in-string", + "description": "Disallow template literal placeholder syntax in regular strings", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-this-before-super", + "description": "Disallow `this`/`super` before calling `super()` in constructors", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-undef", + "description": "Disallow the use of undeclared variables unless mentioned in `/*global */` comments", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-unexpected-multiline", + "description": "Disallow confusing multiline expressions", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-unmodified-loop-condition", + "description": "Disallow unmodified loop conditions", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-unreachable", + "description": "Disallow unreachable code after `return`, `throw`, `continue`, and `break` statements", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-unreachable-loop", + "description": "Disallow loops with a body that allows only one iteration", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-unsafe-finally", + "description": "Disallow control flow statements in `finally` blocks", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-unsafe-negation", + "description": "Disallow negating the left operand of relational operators", + "recommended": true, + "fixable": false, + "hasSuggestions": true + }, + { + "name": "no-unsafe-optional-chaining", + "description": "Disallow use of optional chaining in contexts where the `undefined` value is not allowed", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-unused-private-class-members", + "description": "Disallow unused private class members", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-unused-vars", + "description": "Disallow unused variables", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-use-before-define", + "description": "Disallow the use of variables before they are defined", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-useless-backreference", + "description": "Disallow useless backreferences in regular expressions", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "require-atomic-updates", + "description": "Disallow assignments that can lead to race conditions due to usage of `await` or `yield`", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "use-isnan", + "description": "Require calls to `isNaN()` when checking for `NaN`", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "valid-typeof", + "description": "Enforce comparing `typeof` expressions against valid strings", + "recommended": true, + "fixable": false, + "hasSuggestions": true + } + ] + }, + { + "name": "suggestion", + "displayName": "Suggestions", + "description": "These rules suggest alternate ways of doing things:", + "rules": [ + { + "name": "accessor-pairs", + "description": "Enforce getter and setter pairs in objects and classes", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "arrow-body-style", + "description": "Require braces around arrow function bodies", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "block-scoped-var", + "description": "Enforce the use of variables within the scope they are defined", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "camelcase", + "description": "Enforce camelcase naming convention", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "capitalized-comments", + "description": "Enforce or disallow capitalization of the first letter of a comment", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "class-methods-use-this", + "description": "Enforce that class methods utilize `this`", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "complexity", + "description": "Enforce a maximum cyclomatic complexity allowed in a program", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "consistent-return", + "description": "Require `return` statements to either always or never specify values", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "consistent-this", + "description": "Enforce consistent naming when capturing the current execution context", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "curly", + "description": "Enforce consistent brace style for all control statements", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "default-case", + "description": "Require `default` cases in `switch` statements", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "default-case-last", + "description": "Enforce default clauses in switch statements to be last", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "default-param-last", + "description": "Enforce default parameters to be last", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "dot-notation", + "description": "Enforce dot notation whenever possible", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "eqeqeq", + "description": "Require the use of `===` and `!==`", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "func-name-matching", + "description": "Require function names to match the name of the variable or property to which they are assigned", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "func-names", + "description": "Require or disallow named `function` expressions", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "func-style", + "description": "Enforce the consistent use of either `function` declarations or expressions", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "grouped-accessor-pairs", + "description": "Require grouped accessor pairs in object literals and classes", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "guard-for-in", + "description": "Require `for-in` loops to include an `if` statement", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "id-denylist", + "description": "Disallow specified identifiers", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "id-length", + "description": "Enforce minimum and maximum identifier lengths", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "id-match", + "description": "Require identifiers to match a specified regular expression", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "init-declarations", + "description": "Require or disallow initialization in variable declarations", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "max-classes-per-file", + "description": "Enforce a maximum number of classes per file", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "max-depth", + "description": "Enforce a maximum depth that blocks can be nested", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "max-lines", + "description": "Enforce a maximum number of lines per file", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "max-lines-per-function", + "description": "Enforce a maximum number of lines of code in a function", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "max-nested-callbacks", + "description": "Enforce a maximum depth that callbacks can be nested", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "max-params", + "description": "Enforce a maximum number of parameters in function definitions", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "max-statements", + "description": "Enforce a maximum number of statements allowed in function blocks", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "multiline-comment-style", + "description": "Enforce a particular style for multiline comments", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "new-cap", + "description": "Require constructor names to begin with a capital letter", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-alert", + "description": "Disallow the use of `alert`, `confirm`, and `prompt`", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-array-constructor", + "description": "Disallow `Array` constructors", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-bitwise", + "description": "Disallow bitwise operators", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-caller", + "description": "Disallow the use of `arguments.caller` or `arguments.callee`", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-case-declarations", + "description": "Disallow lexical declarations in case clauses", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-confusing-arrow", + "description": "Disallow arrow functions where they could be confused with comparisons", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "no-console", + "description": "Disallow the use of `console`", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-continue", + "description": "Disallow `continue` statements", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-delete-var", + "description": "Disallow deleting variables", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-div-regex", + "description": "Disallow division operators explicitly at the beginning of regular expressions", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "no-else-return", + "description": "Disallow `else` blocks after `return` statements in `if` statements", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "no-empty", + "description": "Disallow empty block statements", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-empty-function", + "description": "Disallow empty functions", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-eq-null", + "description": "Disallow `null` comparisons without type-checking operators", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-eval", + "description": "Disallow the use of `eval()`", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-extend-native", + "description": "Disallow extending native types", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-extra-bind", + "description": "Disallow unnecessary calls to `.bind()`", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "no-extra-boolean-cast", + "description": "Disallow unnecessary boolean casts", + "recommended": true, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "no-extra-label", + "description": "Disallow unnecessary labels", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "no-extra-semi", + "description": "Disallow unnecessary semicolons", + "recommended": true, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "no-floating-decimal", + "description": "Disallow leading or trailing decimal points in numeric literals", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "no-global-assign", + "description": "Disallow assignments to native objects or read-only global variables", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-implicit-coercion", + "description": "Disallow shorthand type conversions", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "no-implicit-globals", + "description": "Disallow declarations in the global scope", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-implied-eval", + "description": "Disallow the use of `eval()`-like methods", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-inline-comments", + "description": "Disallow inline comments after code", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-invalid-this", + "description": "Disallow use of `this` in contexts where the value of `this` is `undefined`", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-iterator", + "description": "Disallow the use of the `__iterator__` property", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-label-var", + "description": "Disallow labels that share a name with a variable", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-labels", + "description": "Disallow labeled statements", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-lone-blocks", + "description": "Disallow unnecessary nested blocks", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-lonely-if", + "description": "Disallow `if` statements as the only statement in `else` blocks", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "no-loop-func", + "description": "Disallow function declarations that contain unsafe references inside loop statements", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-magic-numbers", + "description": "Disallow magic numbers", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-mixed-operators", + "description": "Disallow mixed binary operators", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-multi-assign", + "description": "Disallow use of chained assignment expressions", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-multi-str", + "description": "Disallow multiline strings", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-negated-condition", + "description": "Disallow negated conditions", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-nested-ternary", + "description": "Disallow nested ternary expressions", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-new", + "description": "Disallow `new` operators outside of assignments or comparisons", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-new-func", + "description": "Disallow `new` operators with the `Function` object", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-new-object", + "description": "Disallow `Object` constructors", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-new-wrappers", + "description": "Disallow `new` operators with the `String`, `Number`, and `Boolean` objects", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-nonoctal-decimal-escape", + "description": "Disallow `\\8` and `\\9` escape sequences in string literals", + "recommended": true, + "fixable": false, + "hasSuggestions": true + }, + { + "name": "no-octal", + "description": "Disallow octal literals", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-octal-escape", + "description": "Disallow octal escape sequences in string literals", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-param-reassign", + "description": "Disallow reassigning `function` parameters", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-plusplus", + "description": "Disallow the unary operators `++` and `--`", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-proto", + "description": "Disallow the use of the `__proto__` property", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-redeclare", + "description": "Disallow variable redeclaration", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-regex-spaces", + "description": "Disallow multiple spaces in regular expressions", + "recommended": true, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "no-restricted-exports", + "description": "Disallow specified names in exports", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-restricted-globals", + "description": "Disallow specified global variables", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-restricted-imports", + "description": "Disallow specified modules when loaded by `import`", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-restricted-properties", + "description": "Disallow certain properties on certain objects", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-restricted-syntax", + "description": "Disallow specified syntax", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-return-assign", + "description": "Disallow assignment operators in `return` statements", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-return-await", + "description": "Disallow unnecessary `return await`", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-script-url", + "description": "Disallow `javascript:` urls", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-sequences", + "description": "Disallow comma operators", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-shadow", + "description": "Disallow variable declarations from shadowing variables declared in the outer scope", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-shadow-restricted-names", + "description": "Disallow identifiers from shadowing restricted names", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-ternary", + "description": "Disallow ternary operators", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-throw-literal", + "description": "Disallow throwing literals as exceptions", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-undef-init", + "description": "Disallow initializing variables to `undefined`", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "no-undefined", + "description": "Disallow the use of `undefined` as an identifier", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-underscore-dangle", + "description": "Disallow dangling underscores in identifiers", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-unneeded-ternary", + "description": "Disallow ternary operators when simpler alternatives exist", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "no-unused-expressions", + "description": "Disallow unused expressions", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-unused-labels", + "description": "Disallow unused labels", + "recommended": true, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "no-useless-call", + "description": "Disallow unnecessary calls to `.call()` and `.apply()`", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-useless-catch", + "description": "Disallow unnecessary `catch` clauses", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-useless-computed-key", + "description": "Disallow unnecessary computed property keys in objects and classes", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "no-useless-concat", + "description": "Disallow unnecessary concatenation of literals or template literals", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-useless-constructor", + "description": "Disallow unnecessary constructors", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-useless-escape", + "description": "Disallow unnecessary escape characters", + "recommended": true, + "fixable": false, + "hasSuggestions": true + }, + { + "name": "no-useless-rename", + "description": "Disallow renaming import, export, and destructured assignments to the same name", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "no-useless-return", + "description": "Disallow redundant return statements", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "no-var", + "description": "Require `let` or `const` instead of `var`", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "no-void", + "description": "Disallow `void` operators", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-warning-comments", + "description": "Disallow specified warning terms in comments", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-with", + "description": "Disallow `with` statements", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "object-shorthand", + "description": "Require or disallow method and property shorthand syntax for object literals", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "one-var", + "description": "Enforce variables to be declared either together or separately in functions", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "one-var-declaration-per-line", + "description": "Require or disallow newlines around variable declarations", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "operator-assignment", + "description": "Require or disallow assignment operator shorthand where possible", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "prefer-arrow-callback", + "description": "Require using arrow functions for callbacks", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "prefer-const", + "description": "Require `const` declarations for variables that are never reassigned after declared", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "prefer-destructuring", + "description": "Require destructuring from arrays and/or objects", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "prefer-exponentiation-operator", + "description": "Disallow the use of `Math.pow` in favor of the `**` operator", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "prefer-named-capture-group", + "description": "Enforce using named capture group in regular expression", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "prefer-numeric-literals", + "description": "Disallow `parseInt()` and `Number.parseInt()` in favor of binary, octal, and hexadecimal literals", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "prefer-object-has-own", + "description": "Disallow use of `Object.prototype.hasOwnProperty.call()` and prefer use of `Object.hasOwn()`", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "prefer-object-spread", + "description": "Disallow using Object.assign with an object literal as the first argument and prefer the use of object spread instead.", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "prefer-promise-reject-errors", + "description": "Require using Error objects as Promise rejection reasons", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "prefer-regex-literals", + "description": "Disallow use of the `RegExp` constructor in favor of regular expression literals", + "recommended": false, + "fixable": false, + "hasSuggestions": true + }, + { + "name": "prefer-rest-params", + "description": "Require rest parameters instead of `arguments`", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "prefer-spread", + "description": "Require spread operators instead of `.apply()`", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "prefer-template", + "description": "Require template literals instead of string concatenation", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "quote-props", + "description": "Require quotes around object literal property names", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "radix", + "description": "Enforce the consistent use of the radix argument when using `parseInt()`", + "recommended": false, + "fixable": false, + "hasSuggestions": true + }, + { + "name": "require-await", + "description": "Disallow async functions which have no `await` expression", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "require-unicode-regexp", + "description": "Enforce the use of `u` flag on RegExp", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "require-yield", + "description": "Require generator functions to contain `yield`", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "sort-imports", + "description": "Enforce sorted import declarations within modules", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "sort-keys", + "description": "Require object keys to be sorted", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "sort-vars", + "description": "Require variables within the same declaration block to be sorted", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "spaced-comment", + "description": "Enforce consistent spacing after the `//` or `/*` in a comment", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "strict", + "description": "Require or disallow strict mode directives", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "symbol-description", + "description": "Require symbol descriptions", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "vars-on-top", + "description": "Require `var` declarations be placed at the top of their containing scope", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "yoda", + "description": "Require or disallow \"Yoda\" conditions", + "recommended": false, + "fixable": true, + "hasSuggestions": false + } + ] + }, + { + "name": "layout", + "displayName": "Layout & Formatting", + "description": "These rules care about how the code looks rather than how it executes:", + "rules": [ + { + "name": "array-bracket-newline", + "description": "Enforce linebreaks after opening and before closing array brackets", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "array-bracket-spacing", + "description": "Enforce consistent spacing inside array brackets", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "array-element-newline", + "description": "Enforce line breaks after each array element", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "arrow-parens", + "description": "Require parentheses around arrow function arguments", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "arrow-spacing", + "description": "Enforce consistent spacing before and after the arrow in arrow functions", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "block-spacing", + "description": "Disallow or enforce spaces inside of blocks after opening block and before closing block", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "brace-style", + "description": "Enforce consistent brace style for blocks", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "comma-dangle", + "description": "Require or disallow trailing commas", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "comma-spacing", + "description": "Enforce consistent spacing before and after commas", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "comma-style", + "description": "Enforce consistent comma style", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "computed-property-spacing", + "description": "Enforce consistent spacing inside computed property brackets", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "dot-location", + "description": "Enforce consistent newlines before and after dots", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "eol-last", + "description": "Require or disallow newline at the end of files", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "func-call-spacing", + "description": "Require or disallow spacing between function identifiers and their invocations", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "function-call-argument-newline", + "description": "Enforce line breaks between arguments of a function call", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "function-paren-newline", + "description": "Enforce consistent line breaks inside function parentheses", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "generator-star-spacing", + "description": "Enforce consistent spacing around `*` operators in generator functions", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "implicit-arrow-linebreak", + "description": "Enforce the location of arrow function bodies", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "indent", + "description": "Enforce consistent indentation", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "jsx-quotes", + "description": "Enforce the consistent use of either double or single quotes in JSX attributes", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "key-spacing", + "description": "Enforce consistent spacing between keys and values in object literal properties", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "keyword-spacing", + "description": "Enforce consistent spacing before and after keywords", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "line-comment-position", + "description": "Enforce position of line comments", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "linebreak-style", + "description": "Enforce consistent linebreak style", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "lines-around-comment", + "description": "Require empty lines around comments", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "lines-between-class-members", + "description": "Require or disallow an empty line between class members", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "max-len", + "description": "Enforce a maximum line length", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "max-statements-per-line", + "description": "Enforce a maximum number of statements allowed per line", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "multiline-ternary", + "description": "Enforce newlines between operands of ternary expressions", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "new-parens", + "description": "Enforce or disallow parentheses when invoking a constructor with no arguments", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "newline-per-chained-call", + "description": "Require a newline after each call in a method chain", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "no-extra-parens", + "description": "Disallow unnecessary parentheses", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "no-mixed-spaces-and-tabs", + "description": "Disallow mixed spaces and tabs for indentation", + "recommended": true, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-multi-spaces", + "description": "Disallow multiple spaces", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "no-multiple-empty-lines", + "description": "Disallow multiple empty lines", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "no-tabs", + "description": "Disallow all tabs", + "recommended": false, + "fixable": false, + "hasSuggestions": false + }, + { + "name": "no-trailing-spaces", + "description": "Disallow trailing whitespace at the end of lines", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "no-whitespace-before-property", + "description": "Disallow whitespace before properties", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "nonblock-statement-body-position", + "description": "Enforce the location of single-line statements", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "object-curly-newline", + "description": "Enforce consistent line breaks after opening and before closing braces", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "object-curly-spacing", + "description": "Enforce consistent spacing inside braces", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "object-property-newline", + "description": "Enforce placing object properties on separate lines", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "operator-linebreak", + "description": "Enforce consistent linebreak style for operators", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "padded-blocks", + "description": "Require or disallow padding within blocks", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "padding-line-between-statements", + "description": "Require or disallow padding lines between statements", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "quotes", + "description": "Enforce the consistent use of either backticks, double, or single quotes", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "rest-spread-spacing", + "description": "Enforce spacing between rest and spread operators and their expressions", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "semi", + "description": "Require or disallow semicolons instead of ASI", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "semi-spacing", + "description": "Enforce consistent spacing before and after semicolons", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "semi-style", + "description": "Enforce location of semicolons", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "space-before-blocks", + "description": "Enforce consistent spacing before blocks", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "space-before-function-paren", + "description": "Enforce consistent spacing before `function` definition opening parenthesis", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "space-in-parens", + "description": "Enforce consistent spacing inside parentheses", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "space-infix-ops", + "description": "Require spacing around infix operators", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "space-unary-ops", + "description": "Enforce consistent spacing before or after unary operators", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "switch-colon-spacing", + "description": "Enforce spacing around colons of switch statements", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "template-curly-spacing", + "description": "Require or disallow spacing around embedded expressions of template strings", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "template-tag-spacing", + "description": "Require or disallow spacing between template tags and their literals", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "unicode-bom", + "description": "Require or disallow Unicode byte order mark (BOM)", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "wrap-iife", + "description": "Require parentheses around immediate `function` invocations", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "wrap-regex", + "description": "Require parenthesis around regex literals", + "recommended": false, + "fixable": true, + "hasSuggestions": false + }, + { + "name": "yield-star-spacing", + "description": "Require or disallow spacing around the `*` in `yield*` expressions", + "recommended": false, + "fixable": true, + "hasSuggestions": false + } + ] + } + ], + "deprecated": { + "name": "Deprecated", + "description": "These rules have been deprecated in accordance with the deprecation policy, and replaced by newer rules:", + "rules": [ + { + "name": "callback-return", + "replacedBy": [] + }, + { + "name": "global-require", + "replacedBy": [] + }, + { + "name": "handle-callback-err", + "replacedBy": [] + }, + { + "name": "id-blacklist", + "replacedBy": [ + "id-denylist" + ] + }, + { + "name": "indent-legacy", + "replacedBy": [ + "indent" + ] + }, + { + "name": "lines-around-directive", + "replacedBy": [ + "padding-line-between-statements" + ] + }, + { + "name": "newline-after-var", + "replacedBy": [ + "padding-line-between-statements" + ] + }, + { + "name": "newline-before-return", + "replacedBy": [ + "padding-line-between-statements" + ] + }, + { + "name": "no-buffer-constructor", + "replacedBy": [] + }, + { + "name": "no-catch-shadow", + "replacedBy": [ + "no-shadow" + ] + }, + { + "name": "no-mixed-requires", + "replacedBy": [] + }, + { + "name": "no-native-reassign", + "replacedBy": [ + "no-global-assign" + ] + }, + { + "name": "no-negated-in-lhs", + "replacedBy": [ + "no-unsafe-negation" + ] + }, + { + "name": "no-new-require", + "replacedBy": [] + }, + { + "name": "no-path-concat", + "replacedBy": [] + }, + { + "name": "no-process-env", + "replacedBy": [] + }, + { + "name": "no-process-exit", + "replacedBy": [] + }, + { + "name": "no-restricted-modules", + "replacedBy": [] + }, + { + "name": "no-spaced-func", + "replacedBy": [ + "func-call-spacing" + ] + }, + { + "name": "no-sync", + "replacedBy": [] + }, + { + "name": "prefer-reflect", + "replacedBy": [] + }, + { + "name": "require-jsdoc", + "replacedBy": [] + }, + { + "name": "valid-jsdoc", + "replacedBy": [] + } + ] + }, + "removed": { + "name": "Removed", + "description": "These rules from older versions of ESLint (before the deprecation policy existed) have been replaced by newer rules:", + "rules": [ + { + "removed": "generator-star", + "replacedBy": [ + "generator-star-spacing" + ] + }, + { + "removed": "global-strict", + "replacedBy": [ + "strict" + ] + }, + { + "removed": "no-arrow-condition", + "replacedBy": [ + "no-confusing-arrow", + "no-constant-condition" + ] + }, + { + "removed": "no-comma-dangle", + "replacedBy": [ + "comma-dangle" + ] + }, + { + "removed": "no-empty-class", + "replacedBy": [ + "no-empty-character-class" + ] + }, + { + "removed": "no-empty-label", + "replacedBy": [ + "no-labels" + ] + }, + { + "removed": "no-extra-strict", + "replacedBy": [ + "strict" + ] + }, + { + "removed": "no-reserved-keys", + "replacedBy": [ + "quote-props" + ] + }, + { + "removed": "no-space-before-semi", + "replacedBy": [ + "semi-spacing" + ] + }, + { + "removed": "no-wrap-func", + "replacedBy": [ + "no-extra-parens" + ] + }, + { + "removed": "space-after-function-name", + "replacedBy": [ + "space-before-function-paren" + ] + }, + { + "removed": "space-after-keywords", + "replacedBy": [ + "keyword-spacing" + ] + }, + { + "removed": "space-before-function-parentheses", + "replacedBy": [ + "space-before-function-paren" + ] + }, + { + "removed": "space-before-keywords", + "replacedBy": [ + "keyword-spacing" + ] + }, + { + "removed": "space-in-brackets", + "replacedBy": [ + "object-curly-spacing", + "array-bracket-spacing" + ] + }, + { + "removed": "space-return-throw-case", + "replacedBy": [ + "keyword-spacing" + ] + }, + { + "removed": "space-unary-word-ops", + "replacedBy": [ + "space-unary-ops" + ] + }, + { + "removed": "spaced-line-comment", + "replacedBy": [ + "spaced-comment" + ] + } + ] + } +} \ No newline at end of file diff --git a/eslint/docs/src/_data/rules_meta.json b/eslint/docs/src/_data/rules_meta.json new file mode 100644 index 0000000..56a9862 --- /dev/null +++ b/eslint/docs/src/_data/rules_meta.json @@ -0,0 +1,2487 @@ +{ + "accessor-pairs": { + "type": "suggestion", + "docs": { + "description": "Enforce getter and setter pairs in objects and classes", + "recommended": false, + "url": "https://eslint.org/docs/rules/accessor-pairs" + } + }, + "array-bracket-newline": { + "type": "layout", + "docs": { + "description": "Enforce linebreaks after opening and before closing array brackets", + "recommended": false, + "url": "https://eslint.org/docs/rules/array-bracket-newline" + }, + "fixable": "whitespace" + }, + "array-bracket-spacing": { + "type": "layout", + "docs": { + "description": "Enforce consistent spacing inside array brackets", + "recommended": false, + "url": "https://eslint.org/docs/rules/array-bracket-spacing" + }, + "fixable": "whitespace" + }, + "array-callback-return": { + "type": "problem", + "docs": { + "description": "Enforce `return` statements in callbacks of array methods", + "recommended": false, + "url": "https://eslint.org/docs/rules/array-callback-return" + } + }, + "array-element-newline": { + "type": "layout", + "docs": { + "description": "Enforce line breaks after each array element", + "recommended": false, + "url": "https://eslint.org/docs/rules/array-element-newline" + }, + "fixable": "whitespace" + }, + "arrow-body-style": { + "type": "suggestion", + "docs": { + "description": "Require braces around arrow function bodies", + "recommended": false, + "url": "https://eslint.org/docs/rules/arrow-body-style" + }, + "fixable": "code" + }, + "arrow-parens": { + "type": "layout", + "docs": { + "description": "Require parentheses around arrow function arguments", + "recommended": false, + "url": "https://eslint.org/docs/rules/arrow-parens" + }, + "fixable": "code" + }, + "arrow-spacing": { + "type": "layout", + "docs": { + "description": "Enforce consistent spacing before and after the arrow in arrow functions", + "recommended": false, + "url": "https://eslint.org/docs/rules/arrow-spacing" + }, + "fixable": "whitespace" + }, + "block-scoped-var": { + "type": "suggestion", + "docs": { + "description": "Enforce the use of variables within the scope they are defined", + "recommended": false, + "url": "https://eslint.org/docs/rules/block-scoped-var" + } + }, + "block-spacing": { + "type": "layout", + "docs": { + "description": "Disallow or enforce spaces inside of blocks after opening block and before closing block", + "recommended": false, + "url": "https://eslint.org/docs/rules/block-spacing" + }, + "fixable": "whitespace" + }, + "brace-style": { + "type": "layout", + "docs": { + "description": "Enforce consistent brace style for blocks", + "recommended": false, + "url": "https://eslint.org/docs/rules/brace-style" + }, + "fixable": "whitespace" + }, + "callback-return": { + "deprecated": true, + "replacedBy": [], + "type": "suggestion", + "docs": { + "description": "Require `return` statements after callbacks", + "recommended": false, + "url": "https://eslint.org/docs/rules/callback-return" + } + }, + "camelcase": { + "type": "suggestion", + "docs": { + "description": "Enforce camelcase naming convention", + "recommended": false, + "url": "https://eslint.org/docs/rules/camelcase" + } + }, + "capitalized-comments": { + "type": "suggestion", + "docs": { + "description": "Enforce or disallow capitalization of the first letter of a comment", + "recommended": false, + "url": "https://eslint.org/docs/rules/capitalized-comments" + }, + "fixable": "code" + }, + "class-methods-use-this": { + "type": "suggestion", + "docs": { + "description": "Enforce that class methods utilize `this`", + "recommended": false, + "url": "https://eslint.org/docs/rules/class-methods-use-this" + } + }, + "comma-dangle": { + "type": "layout", + "docs": { + "description": "Require or disallow trailing commas", + "recommended": false, + "url": "https://eslint.org/docs/rules/comma-dangle" + }, + "fixable": "code" + }, + "comma-spacing": { + "type": "layout", + "docs": { + "description": "Enforce consistent spacing before and after commas", + "recommended": false, + "url": "https://eslint.org/docs/rules/comma-spacing" + }, + "fixable": "whitespace" + }, + "comma-style": { + "type": "layout", + "docs": { + "description": "Enforce consistent comma style", + "recommended": false, + "url": "https://eslint.org/docs/rules/comma-style" + }, + "fixable": "code" + }, + "complexity": { + "type": "suggestion", + "docs": { + "description": "Enforce a maximum cyclomatic complexity allowed in a program", + "recommended": false, + "url": "https://eslint.org/docs/rules/complexity" + } + }, + "computed-property-spacing": { + "type": "layout", + "docs": { + "description": "Enforce consistent spacing inside computed property brackets", + "recommended": false, + "url": "https://eslint.org/docs/rules/computed-property-spacing" + }, + "fixable": "whitespace" + }, + "consistent-return": { + "type": "suggestion", + "docs": { + "description": "Require `return` statements to either always or never specify values", + "recommended": false, + "url": "https://eslint.org/docs/rules/consistent-return" + } + }, + "consistent-this": { + "type": "suggestion", + "docs": { + "description": "Enforce consistent naming when capturing the current execution context", + "recommended": false, + "url": "https://eslint.org/docs/rules/consistent-this" + } + }, + "constructor-super": { + "type": "problem", + "docs": { + "description": "Require `super()` calls in constructors", + "recommended": true, + "url": "https://eslint.org/docs/rules/constructor-super" + } + }, + "curly": { + "type": "suggestion", + "docs": { + "description": "Enforce consistent brace style for all control statements", + "recommended": false, + "url": "https://eslint.org/docs/rules/curly" + }, + "fixable": "code" + }, + "default-case": { + "type": "suggestion", + "docs": { + "description": "Require `default` cases in `switch` statements", + "recommended": false, + "url": "https://eslint.org/docs/rules/default-case" + } + }, + "default-case-last": { + "type": "suggestion", + "docs": { + "description": "Enforce default clauses in switch statements to be last", + "recommended": false, + "url": "https://eslint.org/docs/rules/default-case-last" + } + }, + "default-param-last": { + "type": "suggestion", + "docs": { + "description": "Enforce default parameters to be last", + "recommended": false, + "url": "https://eslint.org/docs/rules/default-param-last" + } + }, + "dot-location": { + "type": "layout", + "docs": { + "description": "Enforce consistent newlines before and after dots", + "recommended": false, + "url": "https://eslint.org/docs/rules/dot-location" + }, + "fixable": "code" + }, + "dot-notation": { + "type": "suggestion", + "docs": { + "description": "Enforce dot notation whenever possible", + "recommended": false, + "url": "https://eslint.org/docs/rules/dot-notation" + }, + "fixable": "code" + }, + "eol-last": { + "type": "layout", + "docs": { + "description": "Require or disallow newline at the end of files", + "recommended": false, + "url": "https://eslint.org/docs/rules/eol-last" + }, + "fixable": "whitespace" + }, + "eqeqeq": { + "type": "suggestion", + "docs": { + "description": "Require the use of `===` and `!==`", + "recommended": false, + "url": "https://eslint.org/docs/rules/eqeqeq" + }, + "fixable": "code" + }, + "for-direction": { + "type": "problem", + "docs": { + "description": "Enforce \"for\" loop update clause moving the counter in the right direction.", + "recommended": true, + "url": "https://eslint.org/docs/rules/for-direction" + }, + "fixable": null + }, + "func-call-spacing": { + "type": "layout", + "docs": { + "description": "Require or disallow spacing between function identifiers and their invocations", + "recommended": false, + "url": "https://eslint.org/docs/rules/func-call-spacing" + }, + "fixable": "whitespace" + }, + "func-name-matching": { + "type": "suggestion", + "docs": { + "description": "Require function names to match the name of the variable or property to which they are assigned", + "recommended": false, + "url": "https://eslint.org/docs/rules/func-name-matching" + } + }, + "func-names": { + "type": "suggestion", + "docs": { + "description": "Require or disallow named `function` expressions", + "recommended": false, + "url": "https://eslint.org/docs/rules/func-names" + } + }, + "func-style": { + "type": "suggestion", + "docs": { + "description": "Enforce the consistent use of either `function` declarations or expressions", + "recommended": false, + "url": "https://eslint.org/docs/rules/func-style" + } + }, + "function-call-argument-newline": { + "type": "layout", + "docs": { + "description": "Enforce line breaks between arguments of a function call", + "recommended": false, + "url": "https://eslint.org/docs/rules/function-call-argument-newline" + }, + "fixable": "whitespace" + }, + "function-paren-newline": { + "type": "layout", + "docs": { + "description": "Enforce consistent line breaks inside function parentheses", + "recommended": false, + "url": "https://eslint.org/docs/rules/function-paren-newline" + }, + "fixable": "whitespace" + }, + "generator-star-spacing": { + "type": "layout", + "docs": { + "description": "Enforce consistent spacing around `*` operators in generator functions", + "recommended": false, + "url": "https://eslint.org/docs/rules/generator-star-spacing" + }, + "fixable": "whitespace" + }, + "getter-return": { + "type": "problem", + "docs": { + "description": "Enforce `return` statements in getters", + "recommended": true, + "url": "https://eslint.org/docs/rules/getter-return" + }, + "fixable": null + }, + "global-require": { + "deprecated": true, + "replacedBy": [], + "type": "suggestion", + "docs": { + "description": "Require `require()` calls to be placed at top-level module scope", + "recommended": false, + "url": "https://eslint.org/docs/rules/global-require" + } + }, + "grouped-accessor-pairs": { + "type": "suggestion", + "docs": { + "description": "Require grouped accessor pairs in object literals and classes", + "recommended": false, + "url": "https://eslint.org/docs/rules/grouped-accessor-pairs" + } + }, + "guard-for-in": { + "type": "suggestion", + "docs": { + "description": "Require `for-in` loops to include an `if` statement", + "recommended": false, + "url": "https://eslint.org/docs/rules/guard-for-in" + } + }, + "handle-callback-err": { + "deprecated": true, + "replacedBy": [], + "type": "suggestion", + "docs": { + "description": "Require error handling in callbacks", + "recommended": false, + "url": "https://eslint.org/docs/rules/handle-callback-err" + } + }, + "id-blacklist": { + "deprecated": true, + "replacedBy": [ + "id-denylist" + ], + "type": "suggestion", + "docs": { + "description": "Disallow specified identifiers", + "recommended": false, + "url": "https://eslint.org/docs/rules/id-blacklist" + } + }, + "id-denylist": { + "type": "suggestion", + "docs": { + "description": "Disallow specified identifiers", + "recommended": false, + "url": "https://eslint.org/docs/rules/id-denylist" + } + }, + "id-length": { + "type": "suggestion", + "docs": { + "description": "Enforce minimum and maximum identifier lengths", + "recommended": false, + "url": "https://eslint.org/docs/rules/id-length" + } + }, + "id-match": { + "type": "suggestion", + "docs": { + "description": "Require identifiers to match a specified regular expression", + "recommended": false, + "url": "https://eslint.org/docs/rules/id-match" + } + }, + "implicit-arrow-linebreak": { + "type": "layout", + "docs": { + "description": "Enforce the location of arrow function bodies", + "recommended": false, + "url": "https://eslint.org/docs/rules/implicit-arrow-linebreak" + }, + "fixable": "whitespace" + }, + "indent": { + "type": "layout", + "docs": { + "description": "Enforce consistent indentation", + "recommended": false, + "url": "https://eslint.org/docs/rules/indent" + }, + "fixable": "whitespace" + }, + "indent-legacy": { + "type": "layout", + "docs": { + "description": "Enforce consistent indentation", + "recommended": false, + "url": "https://eslint.org/docs/rules/indent-legacy" + }, + "deprecated": true, + "replacedBy": [ + "indent" + ], + "fixable": "whitespace" + }, + "init-declarations": { + "type": "suggestion", + "docs": { + "description": "Require or disallow initialization in variable declarations", + "recommended": false, + "url": "https://eslint.org/docs/rules/init-declarations" + } + }, + "jsx-quotes": { + "type": "layout", + "docs": { + "description": "Enforce the consistent use of either double or single quotes in JSX attributes", + "recommended": false, + "url": "https://eslint.org/docs/rules/jsx-quotes" + }, + "fixable": "whitespace" + }, + "key-spacing": { + "type": "layout", + "docs": { + "description": "Enforce consistent spacing between keys and values in object literal properties", + "recommended": false, + "url": "https://eslint.org/docs/rules/key-spacing" + }, + "fixable": "whitespace" + }, + "keyword-spacing": { + "type": "layout", + "docs": { + "description": "Enforce consistent spacing before and after keywords", + "recommended": false, + "url": "https://eslint.org/docs/rules/keyword-spacing" + }, + "fixable": "whitespace" + }, + "line-comment-position": { + "type": "layout", + "docs": { + "description": "Enforce position of line comments", + "recommended": false, + "url": "https://eslint.org/docs/rules/line-comment-position" + } + }, + "linebreak-style": { + "type": "layout", + "docs": { + "description": "Enforce consistent linebreak style", + "recommended": false, + "url": "https://eslint.org/docs/rules/linebreak-style" + }, + "fixable": "whitespace" + }, + "lines-around-comment": { + "type": "layout", + "docs": { + "description": "Require empty lines around comments", + "recommended": false, + "url": "https://eslint.org/docs/rules/lines-around-comment" + }, + "fixable": "whitespace" + }, + "lines-around-directive": { + "type": "layout", + "docs": { + "description": "Require or disallow newlines around directives", + "recommended": false, + "url": "https://eslint.org/docs/rules/lines-around-directive" + }, + "fixable": "whitespace", + "deprecated": true, + "replacedBy": [ + "padding-line-between-statements" + ] + }, + "lines-between-class-members": { + "type": "layout", + "docs": { + "description": "Require or disallow an empty line between class members", + "recommended": false, + "url": "https://eslint.org/docs/rules/lines-between-class-members" + }, + "fixable": "whitespace" + }, + "max-classes-per-file": { + "type": "suggestion", + "docs": { + "description": "Enforce a maximum number of classes per file", + "recommended": false, + "url": "https://eslint.org/docs/rules/max-classes-per-file" + } + }, + "max-depth": { + "type": "suggestion", + "docs": { + "description": "Enforce a maximum depth that blocks can be nested", + "recommended": false, + "url": "https://eslint.org/docs/rules/max-depth" + } + }, + "max-len": { + "type": "layout", + "docs": { + "description": "Enforce a maximum line length", + "recommended": false, + "url": "https://eslint.org/docs/rules/max-len" + } + }, + "max-lines": { + "type": "suggestion", + "docs": { + "description": "Enforce a maximum number of lines per file", + "recommended": false, + "url": "https://eslint.org/docs/rules/max-lines" + } + }, + "max-lines-per-function": { + "type": "suggestion", + "docs": { + "description": "Enforce a maximum number of lines of code in a function", + "recommended": false, + "url": "https://eslint.org/docs/rules/max-lines-per-function" + } + }, + "max-nested-callbacks": { + "type": "suggestion", + "docs": { + "description": "Enforce a maximum depth that callbacks can be nested", + "recommended": false, + "url": "https://eslint.org/docs/rules/max-nested-callbacks" + } + }, + "max-params": { + "type": "suggestion", + "docs": { + "description": "Enforce a maximum number of parameters in function definitions", + "recommended": false, + "url": "https://eslint.org/docs/rules/max-params" + } + }, + "max-statements": { + "type": "suggestion", + "docs": { + "description": "Enforce a maximum number of statements allowed in function blocks", + "recommended": false, + "url": "https://eslint.org/docs/rules/max-statements" + } + }, + "max-statements-per-line": { + "type": "layout", + "docs": { + "description": "Enforce a maximum number of statements allowed per line", + "recommended": false, + "url": "https://eslint.org/docs/rules/max-statements-per-line" + } + }, + "multiline-comment-style": { + "type": "suggestion", + "docs": { + "description": "Enforce a particular style for multiline comments", + "recommended": false, + "url": "https://eslint.org/docs/rules/multiline-comment-style" + }, + "fixable": "whitespace" + }, + "multiline-ternary": { + "type": "layout", + "docs": { + "description": "Enforce newlines between operands of ternary expressions", + "recommended": false, + "url": "https://eslint.org/docs/rules/multiline-ternary" + }, + "fixable": "whitespace" + }, + "new-cap": { + "type": "suggestion", + "docs": { + "description": "Require constructor names to begin with a capital letter", + "recommended": false, + "url": "https://eslint.org/docs/rules/new-cap" + } + }, + "new-parens": { + "type": "layout", + "docs": { + "description": "Enforce or disallow parentheses when invoking a constructor with no arguments", + "recommended": false, + "url": "https://eslint.org/docs/rules/new-parens" + }, + "fixable": "code" + }, + "newline-after-var": { + "type": "layout", + "docs": { + "description": "Require or disallow an empty line after variable declarations", + "recommended": false, + "url": "https://eslint.org/docs/rules/newline-after-var" + }, + "fixable": "whitespace", + "deprecated": true, + "replacedBy": [ + "padding-line-between-statements" + ] + }, + "newline-before-return": { + "type": "layout", + "docs": { + "description": "Require an empty line before `return` statements", + "recommended": false, + "url": "https://eslint.org/docs/rules/newline-before-return" + }, + "fixable": "whitespace", + "deprecated": true, + "replacedBy": [ + "padding-line-between-statements" + ] + }, + "newline-per-chained-call": { + "type": "layout", + "docs": { + "description": "Require a newline after each call in a method chain", + "recommended": false, + "url": "https://eslint.org/docs/rules/newline-per-chained-call" + }, + "fixable": "whitespace" + }, + "no-alert": { + "type": "suggestion", + "docs": { + "description": "Disallow the use of `alert`, `confirm`, and `prompt`", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-alert" + } + }, + "no-array-constructor": { + "type": "suggestion", + "docs": { + "description": "Disallow `Array` constructors", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-array-constructor" + } + }, + "no-async-promise-executor": { + "type": "problem", + "docs": { + "description": "Disallow using an async function as a Promise executor", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-async-promise-executor" + }, + "fixable": null + }, + "no-await-in-loop": { + "type": "problem", + "docs": { + "description": "Disallow `await` inside of loops", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-await-in-loop" + } + }, + "no-bitwise": { + "type": "suggestion", + "docs": { + "description": "Disallow bitwise operators", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-bitwise" + } + }, + "no-buffer-constructor": { + "deprecated": true, + "replacedBy": [], + "type": "problem", + "docs": { + "description": "Disallow use of the `Buffer()` constructor", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-buffer-constructor" + } + }, + "no-caller": { + "type": "suggestion", + "docs": { + "description": "Disallow the use of `arguments.caller` or `arguments.callee`", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-caller" + } + }, + "no-case-declarations": { + "type": "suggestion", + "docs": { + "description": "Disallow lexical declarations in case clauses", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-case-declarations" + } + }, + "no-catch-shadow": { + "type": "suggestion", + "docs": { + "description": "Disallow `catch` clause parameters from shadowing variables in the outer scope", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-catch-shadow" + }, + "replacedBy": [ + "no-shadow" + ], + "deprecated": true + }, + "no-class-assign": { + "type": "problem", + "docs": { + "description": "Disallow reassigning class members", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-class-assign" + } + }, + "no-compare-neg-zero": { + "type": "problem", + "docs": { + "description": "Disallow comparing against -0", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-compare-neg-zero" + }, + "fixable": null + }, + "no-cond-assign": { + "type": "problem", + "docs": { + "description": "Disallow assignment operators in conditional expressions", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-cond-assign" + } + }, + "no-confusing-arrow": { + "type": "suggestion", + "docs": { + "description": "Disallow arrow functions where they could be confused with comparisons", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-confusing-arrow" + }, + "fixable": "code" + }, + "no-console": { + "type": "suggestion", + "docs": { + "description": "Disallow the use of `console`", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-console" + } + }, + "no-const-assign": { + "type": "problem", + "docs": { + "description": "Disallow reassigning `const` variables", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-const-assign" + } + }, + "no-constant-binary-expression": { + "type": "problem", + "docs": { + "description": "Disallow expressions where the operation doesn't affect the value", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-constant-binary-expression" + } + }, + "no-constant-condition": { + "type": "problem", + "docs": { + "description": "Disallow constant expressions in conditions", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-constant-condition" + } + }, + "no-constructor-return": { + "type": "problem", + "docs": { + "description": "Disallow returning value from constructor", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-constructor-return" + }, + "fixable": null + }, + "no-continue": { + "type": "suggestion", + "docs": { + "description": "Disallow `continue` statements", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-continue" + } + }, + "no-control-regex": { + "type": "problem", + "docs": { + "description": "Disallow control characters in regular expressions", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-control-regex" + } + }, + "no-debugger": { + "type": "problem", + "docs": { + "description": "Disallow the use of `debugger`", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-debugger" + }, + "fixable": null + }, + "no-delete-var": { + "type": "suggestion", + "docs": { + "description": "Disallow deleting variables", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-delete-var" + } + }, + "no-div-regex": { + "type": "suggestion", + "docs": { + "description": "Disallow division operators explicitly at the beginning of regular expressions", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-div-regex" + }, + "fixable": "code" + }, + "no-dupe-args": { + "type": "problem", + "docs": { + "description": "Disallow duplicate arguments in `function` definitions", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-dupe-args" + } + }, + "no-dupe-class-members": { + "type": "problem", + "docs": { + "description": "Disallow duplicate class members", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-dupe-class-members" + } + }, + "no-dupe-else-if": { + "type": "problem", + "docs": { + "description": "Disallow duplicate conditions in if-else-if chains", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-dupe-else-if" + } + }, + "no-dupe-keys": { + "type": "problem", + "docs": { + "description": "Disallow duplicate keys in object literals", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-dupe-keys" + } + }, + "no-duplicate-case": { + "type": "problem", + "docs": { + "description": "Disallow duplicate case labels", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-duplicate-case" + } + }, + "no-duplicate-imports": { + "type": "problem", + "docs": { + "description": "Disallow duplicate module imports", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-duplicate-imports" + } + }, + "no-else-return": { + "type": "suggestion", + "docs": { + "description": "Disallow `else` blocks after `return` statements in `if` statements", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-else-return" + }, + "fixable": "code" + }, + "no-empty": { + "type": "suggestion", + "docs": { + "description": "Disallow empty block statements", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-empty" + } + }, + "no-empty-character-class": { + "type": "problem", + "docs": { + "description": "Disallow empty character classes in regular expressions", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-empty-character-class" + } + }, + "no-empty-function": { + "type": "suggestion", + "docs": { + "description": "Disallow empty functions", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-empty-function" + } + }, + "no-empty-pattern": { + "type": "problem", + "docs": { + "description": "Disallow empty destructuring patterns", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-empty-pattern" + } + }, + "no-eq-null": { + "type": "suggestion", + "docs": { + "description": "Disallow `null` comparisons without type-checking operators", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-eq-null" + } + }, + "no-eval": { + "type": "suggestion", + "docs": { + "description": "Disallow the use of `eval()`", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-eval" + } + }, + "no-ex-assign": { + "type": "problem", + "docs": { + "description": "Disallow reassigning exceptions in `catch` clauses", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-ex-assign" + } + }, + "no-extend-native": { + "type": "suggestion", + "docs": { + "description": "Disallow extending native types", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-extend-native" + } + }, + "no-extra-bind": { + "type": "suggestion", + "docs": { + "description": "Disallow unnecessary calls to `.bind()`", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-extra-bind" + }, + "fixable": "code" + }, + "no-extra-boolean-cast": { + "type": "suggestion", + "docs": { + "description": "Disallow unnecessary boolean casts", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-extra-boolean-cast" + }, + "fixable": "code" + }, + "no-extra-label": { + "type": "suggestion", + "docs": { + "description": "Disallow unnecessary labels", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-extra-label" + }, + "fixable": "code" + }, + "no-extra-parens": { + "type": "layout", + "docs": { + "description": "Disallow unnecessary parentheses", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-extra-parens" + }, + "fixable": "code" + }, + "no-extra-semi": { + "type": "suggestion", + "docs": { + "description": "Disallow unnecessary semicolons", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-extra-semi" + }, + "fixable": "code" + }, + "no-fallthrough": { + "type": "problem", + "docs": { + "description": "Disallow fallthrough of `case` statements", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-fallthrough" + } + }, + "no-floating-decimal": { + "type": "suggestion", + "docs": { + "description": "Disallow leading or trailing decimal points in numeric literals", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-floating-decimal" + }, + "fixable": "code" + }, + "no-func-assign": { + "type": "problem", + "docs": { + "description": "Disallow reassigning `function` declarations", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-func-assign" + } + }, + "no-global-assign": { + "type": "suggestion", + "docs": { + "description": "Disallow assignments to native objects or read-only global variables", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-global-assign" + } + }, + "no-implicit-coercion": { + "type": "suggestion", + "docs": { + "description": "Disallow shorthand type conversions", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-implicit-coercion" + }, + "fixable": "code" + }, + "no-implicit-globals": { + "type": "suggestion", + "docs": { + "description": "Disallow declarations in the global scope", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-implicit-globals" + } + }, + "no-implied-eval": { + "type": "suggestion", + "docs": { + "description": "Disallow the use of `eval()`-like methods", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-implied-eval" + } + }, + "no-import-assign": { + "type": "problem", + "docs": { + "description": "Disallow assigning to imported bindings", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-import-assign" + } + }, + "no-inline-comments": { + "type": "suggestion", + "docs": { + "description": "Disallow inline comments after code", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-inline-comments" + } + }, + "no-inner-declarations": { + "type": "problem", + "docs": { + "description": "Disallow variable or `function` declarations in nested blocks", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-inner-declarations" + } + }, + "no-invalid-regexp": { + "type": "problem", + "docs": { + "description": "Disallow invalid regular expression strings in `RegExp` constructors", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-invalid-regexp" + } + }, + "no-invalid-this": { + "type": "suggestion", + "docs": { + "description": "Disallow use of `this` in contexts where the value of `this` is `undefined`", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-invalid-this" + } + }, + "no-irregular-whitespace": { + "type": "problem", + "docs": { + "description": "Disallow irregular whitespace", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-irregular-whitespace" + } + }, + "no-iterator": { + "type": "suggestion", + "docs": { + "description": "Disallow the use of the `__iterator__` property", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-iterator" + } + }, + "no-label-var": { + "type": "suggestion", + "docs": { + "description": "Disallow labels that share a name with a variable", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-label-var" + } + }, + "no-labels": { + "type": "suggestion", + "docs": { + "description": "Disallow labeled statements", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-labels" + } + }, + "no-lone-blocks": { + "type": "suggestion", + "docs": { + "description": "Disallow unnecessary nested blocks", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-lone-blocks" + } + }, + "no-lonely-if": { + "type": "suggestion", + "docs": { + "description": "Disallow `if` statements as the only statement in `else` blocks", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-lonely-if" + }, + "fixable": "code" + }, + "no-loop-func": { + "type": "suggestion", + "docs": { + "description": "Disallow function declarations that contain unsafe references inside loop statements", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-loop-func" + } + }, + "no-loss-of-precision": { + "type": "problem", + "docs": { + "description": "Disallow literal numbers that lose precision", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-loss-of-precision" + } + }, + "no-magic-numbers": { + "type": "suggestion", + "docs": { + "description": "Disallow magic numbers", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-magic-numbers" + } + }, + "no-misleading-character-class": { + "type": "problem", + "docs": { + "description": "Disallow characters which are made with multiple code points in character class syntax", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-misleading-character-class" + }, + "hasSuggestions": true + }, + "no-mixed-operators": { + "type": "suggestion", + "docs": { + "description": "Disallow mixed binary operators", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-mixed-operators" + } + }, + "no-mixed-requires": { + "deprecated": true, + "replacedBy": [], + "type": "suggestion", + "docs": { + "description": "Disallow `require` calls to be mixed with regular variable declarations", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-mixed-requires" + } + }, + "no-mixed-spaces-and-tabs": { + "type": "layout", + "docs": { + "description": "Disallow mixed spaces and tabs for indentation", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-mixed-spaces-and-tabs" + } + }, + "no-multi-assign": { + "type": "suggestion", + "docs": { + "description": "Disallow use of chained assignment expressions", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-multi-assign" + } + }, + "no-multi-spaces": { + "type": "layout", + "docs": { + "description": "Disallow multiple spaces", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-multi-spaces" + }, + "fixable": "whitespace" + }, + "no-multi-str": { + "type": "suggestion", + "docs": { + "description": "Disallow multiline strings", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-multi-str" + } + }, + "no-multiple-empty-lines": { + "type": "layout", + "docs": { + "description": "Disallow multiple empty lines", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-multiple-empty-lines" + }, + "fixable": "whitespace" + }, + "no-native-reassign": { + "type": "suggestion", + "docs": { + "description": "Disallow assignments to native objects or read-only global variables", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-native-reassign" + }, + "deprecated": true, + "replacedBy": [ + "no-global-assign" + ] + }, + "no-negated-condition": { + "type": "suggestion", + "docs": { + "description": "Disallow negated conditions", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-negated-condition" + } + }, + "no-negated-in-lhs": { + "type": "problem", + "docs": { + "description": "Disallow negating the left operand in `in` expressions", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-negated-in-lhs" + }, + "replacedBy": [ + "no-unsafe-negation" + ], + "deprecated": true + }, + "no-nested-ternary": { + "type": "suggestion", + "docs": { + "description": "Disallow nested ternary expressions", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-nested-ternary" + } + }, + "no-new": { + "type": "suggestion", + "docs": { + "description": "Disallow `new` operators outside of assignments or comparisons", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-new" + } + }, + "no-new-func": { + "type": "suggestion", + "docs": { + "description": "Disallow `new` operators with the `Function` object", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-new-func" + } + }, + "no-new-object": { + "type": "suggestion", + "docs": { + "description": "Disallow `Object` constructors", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-new-object" + } + }, + "no-new-require": { + "deprecated": true, + "replacedBy": [], + "type": "suggestion", + "docs": { + "description": "Disallow `new` operators with calls to `require`", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-new-require" + } + }, + "no-new-symbol": { + "type": "problem", + "docs": { + "description": "Disallow `new` operators with the `Symbol` object", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-new-symbol" + } + }, + "no-new-wrappers": { + "type": "suggestion", + "docs": { + "description": "Disallow `new` operators with the `String`, `Number`, and `Boolean` objects", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-new-wrappers" + } + }, + "no-nonoctal-decimal-escape": { + "type": "suggestion", + "docs": { + "description": "Disallow `\\8` and `\\9` escape sequences in string literals", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-nonoctal-decimal-escape" + }, + "hasSuggestions": true + }, + "no-obj-calls": { + "type": "problem", + "docs": { + "description": "Disallow calling global object properties as functions", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-obj-calls" + } + }, + "no-octal": { + "type": "suggestion", + "docs": { + "description": "Disallow octal literals", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-octal" + } + }, + "no-octal-escape": { + "type": "suggestion", + "docs": { + "description": "Disallow octal escape sequences in string literals", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-octal-escape" + } + }, + "no-param-reassign": { + "type": "suggestion", + "docs": { + "description": "Disallow reassigning `function` parameters", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-param-reassign" + } + }, + "no-path-concat": { + "deprecated": true, + "replacedBy": [], + "type": "suggestion", + "docs": { + "description": "Disallow string concatenation with `__dirname` and `__filename`", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-path-concat" + } + }, + "no-plusplus": { + "type": "suggestion", + "docs": { + "description": "Disallow the unary operators `++` and `--`", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-plusplus" + } + }, + "no-process-env": { + "deprecated": true, + "replacedBy": [], + "type": "suggestion", + "docs": { + "description": "Disallow the use of `process.env`", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-process-env" + } + }, + "no-process-exit": { + "deprecated": true, + "replacedBy": [], + "type": "suggestion", + "docs": { + "description": "Disallow the use of `process.exit()`", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-process-exit" + } + }, + "no-promise-executor-return": { + "type": "problem", + "docs": { + "description": "Disallow returning values from Promise executor functions", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-promise-executor-return" + } + }, + "no-proto": { + "type": "suggestion", + "docs": { + "description": "Disallow the use of the `__proto__` property", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-proto" + } + }, + "no-prototype-builtins": { + "type": "problem", + "docs": { + "description": "Disallow calling some `Object.prototype` methods directly on objects", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-prototype-builtins" + } + }, + "no-redeclare": { + "type": "suggestion", + "docs": { + "description": "Disallow variable redeclaration", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-redeclare" + } + }, + "no-regex-spaces": { + "type": "suggestion", + "docs": { + "description": "Disallow multiple spaces in regular expressions", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-regex-spaces" + }, + "fixable": "code" + }, + "no-restricted-exports": { + "type": "suggestion", + "docs": { + "description": "Disallow specified names in exports", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-restricted-exports" + } + }, + "no-restricted-globals": { + "type": "suggestion", + "docs": { + "description": "Disallow specified global variables", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-restricted-globals" + } + }, + "no-restricted-imports": { + "type": "suggestion", + "docs": { + "description": "Disallow specified modules when loaded by `import`", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-restricted-imports" + } + }, + "no-restricted-modules": { + "deprecated": true, + "replacedBy": [], + "type": "suggestion", + "docs": { + "description": "Disallow specified modules when loaded by `require`", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-restricted-modules" + } + }, + "no-restricted-properties": { + "type": "suggestion", + "docs": { + "description": "Disallow certain properties on certain objects", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-restricted-properties" + } + }, + "no-restricted-syntax": { + "type": "suggestion", + "docs": { + "description": "Disallow specified syntax", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-restricted-syntax" + } + }, + "no-return-assign": { + "type": "suggestion", + "docs": { + "description": "Disallow assignment operators in `return` statements", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-return-assign" + } + }, + "no-return-await": { + "type": "suggestion", + "docs": { + "description": "Disallow unnecessary `return await`", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-return-await" + }, + "fixable": null + }, + "no-script-url": { + "type": "suggestion", + "docs": { + "description": "Disallow `javascript:` urls", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-script-url" + } + }, + "no-self-assign": { + "type": "problem", + "docs": { + "description": "Disallow assignments where both sides are exactly the same", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-self-assign" + } + }, + "no-self-compare": { + "type": "problem", + "docs": { + "description": "Disallow comparisons where both sides are exactly the same", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-self-compare" + } + }, + "no-sequences": { + "type": "suggestion", + "docs": { + "description": "Disallow comma operators", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-sequences" + } + }, + "no-setter-return": { + "type": "problem", + "docs": { + "description": "Disallow returning values from setters", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-setter-return" + } + }, + "no-shadow": { + "type": "suggestion", + "docs": { + "description": "Disallow variable declarations from shadowing variables declared in the outer scope", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-shadow" + } + }, + "no-shadow-restricted-names": { + "type": "suggestion", + "docs": { + "description": "Disallow identifiers from shadowing restricted names", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-shadow-restricted-names" + } + }, + "no-spaced-func": { + "type": "layout", + "docs": { + "description": "Disallow spacing between function identifiers and their applications (deprecated)", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-spaced-func" + }, + "deprecated": true, + "replacedBy": [ + "func-call-spacing" + ], + "fixable": "whitespace" + }, + "no-sparse-arrays": { + "type": "problem", + "docs": { + "description": "Disallow sparse arrays", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-sparse-arrays" + } + }, + "no-sync": { + "deprecated": true, + "replacedBy": [], + "type": "suggestion", + "docs": { + "description": "Disallow synchronous methods", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-sync" + } + }, + "no-tabs": { + "type": "layout", + "docs": { + "description": "Disallow all tabs", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-tabs" + } + }, + "no-template-curly-in-string": { + "type": "problem", + "docs": { + "description": "Disallow template literal placeholder syntax in regular strings", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-template-curly-in-string" + } + }, + "no-ternary": { + "type": "suggestion", + "docs": { + "description": "Disallow ternary operators", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-ternary" + } + }, + "no-this-before-super": { + "type": "problem", + "docs": { + "description": "Disallow `this`/`super` before calling `super()` in constructors", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-this-before-super" + } + }, + "no-throw-literal": { + "type": "suggestion", + "docs": { + "description": "Disallow throwing literals as exceptions", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-throw-literal" + } + }, + "no-trailing-spaces": { + "type": "layout", + "docs": { + "description": "Disallow trailing whitespace at the end of lines", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-trailing-spaces" + }, + "fixable": "whitespace" + }, + "no-undef": { + "type": "problem", + "docs": { + "description": "Disallow the use of undeclared variables unless mentioned in `/*global */` comments", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-undef" + } + }, + "no-undef-init": { + "type": "suggestion", + "docs": { + "description": "Disallow initializing variables to `undefined`", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-undef-init" + }, + "fixable": "code" + }, + "no-undefined": { + "type": "suggestion", + "docs": { + "description": "Disallow the use of `undefined` as an identifier", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-undefined" + } + }, + "no-underscore-dangle": { + "type": "suggestion", + "docs": { + "description": "Disallow dangling underscores in identifiers", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-underscore-dangle" + } + }, + "no-unexpected-multiline": { + "type": "problem", + "docs": { + "description": "Disallow confusing multiline expressions", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-unexpected-multiline" + } + }, + "no-unmodified-loop-condition": { + "type": "problem", + "docs": { + "description": "Disallow unmodified loop conditions", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-unmodified-loop-condition" + } + }, + "no-unneeded-ternary": { + "type": "suggestion", + "docs": { + "description": "Disallow ternary operators when simpler alternatives exist", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-unneeded-ternary" + }, + "fixable": "code" + }, + "no-unreachable": { + "type": "problem", + "docs": { + "description": "Disallow unreachable code after `return`, `throw`, `continue`, and `break` statements", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-unreachable" + } + }, + "no-unreachable-loop": { + "type": "problem", + "docs": { + "description": "Disallow loops with a body that allows only one iteration", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-unreachable-loop" + } + }, + "no-unsafe-finally": { + "type": "problem", + "docs": { + "description": "Disallow control flow statements in `finally` blocks", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-unsafe-finally" + } + }, + "no-unsafe-negation": { + "type": "problem", + "docs": { + "description": "Disallow negating the left operand of relational operators", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-unsafe-negation" + }, + "hasSuggestions": true, + "fixable": null + }, + "no-unsafe-optional-chaining": { + "type": "problem", + "docs": { + "description": "Disallow use of optional chaining in contexts where the `undefined` value is not allowed", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-unsafe-optional-chaining" + }, + "fixable": null + }, + "no-unused-expressions": { + "type": "suggestion", + "docs": { + "description": "Disallow unused expressions", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-unused-expressions" + } + }, + "no-unused-labels": { + "type": "suggestion", + "docs": { + "description": "Disallow unused labels", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-unused-labels" + }, + "fixable": "code" + }, + "no-unused-private-class-members": { + "type": "problem", + "docs": { + "description": "Disallow unused private class members", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-unused-private-class-members" + } + }, + "no-unused-vars": { + "type": "problem", + "docs": { + "description": "Disallow unused variables", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-unused-vars" + } + }, + "no-use-before-define": { + "type": "problem", + "docs": { + "description": "Disallow the use of variables before they are defined", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-use-before-define" + } + }, + "no-useless-backreference": { + "type": "problem", + "docs": { + "description": "Disallow useless backreferences in regular expressions", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-useless-backreference" + } + }, + "no-useless-call": { + "type": "suggestion", + "docs": { + "description": "Disallow unnecessary calls to `.call()` and `.apply()`", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-useless-call" + } + }, + "no-useless-catch": { + "type": "suggestion", + "docs": { + "description": "Disallow unnecessary `catch` clauses", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-useless-catch" + } + }, + "no-useless-computed-key": { + "type": "suggestion", + "docs": { + "description": "Disallow unnecessary computed property keys in objects and classes", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-useless-computed-key" + }, + "fixable": "code" + }, + "no-useless-concat": { + "type": "suggestion", + "docs": { + "description": "Disallow unnecessary concatenation of literals or template literals", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-useless-concat" + } + }, + "no-useless-constructor": { + "type": "suggestion", + "docs": { + "description": "Disallow unnecessary constructors", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-useless-constructor" + } + }, + "no-useless-escape": { + "type": "suggestion", + "docs": { + "description": "Disallow unnecessary escape characters", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-useless-escape" + }, + "hasSuggestions": true + }, + "no-useless-rename": { + "type": "suggestion", + "docs": { + "description": "Disallow renaming import, export, and destructured assignments to the same name", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-useless-rename" + }, + "fixable": "code" + }, + "no-useless-return": { + "type": "suggestion", + "docs": { + "description": "Disallow redundant return statements", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-useless-return" + }, + "fixable": "code" + }, + "no-var": { + "type": "suggestion", + "docs": { + "description": "Require `let` or `const` instead of `var`", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-var" + }, + "fixable": "code" + }, + "no-void": { + "type": "suggestion", + "docs": { + "description": "Disallow `void` operators", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-void" + } + }, + "no-warning-comments": { + "type": "suggestion", + "docs": { + "description": "Disallow specified warning terms in comments", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-warning-comments" + } + }, + "no-whitespace-before-property": { + "type": "layout", + "docs": { + "description": "Disallow whitespace before properties", + "recommended": false, + "url": "https://eslint.org/docs/rules/no-whitespace-before-property" + }, + "fixable": "whitespace" + }, + "no-with": { + "type": "suggestion", + "docs": { + "description": "Disallow `with` statements", + "recommended": true, + "url": "https://eslint.org/docs/rules/no-with" + } + }, + "nonblock-statement-body-position": { + "type": "layout", + "docs": { + "description": "Enforce the location of single-line statements", + "recommended": false, + "url": "https://eslint.org/docs/rules/nonblock-statement-body-position" + }, + "fixable": "whitespace" + }, + "object-curly-newline": { + "type": "layout", + "docs": { + "description": "Enforce consistent line breaks after opening and before closing braces", + "recommended": false, + "url": "https://eslint.org/docs/rules/object-curly-newline" + }, + "fixable": "whitespace" + }, + "object-curly-spacing": { + "type": "layout", + "docs": { + "description": "Enforce consistent spacing inside braces", + "recommended": false, + "url": "https://eslint.org/docs/rules/object-curly-spacing" + }, + "fixable": "whitespace" + }, + "object-property-newline": { + "type": "layout", + "docs": { + "description": "Enforce placing object properties on separate lines", + "recommended": false, + "url": "https://eslint.org/docs/rules/object-property-newline" + }, + "fixable": "whitespace" + }, + "object-shorthand": { + "type": "suggestion", + "docs": { + "description": "Require or disallow method and property shorthand syntax for object literals", + "recommended": false, + "url": "https://eslint.org/docs/rules/object-shorthand" + }, + "fixable": "code" + }, + "one-var": { + "type": "suggestion", + "docs": { + "description": "Enforce variables to be declared either together or separately in functions", + "recommended": false, + "url": "https://eslint.org/docs/rules/one-var" + }, + "fixable": "code" + }, + "one-var-declaration-per-line": { + "type": "suggestion", + "docs": { + "description": "Require or disallow newlines around variable declarations", + "recommended": false, + "url": "https://eslint.org/docs/rules/one-var-declaration-per-line" + }, + "fixable": "whitespace" + }, + "operator-assignment": { + "type": "suggestion", + "docs": { + "description": "Require or disallow assignment operator shorthand where possible", + "recommended": false, + "url": "https://eslint.org/docs/rules/operator-assignment" + }, + "fixable": "code" + }, + "operator-linebreak": { + "type": "layout", + "docs": { + "description": "Enforce consistent linebreak style for operators", + "recommended": false, + "url": "https://eslint.org/docs/rules/operator-linebreak" + }, + "fixable": "code" + }, + "padded-blocks": { + "type": "layout", + "docs": { + "description": "Require or disallow padding within blocks", + "recommended": false, + "url": "https://eslint.org/docs/rules/padded-blocks" + }, + "fixable": "whitespace" + }, + "padding-line-between-statements": { + "type": "layout", + "docs": { + "description": "Require or disallow padding lines between statements", + "recommended": false, + "url": "https://eslint.org/docs/rules/padding-line-between-statements" + }, + "fixable": "whitespace" + }, + "prefer-arrow-callback": { + "type": "suggestion", + "docs": { + "description": "Require using arrow functions for callbacks", + "recommended": false, + "url": "https://eslint.org/docs/rules/prefer-arrow-callback" + }, + "fixable": "code" + }, + "prefer-const": { + "type": "suggestion", + "docs": { + "description": "Require `const` declarations for variables that are never reassigned after declared", + "recommended": false, + "url": "https://eslint.org/docs/rules/prefer-const" + }, + "fixable": "code" + }, + "prefer-destructuring": { + "type": "suggestion", + "docs": { + "description": "Require destructuring from arrays and/or objects", + "recommended": false, + "url": "https://eslint.org/docs/rules/prefer-destructuring" + }, + "fixable": "code" + }, + "prefer-exponentiation-operator": { + "type": "suggestion", + "docs": { + "description": "Disallow the use of `Math.pow` in favor of the `**` operator", + "recommended": false, + "url": "https://eslint.org/docs/rules/prefer-exponentiation-operator" + }, + "fixable": "code" + }, + "prefer-named-capture-group": { + "type": "suggestion", + "docs": { + "description": "Enforce using named capture group in regular expression", + "recommended": false, + "url": "https://eslint.org/docs/rules/prefer-named-capture-group" + } + }, + "prefer-numeric-literals": { + "type": "suggestion", + "docs": { + "description": "Disallow `parseInt()` and `Number.parseInt()` in favor of binary, octal, and hexadecimal literals", + "recommended": false, + "url": "https://eslint.org/docs/rules/prefer-numeric-literals" + }, + "fixable": "code" + }, + "prefer-object-has-own": { + "type": "suggestion", + "docs": { + "description": "Disallow use of `Object.prototype.hasOwnProperty.call()` and prefer use of `Object.hasOwn()`", + "recommended": false, + "url": "https://eslint.org/docs/rules/prefer-object-has-own" + }, + "fixable": "code" + }, + "prefer-object-spread": { + "type": "suggestion", + "docs": { + "description": "Disallow using Object.assign with an object literal as the first argument and prefer the use of object spread instead.", + "recommended": false, + "url": "https://eslint.org/docs/rules/prefer-object-spread" + }, + "fixable": "code" + }, + "prefer-promise-reject-errors": { + "type": "suggestion", + "docs": { + "description": "Require using Error objects as Promise rejection reasons", + "recommended": false, + "url": "https://eslint.org/docs/rules/prefer-promise-reject-errors" + }, + "fixable": null + }, + "prefer-reflect": { + "type": "suggestion", + "docs": { + "description": "Require `Reflect` methods where applicable", + "recommended": false, + "url": "https://eslint.org/docs/rules/prefer-reflect" + }, + "deprecated": true, + "replacedBy": [] + }, + "prefer-regex-literals": { + "type": "suggestion", + "docs": { + "description": "Disallow use of the `RegExp` constructor in favor of regular expression literals", + "recommended": false, + "url": "https://eslint.org/docs/rules/prefer-regex-literals" + }, + "hasSuggestions": true + }, + "prefer-rest-params": { + "type": "suggestion", + "docs": { + "description": "Require rest parameters instead of `arguments`", + "recommended": false, + "url": "https://eslint.org/docs/rules/prefer-rest-params" + } + }, + "prefer-spread": { + "type": "suggestion", + "docs": { + "description": "Require spread operators instead of `.apply()`", + "recommended": false, + "url": "https://eslint.org/docs/rules/prefer-spread" + }, + "fixable": null + }, + "prefer-template": { + "type": "suggestion", + "docs": { + "description": "Require template literals instead of string concatenation", + "recommended": false, + "url": "https://eslint.org/docs/rules/prefer-template" + }, + "fixable": "code" + }, + "quote-props": { + "type": "suggestion", + "docs": { + "description": "Require quotes around object literal property names", + "recommended": false, + "url": "https://eslint.org/docs/rules/quote-props" + }, + "fixable": "code" + }, + "quotes": { + "type": "layout", + "docs": { + "description": "Enforce the consistent use of either backticks, double, or single quotes", + "recommended": false, + "url": "https://eslint.org/docs/rules/quotes" + }, + "fixable": "code" + }, + "radix": { + "type": "suggestion", + "docs": { + "description": "Enforce the consistent use of the radix argument when using `parseInt()`", + "recommended": false, + "url": "https://eslint.org/docs/rules/radix" + }, + "hasSuggestions": true + }, + "require-atomic-updates": { + "type": "problem", + "docs": { + "description": "Disallow assignments that can lead to race conditions due to usage of `await` or `yield`", + "recommended": false, + "url": "https://eslint.org/docs/rules/require-atomic-updates" + }, + "fixable": null + }, + "require-await": { + "type": "suggestion", + "docs": { + "description": "Disallow async functions which have no `await` expression", + "recommended": false, + "url": "https://eslint.org/docs/rules/require-await" + } + }, + "require-jsdoc": { + "type": "suggestion", + "docs": { + "description": "Require JSDoc comments", + "recommended": false, + "url": "https://eslint.org/docs/rules/require-jsdoc" + }, + "deprecated": true, + "replacedBy": [] + }, + "require-unicode-regexp": { + "type": "suggestion", + "docs": { + "description": "Enforce the use of `u` flag on RegExp", + "recommended": false, + "url": "https://eslint.org/docs/rules/require-unicode-regexp" + } + }, + "require-yield": { + "type": "suggestion", + "docs": { + "description": "Require generator functions to contain `yield`", + "recommended": true, + "url": "https://eslint.org/docs/rules/require-yield" + } + }, + "rest-spread-spacing": { + "type": "layout", + "docs": { + "description": "Enforce spacing between rest and spread operators and their expressions", + "recommended": false, + "url": "https://eslint.org/docs/rules/rest-spread-spacing" + }, + "fixable": "whitespace" + }, + "semi": { + "type": "layout", + "docs": { + "description": "Require or disallow semicolons instead of ASI", + "recommended": false, + "url": "https://eslint.org/docs/rules/semi" + }, + "fixable": "code" + }, + "semi-spacing": { + "type": "layout", + "docs": { + "description": "Enforce consistent spacing before and after semicolons", + "recommended": false, + "url": "https://eslint.org/docs/rules/semi-spacing" + }, + "fixable": "whitespace" + }, + "semi-style": { + "type": "layout", + "docs": { + "description": "Enforce location of semicolons", + "recommended": false, + "url": "https://eslint.org/docs/rules/semi-style" + }, + "fixable": "whitespace" + }, + "sort-imports": { + "type": "suggestion", + "docs": { + "description": "Enforce sorted import declarations within modules", + "recommended": false, + "url": "https://eslint.org/docs/rules/sort-imports" + }, + "fixable": "code" + }, + "sort-keys": { + "type": "suggestion", + "docs": { + "description": "Require object keys to be sorted", + "recommended": false, + "url": "https://eslint.org/docs/rules/sort-keys" + } + }, + "sort-vars": { + "type": "suggestion", + "docs": { + "description": "Require variables within the same declaration block to be sorted", + "recommended": false, + "url": "https://eslint.org/docs/rules/sort-vars" + }, + "fixable": "code" + }, + "space-before-blocks": { + "type": "layout", + "docs": { + "description": "Enforce consistent spacing before blocks", + "recommended": false, + "url": "https://eslint.org/docs/rules/space-before-blocks" + }, + "fixable": "whitespace" + }, + "space-before-function-paren": { + "type": "layout", + "docs": { + "description": "Enforce consistent spacing before `function` definition opening parenthesis", + "recommended": false, + "url": "https://eslint.org/docs/rules/space-before-function-paren" + }, + "fixable": "whitespace" + }, + "space-in-parens": { + "type": "layout", + "docs": { + "description": "Enforce consistent spacing inside parentheses", + "recommended": false, + "url": "https://eslint.org/docs/rules/space-in-parens" + }, + "fixable": "whitespace" + }, + "space-infix-ops": { + "type": "layout", + "docs": { + "description": "Require spacing around infix operators", + "recommended": false, + "url": "https://eslint.org/docs/rules/space-infix-ops" + }, + "fixable": "whitespace" + }, + "space-unary-ops": { + "type": "layout", + "docs": { + "description": "Enforce consistent spacing before or after unary operators", + "recommended": false, + "url": "https://eslint.org/docs/rules/space-unary-ops" + }, + "fixable": "whitespace" + }, + "spaced-comment": { + "type": "suggestion", + "docs": { + "description": "Enforce consistent spacing after the `//` or `/*` in a comment", + "recommended": false, + "url": "https://eslint.org/docs/rules/spaced-comment" + }, + "fixable": "whitespace" + }, + "strict": { + "type": "suggestion", + "docs": { + "description": "Require or disallow strict mode directives", + "recommended": false, + "url": "https://eslint.org/docs/rules/strict" + }, + "fixable": "code" + }, + "switch-colon-spacing": { + "type": "layout", + "docs": { + "description": "Enforce spacing around colons of switch statements", + "recommended": false, + "url": "https://eslint.org/docs/rules/switch-colon-spacing" + }, + "fixable": "whitespace" + }, + "symbol-description": { + "type": "suggestion", + "docs": { + "description": "Require symbol descriptions", + "recommended": false, + "url": "https://eslint.org/docs/rules/symbol-description" + }, + "fixable": null + }, + "template-curly-spacing": { + "type": "layout", + "docs": { + "description": "Require or disallow spacing around embedded expressions of template strings", + "recommended": false, + "url": "https://eslint.org/docs/rules/template-curly-spacing" + }, + "fixable": "whitespace" + }, + "template-tag-spacing": { + "type": "layout", + "docs": { + "description": "Require or disallow spacing between template tags and their literals", + "recommended": false, + "url": "https://eslint.org/docs/rules/template-tag-spacing" + }, + "fixable": "whitespace" + }, + "unicode-bom": { + "type": "layout", + "docs": { + "description": "Require or disallow Unicode byte order mark (BOM)", + "recommended": false, + "url": "https://eslint.org/docs/rules/unicode-bom" + }, + "fixable": "whitespace" + }, + "use-isnan": { + "type": "problem", + "docs": { + "description": "Require calls to `isNaN()` when checking for `NaN`", + "recommended": true, + "url": "https://eslint.org/docs/rules/use-isnan" + } + }, + "valid-jsdoc": { + "type": "suggestion", + "docs": { + "description": "Enforce valid JSDoc comments", + "recommended": false, + "url": "https://eslint.org/docs/rules/valid-jsdoc" + }, + "fixable": "code", + "deprecated": true, + "replacedBy": [] + }, + "valid-typeof": { + "type": "problem", + "docs": { + "description": "Enforce comparing `typeof` expressions against valid strings", + "recommended": true, + "url": "https://eslint.org/docs/rules/valid-typeof" + }, + "hasSuggestions": true + }, + "vars-on-top": { + "type": "suggestion", + "docs": { + "description": "Require `var` declarations be placed at the top of their containing scope", + "recommended": false, + "url": "https://eslint.org/docs/rules/vars-on-top" + } + }, + "wrap-iife": { + "type": "layout", + "docs": { + "description": "Require parentheses around immediate `function` invocations", + "recommended": false, + "url": "https://eslint.org/docs/rules/wrap-iife" + }, + "fixable": "code" + }, + "wrap-regex": { + "type": "layout", + "docs": { + "description": "Require parenthesis around regex literals", + "recommended": false, + "url": "https://eslint.org/docs/rules/wrap-regex" + }, + "fixable": "code" + }, + "yield-star-spacing": { + "type": "layout", + "docs": { + "description": "Require or disallow spacing around the `*` in `yield*` expressions", + "recommended": false, + "url": "https://eslint.org/docs/rules/yield-star-spacing" + }, + "fixable": "whitespace" + }, + "yoda": { + "type": "suggestion", + "docs": { + "description": "Require or disallow \"Yoda\" conditions", + "recommended": false, + "url": "https://eslint.org/docs/rules/yoda" + }, + "fixable": "code" + } +} \ No newline at end of file diff --git a/eslint/docs/src/_data/site.js b/eslint/docs/src/_data/site.js new file mode 100644 index 0000000..d079269 --- /dev/null +++ b/eslint/docs/src/_data/site.js @@ -0,0 +1,26 @@ +/** + * @fileoverview Convenience helper for site data. + * @author Nicholas C. Zakas + */ + +//----------------------------------------------------------------------------- +// Requirements +//----------------------------------------------------------------------------- + +const path = require("path"); +const fs = require("fs"); +const yaml = require("js-yaml"); + +//----------------------------------------------------------------------------- +// Exports +//----------------------------------------------------------------------------- + +module.exports = function(eleventy) { + + const siteName = eleventy.site_name; + const siteDataFile = path.resolve(__dirname, `sites/${siteName}.yml`); + + fs.statSync(siteDataFile); + + return yaml.load(fs.readFileSync(siteDataFile)); +} diff --git a/eslint/docs/src/_data/sites/en.yml b/eslint/docs/src/_data/sites/en.yml new file mode 100644 index 0000000..43e112f --- /dev/null +++ b/eslint/docs/src/_data/sites/en.yml @@ -0,0 +1,117 @@ +#------------------------------------------------------------------------------ +# English Site Details +# The documentation site that is hosted at eslint.org/docs +# Author: Nicholas C. Zakas +#------------------------------------------------------------------------------ + +#------------------------------------------------------------------------------ +# Global Settings +#------------------------------------------------------------------------------ + +language: + code: en + flag: 🇺🇸 + name: English (US) +locale: en-US +hostname: eslint.org + +#------------------------------------------------------------------------------ +# Analytics +#------------------------------------------------------------------------------ + +google_analytics: + code: "G-7DGPHY308T" + +#------------------------------------------------------------------------------ +# Ads +#------------------------------------------------------------------------------ + +carbon_ads: + serve: CESDV2QM + placement: eslintorg + +#------------------------------------------------------------------------------ +# Shared +#------------------------------------------------------------------------------ + +shared: + get_started: Get Started + become_a_sponsor: Become a Sponsor + eslint_logo_alt: ESLint logo + description: > + A pluggable and configurable linter tool for identifying and reporting on + patterns in JavaScript. Maintain your code quality with ease. + title_format: PAGE_TITLE - ESLint - Pluggable JavaScript Linter + skip_to_content: Skip to main content + donate: Donate + +#------------------------------------------------------------------------------ +# Navigation +#------------------------------------------------------------------------------ + +navigation: +- text: Team + link: team +- text: Blog + link: blog +- text: Docs + link: docs +- text: Store + link: store + target: _blank +- text: Playground + link: playground + +#------------------------------------------------------------------------------ +# Footer +#------------------------------------------------------------------------------ + +footer: + title: Ready to fix your JavaScript code? + description: Install from npm or start donating today. + secondary: Secondary + social_icons: + title: Social Media + twitter: Twitter + chat: Discord + mailing_list: Google Group + github: GitHub + theme_switcher: + title: Theme Switcher + light: Light + dark: Dark + language_switcher: + title: Language Switcher + description: Selecting a language will take you to the ESLint website in that language. + change_language: Change Language + language: Language + copyright: > + © OpenJS Foundation and ESLint contributors, www.openjsf.org + links: + open_jsf: The OpenJS Foundation + terms: Terms of Use + privacy: Privacy Policy + bylaws: OpenJS Foundation Bylaws + trademark: Trademark Policy + trademark_list: Trademark List + cookies: Cookie Policy + +#------------------------------------------------------------------------------ +# 404 Page +#------------------------------------------------------------------------------ + +404_page: + title: 404 error + subtitle: Page not found + description: Sorry, the page you are looking for doesn't exist or has been moved. + actions: + back_to_home: Back to homepage + browse_docs: Browse the docs + +#------------------------------------------------------------------------------ +# Edit link +#------------------------------------------------------------------------------ + +edit_link: + start_with: https://github.com/eslint/eslint/edit/main/docs/ + text: Edit this page diff --git a/eslint/docs/src/_data/versions.json b/eslint/docs/src/_data/versions.json new file mode 100644 index 0000000..6e585d6 --- /dev/null +++ b/eslint/docs/src/_data/versions.json @@ -0,0 +1,4 @@ +{ + "items": [ + ] +} diff --git a/eslint/docs/src/_includes/components/_component.njk b/eslint/docs/src/_includes/components/_component.njk new file mode 100644 index 0000000..f36f898 --- /dev/null +++ b/eslint/docs/src/_includes/components/_component.njk @@ -0,0 +1,3 @@ +{% macro component(name, params) %} + {% include './' + name + '.macro.html' ignore missing %} +{% endmacro %} diff --git a/eslint/docs/src/_includes/components/alert.macro.html b/eslint/docs/src/_includes/components/alert.macro.html new file mode 100644 index 0000000..91e3a94 --- /dev/null +++ b/eslint/docs/src/_includes/components/alert.macro.html @@ -0,0 +1,38 @@ +{%- macro warning(params) -%} + +{%- endmacro -%} + +{%- macro important(params) -%} + +{%- endmacro -%} + +{%- macro tip(params) -%} + +{%- endmacro -%} diff --git a/eslint/docs/src/_includes/components/button.macro.html b/eslint/docs/src/_includes/components/button.macro.html new file mode 100644 index 0000000..1881d95 --- /dev/null +++ b/eslint/docs/src/_includes/components/button.macro.html @@ -0,0 +1,26 @@ +{%- macro button(behavior="link", params) -%} + {%- if params.behavior == "action" -%} + + {%- else -%} + + {%- if params.text -%} + {{ params.text }} + {%- else -%} + This is a link styled like a button + {%- endif -%} + + {%- endif -%} +{%- endmacro -%} diff --git a/eslint/docs/src/_includes/components/code-tabs.html b/eslint/docs/src/_includes/components/code-tabs.html new file mode 100644 index 0000000..8f1524b --- /dev/null +++ b/eslint/docs/src/_includes/components/code-tabs.html @@ -0,0 +1,21 @@ +
+ +
+

npm

+ +```shell + npm install --save-dev +``` + +
+
+

yarn

+ +```shell +yarn install +``` +
+
diff --git a/eslint/docs/src/_includes/components/docs-index.html b/eslint/docs/src/_includes/components/docs-index.html new file mode 100644 index 0000000..0cdbe74 --- /dev/null +++ b/eslint/docs/src/_includes/components/docs-index.html @@ -0,0 +1,29 @@ +{% set navPages = collections.docs | eleventyNavigation %} +{% macro renderNavListItem(entry) -%} +
  • + {{ entry.title }} + {%- if entry.children.length -%} +
      + {%- for child in entry.children %}{{ renderNavListItem(child) }}{% endfor -%} +
    + {%- endif -%} +
  • +{%- endmacro %} + + diff --git a/eslint/docs/src/_includes/components/docs-toc.html b/eslint/docs/src/_includes/components/docs-toc.html new file mode 100644 index 0000000..c4f4a4a --- /dev/null +++ b/eslint/docs/src/_includes/components/docs-toc.html @@ -0,0 +1,8 @@ + diff --git a/eslint/docs/src/_includes/components/hero.macro.html b/eslint/docs/src/_includes/components/hero.macro.html new file mode 100644 index 0000000..3ff0c9c --- /dev/null +++ b/eslint/docs/src/_includes/components/hero.macro.html @@ -0,0 +1,29 @@ +{%- macro hero(params) -%} +
    +
    +
    + {%- if params.post -%} + + {%- endif -%} +

    {{ params.title }}

    +

    + {{ params.supporting_text | safe }} +

    + {% if params.buttons %} +
    + {% if params.buttons.primary %} + {{ params.buttons.primary.primaryText }} + {% endif %} + {% if params.buttons.secondary %} + {{ params.buttons.secondary.secondaryText }} + {% endif %} +
    + + {% endif %} +
    +
    + {% include "partials/carbon-ad.html" %} +
    +
    +
    +{%- endmacro -%} diff --git a/eslint/docs/src/_includes/components/language-switcher.html b/eslint/docs/src/_includes/components/language-switcher.html new file mode 100644 index 0000000..aef1c2a --- /dev/null +++ b/eslint/docs/src/_includes/components/language-switcher.html @@ -0,0 +1,24 @@ +
    + {{ site.footer.language_switcher.change_language }} + +
    diff --git a/eslint/docs/src/_includes/components/logo.html b/eslint/docs/src/_includes/components/logo.html new file mode 100644 index 0000000..1b874fe --- /dev/null +++ b/eslint/docs/src/_includes/components/logo.html @@ -0,0 +1,21 @@ + diff --git a/eslint/docs/src/_includes/components/nav-search.html b/eslint/docs/src/_includes/components/nav-search.html new file mode 100644 index 0000000..531e819 --- /dev/null +++ b/eslint/docs/src/_includes/components/nav-search.html @@ -0,0 +1,11 @@ + diff --git a/eslint/docs/src/_includes/components/nav-version-switcher.html b/eslint/docs/src/_includes/components/nav-version-switcher.html new file mode 100644 index 0000000..f4e0f5f --- /dev/null +++ b/eslint/docs/src/_includes/components/nav-version-switcher.html @@ -0,0 +1,25 @@ + +
    + Versions + + +
    diff --git a/eslint/docs/src/_includes/components/navigation.html b/eslint/docs/src/_includes/components/navigation.html new file mode 100644 index 0000000..56cd65f --- /dev/null +++ b/eslint/docs/src/_includes/components/navigation.html @@ -0,0 +1,26 @@ + diff --git a/eslint/docs/src/_includes/components/related-rules.macro.html b/eslint/docs/src/_includes/components/related-rules.macro.html new file mode 100644 index 0000000..913872a --- /dev/null +++ b/eslint/docs/src/_includes/components/related-rules.macro.html @@ -0,0 +1,14 @@ +{%- macro related_rules(params) -%} + +{%- endmacro -%} diff --git a/eslint/docs/src/_includes/components/rule-categories.macro.html b/eslint/docs/src/_includes/components/rule-categories.macro.html new file mode 100644 index 0000000..d8531c2 --- /dev/null +++ b/eslint/docs/src/_includes/components/rule-categories.macro.html @@ -0,0 +1,56 @@ + +{%- macro ruleCategories(params) -%} +
    + {%- if params.recommended == true -%} +
    + ✅ Recommended +

    + The "extends": "eslint:recommended" property in a configuration file enables this rule +

    +
    + {%- endif -%} + {%- if params.fixable -%} +
    + 🛠 Fixable +

    + Some problems reported by this rule are automatically fixable by the --fix command line option +

    +
    + {%- endif -%} + {%- if params.hasSuggestions == true -%} +
    + 💡 hasSuggestions +

    + Some problems reported by this rule are manually fixable by editor suggestions +

    +
    + {%- endif -%} +
    +{%- endmacro -%} + +{%- macro recommended() -%} +
    + ✅ Recommended +

    + if the "extends": "eslint:recommended" property in a configuration file enables the rule. +

    +
    +{%- endmacro -%} + +{%- macro fixable() -%} +
    + 🛠 Fixable +

    + if some problems reported by the rule are automatically fixable by the --fix command line option +

    +
    +{%- endmacro -%} + +{%- macro hasSuggestions() -%} +
    + 💡 hasSuggestions +

    + if some problems reported by the rule are manually fixable by editor suggestions +

    +
    +{%- endmacro -%} diff --git a/eslint/docs/src/_includes/components/rule-list.macro.html b/eslint/docs/src/_includes/components/rule-list.macro.html new file mode 100644 index 0000000..670a0a7 --- /dev/null +++ b/eslint/docs/src/_includes/components/rule-list.macro.html @@ -0,0 +1,3 @@ +{%- macro ruleList(params) -%} + {% for rule in params.rules %}{{ rule }}{% endfor %} +{%- endmacro -%} diff --git a/eslint/docs/src/_includes/components/rule.macro.html b/eslint/docs/src/_includes/components/rule.macro.html new file mode 100644 index 0000000..693be22 --- /dev/null +++ b/eslint/docs/src/_includes/components/rule.macro.html @@ -0,0 +1,51 @@ +{% from 'components/rule-list.macro.html' import ruleList %} + +{%- macro rule(params) -%} +
    +
    + {%- if params.deprecated == true -%} +

    + {{ params.name }} + deprecated +

    + {%- if params.replacedBy|length -%} +

    Replaced by {{ ruleList({ rules: params.replacedBy }) }}

    + {%- else -%}

    {{ params.description }}

    + {%- endif -%} + {%- elseif params.removed == true -%} +

    + {{ params.name }} + removed +

    + {%- if params.replacedBy -%} +

    Replaced by {{ ruleList({ rules: params.replacedBy }) }}

    + {%- else -%}

    {{ params.description }}

    + {%- endif -%} + {%- else -%} + {{ params.name }} +

    {{ params.description }}

    + {%- endif -%} +
    +
    + Categories: + {%- if (params.deprecated) or (params.removed) -%} +

    + +

    + {%- else -%} +

    + ✅ Extends +

    + {%- endif -%} + +

    + 🛠 Fix +

    +

    + 💡 Suggestions +

    +
    +
    +{%- endmacro -%} diff --git a/eslint/docs/src/_includes/components/search.html b/eslint/docs/src/_includes/components/search.html new file mode 100644 index 0000000..3363858 --- /dev/null +++ b/eslint/docs/src/_includes/components/search.html @@ -0,0 +1,22 @@ + diff --git a/eslint/docs/src/_includes/components/social-icons.html b/eslint/docs/src/_includes/components/social-icons.html new file mode 100644 index 0000000..b75b75f --- /dev/null +++ b/eslint/docs/src/_includes/components/social-icons.html @@ -0,0 +1,57 @@ + diff --git a/eslint/docs/src/_includes/components/theme-switcher.html b/eslint/docs/src/_includes/components/theme-switcher.html new file mode 100644 index 0000000..69924d9 --- /dev/null +++ b/eslint/docs/src/_includes/components/theme-switcher.html @@ -0,0 +1,28 @@ + diff --git a/eslint/docs/src/_includes/components/version-switcher.html b/eslint/docs/src/_includes/components/version-switcher.html new file mode 100644 index 0000000..ce29efd --- /dev/null +++ b/eslint/docs/src/_includes/components/version-switcher.html @@ -0,0 +1,25 @@ + +
    + Versions + + +
    diff --git a/eslint/docs/src/_includes/layouts/base.html b/eslint/docs/src/_includes/layouts/base.html new file mode 100644 index 0000000..db69d33 --- /dev/null +++ b/eslint/docs/src/_includes/layouts/base.html @@ -0,0 +1,157 @@ + + + + + + + {% if NOINDEX %} + + {% endif %} + {% if title %} + {% set page_title = title %} + {% else %} + {% set page_title = site[hook].title %} + {% endif %} + + {% set page_title = site.shared.title_format | replace("PAGE_TITLE", page_title) %} + {% set cover_image = ["https://", site.hostname, "/icon-512.png" ] | join %} + {% set cover_image_alt = site.shared.eslint_logo_alt %} + {% set page_desc = site.shared.description %} + {% set relative_page_url = page.url | url | prettyURL %} + {% set page_url = ["https://", site.hostname, relative_page_url ] | join %} + + + {{ page_title }} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{ content | safe }} + + + + + + {% include 'partials/analytics.html' %} + + {%- if hook == "component-library" -%} + + {%- endif -%} + + + + + diff --git a/eslint/docs/src/_includes/layouts/components.html b/eslint/docs/src/_includes/layouts/components.html new file mode 100644 index 0000000..0e28f26 --- /dev/null +++ b/eslint/docs/src/_includes/layouts/components.html @@ -0,0 +1,46 @@ +--- +layout: base.html +hook: "component-library" +--- + +{% include "partials/docs-header.html" %} + +{% from 'components/hero.macro.html' import hero %} + +{{ hero({ + title: "ESLint Docs Components", + supporting_text: "Components used across this site." + }) +}} + +
    +
    + +
    + +
    +
    +

    {{ title }}

    + {{ content | safe }} +
    +
    +
    + +{% include "partials/site-footer.html" %} diff --git a/eslint/docs/src/_includes/layouts/doc.html b/eslint/docs/src/_includes/layouts/doc.html new file mode 100644 index 0000000..70888cd --- /dev/null +++ b/eslint/docs/src/_includes/layouts/doc.html @@ -0,0 +1,107 @@ +--- +layout: base.html +--- + +{% include "partials/docs-header.html" %} +{% from 'components/rule-categories.macro.html' import ruleCategories %} + +
    +
    +
    + {% include 'components/version-switcher.html' %} +
    + {% include 'components/docs-index.html' %} +
    + + {# Add in various sections to content so TOC is accurate #} + {% set all_content = content %} + {% set rule_meta = rules_meta[title] %} + {% set added_version = rule_versions.added[title] %} + {% set removed_version = rule_versions.removed[title] %} + + {% if related_rules %} + {% set related_rules_content %} + + {% related_rules related_rules %} + {% endset %} + + {% set all_content = [all_content, related_rules_content] | join %} + {% endif %} + + {% if added_version %} + {% set version_content %} +

    Version

    +

    This rule was introduced in ESLint v{{added_version}}{% if removed_version%} + and removed in v{{removed_version}}{% endif %}.

    + {% endset %} + + {% set all_content = [all_content, version_content] | join %} + {% endif %} + + {% if further_reading %} + {% set further_reading_content %} +

    Further Reading

    + {% for url in further_reading %} + {% link url %} + {% endfor %} + {% endset %} + + {% set all_content = [all_content, further_reading_content] | join %} + {% endif %} + + {% if rule_meta %} + {% set resources_content %} +

    Resources

    + + {% endset %} + {% set all_content = [all_content, resources_content] | join %} + {% endif %} + +
    +
    +
    +

    {{ title }}

    + {% if rule_meta %} + {%set id = true if (rule_meta.docs.recommended or rule_meta.fixable or rule_meta.hasSuggestions) else false %} +

    {{ rule_meta.docs.description | markdown | safe }}

    + {{ ruleCategories({ + index: id, + recommended: rule_meta.docs.recommended, + fixable: rule_meta.fixable, + hasSuggestions: rule_meta.hasSuggestions + }) }} + {% endif %} + + {% include 'components/docs-toc.html' %} + + {{ all_content | safe }} +
    + + +
    + +
    +
    + + {% include 'components/docs-toc.html' %} +
    + {% include "partials/docs-footer.html" %} +
    +
    +
    + + diff --git a/eslint/docs/src/_includes/layouts/main.html b/eslint/docs/src/_includes/layouts/main.html new file mode 100644 index 0000000..ed38d9c --- /dev/null +++ b/eslint/docs/src/_includes/layouts/main.html @@ -0,0 +1,12 @@ +--- +layout: base.html +--- + +{% include "partials/docs-header.html" %} + + +
    + {{ content | safe }} +
    + +{% include "partials/site-footer.html" %} diff --git a/eslint/docs/src/_includes/partials/analytics.html b/eslint/docs/src/_includes/partials/analytics.html new file mode 100644 index 0000000..a8a927e --- /dev/null +++ b/eslint/docs/src/_includes/partials/analytics.html @@ -0,0 +1,24 @@ + +{% if site.google_analytics.code %} + + + +{% endif %} diff --git a/eslint/docs/src/_includes/partials/carbon-ad.html b/eslint/docs/src/_includes/partials/carbon-ad.html new file mode 100644 index 0000000..c79eba5 --- /dev/null +++ b/eslint/docs/src/_includes/partials/carbon-ad.html @@ -0,0 +1,13 @@ + +{% if site.carbon_ads.serve %} + +{% endif %} diff --git a/eslint/docs/src/_includes/partials/docs-footer.html b/eslint/docs/src/_includes/partials/docs-footer.html new file mode 100644 index 0000000..54791ea --- /dev/null +++ b/eslint/docs/src/_includes/partials/docs-footer.html @@ -0,0 +1,14 @@ +
    + +
    + {% include 'components/theme-switcher.html' %} + {% include 'components/language-switcher.html' %} +
    +
    diff --git a/eslint/docs/src/_includes/partials/docs-header.html b/eslint/docs/src/_includes/partials/docs-header.html new file mode 100644 index 0000000..f7abc75 --- /dev/null +++ b/eslint/docs/src/_includes/partials/docs-header.html @@ -0,0 +1,8 @@ + diff --git a/eslint/docs/src/_includes/partials/docs-left-sidebar.html b/eslint/docs/src/_includes/partials/docs-left-sidebar.html new file mode 100644 index 0000000..e69de29 diff --git a/eslint/docs/src/_includes/partials/languages-list.html b/eslint/docs/src/_includes/partials/languages-list.html new file mode 100644 index 0000000..5d22b8a --- /dev/null +++ b/eslint/docs/src/_includes/partials/languages-list.html @@ -0,0 +1,5 @@ + diff --git a/eslint/docs/src/_includes/partials/site-footer.html b/eslint/docs/src/_includes/partials/site-footer.html new file mode 100644 index 0000000..0247187 --- /dev/null +++ b/eslint/docs/src/_includes/partials/site-footer.html @@ -0,0 +1,24 @@ + diff --git a/eslint/docs/src/_includes/partials/versions-list.html b/eslint/docs/src/_includes/partials/versions-list.html new file mode 100644 index 0000000..2e2fb2f --- /dev/null +++ b/eslint/docs/src/_includes/partials/versions-list.html @@ -0,0 +1,7 @@ + diff --git a/eslint/docs/about/index.md b/eslint/docs/src/about/index.md similarity index 98% rename from eslint/docs/about/index.md rename to eslint/docs/src/about/index.md index a9c5acb..2ced3af 100644 --- a/eslint/docs/about/index.md +++ b/eslint/docs/src/about/index.md @@ -1,4 +1,8 @@ -# About +--- +title: About +layout: doc + +--- ESLint is an open source JavaScript linting utility originally created by Nicholas C. Zakas in June 2013. Code [linting][] is a type of static analysis that is frequently used to find problematic patterns or code that doesn't adhere to certain style guidelines. There are code linters for most programming languages, and compilers sometimes incorporate linting into the compilation process. diff --git a/eslint/docs/src/assets/fonts/Consolas.woff b/eslint/docs/src/assets/fonts/Consolas.woff new file mode 100644 index 0000000000000000000000000000000000000000..c4db8dd2ea3612a73e40712b3a81d1f68e358a85 GIT binary patch literal 199344 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≠mWm5#;5UmNf(VA}{PUH0*`+LbkonKS*&@o`8 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

    R?hzRrQ3l)hn}`+84JsWyhqK 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

    vEyTo{c{JY6FH+T4ROWL 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

    dbRqxS_$v) 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�+Ex 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�_A>O0C8Shtqq*&;#d(l)OBmp9e=?|2H zN*+2}#F!%U6(H~;3gms;87F7u4cpnd^t6%lp*+R0{T!jQv+V2bF=1X}A(sp-QsJ!xw0h&QgcvGx z?ZG1y@)U@oCxUOIdB50XuUdFV1{d`$$;SZ-gz@oDw#^roHfg`b} zjR<&P>Kg<}Cu(u%LkEz`q^rMfKUS5j9Ygv!TE)bL{m)|c7<#e{xoB+6|@-63tulWWoT}cDS;nQa^A?OraLsFye ztM-9>4|}MH!YnS$hx_(kIq}5Zw3;yv`1sR5@`PlH=*{QL0afe|GZ(~HWTqjRwz(|rp@UHSrQ9vdLQ@3g_W0Pgz! z_NRu$rr)!!h0~{LsF>>^$oS3T1o0y%n9^*22OuHBSG4>+QiXrT6IsKcWdnC6T@HSko%hWO`qul^oYkA% zpBxar4H71uH+uv_7BR7X^8}P9P80WQ52{GA>MPLyofXib0RLQyNFu^aGYtKe3oK6p{`D7c<3~l8mVp}c zX`-cn2??b{5`rQ_V}n1sVqfy?IVT=5s9YLQAqEKu3x|mVWuXM4)BgTlc%-i3Q{bnK zA)8m6Li~e_s=p}~EPOZ(px)TLn&hW33}veNGDmB#Rgge`&|Gc3Yr$y$m2bu}C#2D` zFMx$cTEyFXk%`VEQk;Z&`^d4$b=29on4F{Q+qj_B=dIm>F0tYPy@Td-c$lv%vt$F= z*qz!>Q_p}Sg{P{1XI{@JR|Vbl4$0aDJf8uTy5mBC$v^;{b5P?P9LE_NwHFn5S*vdO zQ1tL55i3N#wroPqv%N-|ml9GKKGZfsv1CQyG3I&vdZjsE6xZMAK0?Z91uoMvo^DKO zas|aBoe%28y1t1{+~rKU53q{rLVCg~ECpj~CnY4gM2SktkVBph55ryH=E9Al%HKw# zTIiY4fouYh%8b*0C=#+rm}iekQh1WNW`V>IPak7GE{#pkc_oq&XVo0c##2yiQ0B$0 zs9b42r}G-tja&jl`gdkZfJ$)Cd89U_6bQpeG+|e0^Mq&RUmBBXb(j>Z#p;ZEGP9Yx z){R7*3$*9KuIoG^Nbg6QkiOPm3Z&3kL%{wi{2q z(c`_)ECoFyg#1^sB_3WZN?cbO{al*y&K}2;R ze`K=gANlMxXVR)ysD{g8fNi9+1OF-Wn9j8!vhQ=cV` z_Ae#%E;Qi2`FD{0IXhDj>4IW$j>ntN{dbP@SJ4`ue&ON{<-)=ejdTyN%upW;0bK7Z75zX5A>f1az75| zQe+KGQkVgfP4HvAE}&EUrxn0O_O$}Q+>b$#zaY-n(9nxi8I$3LCCV!~{Y{OH3%P}Pn0%)xy-PsHDmIdF z2*W6nQFP$zSVyPRn2GA%g+HhEYekAcp*wrTIad#t*Sw=Fe?sW3#BieJGKQ7JExDxJ zVYhs3`NS1{Nhk$uueMoQ%YIgRxA>}`sgiVZJTG`{yp*);H&t2bJvM`RXmE0LwqIOW zTF^o*V!=>kM(AiW00IaK3=R+y6c!j793o^IGkW!U>+SE+F_yV*f_m(==vt@n^zCAq zr$wc*aq;M7@#M%mj4j4`xp?o6AMw6}U46e{D~Esb45dsx$Q15*;?bqgn_))Xnt@k` z%*f&Mu_O`E8;cmr^PyCy51sr@XJ9I-Q@||n$fpw&{&$-ak)V6LXAp!UTb$gkY5?%M zsmA;>n$W$$m`=G;L$Us0K~VwN9mNdht@c>bi)n=L{U8wcME{bFyoCRwto&E~h&xq+ z^$xC1b?j;WPtOr4d?G&2SybVg-GBkX=H|yo3Fu%}J_EEYZzQAn1#5=G3LGNYKwY4p zy+BZT4VYwo!&TDVGqKS9B8SW+eG!y3;ZQS-F2B~hTRBZNXBO@Ob#}X|aSd>}wCn<+ z*jC0fVrZLJP1|wX5>R#gAnZ3m(RCa(atV3`sZb31bQ~5~m$rO?JIfvytve^EX1${> zkf;zP%#Y$3sX(P^tZ}q?yvk+^$F5Y1X;vKfx+X&yz@W6_mdVU0(~XWrHxv^^DiOp-%=P1+&#axc@* zVE6Bk%c2|;7so%~bVV8W;VZmH;2>CLx%G;qXrobx*COQg1-9>$TaDfSW`8A%ywP*4 zPuPP0-mZCxb)u^xS7x~TZzb3+;!!+Q3 zjf3l7@17+E{VLll? z9+?o@N)+Z7L{s6XgV6-Fry#$|2}sv5tMOfd-wDdg1u2?6-F|iYT$af8fKu!zEDDlJ zs_Toi-tC4Ox)!0{v$H5QRS&h7l$IVDf{mRSn|MPsfwcP#%YASaMT;ASa_e~r7{nop z#g9J`o`{)t^9)?`p7%EBB>|ag|Lc}oae^aSmxQjN}z+WWq zp&jRmt$18~-gkY@z4~_FQLEv%MwrR;M18*?=3%gpxSJ*>P)?&iy{{6q}aiM9wz0;=t}1ora>fkvc~ZiT3* z6$wX*GHPNqv>yy>ne>EoXIrLFh?ilLN+wzef!es@7w`{)KqbQgQwJnjWOUCGYn}^|9%{qUe|{!>tI+MW=j_+u<;35NAwHY@b<|Hffp?R~ zG%3gNm)-COEh9Vx__wRaQpE2s-Dk`LApkl30~yZ#L)BUJyAJIX4yox=r6jWKGd4WT zFZW_mUV9Jyy}65vY2s!4>=?6{fAgS>s38OuWKsWjYH}GPRl$K=pE=u{%`$r`oGaXxqz{^(4R_+^Pl?JsQ}TYiYNXNbZuwh z71d#(r^MG`eJ#>9@3Hmc?IkPhS*Ms36D)C=t+9)IJyhP;nGS(UjH4b=xa5-4l5sOJ z9D+F8x+2qUY^_VY;=rIR46j6{T;Kcd^~~&}@xb)F^^FEgq6T0&0tvvtx&B0LxT$(H zy0C<*vP@V^2QAdkd%)i;I1Yt+lhAii6F71!-?36l19RFqPJhXxZA%HZM~k6N!7WFi z(n7JlC~Nj1PI65xd0k@8pT(`PL7&jBcedirb=K5Mv6~Bt7u7k)*Q3-j-_Ln6cdTXg z4cerTp7;F_w&&Dw@^Pg_%M?=tBYzPs$pYq78n%$JUFd&E z)!!uP-_F;Khd2;?87_pP0 z&XbKhR5*vO-A)5lUW{Y|uBprsc@G3pQfj67-4D?Jn>^Wd)R#+qj+W8Ce+`Ox@+VhG z6^;OYaky%NM5?CXd2Gia54eA%T`4keO!jU}eZt#>Of;#fs3%_2W0_II1|^3WekgS+ za!(3$sd;PF?H*tEpTtAog1>spU#bPK^W_ek0YeCXWJkn+Fe*>o-u*8}^9L#Zlg$5Lk;Z5D^bS9-sPlr+ zzZlbhq=BXYCz9RRI=e&2=2y>ANobVVzB-$8!<7)lqY;| zjSN_=2TB=t$qa8^XnX;UwZ)5~=2&pD{|EH|{2C%O%c`#sGvx>Wq9PJAFk{#L6rLe6yL(!WyC$6;ku}`>OQ|C|#p5Yz=BTc>Kiw zC*lS8a-hn8$K`(zC$~4dcL-f$*UDhEe9X2sb?>UXHK=(AwM{yULOW47kt!igAYf%PD6P#8E0^W%d3UFFZYhFOII5rk$r;_8)e;jn@PIBla(rCSCj&M*}O6 zXk#>!1p24&1NdDypP*U$7ehb4mgSqyQBFmOJo<;Mf0_CCe9YusP=$C@6{nxYZkoEz zix@n|lvCe(BXqCJm%On0iFNGJ_|Sij4AQ0PzI;x#pV8z_3jf95soIhyb^rA<*Y6JM z|HAj_X-;FPD*69`;gec|jU4`eg(h@DwO227*T_{7c1#uw*w-J)1W9{bSOUZ(gZwuX z{ND^epRWNJL1ODL!ap>^?`wTPk){7DBqZzeEhjsW?iOH7HJvj5z(;?WfTDJ=o` zYjNPK6jQN;Eo0x4CW&PJC*6e@>{&99{4Z+-Zf&TlO#hOAulf@u{+}M=^P9Ljdoh%5 z(K}gq&jac?1dI71UP+&7?xJ0Mo^gFO^|R)EwIAo*ITV#%@~drzqv zP-0DqI_FRLbq~rvJ)wWas6X{N(2)$0VFvM+*Q?~+%Y};X$TAbnfa-XJk2Eex5z-89 zZFuhj;uXj6)2%xYue01JJz=iLzd>~zu-o^IhXC2EN56^>+20Kv$K(L&v=OeJ2PUjs zZ@8;ab+;S$yuw3vb>3q_00R8%h;FGeL$L8SchpHP%g9jc-f*&Y5O(0Q@xXzgj_x@I!0rs)UdkF>OPZr=&D=qeV zZ^7UdlH56Q`e_|3)r4-Po>uA3LS6HQhLW*VN-2AtI;61Gx&>EGpJdQlGq%yhHR&SS z<}&|EGG>NW>*iZxX7w8Hg@X2Ob0r9w#&8wjjm8zPhERK8QF)40vOu27Sxjy2>yyCkV;H42gOqF+B)zQbN%&uG>eO{hUrf$w- zpY2*~umad9iB@rRO1#vNLX?&!k0Z__>=xdCA2oE#e`lAwgWtgaIgerkuCTr)Vtpxy zYOHN?_M~}V55{*M!AEPpInyE*YC_Sd-Zl<>+ahNI=LVag(>b$5mk&60xd{Ht`}uK0^M3gI!TGh!{q^@N7Y)=oFOaRuQw1Ln zVMZyX=%SAq7*Ccu*x{zi9H<}gRxWtn?=FmF+t}@5vQ?lGr-7Vy1KFw7xB(sf%hO^h`e2287 z+;c*y2>!S(h`Ah4-Ra=wuXDXiE4LH7I_}hMpnjs-lZ7u*HN)JW%fV_R&PZv^{ly&Lf-#TA znajB4yEMMp1utERTo{<@mFir@j*~eMLIok~mofb0I42sn)Vy;C`A+}Ae2`%wRZcks zOe@Q)!oU8Ogn!GVDQt5+OM&HdMm=5qvw8HQyRPyTKklPn;M`Nf^x}J2(*=JCSDHBD zTipvA1}*6RrRq9!ju{SW9EQaY42SkOp7`B_O+S_-zYRa5+u(_mENuN|Jh*kRO46=+ zXN>HAo9_hfK)Z3<-`wrK7I>%7-(LA&us1(dgNBA53#y6rvPWo65zD#tH@o_cv4!Mb zRV#2a&Hxk24!TIOj=p)(&q{`MQ+C^X+mV|ARAObDq-6ij&~yp?Tu z7a_mOs6?fW&i@+0U6d4Y^%P~jT;1qLr*v6CUIPErZv7}0?xB3V0e!IcCClUN--$W0{rm~zFuU6ae zs!V;&!l}%Y83r|z^3Ghwg>rY2C@z(wa{4@7Gq^F)gw!wK-G-7k6?c+GpLwZdB|nuICRhkl?0ItKKi z&NA-f#9O`?kyLV1_lu3rMp(sHth{}{D>L50ltZ3#z87WUJm{pg-|m@~;h{?feb^O0 z(P@?SB*)yBy{lZutdV`B_+GWP6MiS2mkJ5C56oM;bz(YFWkKTv@TGA04Qt=oz=e1O z@(p?XvWXsl9I*Fgqs&c6xVwdc$D5f%TRb);*UQz{L!UL|EZw|>K4BhU!n$*zCf6;D zzRHM6WOE?h0Ad=YT8U@bsYNMcna7(EN9KZQG$_u3bMYxd4p%-d%rK$j+!r(SDuYQz zb);+<(xjq}{f&3FyU4M}5C!!nRh^(Jzmuurb;XYTbW~sEbsL2HrhE{mh1z>RAV0pg z{KKuT|5f@qDv4t-9^OS9-+A?t98FNMLc$ACQK{IYR>DG-^F$p;yu2^q^b<*3p=dOE zyR2CB_O6%N_nmnCM9*_aI@F{A=9X} zM+B#BXoCDg5iQ0YrRLe}HJDvZLN0{BvNS9hBh|Rs$>5~TKaPavxE~!Zvd|HYL_!OQ z+0`s;?q%MD;d)1PL|6)7m!9!^PNSu0?1Vl_J!x1U?9egf&YKU9?5Gd(>4)?_jP^0yCPk<#cqd^GR8iE{BWj5VCFci&7}I-?X_+okvnk>-P~c*K2+K zUnR!!&RlJmW~oDwoBI|;Mtcm$unqMZzgdQN%Hq`-NG7O0Z4wqD3p4f^8;);YKU_~S zbGfb4-PY>EdDc#UC@EM^dCh-#XI=?pIum@OJfo*DbR6_Q!iCWY0Mtwlm*swaEJu8Y z$W*0EofmLX@&>IFoo*!aICA?0vUoSg!~izQbRZE)e>ND$cSft#A4+ZxzOP+moPS~S zH=6-4W|Z(q@Qxm{a*?_0tD|M0c>qO+Opiibhn6~zp@u?{qCGxs z#VV$+8v54$Dy`OayP+-rS`2628;MGOZl`nq43B;;5Dv&iPHr^Dt_b0XugIt;byzI*+GB#CbJj)!*U`NcyQO zB2`R}+adbn;Wt(aobv`S!5fG28wk#hBlv#FOD&&W{+mxVkg`dlieafcB}6v>YB$6o z2IzK5-i{jolM2W1IVwfBE@ZXCA^dZWRI| z)?5=7r}U=4YLrt)9Sdp|E&`&kBYYj0P~P-n;PfJ+hvn?Geo~!2R-Lgd0vg2RO=7uL z);rjG0Y0ef?Mj67Ffzp0Q8C%xgvTH|D9Agkyr_ey->|&}xpIg=^+0hNVMod)@WMA` z%g!|Qx}IfNNmJ{_lPK*ISz0t_4%0i9PE@P3QN+nr_$^3NJd`OtXCMlkuyoBtRA!FI zyv^g?%bTa{y`(jL^fkSFH3e$MN68sSS%l6pJdf|SzM-QO(4NA1_UU%i9tv(jY-#*c zZ(+;Qc{UdXI>k!&03>E;RW}e1&luh}=r0GO;vesxCx+lo{A zDpPrJV>7L~e!uLT?oE!%5%$1oF3Yv`#+^=xZ|^Bfx;!n%f4S6(cnj@sS1o1ectakX1WkZUM*{9Wppr)XMntgFFAS2vE5on`1Oh#gEE0#{^q5>T zPu{enHOFt z_ra9Wsrf_7(M7OIF8GG~80{rjue^PWV6uFcAF00>;U4UpTrxg}Fuf;7Vjz%!OwD!? z%GBKWwOf|Nj-B|&B_vtH-@46!UuW+F{XqFOlpX^Ok}*T%-J^tKUjNwyEmZ z7PNP{q}K4IGStJS31W|&6A*%@SqFgSyyiLLbpyewf*fCA7~z6uX1%xeF#RxyT1OcU zQc;FV+DS>ME(5bv&BMdd9U$pu)}p;R#3R!2e{sa&pBd%~RU9*Wi}$zc_NHZ^_HazG zCF)cfU!N}$+}1BXGQ+R(3ynmTy`Bvn&v^qC0GqzJ6REc6hDW5Qv`7n$lrkW@2okpb z79;r}C0JPKBZb67?|a&o1Hgs&`ei&<1O4~?^zgmxoxd}_Nhk;i&*};hgw&be_A>PY zB4;^<+YY5(av}%AUj%LoaeTX}7HQQS!f;EU%`9dSQ;QrVGNS=Ea>gid;@zYC+CgM= zteRpJDRliy$(TlAimd<>&b=k4HdznU)6xdX4TTU%J+La z?%K!1>EKc`5>cmWgsNu-VWv{#K5P><`Z^X?xC*8)BTf}@hczZs7y_N}MG z-lcK<!`TBLSZqOU(iP3l6>^f__kz=D9(Lkp@7x#TX33 zKvI>pLtt8G=0AAh-1v644x4>G@6u@P*E@WtS#yoY3R+!9Dgb->X+3%kdTwdmXoVGh z_L$4Y3JSBQkT`Q_OT3~np0(?4J&>aJq;9@NAXt7j5iQ)hJrqIbo?Wg_>)YR5R(SK+ zzv=nuAv~FW{F=J%RqLVeR&;}WdVickf?#XH5>nP`|4tCdJBLOjGxaP@tcPck;j8;I zkRz;i*}G;?{-xR~_6L1{>B6}`HJ*F+tE`$56x=bAj$8P4F1=o%?XU}9-mrvccI6VK zXO84e*?rqEDL2=CD;5pgd#^$_!^|{@?D4J7EwzIaP2Es37{~OLYdl!qkQt0k6Q5KS zT4oinMc%H(oNN}si8YG2O)!b(hmF;{j=iE%$D!RvOZ6h`;$fP@DHQjs#6jvE&L&$r ztuj~F=(6}Wgpps-UhyJ5&@1cN+PPfVDV$#de7i1`!g>pYM~Qj)ZwF-KEgM-~dcCCb zlnOIV=Db4du_dy59q!GH6M^oz)yw<~Pdl@Vd;P*QkBd9bmaL#}IHpsbgx^UoxZ%s4 zzfmgAW^A;{Rr6F-HV9?c|;C-_>+5tBaT&0GZh;N z4(7}deC;sxcz0Am{#ug&5Pot>)#kRqC^q4)J_I*FA-70&;=7F5j$6=EpkB=}lI08; zCtX^1oFbm;5DcM>&fPptNF+5WR1j^i{!urCNx!Cprd7_Lx68C{)CB`gleiCmmzTg( z5!|8hFATjQ592#^n`bUMW;_l}L=~(UHUA>b6s7H4X&6ph?S9UTGKqlj19_i-V*eW! z&jBp#9w|M~e4;haecQb|=1gegMSDqjVQX}?&K6%)quw{!yw{r?+&gUvnbF*&BI7G6 z>j**z3HD%9sZnAia|U8$OO673Ia$v)skB&23u&3G<8kSLHse6*6b~^$MWYXiH5MlL z?-d#zPirGTIki{!Vib=R8Gb3&o5+eQax}9iRvG!GS>u-ojZQjfr0HOsm^j}MOUq$r zoYikBlqA^)X{{e}e%?e=W#=Q4Yv!l;jnpSb;p|b_%^<~J4UjPJTgaNM5{ujH%{oD>t?=W;9!f~oM!1+lQeoj8g&7a7DQ9e(Yx?Ca-J0Q{|)LkfBIQ3Sd3$aLz zMV0+7YauNc7sI--c$$uT5{wqtbX%=D3+ymvu+vODfGZZ(9g8RAZ zsTb%-FvauPzSn~B0)l3r0egXaJ9|WxHu*J|Czj*HfUa2XH*8u3=7G_xA&;W_>flRP z9Qlu$fS@NIj;UOJdbS5@cW6jhLnU9hOZ_;+MUs1ZkC;%IZ_TQA9zXmh+)3=dn`cc8O2@S(fr*5gTlgI3)4w-XgwO zLbhQ&_P`tFucjH{O*{Ir{)!sfDCua<1NPUts$igZ@(-EaTB>J)>Mh8`v z;_e>qOALkK<;u&fUu11isVM1!>*iBdA)f^ASA=7|hJ3 z^zQ<7eU6^J{)%5xd10{&A4RnC?Gly{$;~BYB9JucOYAq?3!EUNGMk)fy&2Vu{Vf>O zi}JwdzLex(A=&m|`^L8kon}rikxquF2)rS*lKj5Iz3UsP*_P9`)ztXi zxRh?F+FQkk&7*D?K}D6z%GchBor*)I)0H|v0bz^0&WjgJ(@F`Z@fPLe1vV<@BsIQ$ zR@CL5!kG-8XKxoWSF!<~XsuDfUE?wbbq&DP(b9<_isCuwX~TIPHn4?tb1WQHUVbAf zk$Q*JJL0@$ig9bI;$*lML=0=1@S@!8jL>U?1y*Bg9?uLw>=FS&fru+hs0d2oB6V0{ zV5Efs5ETi-%3-MQ>C;r)O#%hUE=X03lx4-ls4+J71DJALW~CuA#ouuy)xNf{pIbujvkfSC@9?muv9ZL;c8B4EN1S(Ftopt#cz}z7S<3(rq z#Kk9IN>aUJ_7l7?Bm=@ca6qjo@MHo44(E?=jZGW);YQgH{yzYWKy$yFrexRlimGIJ zdA(SfL&?l{4&Y;Gi)}fD&Dj)qD=G@v@^5uC!W~}%2_r@eZFSa@K3^19rgIg6%Lw2m zcj8)(<8ISj;6Asx!aZ(qi|czX?H=5kXvS&ah2o+e5NtU^|>`-PX4H*a27K*2>?qA&>|X zwAED~LyR`T4D&6QW35fL+2f$&&bq)g?(mT3{Hr5U97)VbVn-6Ul2Cn*gt?MPX(|yj z)!5mljSkIOJB14UC#N@LUB4eGt?8~13gsy&~!INnUoVUGF;299mF!k-Xgw7O~JXAUsT zXz8Yy{)!3}RrBlKjH>k2eU3f-{t^>}Cq?1#(MqqjKMQWv22-#8$fd+m#2T+V1H51#xv^;VzELB3aiK=O-icKGT4TI>D?UZ-E&`q^c;)H&XGe4Y)WPTv6| zR`P1UlI=SoN9CxT6tYiUh>Fmsplbyx6{V;sN?IN7Qx>I?QOA_r`ILIO9HgXmbmCs* zA5=X>;H-%+D_5mi(*Wl5OJ{;u^OML(ZB^C^p{&#$WvgtI-4ppy{Pq=mU3Dkl@;0QG zTb;{Ep$IY>&_Pgd6Ntmt%SiYk7$h-xNd?X;`UAZASAalGH{OV_Rm&mW#Fzq#aBc<9FZKqn+bBjPF_k z2^0j3EE)ePL;^6VVGjc^MBoZR1O%Y`d@F`*E5*qmV#-FtF)(ftdZSTsZv~-YV!lzH z3hDQsaq*?2bU6+yqe@!hD!;H(nC8@^KQoa<-<%rE0tSuGn+LraSVaMVCnD9AGr3)< z6$P(Q?Q<5k<_nNmoXiIc2i!}k1%<9a<+B#H$bLvHPUQ6c0p?L^roiPCp9!#~Xh5%y(-ZR}}&ycSzpX!mil|NVw4v$~IfiQfeS-oA5pe zTR4ft;z%xBm$y+B6cP>Yy&ANz9ErtIJY{JXQbkMwTzXFzF@&{4BDnMAjpquTy-w;K zAO?v=!PFn>^~+7a?M=Ks1wkWwc`(Wh`%mWZm{=s8I`!D=)}C_GX(V~-1v5%*7;g4FNJK5-g27}%DW(icEY(Dw~maV}lHwteI zsBqcGDJZxN#sc164JNe01X8fI>KCmOkF&ypKMYN<#yEz&CBC9Hrqc4!Yd_he2gtz0 zt8@AHW1GX}@dZMWSgw#sqg{M^VS2}HwlLCO{pZA2D&WO?&Wky;{?aj{o1Q%(r zM6=}Bs=!)%G^a3|=C;251w<%4c1;a6n=HL)RIz$$t?nA4pH@R(Q(xaOyIT+ZvwqG? zo=<1-Q03=pzts4()^BxwulGlTKO6bA)PcW){t1x@l?{^%myb}0RE$!JR*q4LRgF`N zS5MGL)J)P!)=tq$)lJh&*UvD>G|V!}HqJ50732x?MFrwQNs+YJw8X5`yv(ABWmBtW z*3E5N*tWE5W#87R+_|+w8^?Ao?OUVtq9^VT@tK$B&3S)5ov$<)Z4$o?QiQj z%yr%iSm+{0SmMY_U(T3guX4OKt$n>4+UNwUTzyLl2$zuR29d2NNIYK$9a~J0e7+AB zw31-S`8CLI89`|QOC*^*G%{sg7>kS zoA==k@3&Js+6YXiL4gI!o3e;`I0_>%f*?MagKePNJk6QE7IlJ7q}qzfKU3-=Lo>M? zu`Z^Mnhi3NOCdXI>Hb^J4l}*%oaB~r_k{4J&5ntgWNjXuUNL0ov7MG-2RR+nKx$py zikuh;V$?d)#I)+qF!O6NwUMST+WOg?8Y45Jgtc>6m`G6~#}|+ixd%p6$9;EjGS7Xc z+fnW-+ex@+-Lh&v{9Y?C^lrJKrIr#Uj>KmrY@I$WN8)_RU+uwB#a!b)FL}pTI!Qz) zBUxyhT;-RLL?@6?o9y z04XNOuvm_bb~xy?OWffp<$R(}lxT^C$l5F?d5e+ou#*~L$|6Z#*r`cNdLxJ+)oG3_ z%4pBgMBVp(@CI^3)*X{19am0{C`Xbc003rYHg@T{X!1dOK9A_jeN0H8rp1x3bOI z<{GN-2&G1k87F@24J4|v=Hw0ZVf+RJKw?qaSm$|sP()h&kkY`$wb~}dY2pmhhGdhR z6D9pYnx{`EJv~nA^v&d@@1|Y)QHs->>6qS5b^5Q=rD_GzHj-JIow*y${@7G|*;e*d zv+Y~v+xINAA6sHit+0Qy#@@3R>5qbyY~@C7b5423C_Hwl2`fudUhHaWsW(A>P~Fr| zbu*z1NLn8ir(ct#-_=xqDovl4slSw~*A?guMS7x4Z>iKfy6D6Ct!0R;p0&??zt;~( z<@Fye4}W+V*pf;uGXb(Fp^mHxNxl?H(UeFOb(Wf`E>qX2o7A1^0rjYl3O)A|wHzv0 zIc6EK!2uUMur)ieCkJpiM{^=mG+7#^hOMd8@T89V+8?}Y$q`w1Op@fBbIy?@2>^hZ znPpvyB}tMbNs=T7T zCK*!J3J5cC(b83I&d+ui1YfC3JK3$UqXnRK#h94ns<+EQ=|-PoS_rU2gvVZJ_55ZYfmAokd@C0yW-S-DRTz} zMQ=eCWI-0sLZ!{(!#fZhQOq6DVbunYMg7~XFITr8oqBBZXMf0UFQpqN{Mq+l#Y6UF zc7V#}!De~SJekYhQf#T+d()+5+T{W-1&}~7!cKk~!%1sK)0lybwJ~jEPBwkyN543; z^1_h}Yk1Q=yqvDJ`nb@;%ZL-A=ea0i=4@v1^lOYV)TSK>jfT&*Svu*yj zEH=C=?3fb1mik2}@oE0bj|C@pEjIe>`6`Xd;r<p!jYO-&oDMeCgj=4tmrw~RMe{=dKhx@^mcMjVHEWmqw4@;H% z{4xInTJcqET+p^ue4pJx8{M)Nd0>0%EECaUQ~;Dn-Bv zxWkSnxkC+$>VK*kk?QUZtk1d1@VKrdqcc0$5!+g?;tIfY^=)8o%^GBhk=`ygaX4ya%)GPiI&4oQUays8jF=N75EBCCYb zZdb4m+_Q^9VRJB->|DwS%O!lli=mK2tTd3x=0m?|u-ht+$-(*yhQ4|>jlFE_pdcb7eE@>= z;bZ!GUp%(^i;n}@{>nbs-R75W^a2`tf|qz_hE z)QhIDWP_0emZNUCk|OYz%7MU!G1!~UhUHvgX+2_)NknVy8yo?au|I{MwBnP`k)U+{ z;hq23x-E_38uukGY{dP{EJZl%u(J|H3WCh665Ay5Dp;>k70i}y^JVVJfC^^UlhH<- zREMG9HFKy>Y)kE|v#VgvEEYz>j=<%c5;Sv78qo;PhwW4k<_72{Y!?({h58uk<+*Tr z*Jd3iRJDosXO1V-hYDl~&)igc$~F z{qOeU^+U1h8%@+$cSvy?0tW@`^6B8B8Z@FyNspf=2n1uE@vX|>92Y)_TYezlRqw}# zT=?k>FeQ!^}ghiTyPHyYA6D&n@_@Ru! zg)YfuT+z{P$%RF&s}SJJMdC=xRUbO+hys83(_cJNbsqW8f9mwakh84h>hsH2Yn}Br z*l3f@w%BT$Qa*Ua&PQ6y(oZYjdRv)Y%I)^t+jjKX^ZlX-Eo}UC$UehSJkFcb4|OEl#+b+G!|E zC`LXQrrm0K<5c0sDav}~z1=$-7zO7~F=8`mAug{)!i)(Lqu*j$WYD5zo_FeOP* zeGyI1juVz*t4nGccLH(}3d@k{wDww?U8K&MQH9cq)R~P6evgjePqu0`p~avEb1F%p zCO!e{lZ7Kq?8I@h7xi+(JN4QTd}`ehd@JNL_$lB!GG3s+xi$*t3>XYqI}l^-%!>6u z%4!+4++9Fcbs=xmhe)HpKDWJ4}arXL%n`J1t54% z0ZE<5Km~+wVIZ8GD|_X&E7>RKUv6aNBga4GfPC%>f|ajdaqx;+CrXoAxF2wCa&Cc>eNWO5Z9G2(d|3dU#_S$+Uf zxI%>~e5#i$)-x<1mnCc@%(a@pQLt34PmD_ux4Awy)cT5%s1GPW^0>A;L`t-+f4gLKn z2DRaT^?%$nEdYgSW)vgxqdAk`WrwL&RZS8ml%000%se zsU9vKb3C^DtOHCN27{mH49_{9k7mi-UQe%!TeWKV9O4*fIL|-CRMCg#fJ7qy^m7+* z+?dUjRvO4)+^%TaGFh5+l)*DkBm_EncThit%Lx(RhS~=xa+veLuJT!Pf zKcY7zf7J!@m21+R{;|%@j{Cf3hMCKE9oLBIZg;Q8OPo8lMzvED@8?*Vdu1k--s=Kqhw|k&l&~0}6 z%To_X_SdJCIT%6%L-G(N2_zkd%Ay)NOiJL<&G0ekXIhUwsOHqlk=>jvf~RRkxq9iY z+RfjpL-3e!%7DrKOEsmUye{0rjlmuhQ|sLG4=4SC5J$hvy-U<(Z#_%h3VmZgr5__B z(xoRmYImhJ?CTjHPO>sL;c3~rd&-rzXsxr<{V_e0B|Y)c8D?Rn z2F_AH{bj>;f@ArUxm*Z=Jgk~;tG7feu>Ew4)UbXgj;>|?*0XR8zEqx2|No0e#jff1 z9kb=<4L<`@oH)Z2KQ*Qnm!St}8kp*LF!d%*GN(3Rx+An6yy;Z!Y^+uIi{Zc-2$^`-RLRvlROUwppIfBz^m8_i34l^5Yk?!whlK z6-t#eBvW<6DCnN2csbqF-|>?CKhwKQC*`ciq}8`Bz5Z|UtVo)!xqB&IjK!+l+$Fbo zalJh4eMue_VdwhVW46n-?2$q2FmY3yF<SGZ%=&)$YP*m(c<>71?D zY%TN9I!}iepkeXJkc9S=#14?ut}i0XrDV0#5X;POS)rDl|8fdgNrbVBJyJ1iD0Pk9 zTT|(4E@LgxcfZVym$u(4-Lt6^tv~SwlH7YuSgH}4Ud#=#+H42o_#A4Kj#tWlO}%L1 z&flDzuV!BYfA>HCSb0T9-F3|yGqa@R>DRURZrt4!6@D>SQRFIbU{$M))aQ%c(~9<` zOLy(!j(2t6KB19MUE|GO-PK>i)vyuIOWY}cUBpbCq#?igS1?4fq^PX5mA&?I)=};{ z%QFQW6)>U-!gSyy_c%k=4${lpksN8&L3#YuD7X+#@ZgPXt}Sg>96_Ku7Iwg|hH41rI(QGneZUF_s&8rNv$R-REMZcTcBFzu|3mnK4CR zILz**u)Q7LzK(2vifgLO1&xih=SEJzOsvX$C&$gV$$NBF|_DVbc<-Ge>Vvz+ht-sdGbIuy8uhXdXOyUHPMe-tm8tNF$h{$U}9Gv;jDfu%@Pt$@S5_Ymo=CAw(PH z;Sb_F4|8i~!pqBPPR+DTD~}|rTX;oCQ(N6r;TG=UQI7ODtsGD(zXd8&j&hZ!d=;n|ZFC-y3$)Qr*Gs@pFMZvsWrlgguUUv< zR=p5Dna@0)Jf2WREp;@|NIh*xX@7T~`3+WDmvia8{|4SDEwsKDm5H8SXLfsw_IsLF zQH(zp>rch`bMgLCg1?sNZzau-=wQst9V&U>&yxS^@BCfA`}h3bO2)=M`VW5k&-nD8 z`LllZy~$vubarn{_I##jH%o!YlNqLLzx2PW&6U~V^F7S9(^%2T=@_;=#hz!Yug!j{ z?XK2tKiB?FAOWUp5IO;=Q&6dKRCuxGI_y7d?UebCkNX3pKF5wd&aORiM=l###L!XV zW4id79ua25{7$Z6H?D7&U46eA)PI+K7{x+XbW^!@vU0~>!e^$ux1s*O8vD?E9pQW% z(R{y?C8-0&sVgbY{$(G`e8mrw_1z5Jjj^T?=8={-mw4CCZRPdwe)_!JH@<)VnO`Cs z*&%vmM0#~3MVn&NrrJD5Tjpfz+#Q^UL-SO#`Hs%VvH3baKPT29r5)_(4s~pYQ{J@< zcRi!UW;05*qjq<+?3P#H@(UWH;1v`yW}z!9e&rFzDPa{QuBU?a##~>8>#t}JDxNUT zL~%D!`XFxGtU>h}0?ORVCw|T*g4r zV<^@bDQ1inJ0!);dc}{4*kh`MA&WC+;?4#oj=3%mD}z&#p<(CYlxBF!GBV{63^RYs z`#hfyS(%R!&!?MtCvW_nx=-%oy2pkv4~y6smSGjvG^7!YX@V2ZxZuh@`yFu5A%`7t zbcZ&hnayf;bDCQLk9opVp7ER)yyTU7N-MjiEo*r>t!U-En2zZj*>sJ3x~HeJdPoCb zXrtba3SZc4?K|82oO<#h@xz}0n$nCwniCY!Wi_U;jca__P2i+cPCMhQbBZ}1+*Y@y zwdJ+0{MOIAQH*j_qn`d57)$rx`kU&C8}4}EMR1c_{-pUr^YzBkPwQt?(?8dj`72)I zABcIgF`CDXsbA8^`sFfHQ@=vZfA9|f*?g(_a`P4a8~wKaZTY0Ws$W-6za#I;&*bNF zmajEmZT_P9n*LDt@_AXscjLdu_nKFmFV>dyOsllESh^*Bw_JU!u%_b%sIa;dR#@p> z+3hjfrgn!Khj3I{tIB%SYI@8R+uP>_ZQIz~W;DGt?Gvk$&f2)u&D~?Cj+XXhbINEz zo6Brri&|`0Pq(D(mbR?r<%H%le}g3rn*t%eIhb0=vj_V%Ik8O+{r@CqHD-wPUa=Yc zU{t7nnZSZpP(Mua;Rp1LG2XX)!HNkpBh73hpBbXR*#atsWV${#zr~!x;bzFXn||+E zZ-e}{pOeHy$sShXBX?%P-_M<%<$oLOyI2v$d>^M7x;F|;2Xl+^? z2WJb7LV+J|%eE4_cmLY2oOCA8;g#Or0a|as;BVWe%>oROE`TY>{(vdTXuwoN1z>7g zJHRxT57UmKjD@P7oubj%GZ;FUO!X`l0h^7^;Sh4Us5}9zPz;vHsVfu;luAV^m1?zG ztwy6ptF=X^763>(lvV*i@=|u+fLHk9;|rA{1xKn>mC~dUOP6l93>i9P%5+th zEW@&88r$>T0xK5qpIuoWtlqezi*yXS1w|Km76|EcK zw(tzV?U4rncSKGB+!<{!;I7U`7k4j;+~Xb@`(E7=FYa5!yWjm<+z+r`d3*5Bz7pq= z_;{3!$JBV-g5wFxd(tyD@vP@PIbQH+y%;qH@Y1cd_44=Cit(D)M0(xpBK8|aE&{yy zD2lhdtI&JibAP`t{4U^w@R5KI!&Cqtg=)aZp+Df0$Mk&aQ`~1hV`A7aOP~8(yf1vE zzps6*uWx*3hwpuF^Zr3Z1Hg~$ho4@*JTCavuc+VrhV0*UF249<=hP8=Cfq5{b@IslQ&!pT1NE45Tn*D2)*# zsf-y*M?$j4dh69OVPY>+rs|QAwJ>8wYJ&~-F=wuU1q-Kav{5@tmd>(brHwUfcWkmr zm(4aCx5XCc*|2ffR$KMhW}AC#*}A}voeB2ro%*}e>)^we;Ki3~Rq~)8&+=ei7{t3ge0_X)5fl{n=ga!|mAj*|IkfW6{MnL#vNk$4 zVU&Ltgkyrsr-k7EgdPlhm39b7SWy`hdUh7og_EC%;;=}{6IB8hO+{FRz8ESKTNsO@ zA@PMfHjPOriQ~`|Zb@1q%}FZBf7-$;h2ztnlv4Dj`tVhxNmHDbQ?c6wsW%g}J#m_cEG?It?@*Rs$`7!J<-t?!yMwSj+aY^$BhH)d=ST?OGB(B`P=KwG*FO%-uihf z&^Fu5KHJHu9mmi74^e4AyP`G#?QS1Ewa3Qy-p_LK6p=sn*;4z%X967v{|t1nYu3~u z_v-NNwsV9pbu|1E(6O%cOUGADaKcH2`;;eTPCHGr&$z30pJl~P=bUp(u@d)`Ds^{X z6l?^#6xI{ya@UlpD;(--SSir8u4z-(h1HF)dPX;!5mUGPuG`IvLv8z}?rKqG?V723 zit2v*;;9Gr)x-8BQ;+Pg$L&j}o;XlX+m}r}bFiL=F9&)NHXZ0?GxE~c(5&Trl7y!y z7tyq}TCHn!I#2a_pBM~Y8;!m^6PLedADlDCUG;UNSl3QfYW4pAgVFvZYCO>AsLeoC zVZ}gSqDBLK4K@UQd#nf5s-3AujU{T;x^{opHFv6xSN&-FIrK0Zzx<-}+iwf|;}7fe zm;O~B-UJw$(Weot=>Lpy$G#fHn{B5F!%J$mnM0B z-?lR1l9(`ILPuvNQ>I$d)5~DSOe+QkhnO?Bf&~kQS+bPLij`%oSsTcPjWul9n&4jB zPSiwT4Wjk}vu`e*=3q@ZcFmjCP{((p5A%0pQD=cQ`Fn2LN%&=8&dr$9Tu9~GY(LG- z$Z`+00p<~|1LpatZFuow%A2=#eE87w<*PkEe$4pu_eg*MM^019Ml;nF*gkezb4LWd zf}_p>3khZd7J3uqgc0)&|6so(gf;<_sUx5CAxe}hJ6d!Bh>4yDvF0Cf_m=K>RxFet z!QV-wU$y8}rk0LXt4KI#9SH+Ty$ddFRzzv5tryy9=iq6NnGWBMk$XB3{_gx)j+`#U z>8hJ{@9v*xYxVf{tbDy*y?;)mWXWRm(MR;@o1>$jxz+#aHU=1A=^iM~UNES;Y8ouZ z5JRmT!)&kN-J;8g#qu+f+atx@G0L49eRpKW80+I1$A^)sW~BLA>CsFuzT)BIg~{K_(n6p?gKCY@l$f(OW~m#GyNrr0mRs)pte`ZS12Q95!OF-TkQFTe z*>_dWH|K1ZE7u-*^6a+CDy#qNerkJ-XbD&wCjzYNF1xH>QF=CTc5HOL@}n!jrbs9# z=CraikVC*>N4z{ot=?=qR?DM~JFdPb zsG6K~(&&`av@=Y*SuDH8cC?3J&e5KPxvTfvyh8H%W&!~v6q*x>3}UfPA|a$wl}x6D zAV=kLM*xt*u>A<)5Q;iD%zy3CzevpX_!U$M z6g3XRq~W-f5sv;5xU|~n?Q)S$p%_I)Wh^zd@ia7s)6z<1^lc3E%4~#`I{*~G$y9w&u|Gn0KI|6STc?RwIfAqQ&(VTkQ3{RBPbn%NMWC z3Z7SH#9-hnA0{VDmStprb119aV1Mwu&{z1X=DO*t-LEylYrxlr48Yd~3jkmL$cYU$ z2t6BlQ2DI^(>Hlo1+7Wbw|G>Aw`%uRR=hmhc>Lb}*|}?nou2GnZanO^+v~kYhvVgY zSA{E5B*{Me46)ySvm9`MgM*F;cGNMg9CyONeNy*km!DcO!RbFo&MT1fj*0wloEF|O zi9cT4N2L`LEeG%0tVnam9W`eh%eos_F#ycHz_tRwOgyk1lm0|IQ)ggh zKPa#V0AL3#^VCzm=FPM9%rkzl zlPX^%O75@1S_A(Ub{=?jXe98Or?;e5t%tt*&QF~>t@aPW>fk>^&cJ^~Zw>tS6Vv$f zs_*Xq1iVOd)C|h5Sl5dgoJEO8*+?(>hfgVAWl>Z8Nla*Hs5X~&Q7=Ilp=KbA-}>+U z&*7tkSwNWL)d)Q-4Piz-2Vua!Bh2AQ2n)OpVTu1lSfQpMtWh8c8~hi-7XOQ|LoOg1 zM4RTWE9}=Yio>hXPrcIk+XV7<`cQtHVZ(*s%9ENGAExEoX7~v|0g6UbhpJiI;#DJZ6!a^ zLr+htSJ(sfQ{B$W)A`|2?|PNU$LI0( zv(}I$2?%%+6qGC^}t*Hr@*jv*j@0U?FNihK%|NWZ z<#*O`>b?Ho@BD1wbZu&x&M0uEHaAzz*y2JJHrLG9>f+eOd~Ek>>|i-|`loh9eMRh! zZUC_->KkJ3-SsYFE!Fnf$HIR5)i~e)%Y9Jm_KZVrjKlai;@@$UG>*A5j+4g;cgIOe zoodUUahlaQCv|I17R1x8UspU^*m>@`-(Gm3ftOzTaG!>Qo)J$TG znT)o(`rV2UfC3Pb!-&8EqU1JWaD+I4AOR;xE^SdppJ>DyGSEPlARz}WAB%CTNlfXbrNFNazf55ghae`3N2caD^dBgAv?dOmbiXFPM@t zn86!PNI9Is2hIow&fyLhBo8j(3s+VZOwwgU|N`Kh7VU&+>*4gi>z- zP(<$-qjT=J5DY2(QHrUxzs9hv_0KuJHW!EU5s!C}7LCTTR;yR1^HHz& z#9;8rXf$gw`D`|uYpcxSS;=aZG@Dl=yItQL)&}L!_EAOl^hBDMV?U1XyXrR|$9@98 z4obl9Bm3}YQEh)~IpEKqdj6t%j|>b37BhMjFqv4I&7j4?%4&t!Y^-PZ$jISfgQ7|d zV~gWzf?!9I8j8|@rnL;io@G@WXUuqup0<4`#)_h|BpD~mE{Y;mRb4ern$w9F$Qfrq z1_Nd?Ar=dfgKV~aI2`YBxnAM%?BVmhDiGK^p+k3LvS|6Wd$PFb=pKp0byBH&Wir=8 zko)9vHvr&%7w zq0>2{*IQsPDBZnc(V{j>mR$APYwg~6;Cq)Bi?!EhWFk(YQ+kf4?Z~N zqmLf>z3jpzvFTjHC&4UA_$S5+BSKS& zj~T4QN+#A*dPcl>&m~Ck0vFeU#7IkQoAeMQ=C2Vtu$urd%{$-_0H*l|HV}Ym!G)tw zp@ogwrbV^vu*)t&#fpVZiHF%rsZu+q%)>S#A`-4#xsxhXh=i!OnKbq$u-BqZw00+5 z*5RxU=b|?;uk`8X;8F}E*2Q34POxdNxFGIabpSU2Os_qaT&}w=>fWH19I}>`$W1qu z7>ePr>fN|r7=I%TdA@|&qZ^DE^lQEUpyt(heOdiHeVhhd2T!Q)e z%T=-7CsY)8>Zv00@jS7+=YeA}ZSktXMjPd` zWGRnTTOH}x&V$6*wS6%;w9~6p+uMcAah(f~gIl{V6+C!o;>nXWulB;0H*bx6_}Goo z6zci%RmYDX32IXb8`><0w8{R3lK=sn(J|OepaZvg2LR;q+wGyE;y2Z(<$CATt=--& zH>#R7wX|q!JFlZ}zd;X9hM_&Jv)|n;!^p@(;~ob%!wQvptW3ED6)MfEQsovT8WK{{ zsF{}C_E6K(EwN~yecsw{zt0Zz0sfzZv+y&Ue5lSlt$p}>aKsT`9CggUI=Ta$f7@KN zZj|O?NBqLzB`+D5x>WUC=0^W}IThbs;R;o*>?;qsS4o|3bG0MtnZawGC3CH7{eQ2c z>Z|MB;P>3<_8xPS8_T;lQ&r~{x2kcQ+x&EU-|?Rv?sTWm?sAt;?sm72b5FNNoqMgs z9=xxj^4?D^)I0HR4s`Thyq~ScCqB{nenC|iKlmZKt|8WtvUTBHmXtbcnob4`$eyvS zzGn}OSFv)&cjQ(uG}+SpJv4d6JcBWmx!n||ux+Mv^nGAxn&(fMA!f{$V-~YmHFG#P z0frVlawiyC`Dh)%(5go-0thsVSWv(=iz@=fix+~8ZHEL2LUC{ewAKqo%o58q{^~e z)0{twlvvD<$@*AqwuHlxjqhf^8&Kg*;%Kh6A51;`vMt~HKEC}<16B8>=COq=5e@s01Sb*$r#t!(9y!{WFs{e17}TfnrxzP5(n{AQ!y{cgKI z{9(O6{i$I7a205i7No-&rP-P}%-pjBh0gUBk(bSV0Ung3_t7?@=O(idF* zmw~0=ig)TUxayW(2tGuk*UGRMk(_O$84a5$R!Fn8q7`kkl9lYWvXvdSid7u9s#Tq_ znvFc0jXjTK6Pt*)sZF)Bnay;tx$SkbgB_&UF%HYrIoz>A9OrbMoZ$@V&UB6m&UK09 zE_JB_m$}?NSGdx@u5yicu63PC*Sp?#H@LwcH@Zo^o8y*jMs9T z56~h*X1VB&904x)+|{;eZa#Yn$D_Wq_#lp+@zd0sgKo+>7okN2vl!&=8d>H>OCjx> zhbF8;g=@9y6bL+kz}-PJdO6#a4{1?wEyG+)q}3u`z`YCInzh5jcF=E%EgM>puxUv> zHR)jhBcj0V@*v^y+2aU-RYr4*mJhk9PGtq6c`38SQw8G6Zq^%A9SR(o>Om94chyFl zC9xWf7@xvHK%9WWTO%NJnP94f3>Cx)8=d%X0MN+Hf$|g{g{p(KfTa;x#Zqag7!*N` z;FqdnzxvIhrV9w7#gL~fFJ!2|1GBI+A`wL!cSaHAX`eH2Y>v6 zGjT9z?fsltcoYKBriwpNpoXexq@-d{K(x!xVo$PA<4o$`io!ND9yHy=`h|#4W1re~ZRMUMqDz=7&PY+Abr5)&>rMZ9GAMc|O3g?aR!Ps{?C0mPpOSKkDn z!~-{Reol}vl%;rkQ&hd+0XSmJIP~J4P7=Pe8tN#X2Gxn>!9rK_+h^TH2KrRVBkIEz zi4irN<81e7o(Mg@LaTHHI`+Up&?s+COFrQ3MmU^FQKJd#g7B?QW4u>D1IP)wywA_X zdUA$#;BOW}`zp<3fK&?W4Yk=tqkM{}-n3n1g&+ZV!W0TE?H6r`nvlzup^ ztJo7oXz8Q{i(T3wktZf5Sj=#LrYo+@S~P)Rr_&|)3Bbj4yl3wb1yDOChsYiyb`WT! z)14>IDrja-XhhSOGm0fBTC>LG`%ut9p<{z1g-5`G*i-w|J$>^0J)AW_+y?xT$rEr% zrVdF6B4w>V;Jxx~Y1JeVIRGL60w|qB#?z zmqfyrf&HsEZe%4fP~qv>FqKy~bi)AS*b}{0HUUR8vHtMb+daCT9iFM^-34vGEM!Z` z!EF&=$vVgyc+1_(0;Q!EuO(2c(O-AEI@skDR}Gxqt`W_Vjju{X;EllY0bGb{gLhcS zr-lP{i6+4OZA)YCo#+j}U~c;DhDgX+UExmYiL*J?f?>bmiPkahOVNR}nBPf$;8?Ag zi5`mE%r1DOvF*3I#*S!TXPb(w6%ZnB8n^N<>E3xQK2^U^;jw{1RRt4OGj2$Uu?tj+ zgtz$!%oi>q&>TXiC{G2_8wv;~xh!Rf16yJ)QE;+tFM3S8CsF3XH3mzOKU1AF_mhJ#&YmDDckqum1V;NdR*6uj}*S{@p42V=(L?# zzq5G5{Zg%-6ch!Z_@*OpO*v~lp6ACzg;e?wh#xHPs zqh%}vOdd|J6BxTPM*2!u_0h>x<*y z?1JSireXIHj0m0{%)@Tro{IXKN?UNuJ8o^|_XRk`8RI{6&c6y*rknk{YT1P791Pow zWloC?C-PkSSx(bT{B*-w4%o3o4K>*Yi(Al{7gIdv(K(54+K0BxrnbA<#WUi-HGTCK z_rknE?%-UCE~5bGIWpDu8I6qgo{4GNb}*ICxv`^K>aZMU>X=YQExWYk*5)Qx+Onxx ziHIA1MXHz>z1e!~b%_7CV9Q!nWz0C7Z6z?WdpC_`m#qv0Hk&h5_2?>e3r1Cvg|Px` zH&iwcim4&_TcYcfYFl-)Ur}|e$J0baAH}v|-WK8l&ZQ(O8;Z8;!AP$*juBV+St2kh zUz@|2AdU7|A#PjI>#=cxW;5whSwKovyyEgln59wxM?kp0yBfT6=3GS1qn_j#8P7DP z6>1yOEJiEOCayosXNqZKD6UkuhE+T)&9@tz)iXHkQOwASr9QG7#kMpkwK_sSl34Y_ zOcg~4UD+$%4>|7XN>w&W;oFOXwgGWrM9F%~n!QM;7o-y;_hS4pvZe~i_V*N|YW4V% zM6^?$YzNv0S`xcH5#G%r(2DHGy!L@)k1zvy(DYhGum;0nhrb3F>{MS<+>n?l)JiM* zoknO227quw6NfE@9jdNpD^u%|cbrt3D87Tn_8Z-{uSBnDj*23pkYm?1UJfrGNaO4W zG`GYJVar{mKHr{mt1|176{W3iP9*OJyPwnM_EphMa4*BNMAG=^q0U;ksVd2?0q11{ zxScE=rE10Zt#`RLW^wC>i_>V#it9COyCD!?+OIiHVz`Ta{<>t0lG?LKFoQLlg&UzW zPAG)WAtBxXnR{B;=SWU>02e&4qQS4uX;4XbQl4{YfV$l59I}+ZK1aCLsk5VcyC&e# zt&^JdcoSJ+>-8SjZ+Sj#cet%?V;DHG@fw%RygJv`tRQDS=_S}0yl?MO@z~Av7`erd zxPomA(AFv6jl|P!o5FOn6mC~^MnHKrB}%j?)Wm9m)TK2Z&Ocu40??)NrQR{-4q5KCqdI_w3p+;a8j|OCl!O&3 zZSst*`l?Yu#oQBGQ3Q?v1BbI64cJ>MG~aUJs){kfr5p>Kpg>Zw=~q$N{CTGXYitBn z^%$Z@fdwXCngXS-o-C6hKwP9AT5)#_@#9qqI@Lc0hhFO0O{hsi)pTaan>A7y%^#31)Y~N8v%96iV(HxT)~c zQdxX3)ClQ=V5GRi_|Gu-+jfad1*)yIi_U=cfGWIQd^2?h{z$zilw0~YI`}(x*P?K% z<I50R)vQKScX5%D%x~(ayGqu$FLOu{^+T zEzRgb`GsDDy-TS&+eMtN)a{B%!x|WJup4(Aw1l^s<3W`~(T(VIg<7xOSJ>~_iBG(` zu_OvMn#*ZcXV5zE^TY;W@rga`867*EA)J+)0yr?9pM!!NOK)Z|XKO03RE ze%q)Aq66)s#jBguI*A=<#Z(ai)fWs~s!nv~{QT`cjN(ZjgN0ycM$){G!5R#+EX`}z z8Va35vGk~rsXd+V0+X;t&6H->W>BNLE_R>VOX$HP-QP>hKoEU^xgx-F+pxqKyDTSt z5fIj)=C)-}VQ>d>``NfG`_wPgKa^P(LzM)(eM>qi@%h@)eMOYfUYU1PhO4e>F? zun4UVLgv0y+k)SJoe>&Jr zZuG*{tf4;x7juM_Lp1by1nUCN>2*Hrq!9;8;)dqibyF+CG?)L}f-a`nZEEeV7`6{$ z<3(>wy5W#+3EE1mUHu#yTJjxhewZKz^HHE}(8hUoI=np!0$~D7_A+hI!D;wLL9o(d zzXxPE5v^{EI}bYEokO1P?ACV2hm;1nASRVg3J&dQ1UV?8a%aoI4PuFN5xU+*k($HR zh%0|wddF>sF?vp735!k4=Y*!F1qfXxZznfd__Htk|SdZu;l|hu^5$dWfct!|66&Cx#YBYdY7<-EJhmwGl=i1->3m~3glmsxw5{nHJQj` zbGJ12WIN7EC|PjT-kLh$m`wZo0RH5p8$@!ot?i+5hk!Z*6V%A#;^sT5E zl~}^b(wzPyq||TCl7$?#Tov;@%{}QjjwtlOQ6|aYj-@r$7Nqi17^Tv(K&8)1{w7CI~meu7mkU z5ydB5P;aGW`(E?xg8+Tpl?5R}3R=?YUJvduP$8i$hKL|#tIQGoq7_{*w$vwre1J8o zUmSqaO&Q${DOpo<8(X@eB!i{mR*nL2 zeP^KE_CZjOj`U7>;%t}U>Ylhwi|8{T=npM2ova8ar?^gd3Fh6U@Nu3-M}T+s-@<8^sj>8V|Jz%3Pm~bVvn2}mBm^+Tls6CqZJz^X3R@KE=6&H$Vsytz zgZyxR);af8gw1PairN{QGN8??0@Os{A;r%73`m%OJHT1Gypr4MxQ%?tn`96<>#I47 zh&Cb&NN4RL9PUQ6O7TgxZ{;79y;B%wPEFMSyw%iFk(K=8t;!kq7?D6R=n=wJN20E{ z?}HjZm7skDp>%dzWVw|?2jXO7f;>N#hBDzMHE_~6fogOrhf(ev$RC+kXM*5kdmV!8 z@aZt#OcQNsY|bq1M4g+;(y3Tru=EIH>pY%v7FiC>JoDdv?cd`h5Jdxqzk~mS7+HY+BF@J?# z%SV~MV6-nwn@M-hkqbQsaS!07K6C1VnkVS2KRoz~@?J~;Nf1EG>sx`%MNO-O*-eJ) z7>mjhM|d(X7=Qn4uhpg_bh%#YSxH6SuW5&gOCcAj!lZzlHn>xo6myRQsH6;xv~=Wg z5SMliHpxD^e1~}(HZhj(@%KFwC)fd1Owj8saJPmlx!KkPzNps1HR)+t9U2M?sKLvH zHV8`N-H_)TFX{af`Fav>n9Rhr^@5{ZMDb&eXcKZMJb>ea8!AEub!F-2x$USNk-qJz zz)b?@)8h*$Jl_c!-_qi0=h6v-87!M0V|fY%tDSADvfK%2M~~`&0DD#3bAyQ+kaSU7 z4yw_qqNK}&2IbJb-nEx{MsxicGlNiLJS$i_z>S**j{37Pf}3&G3PemgTRw0^(NAz4 z6TD7yQQ9`bQ*TpoRPmAZL&oC$2-*QK0LC#(!*ABxz{n~utCj-fT2Q3 zygGQ%!ffJpz?oodiQj`|*1B*n%6;W-7pB`GgiNleX>8BmZa2qG#O31n*G77RpDF}v z-N8$n?F8IK(bc@<8|U7*ylq^UAEyTSSKTu7(QxRLAzzBYqA@dSibzS7u*$ln6C@qbomju^5}C^%{!u6UipZ zt&B@Y(l#l@&D+~g<+@EAon(jT4l_KUCI`$AE8v}HQu0R@JVr zJ%pC=$phz!z=3xQic^>n$P`z<27S>C>~Kl&5qV07kd0Gz?G<{j#F1`tExo4b0htCS z#Qz3?bV|>PTFO&V+ZBjS7(wk6=xAs*k4k=yf7%_;ms}Oeaz>1HqfXeJMmS|$aYxaw z9fRs7DIY<`@6FSEy;#V}qDseL(I3GI4}}A=(BVmFf%D~p=HwpEm5z^zjrb>K7Gzla zM}aDFR|$?b-j!L}q*-;8MXq2{2$~~Odul2vXP?b+kQUo#ou&3xXvJM=p<2+6>f2wi zj7FP?M;sdx(?jJyNh)kP?uFo=LC=#VGy4tgEn&JfXCUs;xV$uCeKY_zEw%lG$%;BU z+P8zaR|&9v+?kS(!U<@d({bYsx5dgh!70!EsGl>Vy9{$Q3>*7iY%(Nu40<<^Naw{5 zX0C-vsDxLD>(W0UA9g3-G8kMOR$*`UyOC2{nGWE6MPcF1k!I)x1|ZM&leun=v_LgP z9)t_88jtT-I@sPZ6ZGFTU6y6K7ej~}Bj!E+tGXd6D5rs}3wB*|2_}{~KL;Gfh($pX zEvpq2ptij}2;zEZ)RJ~M>ybgqgos-Btb%?Xbl|PUvknN|U*Lf7^a!}q1Il2@Mk!C0 zlcXc-)o4DWyPTCT9Scg`{}c{7(rkEV@y+Jc1O`1heQeT5Zhr>OK(pK0HrgCDTKr=N zQaLT`#Eh*oJwzr3K(yofDlESF;&N%LN!gyPKZYp9qHI@IE|eV*Sj!|5$FSLTFheqXdeUd{-YX2~$~ zJO^5$1oo%kRr?2GLwN7E`llpl3_nsi#QOUai3H8`56@&ckJ)&UpWT3*14&%9>rs9t~8EDr1^0eTY z^pDHosX6I!cUT;sht*~M-pqI4qDeJRp`yCtRdG0{7(gX z$#Xg!7}QWKd8QXUuYk$+Jy1r#n+fX~c9f930EOKC>BBJHsp^M=(kst}fZAg-y`Fe* z1)Nwc^eJAV6h+hoWhG47{qpDV`VZs>4~iA>idQ~QHoO=1 z{m>T_RH%24FVKzeCkNy%HUnn4gF|f zQMZM)Cu>`c+Alb6r|l=AE%|vRI;Rt)p@5jrQTsE+olmtPliS%l2l^6w9~P2ZYISq-wg!z=vUT5wPKxxw5;W@SgQg~VC<~%!J)y^@M2kx(S?!FM)^|w$ z!jPvtq8X$TP0ZY46bkPqt{VTKug2uHwU?dBFjuEz9BKo`)Y¥^r0F<1=OKa71Nu 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 T|4(>Me^mYt>M|p%ul+nM%uwk0) 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 H9Q^+P=N#dT literal 0 HcmV?d00001 diff --git a/eslint/docs/src/assets/fonts/Inter/Inter-VariableFont_slnt,wght.ttf b/eslint/docs/src/assets/fonts/Inter/Inter-VariableFont_slnt,wght.ttf new file mode 100644 index 0000000000000000000000000000000000000000..32a79990a55c8a459ae7c80d32da7485beb3e548 GIT binary patch literal 748068 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≤}Ee&?LiUs&(oZQGXQ<(0I} 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

    g%tJzXJ*%N8x|}J1F8Uig*fjh9Z`Z!e^mj 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 z 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�xQ?u%H*Jp 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

    j(h{*Z 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

    A`y}8fD@XcF*bg(?aZEx<~j>dXSdRp1b=S<#@CX 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


    b6j$2m#p6~C!rY9!9d*3s^ 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 QYnf3{HI-Ghx~bCt4-ah3x&QzG literal 0 HcmV?d00001 diff --git a/eslint/docs/src/assets/fonts/Inter/static/Inter-ExtraBold.ttf b/eslint/docs/src/assets/fonts/Inter/static/Inter-ExtraBold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..7f16a0f0f5947925f4f93bc96ebb52f387f8b2b1 GIT binary patch literal 294072 zcmcG133wDm^ZxYA?(A;Dk%S|NfC+(wOHe|>p&a1`Iphvk2q7dK0m3Ol2;oK)Lgww1>gwua z6s9Oj82)l8O1su=+Pa^0|5wrKv{n?Aw|lf}kDJ&3dQZ{n;dlP#c0GEv^o68#R9rQ$ zC`$KDU3=84A6I|$AVp0*3NEQVdM5R}a{C)qapf$%&hKb?^gtJUesn z_-rZ-{2#{udo!~h&$y&?idGa>LQzZK9yWAvdX0!r_9$v2;+HrKK$RQ!yaoPSiQlkM z6DF7H^Il6uZR}N)xD8ojh79)UF?|#@yas-69yNG!c8JP+_>JdE)ab#ZhF(3UmQ~ab z-&Yj?L@DYa@Efuyd)(0MVfs^Z@cciZ_b6^w-^dGD6q2WC_!X*@R>~+! zQh0PYEBar3-+-GN3jb&1sR~!TE$DA`Fa7Ajs2LkfdkV$$h*nolWEE}fOu<;BVKgZ@P zijB{;aJ`>$RV@xrW=}ZqSvLJZ<(30KV&T4@sd$^eV&VEARNpZ-z z&Z5_|JzLe!i=j_bpETt^OHF6dd-t>7r98$KC$8ss>IdZv)h&8`thbcPZ2oUqxbI7r z&%Uwotu}sGDZ>t1cxVY5|C&9;j@x(z8$Yf5!A=lP@`PCJ7^jPNR6K>{3OQxJca+Uk zD_Z;<_;Dv5y4|M#p5-yWMIUPG)pvsBGH#b2Wzxs#qWz1O4?XH+#}*&&3X8wqKhV^H zTl&_0KXtujQwPy$C%}WBmEFqX;mb9CB_4s;BKUN^Sm2%_c%E^FaQ@#S_zdHapg%~s zub<6-W}uPs0QfI2g3k*02sitxr2~)DfsI?zdkXg%+qQJy?41hSPfPAcsV@AB+>nw4 zUm+ZZ=`!@6{NMB6v>1P0F|Nbsx^XMSd((fX3-KHI@}fb$na%6Rhn_MaH0;omK_ww^xz z{@MWl25n=0)PO< z`ib<m%s)EElUeQ_>UR%$DtONy?l>yhQ66Jisq z#YeNdtFNmDf2-$!s*FFvR;zt+@1nMZTmLjxD|v0WZ( zI_JzzKL3_-x7rYGgIZhKv3|qK<^;}r&Uh;+)u|SBwV0|pS}3A?eEnu>L$|K#u9&E5 zYIvAZjoL86bB31)X_oP1&t>0?pZN8X?(;HRm1NgT&N|O`eaSEL4xFj%9TxsBd-&RO z?uwmrlItzuSN0#~zdl*3+r*CAe17X>-VJtwbz|MxiR+mk!@sH|f^U(xgA%SZBq0(S zL{y8fUp_LtYAmGD%ayw;v8sK*65nhxy!pL7E4F~e{0~x|+{Z$m(0qKdJN~hZ#djk! z)Huf&Nos>JwHHQ~p=ydoIH^+@pTv{d3SoQ_r?FGw16hazr!FP&G;KxQYDF!Eh5Jvt{&V+gnBDeG*HpvrBqLD*`>d;rn^`;Y)R#?s>@&U zT^DAQW;aT;%$(nC$=4IceY33RlNrrI+!fzpRX)zV&TH}Q{54+dM&3#0ov(GA*sa!+ ztjyv4tn89{$vK^^hCzerLZK>o3C}FAqJ${r$iIe1N4X+MB4$exqb)W<)$6P=`}pP! z-o*Im&#k{r&G~)D6|ZuGC-4vXUf$pa+cc5+zW<(iCc^KLUkHF_Nu`1kqbNP3I|!G~ zfxPmaWh7gDU$_D-P<)B5%hca_zg8og&M7EgeEG6(duD}@(ew~TnI5<%Js;Io7>&f! z*er<~TSx~seU3iI@`z3x9`P568=2r;h&h7VM1@m?BKj%!Sc)iw zCoBJP;M6-M{Xiwgfz!-L;J&lUvtni>1QG+Jq#vYIaL`9t^m?lDh6ATwF6q0>=j#LPzOdw`9nC|j(0dwPb@j7QWPGoI=+;|WZsdW6u7N8*PA&BTm{_$&}J z9*KXgye(!tf`2H@cqD#WsUl`P6f)EkGakZe#sj-RJ%qgQwkx?`uP3~%h@xW{hJO2x zd$v*Oyn4Q%AZVt+*f|(^!M;a9EGF$c$$mXLTxa=N+D1fd1N{9d)MHE72KFr5$d*`5 zD8_M!hTqR%!jS4+foLT~eNZU7f1rza(hd@z5^+ol+kz*EqEFF;X8~};Q}hOVi{9`} z3qTS)nFl|1Lq5?Ch&OVV5S|Boi-}JW`1H$!F9LqT#5V~}d4ZvV6Uy-2HlKVdp3Df0 zv&!&xkWbW#g4gUy^pE|k*oIlaqD_ay)0T3!Ef%d_}DQPjXbW3QeL(s1Qo5J#6QTS|?o8XFg0J`tlv zLW13PSJ`hvHXj>Pbw-`?^~1Z(uz0oG_(^6p)x*YUtihvggPc)qs!X`>So5jUdK!Bb zmd2EUisFV0BwWxm+{g2u)aLn*YjuNWp)~|GMHv?{%+>(4bJ$0O9Z7~sBQAw=4I&hT zScvB$-QR_`OwH-I?Bt|z->#UyJ8b|jrH#MDhx1$fJKp-%bF3sA^7&2{|Lf8S_mJj; zTgNQszwZB-UtZF8!$<&%$d_6=+8XY*LtQyK3Dlow=B=S_epno`#%ci8|f>nL?{nIu;}mx%~TO>VlqO}=3R>E`GR}K?a!ar zaOA^PTSm9f>&i>qwao4zEP2U~FLWtYisx#+%DsB=&39b^n2Km*;gp^drZSMZg?&pr z3QkPosce}8r+y;wG5@D* zVF9%irH#|*%10Io=q=lfj*HPoBY4U1HW_&xm!6qA;oId4 z_6!-qHEkAuze0&Lez{U%!&}ijt(9${{Wp#-$%YrKy)bpIX^tI)Io6ftsNJnd-VXj+ z<^CtB$R>@X|3x%ko-jzHr;?(zW(bBc`?2itZsqix=N`t!?$4j!a75Fpt)kmc@9LlO zKgoTEUEZ#Fca<=W=B6;p=k74dn<5gBxYHlukZQ zqr531G)Zq6CH$;s4g6`*P?G(o#j&eA!hh1M_&?PWZz)_jZAt00<9Gl%LsHt zfFT^VXHCd#8y~2gv_ci&)Jr6NdLewCji;$uk{&U*lYfpU%o^>$=P`>ON%;;+O(D>k&g22xyIM+vG}m7FU+0u zJiEG^zf|cp*6#e{7Q_5KD>iLfp_TAozrc5Gw`@Q}Bxq~=-iUGfl!(FBsu)}_jQ2P5 zpiA&%frxh2GR&nY2CGIf*lOTdxUW&)q~gR=z^3nfM%m zPv?ZM2mYvuzYg5v%L_a%WI_p{q->O+eI?$QF_+$0hN7xWx;fCQ#ajO0Q(!E+s@g;T|pMKf+q<0^zR&z21+v5~DiWTg!0Z$@~oAfd;^@3r8>M2l6h0J`;<)OF{;~ zp7tx3NK!o|uv@%=8G$xaxMKOnAl_2om>X!T#n2$}R9S-ZsPUP)-Ii3>GruD{djWDj z?T{xe@Lz{K6s<@u=~AA63*0L?=(Aj6svnpOd{qcdl_h<)o5`s%@QPwlP2ywS>B2uh zXKYcQvZcY)&o$e!ZfY~+lRyvo(01CNqVMl#BSiiC^SwgDRtxIN$AS{Rz|}_dgZ=D1 zP&#~ptD=cxHV54H1$r%sYik8=`vUhF6YnK(+ZX5|CXRH1)4stJQwC}yZG(8j_66={ zqR;PF|08hQ7q~~6_&I?KI}ZF!%LV?XrOBJQa%H*fy5M8`4%cYmJNC2lzzg{fr*@0> z0(}7AgBVkzQO_MAdX8B4?g4+!%>R;I?-sOmy~|hd2z@kLLSqB{ZFMa9s_0lh36akJ zNNe7Lq3BkGdVJrw&WJ`c3xe55>Rq=ek(F#5qT)@|qtDP62dRbe2`+lSK!)fff{O!B zR+zwhqZ;K!r;_vo1KAFG%6mvWC2-S$2g@B480x^IZ2DAm8Zypg<1=@nL(WWfNU?IJ zF-_1*d8kv#a??$DVoBW&`Lo<79OY7{lJwbnHPNX=eMP5|_*i|e=v2wZmO^^Val>?^ z_H~&^_=%yjP}jIjLj(Be2$Ep9KQSa5&@R&gO{_P(JLMD6Ik3zZkaa^c);r34(qHhJ z{*hUR7af{-Y3Q1wd(^vw*E;cJMxeR%#B*45grC%R1+ST(&|nFUrQ9C|9I z9fbahZ8wi@){i=f$2U8WBT8vn1J$VTN)KFGh> zFqc(4-E~Z(rjz@k2(a?hB{O9n5>g+?=85J9u75%1C2`*_wX`xz(o@m8PI%GZa@_N* zhG->Z<|SS(Lwmwkvfu7iH>&N7TIxAt2Uiaupj)k_`9~Kl(W>VgUxU?3V=BFhBJnar z8K!m@>o0IMp4Bu@F!6L{u@F(>2+K`8nMF(7*j|WFj*f7e`15cl?$bQA;cgf$_W53d z$fXb?vlug$6oTtVjPV0_IB%})NK?O2=lDlzb+zvP?fN|Sxc`E7ufKf3WiZ}oZ1O&f zrjFJ8A=J4q8xWTOH6b{YOy-zbkSJC6)G7w&R`MGJl}6(E8a}& zV7zX8hTNL}J$1pvkrli1jddPu&FdHJQh(<8yb9HUbRpDFIuc=q`wV1vTZt|()sTL^ z4Yw%C-C}8pl@}^a=HHqsnoO@jbrK)Oc8k^od*Gui+;?8RDsgmfCw-3o0O5hPgi{nz)==H8x3U!GTZj^n-0cy~(8_2SEL~H(uT+Ps z-U_N$9m=bO^RoOfFB{IQc$I<@uIslH*X4p3*ZG3dQmej&b)T$~s2|;^>@HB0( zsqHOPrcIyYm3?QW@lvQOi2E*h=LTN1_=`pc|9|@}jleSkb;1NVDO^+qf5(S=M(_dt zVmZ=+m{jAPx0NcbTPlMucD>Vl_oAQdny#EgEoysGY=BRLZ9>g$6 z=x#OkdNx5D;n=BgXF?aDgzV!`&^PS2^p_70i+i$Wxp<^>^)H09JwdE0A7W(} zE#g-W9pYCOEn;OMlqj4ATGot|hRWuN%1S)L#?P^}c&>r|1qeF?|0+YP!foPMWSM^v znVmZB{`45u^6y6O%thXZ7x`=7h44a{^WK}@p4e0rNn3N0qQlhag!+m9CXnX@i^}J} zEE?SX?qu@zG{>D)OmSIUeZ4=A&DD zuw^w?OazF35-s4G{J&Hq#Fo`8>fp41YvPBM+F}7$%7ZPdCjK>6L}|;a#Ib;D;-^`N zSiqe_@`#9)+7S!5)Q)H$r(7a^%vy?ebJ~{^ciQ7kn$Vc^&U)Mwqj)B(d6w>gNKC--|Kh!G-C|pqPv7A0C-zQm%Fp80@(zw2dob@DJHUFfUhI<#!L@w0#C3Wq|MlDj z{`+Gx*3zl8ND*+?cSVT3k0?oQd5n#T316voxyZV{wTo~0#kk3~XFuPi%knYTy~-Q> z!!N($`?j;WT^6Pcda~2)r=cyxjQUr?Y9>&v^kn6z=1ERm}&buq8PF13H$fN zCP+s);k2+CNgJ!=p3fMyq`Bu&oADDWPsQ;aJR+WUL#lt=7_%Ho$i6N&Jz0t{W{ZuF z{8_0FOB*6sfHv@(c0fEvlV~=9y(C(FT3|f>pGM$R5iZz+USt^-jrE>?8HKeiZ1I*K zSRdZv+9Ivf-3@%|k0%2P@5}BxtiE{{Lm#w<#`7TU2O~ivVe02loUO2Mngp7r0&QJ3 zF0uDaQ&E>NZk*>Oyvj!Y`SGv$H!IoPhaMj^Xj=2zPivd~$=YVADo;gWI60=_oRx-y zFdb#XJxP3++E}Pk$RxsaiKi>wEki5BCrf|Ffzxm%>9aj#%1;%jIZnS+1J%)q1JP}q%ZdR>9Qd&r7peMx=>ktzvx`$K zj3WN2-s~o?%+B#sj(#rdOdZauvwDtY7QFQj)n!U*;G%vW0eC!$lnd1!y^0zcSw)LP zhKcr=#90}px@ufpHKk!JZR&MJM7pkqta>IjuLVpECi?`x$&WC0gk@d2$_9O;x>t;zTE9=Dx@{9`l&%pydijB=AMwje zSFk46hRklAnA)sKkERvtH)Y|M_OL2z*YPtS!1#r%!uX#M#*}OxSCTlzkP;uL3=~F| zicNEoy9Ikwh>|pk~i39^~p>UWpjASD{c>V+?v_IXlgv9 z2jiM)4I4I7<7kII#>3t`R{e+#x_X(7{6b~?2)}tE`(=tKdoJsfn#;54pwC;L^3l;X$~NiMv{9e>Q)$pdlJO;&*8SuS#a3{aE0US#2C7zzD^p%fn;T#|QA{{9 zcS(e=+|7EOU4~udouA~5)?c5uhrfREFB>Z51<7!|PWoYLBL_W2 z^pZXeIVKw2kTNespQFDj>ERL`e56Yh^gEq6G9DBG%j!%$$umeM2llbpkp8_fQ@$@Z zn|sE|RUD~q*(xw@QWIItMGqE_NhtV0tm%^v63hF-ToM!9AkF>F1-@<9F4p6MyJmqpVpB@WrV%tM2QK=WdmAIQD7-42S-~_pv3jw*y;WHB z2!8#~)lWnlJ&P@-@fZBWn#;pKe5API&{{%#(U(Q!f<(+V(dtF#A)qzLZcq(h>z;R^Ltnn$lR4pXz(c&0i+p`(hDo_wjKPj|{M=Dz~R{C9ScKP}6d<$i-@4(b(xPv}!N z{<-HBwULciweeG)7lXJ%&sp$%HXm9QHs#6ojFbTkmIs{j=Xyseu43vn!*j~S-zr2u z1@a4e(!WFgA9W1eww%HCI_Y^4>LI-qE;mR2J;+DQKc(KrdXC6lL}ad_UK@n>ao9;A z++kO~=7Nu;FU*JRMB=uc7~82k*tn1f`O`lF7roQa?KI^c=}(Y%ET;2$r~Nh2z0c|y zem>@gIE&W89%@DB!SDnJ$z!_>LPRyBqtgtNhH z4;viL64k24HXg&D4&zUw(2v~B@;`7VA(eWnAQmkqScy!-0a5foRqno&IQesl_fzGT z{i1lX7Ar)RI9Y_C_np<;q6ZhHPjl6f^u~6of<>?Ac#ohpn9>~%@`&)$rshyLTDxHC zVm2v^O@aQNQ*(_&JTHvr8Hd%W#xk#BJg(03D}F^?WQ=nuF0xR;M_3j%X(@;<)c&Ge ziIbcH#|*oXkh424BM)Pn_(eAsOo@-N+54i9Q__Fx&XBm26ONp4vB2gjfZRR`qD5<9 zP)JZ~vezTn>uOD-3@?i{ua~vH`CE;i>Q=nb0XA~dTY*M2@kU}|HMwwx7dxosRJ8(2 z8^~Fu`I%#;H09;x`)bD(3$*%tNmSz$!|l)4Xya=FL@5we{ZdplnWc%UN}Qan#0M&v zUfcAf0)ayXErkjsJvE7>AEX>`(32@hJPm6|K|VpepK?&*81kVCn?A>bNtaca< zsjw?hNJU16Q_%}iHXTgx?WDDKNc*-ZVGgHsE~9OC`XyOyZ-T*w184A*tHf8MdzHoo)UrAxFg{dM)${!$Zmz4-K!o{iHVte0zS?lXVI{65U( zZpEJ9f&3YD<}aJwqf{85U$!EmvmSwq?z4JX99m7Jot?3<3E0Jt2}=SUB(AD^s>27w z*T=<3BNJz>?J%O>;7MV;Y1x-q^&`*TdS@ta zP@?AaSL<}0-l^O}Z97(NGdO-!#UY<8&)YG&aY%`KB=xw?q9-k3va8J}>p?8)yJZ)GZSYByqA-iKmh}ZF=0CAaUPO z9I2t36MA6D{H)ia$NCx3gI|tbyV&=RTkny6e7IS`4-nVStUot&Fw@gS`E$Ubu)ImuDm^`Bni{49Ph?Fvgj)|eiEec%GtLPPFk4vgw9>@8SHb8%(86Y~e z8!3G;4GfPi7vD_P#KCQ35zr?a#JZ|Kdw!?~Td4+#}bjj_vGuYu0wR2ys z(~bYtp>;bx*tx4EI25Ln;MQ-u>v&|>v2hGh zDh3opN<9MSeCthD(obv?kJHF`;BXX9o`*-*#R)H@@xsf>d8DW)E96hKzxO|p8oZDG z>nHr#~6FqO3`;+go~A)h{<_uA+tAtfrs*L8R4A${4s4U-=(*x!3{Goc=+gN7EB zh7MZDeA-ke;pllLo~&9PNT?6$BzjfJ2wc|3K%M24Sh?q(7FckerF>*OP3~=PEHg_w ztf#zscniP0X)B9d_xRTA$|39$uT=WJajz!!&28Okdf)!JNiC<9-@#Iuo0VoMn|sV` z%RKqY?RGhx*tDVVF>huf80aMJSqpnk~ln%wt!?h%f+D4#U; zgQO>Yle07V6w)&}UX#y9o`;3wEzAdwx23H&a=a#&v7R*HcqKI)uZd?PlShtM;+B+f zyh(x!j$|)&$dajj7_5^Qj#qMl<2@=Iui!$C*W^Bg^$gPc;CLnO`;5IO9B+nk)>&6v z_EbMePmb5*lcF3K9cm?7Y6D_7(V?(B6b|o7iF7*4iCsjoaWUmI(>I9=Rp6{vvP&UV z#%z0hEsNZ`kzd*}VaxdYO1sgQ`sF4iP3zw;w-shkx7*I_v6-*O0nP%xc1Ne2cDFSJ zy$C%j=dJX#w-64`ktIW-hsgS|Tkg2}l1Pn7i7JR=ro~ExsIrJm?vMQ++$j{V#C|9& z7k{0%ze6(YT5`%}%Rsl5B#1O|;WM1Y=%`E;iVx%J(wMb!*w!yHdylVEC82VIk?ro3 zsz>EMSr0dDsaL7oYk1S9t-N~7E1wRH4t4QoG*vUb5k+(+Krp;=D>UG@U6&gW7nGo+)tz?+zT>ACExol(s*oKM0Q+CH<+q9R&+1 z(Prw~8ki_|uMPW?Z+!PX*8lgfS<^S%ykV(X!+YhmYnRun_3+j{_KD{;{&D3)Z0Ijn z*w8~O_)ohh%^kFB{`~g_H5uD&4?n*OnoY$K=Lf}Pu^J|elrW%!Q!)=f1Udm83N}#kLt@XqsK{hx)3HYF?b}h+`kH>H{?kRufI??rGDka z`;xmF5B|Gc+J+nJ&pn0%xkof_a(Y4Mf0i#JFhFmJCaItxC=&)3*=pVnZbkS@R=TWnLn88C2EWQ50>^42uPMG=qd^Y-_dQma8QeHd< z^P^QPm<`NK?ntq&eh}s)#z=|d3JhU>5~p#5a9tl5L*B3`H7>4jP}9gIsnaDjm1*-1 zUi(m}42sd{EsMMLTQP$N%h!=!|33r|n&;Nv1`nQ6qF;8A?oRCjcc&>CSnzmLOrC2h zSRGHIwGKEv+3jc|OZNEhg6g{`9bVa+U1*+GzjEWsv3Ui%|266{_SPDGU?qEok4b1; z&aLrhT%l^MLXlAMl_8-6mpv!El`-S5pk021OX)bbdQ5|RYEJCSE4}s~e(i4~HNS!|O|Sjx7bB{LdH7OY_dV44_AhKa%VrpuHk43OK_4R{#tB6=TGfgl`$Izio35yWA1Q7u zqQU~jjvNh$9{YB0>3$q@vg7%OB-Kh71ln! zZA|4*iig9hj7K~?y;ZB+e*LGlY?;gY8G#N-iM8ss*7|hj``LZ0afhzozcy-3?*)IX zC|jg{e{b*JZ0{&ntSasOyxvQ6N*U15xFv8bCqKeuU_?PNjaw48gEWj=4jkhaa_s2b z8OCHMjuRT_Rs!Ey2%qB7t#U(uL{`q^uN}Z_Q_u%41IML6vRv(R6CcIrl%(7ua4_&_ z$J}dC0Gx=iIpj4oT_d{asdys_k1oT?V}3`gdT72_Yp;R`peRvQG< z60PT?kDgrb!N*6Y&uz8jp^h=Hu|e31MRS?zogY?LaD^W--i+SB1KU34*A~{vKD@SO z%ea3r7Doi#WG2?}n7@W-c zmpOF*!)#U?{yTr^z4uw~pEt0u1Ecdl(Xv_lY2CWd>_pSkq!D6zx|<)V`~e$s<0>0^ z&^hCr*3~)VG<|wYFU<)Cp*eJYz*K4!iYi*7Q8c;@qDWNn52D$j#cy{fq7`2J50a9h zOG*0)Gp7-+r5M8qrPSSv!VD!&WulaOSn0s65^1Lf_H+_G zS9LU*O`nPJG12Bjqpakf?kF?JB}*UY;7;=#qV^!c^nsY?P$b~woHv2l1H|IP-yzngFQ`6Yhs;3#*Z zf3ey=_fd3RhOXOuWakLpywYy=pkDa{zWU}>z7li&+mG%VkBGJ*4e1G%y?bR_)G}I>q#Ap|xYvSrb0HAg2hsK!AmS zT`H}q`2H)bC{4L6)<}fRgsam{TpmfSVQli9^`>HY5V(3>%fWLR9=7S@;2y=yF-Z*G zLbD0sh>D6v8?=_KQL@hwb!eI2@k2W!*cT<+jqfsbU3le5uZ`WzFTE@hSlhBImtsHd z=WD-p#6-rn$zSAEtl6UagaxcryX+RLFrvC~vC=@9%(|Vwo8NvyJDjp(>a;i0(%+mq zbw`Q_LAH4gVINe49LZ=JRA`p#LEMSR<9`#LLZ!?tpJ(jqu=~G{r+VpUorL$?yih zZe4$E4#U4^PU<`{Nz3vtMdIb+qP0(R|91cV+W5T1t#Tj~-O>k!C}xo`;fz3gsze|c z^(S0cmjl-Vxfn#L;Ba)*IuzRk?;o>Hk`*Tn1L&I0E+wz}Vp1<;Jrb*QnZw=1N$9`r zD%o!3fzh=>UAUvn-Jq-XMsXsmD_A)H4Sfltnw}v{v?g>>)IiIXLBYjoCyUohU4JmM z&-mJypT`exTLH2h3y;6KW&LkLTeBu$!Y`(DI)wG`npp{_2I%*A_2f7F^fGp- zevkSSm$qd;ze4*{EHnF37+JD^X{F`to;};Pbs19kC-xC*yJ{7$Yb@d)lRZO$!w^E- z_8ddA8jLz=Gu-W+=XP#V3&aT zayvNKYP8r)wW4KM$%i=N1g*thR5YQ^xIPoVc(JcwO2vdV5XH>xT&c0^IX1=>T5I&j zFYe8UjD(6!@2xww@5I9|^fo1F zJ~+NuQEu^`viA1N{$dPeiAY0H=1TN_ZaPtyU*2whmx-PhbzkpKXhev#z|ks1~ZJr8)3qeoF9v0QfaA5J~<6X)g%);Fp#wytTv! z@n!-i`B#V`O5&-KkJ1s>*}P)QiR*0Wy8_CCK%W++ZoddU>uLLlw=9!PK=Md8%Ov+- z!69RoYlkRvCh!-$6!J^@Y?mQIeyUS>5kgCRtUFbN(93X{%_6}^>N3X#sUgjB!fhE5 z-V%;Ca6DQxZWwK?3dgzSxY(+=?NW?3Xz7*wzx&J9tQ=9P)KJX9Zy(rmVTg|0$T*dC z#Ffi|dB$E1J{!`#MJZYNRJt`^ zO?&6p@r;f6euK;HuN$ANR&5g9u^PM7VCGMq*d=3A`s))Wyf&C0tkx(dHmrMd)x{?d zKd>f6?I*i{EKG<1MV)TI=d)RE8nqT7SCT>+lS9cexn)#bN zxO<>bf!JH8?pA5-NZ!N00HchKTdqrCgf2sy8*$Y)s_RqLo@#5h1KR*|XBf5EC3cLD zW-Zk@>{+#)8tcDeV4K}7Ma^aX{c+|{KN~}R38f0gSVpmqIA!iri`<~;aZTjU&&SAl zsVvUe);IR6z5NQ0OyBfrM(1g@k^1a3m#Jl!@fq$Nd^r2b$o4OGN3d`!qNJz;jf(pN zbVv?Od@M9KjG;!*5ITsyfOgZHI68=!1(2^2w^*4tIY_GEQk_)ho0M)tJdQ zY9}qn2<5{uCgFXG3FX~G*fx6+a1-$iYmrG}ZWJA^HSup%SMx}BTbzY4n4;}AuK=45 zYGk@lY0rDBS(FzstI> zGRFV*_N!-SH-Z&BkXWs8^ux`yT$~4wRL>0EK6b)^$wRlFn#kv{+a0>xQ!_HUu_hFU zPeNTb_PVyCs2Dn$4u_))M)#Bi?S%XHEtA=*0I;b!IJ)kgLjq>Be zjhWlUUk)wrDsk*8j57cRuY!R%Tt>!OMr6NjHVIk}|JHq&P$e|1T(v}p=+tC>EuaLg zwg^Y?n-7lCfH9}HkGITtzHDOSTw1zb8d20QJ1y5kd!Jh>;wH4zZpEVkHAgvjh(=@x2f4uZdqD1kX zk2~gRbib&aN&k}&o}FSMJCT;}X(D?I1J^%DRcLnB?q6kO%Cf)}-!cpU)uq>#vjyBt z4Bx4U$UwLxh-%Gfe9L$}hX5z}Z|u@z12e|46Q)}76;@FyhDHAA3h`%*n=*Tpw#+|x z#55>ITL{G`tK!s_G8Tcr?L?MwZP3rE&fdcX&k=AMGY3oTJ&;N~d=--XnjzDYg@@vf|HH(XCQ>%L)F`^f-pb0JR zLThAB$aM^*e7&oaW#2F_np;crN>)BG?RzpcuZ?4!&p}V|C(&caUL(`BI=CR~U-wRw zR(n3P`c5I<=DZy(TFQwdCY9?exVy@U<0PlsgKX%PU$NqMkgxpp z3RVx;*sQ&|d3&?6_U7g8&4NBfSv1MlnCPAZf@?B*Hg#JQPocXg5K*KCUVv=2Md4b30FQ60-HjTz$VbhW~?{nTzxWi}K6dDecI;)AK&a%K9L0`reVE^mCrFdN)Mr za_?F+%#TiW{+kGTDDxpE|21oTZDZg+$f0+`&3iv=?YAZ0cc(1HY7UksGz6Q8B%6`? zv`|`o+$q{x;>a19)B~#qsWH@>=%DgJG|JX}s)I+K7iTohHtEayDRf3t@`g>DT+$_P z?1O|A+0>crSt$wO6kceEh0p_>Wd`NW(&szmMuNgDGh6>!u1S)OQg9=2-#-1S*dZ!p z@!hcT1D;Y!h%IA~e;Ru;$e(tIntVROg%GqgU+|&O%)}45F-+KaBO8Cu6CUJGYoR9n zaNyQjXm&^o8z1IAYHDFiA?@VArfvR|c#(Xt`M;61cIoL(Ym_GcFR>ayYm~X92U?>v z@xy_p_8R4UTB9`aua&p#HOg#SqZBySC@WcOl-ZO|5Gd9tt5TrokjYb)d>l>^67H}m z2kx*yPgzj|N$spbS<#~*&`t99e%I@*~ zz?LZGi^0dJqY#K&)*7VGW>b_M#o%L=6%P7sHve%r-ngw8`tkUrZjeuqeu8q_LBG`I zGX?kYZ;(Dkcw6&!wrn@}lH_~F=8_vdnS@hgX*>1R_)=^HSVh|R}6D5jw$NayC` z@H;mjpD$f>^KnRsbCWNHr2LNU$Nq!v7LNVL(ClW6)vu#)O{pk%jfne;?m`6Z3$?{! zW1o@1&X=y7y>*Jc5Bk+{_l1PE&h6K4TFWH-o!eS{(`YkNeXn5B-AP2z!v@bL+JtmqwhnhIZG(F@BVdRivm8$8E>?Qg{_ju+jEhqdL%5FFen zv<F(=-%)cj6S*^j!#Nt2%;_s{dV5myq;L zSZM?%0{1ITVHFf^+sk%^H;Cej9Nd;sO2su2WsqPly5ACeL@_U6m$2egxlxt4yn;Q} zj>i6rMszHP4VdFz)#~xc31irK!{gjxAa;t58fB;Ooclx{=r%M#Y{Yz+C9-vF2kTLg zS!nAeu0_KHvsL@||mA`gj^-gSQ6>Dds=j~q4 zqFCPdr}3@l`_}EA!(wkgx0IFpXfG@G+){pJ-vR#1VmZHbP1MWTwIQ~O&vNKt$j zR%=gg)%N$rjIGn>$*!1E{=9sd&&T_eDAoCi0e*b^oqB*^K@C=1V^KFQ!dCtIu`kSa zK_%;qH?oVABX{by3#L%j7Izd)c`&2~Aw9+rEIr9Q7=H=1x*w?_d`N(5MdOD#^_S}` z_(q9K=dq$%9jc&O$xl2=%L}Z+@?{}j_KK*O))E!F-`MQV0+(=+ys)j%%>B}O#vP0& zO!{iwKz3^4)R_3FMw8wtQjD>=#>kIX4e2;+2wLipFT|UCXR%CKZS2#|xPL+ifI~EQ zCwZ)eU+oN!>pV8GQj5s=30;PNu{G1!r`PM)rHWf)@xIWi>4#oM^|8E&-J62L;3BID zdO0zo+nMy)?(5dFT_O53iM=X*#IUcqy*X6xE_M=z3lyl~Xf>_tsS*I69Zp-!h6oe(TgKdMrZj}9x}Xb>hBeB?EtvwiHWP>$Dmlxj>%BIrr7bCXcTnSw2b!xRdY zOxZHa7z!09jA5T>NGcA-@U>+OK_M(-zfA8jPW}XbeowT|pjX3|mAaP7^p8 zgQU-P-?ELtNuQ>CV>f!R)WXILL%yZGKC{B1tx zUUn{Q?y!_ejP*<9*MB<8*d|v0C~L%qxoVeq;E~#`o7~^BY@<4dH?O`tgOxsCqGxj3 zCJmZL#Me5vW5st9cmbNRkAZ_RkSUCI^k5;#xrC)8u)7ws4;vnzniSPIDn7X(?&NgO z_`gWaP8dJ8>tDy^;zvq&nSRN&;I3=2SJWb$K9`FB#hX zfkE@)pX&VWvrp`Qy3tj4?Ek4MYtHcN^Xhc0`DfCMsqdw-=d|W`Qx~{6VI`sm43s?} zhkAfSY2qo-fxigU7)JFrQIDRX+!U58smV=B>U5KOav|zrY=?uIrmaLx>9bsk5boh*d$W) zJrWh%???x`JZ|JyWxKj{q=2i%CSWxR*H7T22zD2Frj})ytkE&{;3jtNBL8zxKUJNW zGHhOHcCI3y!{0u_KiI|2USM%)kErV8UW2EFx@w$gErPa3o*%l*2dL>3(?xF-UC1VXZ7i{7W1@ zqeYyzSl6@1Sn7%A=Y9Hfuo}W@Pnxtovh+b*tH^ z)`Wq5a@?!))7-0%vr3C+{=Tv6_<;kPJlLb}gqJ2P_+?>C6w53b-Lc0bsh#@F9M);f zz|@By8ITDVk`OrSs_4naNKj6ShE+_{jnHbS4p*jef5Xq%rOJ)sDm4%57&AS2>x~&I zhB|C$X4(1U?{651-G^&Js<^y^kGu#*3C2EGb+8P>_UKqJtsY)hL02|6#3YIw`<f5`V|{iiyz;ORVb!Z_DCyU8%J?NO0WdYU9rm}db__712r?=y!)Enn^d}E z)x1JAyVbUCVug|#UsK{K3vBW3;Qej7EbD(Yn}Zi!~XVgjy1pcDLZv#Gh1z-F;a zEgRHGjDN7fiyxgDe`p&^W36ZG`{lv$A3r6+%ER1=kKXZ5_+r&RPeUq=-^{##HvQg<7BXI6=(96Rcb*Nsa{=?5MOX_``U*G!5 znNdL_=-#|>@8ri{Xy1GFs3)#1bDjznM=)P}yKC9FN)=-o^lkLWlEK3dFGGb|@x`th zdKHA>WO#N&tidlNmM`z2*i;+HBQ2}T?Yr&I8O%_%PxxZ@LSb`kuxWDz+t@I^oGi~a zW)EGo)&tYaaPYa)*b=l)im@*Bm*dB^a>W}IJZFM2%+=bH4G%e5c)$$hUExuw)IYt) zEF2$r`Bq66^pnW|EnFX_U;%<~lG3-=#?zFRtcjrCQiwjsoi6DSo~8u(_%!#Y0uRRu z_OT$26>J33h+w`G{3-P(gsH431Ks{J4|e&KCcbOjHb%Mjf23zIy@ud|HjDlRu@WNNu`e#gp_P!8SlgIK8x~FaOzl55eVPdA zWvS^wS;QKK;Nsio@rX4HQL0#bkof!hZS(F%SXD?Vi@Wa=&jYels%c0`8{hA#6~sk= zBBjjI*Eyu234_G5^{aBifW21TLeH}Rc?@F|{tLH-W;54pu` zR<@MygvG~q5OUHQ3GG96^3Tx^2Kk7U1S#iOPdBj^B6^FcS03zuT3oJk7RF&8O-Xuz z3NDg*EWYSNH;77V>WdOjQI3dGH{**7=!-U6pq4faem;y}AZl0Df-?|Buog=rlr_iB zWo51qB?^i`kq|}VIeHTz3T9fq9uNgPv<9>2GVx`^f4Gr82H&Q^4Q#)BQSuD?;e5$Y z*e`sHapPL}HC^%7(7yH8(~jjU+I0U66e^eqAGKZ-I)MF5%mdK1cavm}dV;0+PZWdu zq!;sYV9uk#oR?$IsG)*6n0|`_j`{1Mpc&e9n>}?u$$lW4Eb1hSrS2;6ehj|YrVrxD zs;^i)O$(JcHjqFEHlG~N<{-W3vXcK0HBaaaS!w+tR10q>l|h4;|5G0_n9hFXJ=kt+ z$h?S;{DiSRJQ+cp&hib#P#EW`2A>8I1q)$!uL_N&u{okhiPIW3;W)9HW>Z5zU7!?o zeTLqpA^3}i*M;@K>(b4~VkTFHVd6}IHfGHvU2FC9tL#uzjfROC87n_q+%pX zQ?7emy-~qCuJ-Kq=$sGfs%pVcm=0!IRN+z7L7EzyJ-R1ToZE5JB%9Yl1p67CvDBC&d_RYjulRLXgl)@n+bzF}m3_ev+#XK~xCI)dFf?;=5 zRG)tPCH7A8s)ku3pNlJ0**&#i_+7ho_U!FX|FObkoK#`*IEzHfOGS{8OGOMcsO2R} zrYX@ue+1DWk2JP8$U_*c<8{iIIvrOUTBtF(tMtC_X z3wb$-rzo?6+=X=lx8A422PR#rve1DSUl&>ylp}#GAMw8v!e^rh^A%L_02S@qrHtqMz-ld@q9fcFRm4m}T!=|w z4?~hGyqs&?ef|0ys``d8%Jr+!c>}&H(Ueaa(`;rR7OLg2$N6>t9R4N$V?RuIEtag7 zgHr`^5J@=pgv(##&Qxqy#{HLNh%2#HAKg85`?S>L^p^Mc?-coB=WiBIcsXaps3!(B z+hS~zMX|@bpk6BA+^*~|stU^)R8uZrtQJVctIhlkIo4gf#t39X{ z*F4s|^O%IH4Wi=vJopp$`zr+1G^Bl(D#&Yn8j8HuZ$pY#n(&yUG^9O6(nqM$MuUkN ziBoznt&%C!%s z59lv+d)n)pk5pRuQ zto4Fpi#{#bsQ$;uLd$kxkJqbJwsO7Ed!FW5ubp8vSk60XJ0|tswy2j=@BTRu1^c^o zY+8n^qVO9HS|&P5ep4qJKdi&T(fGC|4?nL)GKCF!`)$4oU!uIEMow7Ny!oOD#wFTa zuP@)oe|+~{{@<6_xK59?YMs*=_DJ06gT`jpN-7%DP_I>7X0ym+N=y1<=UcvD43POt$ZsTjd;CmJ&yy|s{62c^{D4`s~ zXoBvbzncH6TPf(Q4KU*QXmyaWjxAw}_&BympM;|?OZ*{a{O&Kc2emq1fd|~G&*k|F zvv_eBVW{||2|k(;O&ar*S6z&n8d*Mg47wk(ib{pKm+@zCpW0Yt!+&6laLdOi{I~E7 ze(?#$LN;!~yQ3K!_1+}@^!WE-gk#=UEArUycd=f-{KYc&eaKh-b(wE|k8SDj+=SU1 zx;(mR_JpPF+?{XLfgr;0ytFT0d?*Ns1!~3^YDW}InJscRA_t`(U>APi!}+fT_~hZR zAK4FsK3#od#v23p8Tvx0F&F5J0|#)_zN|XMnES%9QN2EYQ=LMGAfWDXh#%|1V9+1O zV?K#vpvdW=f4PK>d+18caFN0j-H#5JM23%JV_rG%3_cJs;^av-f`vSD;1xE;|4#Y~ zy>d=39{I-1_Pt(6XG_AeSjx>~EG6*NQvtsI*iF7ZD-4RiRb%tTc`xy2dMy8Z%Dju4 zYj7|8Kn+Oo3Vjz$`)&%k>p46?{vq%+@S}9~wDz4M1H}G(iFoo6o~*?;$M6QKKwm@a zDZYl*5)IjkzD1^e$I1!UKP^z*;uZ37v(gWsHdIb+^NAsz%rc*# zp1y}AH}e~Av-xeo?IR=EQO`JUZuuPnOLvJym)@s@3pCQ8ZXF8mV;LDw~M;L1dXS^8YnmED*48&CN5*v`r}6 z()D2N(MfBrJ$m&@$6q%#oP2)+J*iBicHw-8+DqG0CticUC~?o~qsCNq?1A_13FSyy zHH!1MH#WkOU_HJC-Vv~|-x;m(di4JM-M~@wBq0iY2~QKdg!KU|8coKOCAg121P&Q} zp+__;9}z*z2Ra4$INlWzK@$w2I(QX|i{h53iE2dKg^#s={;$PP2iA0%zO;=Rsy6aZ zsnPJ>3U%t0uh5{D=V(FFYJ45&uLJd$z47RyZ!D|7AMP)Ho$G^JCwo4gQoGheN!4l$ znA*o2M317SN+Dbl$4}r^tQ${+XQixe^h)<*{>iLVJ{$kpXMABk|AUpvTGn~%dj1EE zhkWmPehOQYk8fe~ADPj0+zY4`4WE^KoCXVcFY#xk_8L3xAMM3d(4T#K36%8&t|rGA z3zd8cRmEZP_(UKd=JhG7gx?rp@d<-@5U#Y`Pk`MZ5oM5SjTh|jk7x}cW6Oo@CiRSH z;ePxyuU0Vrl6r{W7ge&!qr8kZ=7DYOA*N|VZqM{DVOI!oUE%fi@e|*Jd3Sv799|eh zOt>7RaDo!L7Q=Wn^ThG01wJ(g-)2Z-|Iwac8!%99RkQHriN^|V@DcJ<9zHtpu(sd- zsg~$(S+GY_{d9*nKDx zo{D#mGbZ5sf7gxlG)3_Q*LmGCd(_$5| zCb>z&<2P4<*)?8og@^5DUkG1!Ji|Y8ohWFficNee%0v1#d1q%`d z0Yy!#ol|2U1N(~6Jvwj;d^H8QZ&i?{=e_{ z{cw?;J9p;HnVB5#605f$X zp)uApJd?|VS7Mu{@+v?*Jmk^<|KNE^%VIi3H!f#qEJ+4BNki#xqo4QuM;q;FvQvnE zGwmwFKzZSp^(hxe3tnx+tueTnSyiI^`4s0Nb)YiAD*@`KHB=|zpIWFla|K?0MxP8c z@!ma_W?<%wrQZ9UCg&#Yj~%u@fpQaf$HeSTg!ir9^)egJ44>KT(kj3Wg1yJC?mBmOeALhSYUrk!sDi&vl< z_vO0TuKzHbID&B&*YI(;+} znX#%Rj^G`w7$)ivDSXq?vBVL37O?aadaDL>oY31 z=5vSdJDfy;>fXc2v8!CN4V}uP_;W<(*z`Q3OmC>nkh$%Meq6;G>M#h|B(|<#p#;6^ zQi*i|N}qWo_jXobhsJ_=Om|DH4@lSDLe=~GUHP$5=jBCN{|wQm2Y z3S$E1?~=|aQaI~D{5F-Wyu~^yNjNIQdjD@tTjm)!JgkAaqY`RNbu8U~3(McAv;04_ zl_trG{|{8>jhw`ijlI}iHvU%kf2RjpLW!rKN6&*96iUT^Z!Grl@_mD&((^ytj4hQL z%P@rfdtH13-d1eDp$Ge;C&^KmYOHWqiNsYvot|ID$d^A$#P<=`FY0C+#u^jpg}i_3 z!VLlKH+(;1MGGCXD|d?GadEvFP5kXLZnArw&n912HuHgOG^}2cN&4e6Pmp$O=z^GY z)b{9G+;)F?2D{9HUTvdh=x{(aN;Jow!dY_+9UZN0O-`CcuIK&02Wl!~oS~=O(D|Fd z8L`L2?B(>S0vZuAOrB(X!FSYcVwQgo&E~fi)6d4|FW82CyD0RD9FjLivSKBTk9EVF zjq1}UwJ}RuOtpT!LLO`Ka2qWrgX#4B__!0=m)`uiMaf8G79bn>7}eUY=L3pck}CPk`W=!M_j)~-&4uY zlyuLMIVt_t4^P?NH*#ls?3xH=0~<-1Omm0*^5YxYO|FsDgwE$}WqTgREbK5PU$gn? z$~R*}W@BBPi;J}-1l9H7bU0MkAVQKU?lW$|kTmLkLQS*ed{glz)vb^uwg5cEN->w% zZ>$1aabPi(-+zw0w=83~+0YL!*=Y81{z-~_*>PlxjCX7IQMm$`?6 z8p>|(W#@N;k<;=YnCtZ)G3o&t3U`FVsHKC3gaM&}m567H5r~Pd0xAlqN9+J)8hOpm z#M#P8?F#lYYj-R24K+VR<`j20_ZPYEhHaz#C1j06u?ous>{QuJDq(>lRvUOzkr=Fmr1+c;M-~c;;DOk5=Fkfa+KZb)XHfq zS(w@9qv}t&C)ut)$3LeZsk(v1*XpyN+n8U+=Z<}|u)ZB-mvO6(ftd_N`7#zyofbH3 zRb@2mY39I>>HL9v=Z8Hw2;rmOLpv&roZh8*`L(Xd6n+bxR2!Gl>1?RnC)U1IaBg*e zD;?Jy^6!~*WuH%{s(jRd%^0tIr=_?cBskw%IaO1vAr`p%yZj)AN-aZI-stcP+nJZV zq}{G11KEdmti00ci?8fXp%p#Gu(!9yyxKiLOR>!oJB(XVT^YyiL$2I}g&L!P zfxlGs6c%ezCoZ&VoacDB$?#IvXoMd2tuv_d+K`!52fP4z#}}ou?KP1`JNEN92|=6w!7e znHA%G7HXKLU)w0eMZNCe3tPFxDX6hDblk4qL-!7g{W(5jH+mb4(_I9-uMWIYoeO+s zVchb-)=zfB>6b|m!jOQqOP1lqA?uE?OPhC*`_IW|=hvD#b`P7ou}p&w@ooEz4``JU z9yp?#Z|UVUVD;GVowLq6&^a3T@+I{<8I~QxS{e+p(r#u#^XQ)vQ-2=ZI(bGbSuq$` zr-AGGVJHe>xKo_sfT75p;-(0vxNp;kNm0Vd?c4M?02;V6+qdb%HFJvPhm)JB{CFTV zxl`P?`4eDBE-I%e{|L=rMfuII6qb`n@kQkqOHU%ZqI5Gj(V6N^10Z8Huh-aBcd@X& zF!<1Z(eA?b{m1jdcK*ln!uE>i1@sq{U)b*dc)zgy|M7kyANcda_7;_2$dCVc{xx45 z3izUn(BLS#us^sy&&L6rZAF9`m0JZ|EUN7*ZgTvs%4Lsd-uRoEbRWoN6Y7beeTFL#hrn;5sg=}nTm zeeSHkaE@v$#f*0_9@7F@!Oh;VfLV+9MGo|W^k3+yk+BBAf*2J!S7$sZarc@BSRM|V zr2`=eQ?S4A{1dK!kPN~Ku4t^eRgrs2LAArlpNq3I6|7$TVmgFoz-0l`DS#@q9y+{@ zXHJj)BP+EJrQV1KzKv~v{g!RsmU=2tPMA$jzGEXJM>g>v)vNE=X1a~HK9s3w#nzRn z)2Kmt_Xd>`SR%V^f1Tx=IZQzp>=)&&uVUuE!|>2H{$PBePS8_8KK+>2o6UQiY zRvK~a=V(v zN%FSDMzN=}x=xSwYScJ-LYwJFqlR9b-Q26IXOq?#m4Zky_kB&Wt~>S~TwQsrvlYa9 zi!cVxEFMx(}_+eum;pQGhhJrF}?b`+nea!SglPXpI$feuCa3``^e@d z>bvh_cg}3u8-NCc>_rP=L1_ti)#?;q7}dUII|jY*q~KguRex^|7V)(4R86bs6zl+m zVxVGdEh zZ%vV%y`rag%{m?1C~;eIljadVjRPw0XmqG`6VI+*&1YX68g+Dfn+eg4LER7xijUx{ zy+-iW87DlBBG8r^<=6>iVVVNNDDyv64FzkTqe(~PFksnxV*a^QENDx{x9wi5VPtdn z)pLHE7O;mMZME9HfA4ltEhlth4H8b1G>z&~Vqn%;`#vYB!L_^_bpl)(wW+qzM5}DR zHv|L*?A>&Rs_*Om@K-@1S7IKUO#z9P@ThFX)g}?;*p`Q}5?X=wpFHLBtAMHEXt;=} zb{Oi~hV;?au~i2<=W@OcMm3qXFr>0^*1{)?!RAwJ^X1GB$H3-u+A*0K8DVK)@{qAa zVDmTyLt15X;Lk+uv%%=;BFS)g2CUW#{ufYJLKE+;W#DcAqmuU&S16t zcrcP{Q{U!KzyV}YIYs$LP?@6qLW@w#Nu=pTZTz>VMJ?q|3n(urxv0JW_HI$D|LxtPw&Q7G8w*M<;=sQ>E#d<& znGa;nhk|#%;)c+M_){I{hUlArdncVA&=&NZ(1cXZj?|norE@yCCRDs8@f3R+hIL>y zHjLcmqy`sTd{@WM7oZYYTS~%r+KMbyA3HU;p_lfLyiY(=?_vk8-C%q65bdGB>sKgn zFRMdM$?VkpA1sxrjo?g+t}Uu zh~qKa{I^PwIp2H?;L}AnfW-?uvM5tb7oM&&zkdsHI`S8wrZXH&Xv*Ew6!!M(+!%g{ zsm>?Mx9M^DNBE@3KgKC8EM0FtoIT|E^Dm2ZKI8;7=JELfVzP8c`p?DkC*-#hldC1t zkBA|v<{y#YT;vbr<%j{MrYGkABFcaDO?pzkx~1yP)5V}t^QYy{=94Rb9n$x4q@Ag~ z5iFMvjeNCTTvZqO5x%jHNKZljJLa^#^zWGmd6U}PCd|!>LL(nE=nO|q89xL10;X)g%)_jSqLF7c*Go#k_ulV3p?JC}} zLt~pH1}wTawP3Bkg^8^0BO}qi!4?Zjc)JR|Id?S!1$@rRtdOJ6#14 zu#|6Ou>0Zn+3;NsLa4iVmoqtMsMaem!+J5U+HU##DJuIzAkAQZ9r*eFh{~s|-TMSb z$2b$Y4(Zz^x-LoBo5a1LpiN^Ru!qa+pRx4^4p7ML$^lvNEk|taZa-*uT=dR_+!I1p zfdVlR()e_RoF616+G69^>2Z`KCfZn@uB(6nrsm(vF62H%OR|gx?F;QI4!!Z`HY!IE z08+;<__ak(BJ3((`*}xl^9b)rx!)10{sU_>Aa?jrr>2wR<{#>#r$Ik-df(E|*Z&23 znYxAow6D;{LwzQtZtGMfc~Yoj?M{=DIv>dK-sqoUU$3R5-!EkSbCny^`6RmLC&vEyII<0c9)J>^6}*xPFGO)H?nLNRO#^sdZUkMVo0S^Yarbt1@=fXV4t~aG*fdHo zxOn(i)#=zG%QCRpD`4>=sNN4T3M&bNmpFa{N1Y{HK&4(s#qFLNjF6kvo7L!=?yopC za;80XTG#Ekg}pukc>4yz2&@<0+j;z{ful&z;yb=&Pv&oCH*Tg7D8H0?HR&XIW?6FdY;OyOd&!q`Zj%-R7;GgZ`0$*ONiWW(}!z17t7B@ zw_1L@W{(iX-{wz%zZuty)byhKBQ!gU@(anyfSNyzv_daZ z%jcq-r|WbPLyNe;1-F{oM+ACM%jRNREhAZ@E(>Zp*8oIr^N~em2%)X!PSqqpXp`my zVjVq4WDAUDe@kbR?HAT^{53 z27ZX`GOaze_iR^_q5z4!@n=7&@u1cX{fKMI*WUcZc0HKS9z6Yi`Umn_Ka1q^e!n-# zUKzCLPSTL0V`5kJ=-T$nJB;FKpl38R6z-b{b9(^rPcE2bH5`HN<2D;DpH4FFNyRSO z#ZiS$*~z<^k-^mf(Vk0aLXj_aRmprV+s2#dL96?&_Ot2-((b;6O`i26|N;_=+XrxbH0cju`

    IpRpceDL>@u>`6fvS>>yFhe z`sF6mjxLe3}epj+&O;VYcGvv+4t4CI*XDJRp9Rfi$@=i-A%o=Zf9$D z4?Hop#e&gNNmly{Tl-V$ZF1T4lyIxHN~aL;^VMl8Pv+C~AL+xCNIv}kksc?<@#*!C z^x@LXV)^;BQ_GK+gmL#D`4glM#mXtlKSFxTr>UA>Oh>hxM7U`d(o-xwNiJ8EE;KAP ze;T5pK*OTaKnU(CY%k1>GB5>vVJm3ge>^X2=YKpeY_E7;Kz~vBh3)>2_Y2$qAMY3P zfj=*7Z&CS${P>UOg?tg^bMeLbQuO{;{Lx-2=r5H&g?#(xd+G9Ku8ErZhl?(i-y@|Q zHC@nCkX}@ucn%>p6L7hFEP@W0CD1z&0mO^rfy8+TS2-an@D)k|3_~Yp8ew0vb9VtE z>xI#wRp;_`U2PB|#Ls9=Z={#LK1B2XHs-WjJE7*lRDW$m?#+w^&1yDl?Al^!qPAx4 z*0>$s6V|qaOhBYM*p%y`(t4=Y8p;R$2{V9-wdZ>(OV6^J8eX!eq5?*v`qu8y(Y{w@B;gH?XzyT(f%YKz(-v z{EEE4cgl)Q?3dfmSkC@qG>UBFBp<1wL}dNNzk5zn(%LTd`($<7dJ2LR2m)PMh^(?W zzQXY}Fa!ZOMhG+3b&V5E$Me-MWP!c&=w~ zt-hTv=`_EdPyVrrS?t>0llS+denI|$p=9pRq_%G$Isp|bH&LM$+<+9qjZQa>i@ z-vSfuOny^*mo)WRV|}1#B%sdW2yQ2H)P{#B7JoSEbyEF=22E>Nn^jltykqqY3lgN# zEYqxX6V_O6T5;a#+kNS3UaH{;9p?#hrRdLWE7}5MwD~HOYXin%sUu#ZfFQz=0e?D? zCmER{xl&ABdXC?cE7Ov}c#K7T-VGuDl*o~`hJx-Muu36mohyI({&mi0ey>R zEjF&wuQGE0R%Z|IDV;bULi3(ztLHBWmQ>*^h0MfpX)Gm5UdBAh!g!Qz!5uHS zkfVtq-$>jsl8+kZt6PjWtyNqYhoSJ(X+4wxnE8ssFtKDErV^BSb@cP)H^b8di2Cgw zV;oRWLuWPzccBI^VGmAZemd8Ze5yo^YaKDQ9j>+%b>^Wy-V$c5hl@2@vQOc#&w(-n877=&l%GXU%wix=On07eM8INMP zpQe~7d=eD01Fo|dr1}LE7x9E+_4wxQE8Y+ zR|VxTdhJMg^YCehQz^AU!me>r4t#^NSm06idP680-45NiTr~QSX!H}UL;ezxz7}`` z&I~pEskVFm996mqZ>NG=NH9n6!{-KXj^axx6lFZbP8cuHfEZR^JBv(#x%a1qi=YZP1(xKMu-io!@gQ_ zX?LmK?yxX-_n_2HbwlS!Z98<>P4(`jrQKtfcDGIGKz-vU3-b@3=+%g;RBg)^ za=MoAz)Z`z#r97r8LL? zTsB$j?+ZqkPA+He-bTZNbZ`2m-F3@ER5-e`L3|MANZZ!k_8}Kqs*Vk6flLZo-zaVRYJK zY*P0FYW>FHEUR3N^0?L6U9vU4Xy3JZEiqlJ^p|yn>2k?5U25kul#l6Rs!4=%5pdjp zt4}`pL9X}DDwQllfc!HhaoYc-Vs$+*w*Uvwe(a|Tf3SI?vFhj3EHEuqnZ!RZU~*=+ zwur|o|AAe#h<9LZR(@VtyaZrZufSf-SzlC=>Vx5qlFEULjt&}e_$f$Goi-h5A6+3| z#8{$L?DAD(85CJ9VkFVX28nEj zW@DvgYQg_37V?H8VZSMy_Yl?#Y(3FKziLpA^n(tAAC-1S5B+Sm6n#~!(&8=QN`s@~ zXRrm{mbWIF=!ash;cd}h6H%Pw)E1d7{e08ZqW?b%*WKZT8wdWQ@M*v;yMbMn04it_ zik22z5ho?&u?aKKctTgRd@3mcUlPWC?@-w_O$j zF@SQkwS(&y*Y*e#LHZ*w;yV@+vE|j&w-m5;HT(I`!|d*A+V0k;_3#9jS_xE@l~NYh z>)LF>Z`mErvE}!xJYdVu&L-Ov{)3wlrS0lgC2D6pOmVp|#VMLj`H#%bLa*d@Wjldj zL?yf;6X>qMC5l(R&7fAzd(g?}6>Yv!E}B zDe?pN^>^=`0DoJs}X(@}m%FeFi0UAB7NQZJ$X&s$m-IOU&zRe=o zne^K;vR`IG4RtjL|5KJC@G{oIaY6Oh;@685R~6Claa7|YrCpbko^8C*YGjB+{Wc84 zJ#g57NcCvg40i2h`r8X_$f;Ju=q^LQ_meLb?O@mh^9!J#V-vUl7P=_5eP34q1!yxg zQ4LMJ>Pjv7QsPW@?M0`Zn-_Xh^?H5Ny9}P_hq$u^E4ZW? zhRtPd(QDOJNnb+?RhN$-lcC2OVf|Djj|%X$l}|A%C6xJ9PEH(@(Wudw!NCKXTGEjk z$Jy;2FWF{vVA$(@~CMqQ{lD(Yt`y>qK4Axrz9)0njJ}*jwp_D$M0t?K- z_1|JOR)uU{;i6D%X>E*YQXfs$bAY+nfLQ{1%v);WFQzO8rwJylFR%cLZfHzleAwJ! z*R=M3veoD%uB2n7uoku0J|lMUdH19#D}Qcpre~97-H=p6s1Q>c z-D7O^WRAD-2Xxe09cy|WjyCM7$aX-p3-5AA^=Jd=AQzYF8gFOyycqR5km7L6V(F}i z3_p@;wT}zjy72k(Frp)D9&RPcXXCEPbW7KJ&5-`nf{6lW#a)Nz>II?;6#M)Q^*JKt zYb*fp)GZpC?%t)LTcBsnGBq8CEAqyuyiTvG{Ek^nKdw#Dze!xec!V+`*5YqpTCmt4lVO8Jw673_F83h zY8lhgoKEYvu;cj}{okKUJ}MqiFKJ?*y^|;Z+{b5lhlA|#QYa!giP9C^l2}4)2{iuZ z3Y1dFSFK6TO7;jDu-AAVYkvlO(N0%n<>jHd54BZtAHx67p1oK8G}MxR%PT`Q^G++? zCAbeM8^M30O(#&nN#UEJ=T;o}J3v0-V~xO`HDCpoMIWG>)PS=(-N{^B1j;h<#wcT% zuY-2#I`+)Pr4&`wuOipuD?k6(O=9)QyGO$YZEGR8z-mgPiiRE2HZ`ABs!^DSJY+vv zOzp7f#w1-xH>bKiFw#cD0`u9dr^;MtnOLCry~MWVb=#FUmT!Ob=24xMb<{o)F_J9dF1A>w z@7N&`%hocSYw;T*`QD_Qs^TDIh@)^nfi(}o-DPl?|Hy%0XgdA*k_}*=7Qg98cfa4= zJKf+XA2#@LXH;2l%)5kbnC}OxQWP_tES2``I4)(p&CcRCM$i;!SZ1iIAZh{k^i#to zpa%;)e>etIxtF&|X^}7shJ}DBF>EU10OzQou56EFS1cq zzV$}2cX#iz_bG0T%dwGNx_rc$aR{}e8@W9}&=8C*yYgr4rf^v5RNy*0k615pPsRhxLb!=uAssO*n-rI>{Zf~}hLN2t+o7)aU@HW-R zRb*?j>6FzWeHCTRXOB;BgRe?MGhEJcH{XcoKPo*)aI$ zJS_EEw%pt~{@i468CZ3**P^TS!pnn)ui_t-V;t?tnJyfaARx_Nf4XQ^|IRZ_*DBB8j^kIj+~f#MB6m?kk%j0>$mcpQM|%IRk|Z$ z((4~9d|+9{jZAGK?ilq%@pWOnvC)mhHm8}@2c zznv>h%sZtt%sWMyN;AWzsT%@jSom~ymlO6<>DlwxhwUNVYq<7i58k|C6W+W*n_+P< zYiw#W2TdWuDq_aih{mG1ZS*fc+vs2BRx`d*BkdSpv8rX|A*W8U{`h>yMWNQ9QK%Z^ z&@42`7C@OQA}Vq*c(0zT%W80FJ~;RfIcQusSiC5Xv?C^v64NJI$I6v~Qg`(pHCRd1 zq<4Kb#=9u~C zYL(WvTK}q@8+-W~50Iy^Jh>XGQ0XT?+E$9HJp8-h(9oz8h7@oB>^Ccr6>xwm>~+v6 z<~z*vW>r3$=|AH$fb}w5F3qfHz3gJCEe8&So;sy0LDw$JgKuA6e}zXCo`6;UsnC2} zQ63+kZUCLD7lsI>){e7)FFM=_t$_&R1oVuZa)n)iKXmhmkwNorCdJ=aH2FZkp1AEa z;W>iZd&bb2oQOGJ9)gGYh@1I#zJF=Y}U7>(@ggI*m3q^cDL2TN>B_ukY2Nt zD~x`lmIj(cWv52%%hzP1u@jgMSqtX|CsH)%3iQG*bBfwV!4l+yqm9* z`4Lw(YYbJ|jqLi}Z1(EdIre%=?GA}S@?`e;X2u6VRysi4z5aLfalqeH4yt6}#6T`R zzjT;eaGWpeMXO5L_Q(iooU)(Quxl5S8Ju}y=+G0HL1UtW?dYM~`e*EqrR;Ck`NQ8h zaVfowDm~wztYwqUt(%VsVo8eTU`S8r3de$i6WY}r&EDR=%l=BO(Pmgs(8>=v9gEiE zu0MW3pLfM#SgB}=`(uJ@@gYt-eh|8#o_xtrk4?}WHO^t>wR5krjC1zqH=U+GK6!B-%oSQ*>v`P z|AG67mCuo7{a)?*4XQ;{Gd8MAlpEPoYBrTW)OkBq-&8BG7Ns=lz6^%+Y1hIK;;ZE? zbNeqgv8R{!y18xhhmVBS+Q|srw%6*=vyoRM-6w_KDp*V zR%>KeuTJjp1H4npEhW3}f`j$S)}8p{fQfg31$XP>8{J>`;PVLmRKstEHuC=Xfi=1W z8(@)K;L)y5Y`lu*2T${2c)S`cl+x6LY1%XcfY0A@X?8O8}Y7WeN5c{KSD*Sp##^1vfi!8sx$~IIgSkaP;=D(~f-mmSw$tYdEae8z!V2a<`I&@4O`ItZe0{5D+7;5M4%4`jYsWaD}e0QSAMS6V!dh;N{1Ny8YmukAQ3) z@blZJPpl?37n_-bk$8ZY@O$JqogHF7{myR8!j^0z6q6t@3#U8&U=HHYkP^hKN-{4( zL>a__ac9qHBk{Q7sUUtlh^)$uoQR0YRb634g0GCp@CWP=51F<=df73lY0$Wi*ax#Z z`>E5z=hXE;@AvmV$W5ugG(C9C*x*j7%>%~ux=i)fEMd?0BtB&?jyx>IhNEA3J*RlM zD=moPOp?r?T~I+}9}ZvQ*SrEO1w(~tcg0VWOn<_z1qUM&McCQeKmtSD$UnSb3oc3Y zmmHeawd*8U4mxHJJbALm6pZH<$su7ALL`{%PEj}9$rZAX9&LZ~9`{X8vtLQ}ds{^N zG#l2sbzD=5XfmW#K#Y&ipupW^w`>vnv~JUbie>E$2ez}|L2xaw(_BE&`AN4E z)HsMfKBY#>t*FaM>_ZM2-7Rno(2>SzYa9PId@Ku;!bUo?UOVkGH^}hq>JbzI8-&_W z6^ zxDL14+W$cIdxn1>Hm`5w+;9pF2!oMtIIG-g*pKYW(W`9VUNiyTNP2J_@~Wn35f;q; zztA96V=d*e|0^BXvJIyhpC11Y}-}K;Y>oB8d zixHjb5rs{+AM%zaPY6H7@@H*SOi$->y+pG8N&hFik z1A5Huf`03Vfm;)t!>~;-1tfhV`xtz*Ck#h*{YwGCWB_`5$99^#7Sq!Dv zQv@U9Z4<6X0+sR4D~zqt#=@zGjitQ%E&Kl0w98}H|8|tZ5s@(b=*@K*m(#DaDern@ zwGW-rt?Sg#_EWltqy_|}v=2#Z8IWe5P5QNCu1zafwyI(Mirkqqb60H0t6H|)v}K+N{~o)~$#0;Kdmr{|&+%i5>xV+SUq6t?Krn zdi+@x+*inrdOYS4?D8;2K)-a8=b_fpu4CsFgSFPn%!}}b%^*@MMeYKF>GF{jL zpgu8ZrrEU`I> zt<_GaR&Fr=M5i~wurdW|;3m6plgtzS?^GD|R-i_O0Y91E%N?^icAwa`!@@y-(ocrf z+O5VL8(+_CeuGVa{)R0$Cv|Tb-Kg2{px}5vm~V3Us9a+FT-G{n#lBv9*sDb=5EZUS zj_G*>sc^`#Vp2?cLAQ)9%3-5>SvsT&vD_D`2s^P!nwG~86jxx3Y(ZOvXHYob@u3K= z78b$TYM2fm3dZuvMsZ{nY+Fg*4hCKBLoWUvMzuE+{5x&{c4O64m1{L}84* zEOO`tI(-#5#>97XXZ{=uv%Wsw&}l8;OPH@Yjpwks;CqSM{QClkX`Pu9zL#>~-yfsJ z8$=DIHRD7L^Hdula+ImSa{$Y&Hv@J}r!8BNe; zThwXo#NQ~Qshptc3ZDNip4+(d=YaL-E{HbR2JnR}D*t!=46`a4zhXiTqX0dQZGq}W zj{Yzi%ivAJA%!Z?Qiuyr?(nR~at?$@)f?<&POmjEyR`A`6z&;PCos8<{3|PMI2*WV z&`i>9&iOlY`Z(63MR2nbAp(tdOUgNpS{@CdPDr0_iGrr^UJ(F?D&_ka@EUq;#V%-%6}w1 z#Bf$|R=8upx*B%@!Z`^y07|#q*Z{Y@!P(h^qnEZxL@<;D?X*vi7RC-*uwYQ@q(E>6 z1?ZN8Q_k9&T&L02l%b{af&o=~s4EX7TUkg2Q5;O-+@Bs-7&y|s=%q`e2WJN+QwwJ9 zMvHaj3k&`9NIOj}*!%~uyr5uLQ^A9P0DOW8;3NR0yg-DZDwt{o`jMa>fEODZxf(w* z<>x-7CCR?g(DuzDeH!*{+&J2wfQ&jo4fkIl|2?5IBHBi}pO4MP`C4o=PTATdN(r?# zoJsen86M%=xO;uC$iOR9a%@KK&g5NF8o5TKcdKQLDpiM#O$>tq_Hw6T=q3K1kmE(ma&i6&_5#=^ zf5qYus@<>ifIhzceZFDwt{I{IT-nT6YOSmKHJ@uPI6c0u=fWOM3)wt2ch}B8JJ;)( z(5a@ZHRKiJG$&>|dSg^&HW$rXdekvy;Zae3W=IYd-SB z%UW4G>MZ!V1&-My$#Ci#-3rYb(5T;rSmu1~lHz9@Tc zG<9R^(BEMu;`xnzFf@eYMkW!LqdLqm=xTo026Jt7sF;ufxUWfpxE1FTocOTKlaen| z+3b|$noZZ@rdhXa_U>Zxq|G16V{Ox#$tihvXohV6Fl+vS(@$e7vuvNF?)jSFsYCtp zs#K1BdV2qY?;rUOnHrq0>7L{xZKAC#6cnKuN_RBZM3KJ@B8Tvir$Ft&T(N{qs!oCq zoThl#2--yGFiw%uebeORi|o%uf+X@VTv5WP2P+cR*R|+B9#f~E5KLtGpQ|z_H!M-oZt?Zu@i#UNAc|ghDq_Tqc~)hp zyHwBFr(1o5P2cyLea^^dQ~$=DqvH&e@GkM*?#A)W?y@I4lCyl|29q;}W_M`5(7197 zl+TCMfa=o+8hm0S>h)p|j9r7dSkCe_KKa&|c02_ea-Kp}kta!{G%)4yLY`?N#mkfuR+y(@Q63BvUQQ!Z%51i; zL^X3~r1<3Dr3yGXvBg^9Al6@gu!jSSzR(+RyePwjE&i9+K?fhmw&v-5bzOaPW7Kaf zn1ACMHNy1bYB@E8zOq$ZGpExW%fAUP*^Ag5a7>jemKe~D-I%k4jf)zg#EPF;3Vf=! zvn2Z6PG_ZH8(}AtH)&1(D?wY?*%uRtCcGfet((b1{hOWNoN{$V4+8M$(~8wNPbM6! zn#*O*P?huN*~2sB_+?Mg-}d8QkyaWB|OT%vH|)p)Y%zViC094fIGN3%I= z+22d#w-?C%!j~HaU(RP2E>QV1@;fB3$B={-**T@XSp?=DN7|Fp-WbdJNOR31KE|5Q zg@9{ljFrn;%oWcu$KsnB(n@JA>%*(T!-GYOK)Y^%9Cy@-9fPQxD*=xY$oZqZ6p0m_%60)bCsES zaVY4C2I%9$g2em$uvUNwd0}*q;!wbyZKRz!ljUtQ)}{6V}Gs-}QBezHM(7;kkb$U}Ryk94h(5@t$yLVJL9;wj-g1>FBZn;|8eMd1hy zYa~~T0duvp`Jrv9|0OR!(q=sFb9B9TeAh!MPmsB%wxZ;YNrBA%LTTbI;hvIv+msfU z+z?g#ai3pueBy%-Wj+DT{gAn#*bVj3@xh&<+@)h;Mu~|)$JkH6=-ic^kQdJoMuP7L z`hqUKwlCa9_znuxDMQVokd6fk>AmTrNCzQG4UxZ(Nbf`MMS5peQK>?JUTFL0=YHWO z^k5aG`owpdz?y&IbZk_vN=sEb!XYv@wx;zt%2m0p;VQD@p;jvjjur(+O9Ms0NY@W3 zOn1?WbPyEHvEAx>=D+^qIr6F4Z*8=m%lEG;_lFiNEoHlNXg#m~tI7w9$_M|Wa-Qy@ z73rvauqd1~W0m<*u&G7RtRF|x*$8F6JjgH~h2o)tfYV^%P*Lbmi4O+c0KiI0)2TcM ziTlHqiyMi(th~LY>EyLK0HcD^~&$WXKpX=4 zAV1y{bmO;Dg{NztO51hkbtnnV0P>dqukZoKTXbE#5oda%x_Dy_(q~Y4Z0zHR_Z4cC z4$?D7L{L=l9q;M1BgFSb$bSzyj82;*w)N|!(b9Hh90nC?k`{3qlro?JyK_;uD^ix= zo%`xLm>iO3iRO;{TAPEl+MGKf!2F4&*^}hg2#Fbsvx*Fs!M>xpcciZ6qzL2Oa#B~k zGzKqSDtIZGfIq;hW#c#o*tW|ombIV*G?#sMM~W>6;Mh51PB~t&=8kTwHV5p5tsTr5 zEgcnXMOnHPB7KZVA0uI)q67cZSm+k%263`r$Fd}E8yB+tOPgb8S*DD}TN*$ojVsWUzchiU zCJsU!ovu1z06>Mxw3hr;Z4Un!I+rdjZwLfVZY!;z2)5*uZ3Ej=jDrWhdOsOb7_`+8n&hCd#$h3hFOjMyOm~eI8ZN&DM5D_1L^{Hyyru=V=$@#%LGF zr)d^0Rt)98ks(jxr<<+w5Lx+LzydCtUQo)@D)`OydZ50j^T;iQI~j^z=43{pnH)@r zdIp$YlZ-US&`+Ba#R-)xXbu|!Hhz@ibn_MN5+lT)ZhmfrBEyk=4#>TvX`wryt7j_4 zT&JC#*OclgNAjAoUzHsdFlrh1jfjKX-!C-S;^o3U? zT^h1z(U91M3u9ZSv|1dCKje>GK`?05)FF$MgjUIIVizok9kK|es{Hp86oD(e2RIA) zNAMq=7fEwe?zg5PY!2Hme>7O2EtfU>bo;gYaF`0fYd91~ZbcEh1y4t8DV$)g5a(oi z`ae9oLNTYN_Fvw|w~uR^_B5D=oSoit?a*c|T-&xMHt+xNP)Pk2`Q72as+uk z%3c_6XOIFzyLjso7RCcQzO%?e$^o87b3`{^-xMiR3d<=4da&`+PBo=KR_XTRc1FE+ znknV1v_*GR8;X?aNIAx5D`H11RyvB&BA`PYpQ~M**F{;+9w{APy^3Y_1dTjDpDogM z#!Hw4eR-D7x$D^?ib4@XU~PRb)-cQ@f74J?${_&Xwp>_>Iam$X3?kS$-c3Sy93w8p z;Tf5tp$X z*Cx$r-P(8*IFmS9kJ~;zSh0_K>*2-@mZl|Z2TVaXUzcXUUEwY~yu7YNUX7MfIa1UbYWo2%M5?yz=(;kD48ke@t> zXc;c<2s++C-JZdMq)4M_KuBtf!1T~}XX-X==sJvSSKXa&vzFbvGjik|saAn<>oj@tfB~QMd5I%9Wyk z&!PbE_zwgfuVvP&Y1q?U@Q$jn5$^A^X4a?8`~nhMSNgDLO^(nvFDQK=NVF0 z0}wX)_HA5dS?ED`C{(%`wIMEI6IiI|_i5 z?f=k9eI2xN(!*J0s7dLBV6~OO$)(w`GIJjDRvPdAe`;m(jsXdQ0r6<8Xk}ij|5vRn z7?sv=bmG1Yd`w~!P<%xGPopuLdM7Vfl>YpTYs(g{!~DJ-hPTs6br6>|s-DzV+-~9zj}B{~SVbTM4@e9Ter#x?++j~Qt;^ZOp0K*- zDf@ixit{X7nx=J-9sq}P&4~X^pB2Uk$!G0aOw%}RdEHVobFiZhOv+v;8!NDf2pxk7 z>Vjp?#hDw-Y@Eaa4;DdF6wMl_)I+5Me^}D?xto9UY~t3mdV{cuagw}c+Ke^7)u~t0 z7qQ!2Ler+Np>pTvuqT^x)@@=>XP?)W9~bLXyK=RPj`|XooaCPXI;9em^JL=OrW%3OJWXPl3}?HACZ`R&_L3p;jP z81*k5j{&f@eZ%oSp=(2@c2Dk})gD72Lu;>lWri)aAmN_`XbW^QJ13#^aLX?6WF9)* zw*=7R1N-(IShY!i$ULZJr?9Zj0jF3)&CMK$x-@I8^Jm)Ia zlrd(dpbJ(Nqwp)M&bMLyrK~BBCrx@hWy+&TlO9cJ(AmSIa|2KO?xIwi^w{()>+vLN zXiCS^F7Bx0qr69%u78I!WLH$e5puBh0KE*Ra?3eyp*0WBthUk16NUsxLD&@F`qH6u z&*(27PVRqPx*{u6uGxk3gwW1D$sNi&ted@I_n)7X6?84EcVKhNsk;vyV4)2&TGSmz zr&jcA;_dGdRBctj$RDR=uLcR{;*AofAg1di)7H zR-svoZ%MSZ+02wj>?9W1Mvv$j3|hLmhW_iwY2O}lTF*74&wT5-7=>`ZDYX#1S7^;5 ze8GK#GwF}V)Cf!T$;Za36fb?2mr(3_c6ZM{c6Xf--a4X~MJ!Th3nipEzeCW!n6H-| z{5)`qrw5MJj{9Ll1K}a0ao*>xI(x`CG~?hMZxIwyvE`RIxYTgwrwO)pT3atKZ4T>3 z5j|^$do}Jw?QoDm`^IuM$_Q}w=qL)YcQKc+u z*t>)~jwxZmZ}5oHJhE7#eTxzAr|ASXKz?vB&d)(i5I<6pQTvZ*Aia0<>8 zz6|iWqSKnrL%4b^%HgLa63e`?!Oyy4nbK9tM3T#aJ>>RN^qxPn#{Ih9ue^O}%SzV1 z>u+Z6Vpo0|xckq6{zICFXSHy0Emg+9WaHW4&4>8w9{UYx(J;Dub*si@EM2QMof_U^ zh@bXt+xR9{70Q;iFVl1BR(5migcsZUw;tkSQ?aad1#7QiL0hQ$_RJSMqKv7{qMG@+RZJngeOIQs|ac*XAM5uwQBm#>{ILk6X~S8P8}yQFEm>DLlVSFJ?N9XsSPJsTSe)PJYk{nX~F!&z#!i)9U16H&42 zydFb;8noY~i6gqn$foLdm^K7ui#Fl}2M%%huYSjuT^w&Oa(LecI$-D#hGLK+{ zNiyrh_l^N&HI9Xzd)}5(F|R!vTzr3qz4sgJX;aCgK?HYg@*{iC5zU<(eBAp+*sure zu6apJWs9h2U2oikW>wmfEz;>i+o4^zF_nJ?Dcp(#JBmNws>s%Mj>N@*ya#inhw(l8 zwb$*6xJhvCC8;h|(e3)|DjSRvlMTFSjC=ED0071JC6SCf@2zf^!cyHI&PBQ z89@nwQ2Q9GvyU|##x2#i(f}E}MGk9zpvpIaJ5RsK9<6FKwqHY{zAO6%XZAyA{XT12 zBLBeLlIgdo>grWIqsX?J{eCN*wl<6$AJlJE1kPOgjSY%i-50|u5{-j_4SeR}77gPk zSMZXPxv4BtYD&?AVeqII#CFZaY0ORFGo^;c6Kp#~t%hYAqm5nIdg>yrm$E6^pfPaK z*Fb(He>5uzZ=(9(mau_96yXTpMyyuc`9`P!xaG)6r^A^ARtrcnar94f1}yKb<^L9Zc*xBkI4-C38l^rv4_}!Et`=)w#e&*s^ZGeSkNk#jemm3a}H2vkbN|Jd;=$_TpRYe81ivt(2OK`G* zu;8MA>nNB#{VBxEvdNI{@xLU-A5Q8x)E@yv`}Jtnv3AeCO*__6G}?}=Ql+4V!=LZi z@-oS@Ri%lNCVgtl|5$m;sADHf zwhe3)Ubk+Tk6-%|)Wj@Lel-EQ-J1!&Z)+CPB(ZbXB;PjvJ074p&C#6jg68;xkE#GH zI7YIA_DHH~U;>mW;cQ=-vQ36|AMr~<(vi3xLmQVZK|$<5-<}b@>U3=C+X+pYXxFMy z;)`uNo)7m4sz6T+8`Hj@6(5q^+%MVGAXhZV>8l1ok8|`afUDb?bPhP|C{p06=Oafw zSvujtB*SXSv378SMxDQthIFmoyg_O5uF7)dSEFC7S@|Y&(DOqbFVt)0;ucivY`@-C zZm#9l{fGvZRW#CDb8Z8(Mun)v8YlDIhNV|EI7{iEF>Lhxw-KD z^4q$>*8KnB?LEMvI-@IREI2(DK$tCsNNkGQL&sQZ@k@u~-WjyH33uS(hR$ z^IlKt*e#(`U{v+aLgv~5-sPKzMlCBF?3r|T^S0mnHVSi`Uhr|`ruM?(kpl*d5AN5Z z&sZae(hT!v;!uoE_5aSHG_kHSHD~!za42D6J!Bu{XLXeFF)HKSA!UTn%)p{>CdrJ2 zLj6xB342mXE@F~|!k^)2dLN3GG8kH**B(`>xEkD(`+TiI)`djeIww>uEn3=}g}AK? zO-l=Hk&*(#vKNOps_|k>{5++BiJ_srIQJ!T?yDdAX5hlXfiWvZ9zxayuhL|CJyISq zJzKP*=1@CmL|@+{2i2t!oh(s#Pp#Eax=m!|YlW%KfQ=(tP!YsaL7=dVYcoT#I?9kH zr(i-2yV%I!IsSvsD;iFF+XV1?E;CcR%`0!|x~}(x19W?bx1vGDOw;v0U??$NlFGnP7R?qT1`(*{e|9lw zzVgM;p)Xdhcs6X9u){8B;*LPQ*-aEmp_0C)o)p0I#msx5Ii8fRaR3@g|IZlYT8ol zu^I0Prs+2rz_H10Vo`2Hn_A5)cDJunF)Wo$@b)g<%ax&T%}S-TQ!Zml{V*2DW(a=blO6QUIeU^LiGK?WqItwe2*-=u-zQ_!U0~QEb`42b-SCQ1F z&q=${7UN08B#Ru<7G{_0=a-((#$TC*z}a(!WW7oVR+yTGE1-2z4HNt_?`Eig@fu{r zri~JW#Xh`5^{;(F$aF9xYFo3$j#34sxv;NbaW3-=%~sPR11ga|5W8SS zF^%#B@&MxN6uk7El~kt$H!ZQct-RLK517FA;zQ}W_AanzM%nO72A-3D!e4{o82pete0XwF&M@&I^!w`KUnt#2f1&3QqOttuANOwFym$W=;L{z4 z-WlyV1JCQKwyg@{H$g)mz_nF%pt@`;aXeArjf^oE!&qR!WIH|vqbGLdck#w`$e=`` zVHQtWEp66pcra(}_2p0eWJX2dO+*0P5M z{R4Hk6W>a+QFkpqz9#W0>syh~8`hIXDJrhy%#?`M-Xc99OnfnY*4^ycy{4_4`dNJ2Wka7jo(&uLgy@1jy}xf*JAG~E_!ZsKMp#)` zPR+_#+ZCf6f&N{?K$r}cAU|Rgqvi%n5kj5EW9cc;i&|@lzjTmTiUJ-NuhIDWLxX@-jtGjv&OX(kvzY9p)-#_OBGhYlxb1SruU~bOGjcJc_^?oDA z_jOxeOM-A07xGfht?338tTk7OLpi#=Ongw*IMLF3XWG!C8DrnA@=vJm-TC{5o&05s zLE_tn6aU!$m{gf?YiX_O^T$NAP2SUg?CCy4TQj0=-Bz`}Yf+~W^NtvV@pCpTq)5K5 zZOLN6T^TO^rrgFt+G0WM=yQD-$WR3Eo{!nCh|6_D!%%_d8I67z?PGImnqtnXe^Dp2 z`@$`=Mc;45$4RS4q>awGKW+N`5u=l{woJ`m>K|9nJFY>)7_X#GaEufe<{4JKi}<$V zvR=J6*l2BMb?-hmCT2eDzHGIn)@CLzjmxjputtqQSJ%KA0Zj#UMc=9o0xSBuH)xC@ zjs&V3FvQNxe^HPp^A2k`a*PswBMszIH)h`hoESe3XNf{a>d&jXby#|3=*)ZLN|9Ff zotqCDW#PReb?C7^WB**~-_^HooPXzrYV*O`M~x=F-m&rH((s<^d)4$ML=&5}9yWmB4|c^kEa-G%j2rV;;;{vpjWL+J5oQ{>7- zAWPSW!U%rbvXyi@eH*%-EJYPngzLgkLlr?~1g4zLo{OL$>`+=5I(a%hjymw4_)niK zS1zPo*SCPAtQDkAtx4(7^)vxhToCSyG9m=xj*QcgxvH_fAk=^VUbrtWqJ;&Cv=Esp z3HOBXl`ObeD&@}-jWK+RPngfKwPR%Ai<;p zW$H%@)I+2$GBX+D?3vU>?=Q~){dYt?i=|~!jD}fg8*yU7uEpYheKT>t97oE~SF{=X z#DkkRog{t~HsQeyMhCiOfb^hKr7ZCSAP0?*06Iyk#Pb|7LV}SelIJ=6Ri2tW&k-ZU zhAtD{NDWcXQBx_!PKx1qju{~dbeYtQ*K^zmiN=ZXlaz>3Ck&9npCOmq#~~-bD%Fpd zI`suYws6SlFAzC}w{_+VL~6_-XN?fnuLutL*$C;OI7?X^a?S_|1|*V0&VQ*#tcF)# zjrxKS;)i+&&-05BQi0A8_KUNS2Z|nR!47rCM%X8k!vURp zwg~G)9}?;Gg%2T| zMV`L@i+}K*d26spyw&l|+GO-hm@y-)bKB6MM2X&$MqC*=`gr=_?ql+Df3u05)1_K1 z-@3K@AJ?y4vwq!b@iW@BpB59FWo2P8s%OINC=6;dsG`N8_ndtg=mV!IjD4_I`!IXw zX5_E)1L$Mn5e<|`g|+X5b+Cq9YyQ{T*S&>Dd{nxi2UaK!*5MyLFt85xE?*z#g6FtP zgG5qQo7O0zSFiSUdX=a7{$d&BX<1F>oR*n85(i(miJjZIhG(nq{bQY->IkhrA9D9f zSew*$3wvy6hQ{hZX`>RJFVP$~J7edrk#R6yaX5!nv?Op-a1dH_+A}9^^1GQoDdp%D zyN-ToBP=|Zb?&ph*Wf!d+Vo3l=NVbw+_Jw-y+K!&UoISQFwfN`H#N9v=T#|LJ9@s2 z4*I^mTR=76WK38iEP_3TwZaU9@ia)Lk~hi$aVWJFzqj~I^#?)ETL90BnAVEG6YtJ! zVE&U)z*=IbF!+QoOW9}ouft}g#rN%dX4J@2efxJ#nKSI})CLjNdW3nmt=%y;s9o!( z&BG&X+Dz$`GQ&!14I9Vt5fS5I<7ln5o{`*XN}I>!>bW*(TB*K=PknOM)3aXv`t>~7 z!&plo=*0(;J&bYoz@R*2T!4lf66X#a|IQuM?Yw6;8_AC$?)CzP#*Gp=!Y4@vbhTlZyt^qv?14G1VJa@q(f`#RIf-3U>;e zjtP)|P+xTpvDM|U=Nuey;dFu2UKB8a5NpxxfV838h0(%$Kpka7Y*AvEq=jMR`_8bwqZpEN6r?Ld|=49&C7Css&0_(OGR!4-o_W+; z*eUi01Z<^_g#~a1#Gga3;y5H+1o6{Cg^7)Z#Kxx$Za|~8(86J(!6CQ`h`;hY7!3{y z10U$ZAs7t~X$E#Tj+eq{a0qxz$%;cT8iqW8)X_$vW{d`hG(ydLcpi)fhqOSRio9lw z28Xl+#EX~0XhKDojkRqt2NKeG)n)Ze|OkS?0h#mE-#g1~9&!6eI{Crd}Ps|o}YWH#`)0;7w z2Cq$^48pw8xx^tLIk0hZWBMX*s9g3IX*#OzZTe_%5w@E$}m415+NSO{IEQj9}Wo8AuUjE`cZM(eT|owuqf)D06>iY}sBI6i zN@YCTG*&gisx>_);Qq(OOYT*1*TMUX#r>GX?p=3h=FB<;%F zdB3EQ#v~v*27xXc#YHvNEg%^eXU)Hy2D`E=bLU=6B|*aX?P9+dgoYiX8r?AvPLh*0 z{Ce)lYy4O4^%rS@S(#1JnhYE$K1s{DHj*XeTpgZs^+j5fOr9_}KajtjYtW^~7WKdC zQd?D5_T0tHV*dqg_5X!l+mZp7CJg;486G2l8am<909cc^ZxI?P2vN;jv?t?J_79o} zAnAW`!jPX*h>FCtXwhB}V#AuX|LpQV8Sx20j(SQ?KTLr)yuA2q48p< zey;=(u%0Wm2uJ=)zzs4JQ24=Oiq;Z_5V)~3@+w8+w??hkv?uXA{guVaZ=`=Trh6B@ zvZ&3|Ar;`|Tl4ZSG&a0E(#=nPBV8w-An__9SV56|yq2jaL%QsO?`IJtx3@#CL@(^4?^`%&&ZqV^)_BZ?B$UU`SG1w+eT0=^!d zok_E1^-7vKQ{FKlA%4Py_=E`<*f;VDak5!0Yzv(I$j%vgqkNL-5a5Pk&>#>3I?e0Y zabBm+^Wx&>b^bmw@_YZND0xNf%not0I&_#7*I{PtPi_6`N5O$leZO{mnD=6s$M9ix z^aC>oJ0T(G6+T$qJp20RSl2S z{BPl8BQhsn(URe@F(dH45z{_LoG`Rw)Nm}SsE$K58^}j$9^EQ~X?CZ#ipWT7(<%iw z2ok9ziFv>V?<_sNxQdeGf)28P@8scen~c#28+DC-6ei3O#rU4uIGYiPi*}s}XxuQw z3cVSi{4897$1m{D7$vB_a<`_?B*FZ!)j*z)-&e`rF{TB{?b-*VrDmmCWqjSUl%Mm4 zM{UY;8D6zLr1GWIFYG-~nY)rLbT90}b`vwwbI&0MUcwvhQ(C^TP=VLt!oAwDl17d# zsLOZ^-32&pY;8Ukyix3Da4q02Vn3e}Fx9%z@)TtT-*^0>NuNcW=xCau4PH|3$=4bdIxRTq1Ueu1*hUhtQ#Y{ z(?wADVGEoG3^iTGbz=!B|LzUkG~hv{Q(AgQ+5Nz~cL$mzrv$4=K^OTqWw)7{ORF#MPXyPQ5wxC&>>UlK!-wyon4czjv=49ggDB@;;iQ?S$f8 z@;9&%DHtbzREBHM0@6+Qi>e7AIS>q2GIIx{yKZ`+PDPYP>g2-8+5v16Hi0}{;}IbG zJh1giiutWlwQ`o)0eN?KEpOAe<)FMnQ&C<}epV7x!%@DMZVE%OAYSRG?1ri_Tdgiw zt@dSbRpr~!qhJ#0VcT{rq*H|!jatSf*~D6=WGy^IEbI8ysU-p9^2&C4yO7n^Ip6DJ z0h=-93GIO(-`0>YaB~DVBWY2pVxES-guA>)M$*zXWAL#)e;f`@>s?r=FRg5#T3%DP zg1C>LfY&_5Txp6JdgiE!OR~6;tkSem7w_L{1s{!#+qS?jIb>mWChSp%qjV}td&onT zbo5G=hjwSo;%6%(0KBgid-g zZrqbep_8ACCEDDK(DV@_(nB+HL40QwKE``4^JTLcJ=CZ|rQ7^oFbmkaX|0Oj{pg?57SgvD`j5ClEG8WzK}QHF*wOAx z`WRwP`zD`_7PYNT5}Rqw+7G%)%EExB?A1X>>DKFFIXCJb64_ST(K(FfkV&CX5g`tR zsb&7Gb3}C=rI3$#~p_0fY%R{Y%jv2+flB=7*9rbvVb77V2N=Uy>H^ zqC8iq!#-8KCXVfY)nxwpFD*$kn^aOw1PoQGS&FgW3>Wa2>S%-r?4aAJ4p-I^L9(As zR6+-Yzlp_!yu?tUh}DL_7cra7ihS&EHpx_kAbU27sZ2$j{?STV-pcPg%NDirbrG=$ zv7#=*l8q2HlPDN^e^#{QeRLvqB8{qLp2u?LBeT4cY>q~vN!z*oMx;28BSP;=P`p` z>~Le-!%PjA9B1^c#2rMSW}33lwGhM|`c?>`^Xc<5^2tlwA?|>KLo@OTrgyFMt?-=r z7qu`{RJuk<6|xVBF?&W=ed=|Zd^KlEinx}jGKa#K zX3koB$Pwq`T*@&(tl~Lj!54^=ArDSDQyya}Na;)vW2wbPNIYsz;q@$G5KIFgRvWbT ze771-8Z!`Ekf0)ZsKvK}mnIqtWKhJ(P|31l)h_=6Vb!7wD~u2aRV(b-9e}L;0>NTt zkaZ@A0U1Ene}R;)!RrA#$PtD^E;Aqb7#p(+EVgvF#h1jdz#6@3%XzJjx2k0cSwjD0eM5zmFa#K;|HZ5;Ht2qFvr3Ss~GHl zqzhSL-b;60tNMgdQmq1qVXn<#DVZ<K#nPVGyVeXZ#3v&C|bs1PQRB>&#SOUTp># z{PGMCq6PMvYqH;Er12ZZxoYjd*r7VFBHy;5#qfNo*W=qY|HJI}UmGfJ)>~rJ-!R`L z1Z&3(R!{7%nEV zXgRy`c;MWnJXGbNCMkq2TD5ACI){DgE=u>yT3VJZaCWq^Dgq*jq**zBNm7YLO)$lD zSF8Y_!jz`}ts$~sUXY(SrG(bhUFd;=C;!*m{865t-)nLSZHiCm0j0~ow21(s^sq$* zGbSkmsSqqG=uYeQszW7}?yx#g9jL-JrznHb`&p2gwe~w@ud-EWqppwNdxcPalCqV5 z4>Z8#w+t$@(H&+`A=CgBLh+r$u_nK+7A?!BmPJ4PDg8k)*o1-Zu=u_HnEn_R$=5{; zA<9^stI8a4wV#K^Ok|%`!Q6iNCA{Pqv{AO+zkg4>W&+0^MG{(yw8)wW0nDOq>{)Y{i|9|L=)aHMMKb*f5-Z$@~t%+UDXd!VIO2fENa&+XMcrZm=8ed4@ z+}+^}n6OWonNcn)&<|U4FQ5~a%#z0~Qtnfmjh7pTXVe7N2i zbFy0(&WoY~^+*$8E@`6l`%;pWVdaG>AZzE9N!aZxS z5^2Ifom22Zn5!fkYE}A@CZs8O!?2>Z`W!d~Z$zX6a5?fun4`=mB>Izws zgA3%oOgPSs+U)I2Ur^4$fuJqn{g~UixpzkG-#_XO`#tvdsB0r{k72;uWA^MZ{2p_A z2(^RFWG;gn|LNw%M_*=IX84Rs^3Jb1dLF9{@ zG^ey>Oq{Ha7K**ZUbt;65I4biv6p^6Efkp9Y(8Nb8C!vs&9r3A5ZnHw&hJYBnHy*p zRQqXlzZg3XCD09yj@f6NTvdR~ zzu_UWyXSwjAFtFFF0+CDkA{^$grmaIe>R`M`_5yN*}?;jy=f5Oi5;$KY+3WH%S)ER zLq_Jcu`jpvGSi>kt{newD01$xJu-T8t%p0tI zA&^Pn+n>!nE=+c|_>rFJWl^We&abA9*DX_e%b)f7!Fs(oRu4raBR2{sr{{3(Pa{&n zG$M&nh)uPje3iY#C_4-**v7IH%LZ!IPnmy%<*2t1&a-zjBNA+l9p;_2x7dbP3vNS?J zxBv~Xj{*||UEpo3Pj5t6Q0*m^w5Q=KU*wdR?H=JLt^Dbuq?NR!5<*`E2@j=81rO0T z2h~Ay7Gy?1Rz^Bi@F2_#r1{dvr}&JmftMP0cn<5UA1IDG$fjDKOS0*BCe;!lL!gM{ z_>YRduI6u5{G&JumIVgi6=48JaL^nuw6EzPT>kh6d_K+6xF2Nm{1ca>nc7nU@jxTu zc%R~ElYgQt{PYFif&jT;KCCa%qzX-bDT|9L%CVoXn-qRxZR&DaAvlsVG+P!2*+EkGM^Zhb52_I;7;F`)=vk}(4 zhck&p^+T8iVSIJNnfqEnGB*0pvW6jIjjA^Zmp|vK9}0=2A3^gNBUVPyv+`J5I9cVk z+IC;2H?pW*R{T6`te~TKLg_}bl?3sGI!Cyy)P{@hSVYxaB`?d57vtIAtg6DJsH)7D zs?hhU#y+sR#HpV9LXB^`H1mrPo)kBsGxo zR6q1ziWfCOYOgY6hgP>0s+?o2G6j|WX{vG+`gB2m*doFrkl!m9cm1!oPwKvI>(+G^ z7un|rSBsZcrAk?Su(!0a(H|}X*Il=j)V8s*cwt?tl=TM(E1Rzd*8}dz6ET!u2H7<1 z9;!g;yAo1DMfL>ytum2Pvl3FeNZ*%`GG2-(A!U--yM&Zw;@}cej>}AO?;E%gjZ{Jz z*qCi9p^SqxvxF2EVOj|()x{Mhqy&g1^py0M0!t_}L<}z>WvIkd6Tj8d2@=-*H&f<{ zFG@&RDXu9Yl*6#M)ZQE1^s&@sAQxY{ZWxq}Y}?2BoFbC6uuPvHNyU z%ZRH>NU<07C8Rh=RZ2*yraoChN=*q*(BB;EUw`sm@>D-lzAnk$QyB0`DRb$O+t?nQnm^utQ~om5LiN)gTi`M*0)AfJ|vt& z$muV;(R7f0q5k|p#kue$CD2Giil>;UfAN$^aT~|2c#4Vo7f%^4bt|EaiTW2WvrHUU zLKzeFFIEQBKlj^ZK>e4Mkm4YXC?Ul}{foC_qW;BGOw_-4N`J|{gmz5Szj&FUh(*9w zRq+%P^)H@cqW;BGOw_-4ii!FcPcc#d;wdKTUp&P`{fnoVsDH7PBI;i}#YFv!rL+FWFBbl(_JwTb!{ugyw)SV9?Vsf0DEHc|iLwb_VJ6#ga#ChA|jjEVXe zPq7o3slm7UW1{}W%b2Kt@e~vFFP>te{>4*F)W3L&iTW2$F;V~GDJJS)JjF!)i>H{V zfAJI(^)H@cqW;BGOw_-4ii!FcODUrM#Zyewzj%s?`WH_zQUBs8jQaQa)@&D1e_jUn zG6)jni@2Lw!+$8k>bkIhreGZG8I9ZXxhzx<)MpcG9m)LpXF6F&-xKS!*{wFMpzk3P z%b(A%d@(aRgi_^^?!`_0GMfqJc(k%~L>W~kDT7wo~$5P?`TiYc3^Iu`#9d^P}| z-?Wkep9Gg8e~b(-+!(pHO9wBgUrIVU`P?~@sUwd1-s&t`fj(coxz*f^O{DgT6U1W` zX-OvL=Lj|C_iH_>6)Ii~ZMElcWm!(;gWDl0X2BG=PeG%~C-)-YqIR)IBgTlK(5QuK zA`{5Lb(;#F;5Qzlr*{#sx;Ew%qkdflyq4($QFB~eG4x4N(>N6nULil4S9w0-?PsR=KS~Bq5a>e8Yb`2&aR|9W_HYmb{nyZR#*=Roj%q zxqk@``U-NOGU!L5UEg}>GrIS}TRQO7xup5g^PXgmx;&J0CP!_^0tDi`SElrwhxD&; z+vu^sCLJQtz=XGK4n9~f1I{0HGIxL-^YOc9V zM=AyM{8Q5DWmdyJaDtiMX6)D{Nm+T-+6C?>sxi6B{;TxRheLOXlRWsv%7=71eYLGB z8Ts9W-FHVM#8+fn0D6-A%d4He9PDhiQPN< zG^*_EKcFFfNRMg*^M8zJ0}nTIENw^`BFZ6#YAt0}EyQPRXKCanTp$7-UXA9Urs-hL zD1A4fw-RN@Z*`jIuWrb%RpYm)8lxOHdyNg@fB|G%!WPjquyowvRQLx$uaDToQhxb*ZxuDgCUkQ$M#;u8t%>iz!+*WiTznu{ptnTz6GDhy2hP>-ih?NRB73A^&l?O^W~zp#4@n~i zh((l|kIz^|5cwH@(HmlXf6%<>F zW{??5Z4*s}@`Hh@qW{xC#NK1kpbr%n z=m2eCON6>=)!KOcz#b>?hH(;7Va)Wl#j-5b1A6W8i1i4r@ zF0k*oM*57&whhO<|{Wk?uQ?Ma=H0XX(Ly)7H1cd> zcE<>cTc{F4Ni%NrfMq1e1ojYRd`q$?e4sO2Ry0U?ARHmx)X&JP&o$N0bY(SHp&ke#Y-S|mDU6Ieh)hI9R4k_P&zcYXVbIRO zp|l2j*+`Zl%y#p$Lx5a+gl6X?4-`*S9*ns^o{)od`>hT1{?)9Vq&}JTu;!SzKc$fd zL%OxjZVIiEM5g=K_zZ%p-=de6rd%L(j&~peSwyP;;6QWj6Zg|QS4XETj1K7EuHD2; zNbUo0cr`J0s~l652*Umr3DLL`Vq6-gwPN&gWqg#DJOxWZtsguJjyJ5r^-6s*Y7Kq4 zdKD?NZXGGJdKG=Su0coN0nrUR`ecezrI7q6vPLZzY<#V5^4Vq?v0Al~*sNMc->wC7 zxtxrz+o?(Sl)4>*d!}G)ZWsP8?|{Vt=&b3uGB`m7Dke7?Uz{QP;dGF9_^hQb?>?r> z&m199cW;meyX|T1GJ}V792OKZA+cj(!*cY#SYO#tzklm>r26su$BD=4j6V)^ZqYm^ z>QQ8FOO1`ycv1)R{I2kK&2!lJms0tnbr&CZcyDoVgiQn6Aa=&X^S`h;Ku1FT?TK%U zXGOot9TJF@FR;7wm@Ykam_*&XPU`PP02cc}gF6im44Kd?uBU%F`kQ$5!k&bN&-ok!bMHkq5UxOsA7QYGbvte{9uDdHP|(dRkN1q93Nd$Xqh(>Z&gmMQa(3 zl5dP9c{w{)=8b;q9$JkIpcBaesUs_Z$zV5!ZZfnrcmptaK@%{3k-O1G$`fnqK_&=c zwz5j660R#XWR?D%SPF0WGqA4SV+swZl`?Q1F1D;0h93W6>&xI&4a?jXDiVBYna+7Y ztOf0R{p=mIx>QE75mOPLIB!?SzO@0;{B z?#dO`51|(O)Rj3&+TV1(N!r8IR7)pXTcvDCbWYvW!_tyY1VkmU!IUTQA%VMsAna{+ zs537uk}G;_Q1nFSMH_OBtfk-S+X%a^AZ+bAdhQZ4EzQVC&v;Dh2zo_QUmX8p&g478 zh;Mx3pl$`Lzg;;-!9Z+z^@f(DC-ghAmRwWnDq-Z(k z7p1!T;~(&`OBo`J0lSk}cwhbn(br_jnRAXm6+V!E!5rE`)y*4YV$VsGy8sT1MW2#N zs|~CePDCT2f<6UjP+YkS^U|WNe1YWAcPCd|9#pYn_LViqiB%pJn0tD1_kP|Qjdx~` zjv4h3NT?^NU0>FkJJ)XGbNQVBHsm+D>hvYj^G>C+B<%P>y7iM&=M8BQQ@Zv|U)3pT zhcaF~)ge|QT}oTf=k$$|g?;M_ma#sNbyl(SjkjM(aI7RcV*U^Z*snHX?XuImDt9dk zvpDXI8;i`%&zw5;RG1xwn8rZ$862-Tgf>_A9BQebFWyP!%{BV^0F zRa#YbZQ3@eS>u$(IPcvqzy%Yj5}MYc{lbN-yDmB;nUhkHInAfsoSwZsZ%8l}Ymj^C zDm|wqX3c3=rQTcmu5vxM_H!~5r*^MW+MOQSv^j9lm$TtEupYC%Iuw3 z0j7;f4{JpSY%H8~g0#Oa#9{rPnoQpx={j!EwrFKd^!99w+zUl7??;<1h8wf33x>*_ zT@Q>+!k&$}x2fWa!6Zd`N7$zD*w0QU*}5Q2@N*35;y>YX)m)J3OXTCEKLI-in^|xAACHJLM@6W;k6YVTZQR%ZHtg(`)<7kt%6f zNtGpQr|8vbJyv#gns=eLM(q6)MkX2Or3J9W5yf3N;mqVmBh#BN=s9nypRvpG7!mQ8>S61Bjgq~zI*C5s z^SZz8!#+}WB-wP9o}YL%BdBdey-+W53uGHtg!&nN4*u@F29S<4XMUk-L602+HeCvC zg~-ki-}mfQy>|WYqMBQz&zcrbR~t~au{NL#nsZcHDPM&tI~xwhxL36`7$oC_#1+?$ z7#9!X8Z)*=P-6=kRxY?qSSDR1$(@}WSNF~cpdaX2qLf-m?ANa)4r>TmLtm`Lak*OP z(XKxs16%ud@rGj!b^TBI$5S(8na;2@LvVx2vi}NFYUN7$ZUy^UPORN~CH3r4yF+kN zFXL?Kuv`qY#cUF>NR0O;J2e;vHg10Kio}o=SJE0JE2)N`qi>&vq!gU9;`?=y*{eo_ z3S!;fO@ZQZB3_G#)@VtRWhwZ=EezJzY>TTDU1C|9AZjD1XMEu+Iasa;mp(XLfx#}E zfD8ij@Jdr?i^mUC&|*1oz!L*K!Hljen&SHC(- zcOUh~1}oizKcHTjO7+fz0;-YYzNd?U}a#W5kRiP`sA5sCw;+js7T6p_$hE4gI< zJQQ6Ss63W0A^46gJ>en;{#^^v5c>{rj|9fS4pr7^+`$-l;l_yg0&wyHy*4gffXg#x zWQ|xHL_1*X@U)|kOsDDVg8+j$U zNm#_B&I#kAJvPsVmfKo_({$Zp(c3W*?FY=GiObmTTr1UZH5iZ4WVi77#FCEu3L(Rpv4(J42xNU0~vE%guj z)nv!Jn#tjlfF!A$2 z!yn=_)*#R~Mh3zGxcw!3!9mVwl)m`6yH&;HV{o`xmV=|U2>s(H(sQLT)K4s^CCMg( zI{5bs7s(#7h+evTo?b%mHByps0n?3Y;D+u=)d;E7E2CF7p)EEO_dV}P@QP*h=*tacKdmKN z$8YX`xBKSQ?s1#-c_-+mn|E)~4JSyZ{=LXzdYYOO(HsPwL5v~%uSV4^3v|TmKN`mE z=mQ)yxB0i`1=ZZb$La@~<~Z=GqH*8a5|^)3VrKpP3g%%HymFq{iG*j585B;)&6fRh z`nO;a@2*_9M=v5E?;dq{U;n@^UT5_2WQ})dP`e=qCJX14?|Kdj4~m}LfApp7Mb8H` zZ&#&aL#aLdLbt}iv!1`yc7l*~GX|bXlxFC6V9n$Kr5D;j;{+Hj_4tT0CfVTc&LH_> zNQo{#tY8DaoF068fZkk(C6dv%Z=w?+6?)~+>S}M2b&_tlb@wLSaB4EKKGJpcpskU2 zJ8T;uTIxTFESRVf57Q0W5D>|9;1}^2Of8cs{E6*UgACFHtjL-S6M=o^R% z7;|DGeSa)|?4TXdw*$xa3DLh5t@ZEG;wtQl>mY~aR5h>}Z39Hpap1zl^Ue}GC?r2W z$QvAGqYM|sf^=Q?VR0)$f_wVM)@4+ABXRzL)F$bKjHd5s$34M&NGWUr`beR4{Tt#j zVfX>kx_(B#p`k4k9KFAr{!8!Qt|21i)m{3%>W*ht+@QPuXi1{umhBocm<5l84ZU~; zdll+K*r^5yqaQoMnA^r#h#^P#Nq2kKFeXsGXJ($WhrG*ViCt1S?%#p~DgVQ`9rN@QM6F%WBjz)+Y!zCxWX^&S-SJ&~qK*(&>br*3ZOUo|muTOdomo}rltpE`wk}=0vZdb& zO-uSaRY)bpLqAzvNQ7>~Gj-G4TKUrHa?Fg5;s+Al$RARH&ZTTIlM9u{8u+jWO4z#? zH5avk72~WSb}|#zvg1HJM7Lqg6Pta8#6V+i%Sj6=1271m^uHliwYr zC)1#}8kbYsH?U93mYG4Eh?B9L=sRtCo4b>~T%5riY$8ml))h;sDrY=!jAL-EaflXO zC$WZXt3rIm_(C2ti694@uZxWv#Z@F%y_Wv9>rZ+JvZvtp;5W8-(3+KEgHw{6om16q zX$`uWyd#|}JCpOu`A+jYpCB=}Dlx`+*!I?RmdB?WH8Zv*R7%*AE@giDAX{gWl?Y1$ zW7x-LyMR+ge%jksk=Qd6<1u`}5HbduuP87@ZcGE535yxVDqAMIFl6&~cT;zJL7xn- z5*_Z-!I#8ORo3m%%?wuLyB%btd8y@ABL!YT%(Y$H*vr@(f zHJLk{XfEZ`H9H5K_-n*@()eyacJ1$Xmma>5^Wk`ZGM!{yqWK3F28~b2x<3tzpA#M6 z?8>ImC}}dX(;)i>PTD~BA^gh&k@4->G^1A~VpS(0x-TSYE!L502i}t4pJq+rRm^u27?#e2Q+kS?LyCe_|5Fg1G__@^S1p4p>OsoY)@UA=}Gl>~N$ma(SATa&7iyp|ILT)r4Jhx56+(9jx z^q(ISF>g?d!{nlH)0sGs@EJ4cPWr+boZ8MAE!Govz4P$7t;&^aHFvo4z&Y(IJGGvx zYhyn2uhCddT|ojUaFV!#9kx%^#=C`&qk-ubYLKh6IV~?b_i*YvwP|eX>4{aEkzD!U zr^6QHglN`yc-O$Q^p}k?f>%-Oix7TGP$if+a>KrK#DhsSu$Gk@4EWyJwV`L1?!?Gc zTk^P6ZGpi~Wu4X+rA55fxN`v%@Ub&35kJ1lVMzjxLipOlpK z&LJ3jtH^+%ovq#THpLye7@_V4rk~$RdewYFRSzPimY+)V zutd}-Nn5E+tGx`vgn}R2HA0Z@wPkI)oLz}Id{p>MJ^*T4g^LUgu>kNy;>&&A<4gxJ zH-rf?96J0=^QBQ)QcI;?)jBJZw|*Wog!T!Q$n$4rV?;3T(23;If^b+tmqq?Sua*{y`EqtDm0pWLI| zRpA0@GNwmHc3nbh59-~0Y!kgTdA8#R>ZA=+;%~m7Qa~%$b#w(z!+g5@2iLHMLPpN+ z_&$3x(thlhutz;ok(A$H=64>`G!?Sw@?d-{xy>S*CeR))ytX5zAPb`B;pWEJVPc3{OYqmtS(h#_;rIgp_o^?X7V_fBJb6f|jWjuiSxDp?78yr?cltt<|(>` zhio-IW>@}5yqErhAV-rEQ)s&GoTj<%NQL+?zBiVF?) zYUF0)+<(uQpI?z7)udW%qJi^T-23lhOE52%OtQm<)4+-{dJif^fF`>JgVy2%G770Z zKxFy5FnhQ_HgpQBj+10@SH%aU>)F$E*~5xY=(016nhF(XuUIj=;`{{*79>w>*1>-_ zv0r$GE`L<{0bO>M@%#RfO(*n{UXP%!@7$u-7Azn&ZrvrNN62%rGQg*A zT(?A9k~~a*=oVEnGl_WXCuIbkYn#}uQ(rHvj7>NqK4Xp8;oz!)=+mvy8v~06X$zOB z`LfQzTczRTDiW$OngqcMBghW?7RmS%H%2NAi^zC|l+8Ymq@T`DJToEE(V^|QGn38} z%UoKgYDQZ6ATLSw%~1baAe>mQf5)5*~I$lkP~#nN2hLEdv{!(6rH}jL$@vTz5MjkVd19J zeG+rz7rOjL+1d2ZOWDUs`;SgNH>XA~NQxe`IriRT%RMKE#dun$UZ2kC*scX{G!gun?a$#?yJvZ0Ln9AZKUaN#SP5Wg#{ir+4DJSFxQ*s5!dst zh}-ztbQ#qpCZ$!Y9ND^ccL+Uh(CXrr1w_4cB`uh>>0WAni#`qNcWKZoAzujtGs;Bu zHvHbcmEYU(9j0;Y9?vurxHXX$UVE{t7*h&kr69JQL4$}3B->mluZ=5+mFDT|(;vmt zBxF(kHSpGs%$|)55{DF65)0`s_O}3=C{(0XT|yHl@qVO+g-|INS60B4t}1hU9%SdG z5nb)<93hE@qd7!W$6p@eH=%;{>F55pcH0lMesEW8nnfDj{Vn3W)4uDCE|dUQ&k_PZ zD_2D~<>U)|oE3caclj5ghAzL1;QvXv!oaWb!Ga{QwByf&TAwfx;8_u@h>7v+R9}v0 z6-rw(Rg$j6Z|Z>{nkoS^K7hehP5Qm%vx8yQb zdk+s>M63m|<%<#2g^nOieB+>U&@ZY{R~WYsX|amFS&7>+v0t~0IBdC92W0kx@^i$l z-*L&g4CikjB>VjMnsH5%QtNgJ>Dhy3Lxi`2Jqj+TZ`W)*ET!cu7vI8P=l}0)Dp763 zWIV)X^~YowOfy9mdlruc>HD!a z=2xt0=iyVW`Br-N?K^sQONd83k23BRm)sirea!|nox?|vxSC;IJp;1(56EuZZa|nD zU5=>Ub^1-+m(_CH;+{PhZ)=&gZ)(3f0Fth5VFTK=o;__wglE^Vnpn)a5F4;pHVcCo zg&lQRX*jcS$zWPN{2(#Jlf^l1iz~KR{{lVr1Gz!!c5fBl6N1&4C>s}>y4_cXPT$*s zz_aQ}2!kgKA?7#4Y5G3Uk)RXEK(EAbk{X{V3Z!Y}ihZxorJgtF$02CH5QK6T+LsI_ zrC8>o25&?B9OE|!NiF)im1dss_+?DEPOFoB<_8?wjz2r~7_po*i$0>==%01Z6TfY> z(-M+~cu70+ZM2q3!*YvAnJd{p(Jl8~@6f$}tpA?$wpl{#kGm#rN@~3V8ir%A-)4Zg zxeF@{H*b2mPzFvb#8J}En(J83MeleR6VO=3`vF5k03=zQPUpbuLb`IDf-An=Dhh5o z+t8iFbI}t-xm2GLN)>FDBK1dt>U)I{oBsQf)3)>kiM?I;NO;Kf8sVLUNqJAAwcTcW z_!}7~r``tt55^Z`QDgXS4-||;U`7wLSw65rTx-kn)f{4)y9ajOJ#za6`Xg!AwN1D0 zv~s~PX~V)zO|aeR6Ri}hjF%R@&pY`mf}AxQJG|)t6(P{#68tpm*_XE{_))64__?m; zB1jSh8RA&YMaf-r^;gg$%~b;HBj7z5WbZcM9)RG!r}BWL;x=i|MNsAG3-qLuI7oPp zakFNGG1B;$;m1y>D(;+yb#iQ4J0+)i=T&J=9&mWj47RYjBwS;em?kg&Gf(|a>{YNC z+jSk@Nq!NSvj`^jW?|vk|KTNK^gwlDV{#-lphEv=2t;a=GA2`D^;6TU_oH-j*Dk~?P zKBiY@VBQmsM(Z(OJoq8_oBftQ)4BStB>5yQcS=5chE_VM9!2Ntdyt;egR`{q$yKW~ zbyqP>8UAz8^bJE@MU;e|n$AT--IE^BbS_vcbwEcaliR{Q%|o0doRemqG`<1(k%c%x zo*k{zqE^{@6@z;c&BKCKH?C>SV1=u0+Zuy?3(IDq=00uv=rKG=_{%;mBPV1g<~|*BXXMHUnHfih zDiI{r$O)8Y%T&B#;soT<=3`}d_FV-puBu(wy+)sq3{DK@H?hQp!=ED47G55{B#iZ4 zW#37E{vEy|HNV1Fq^t_%-%XlwGJ&QX^7|k?&fFO<1_Ey{9tQ=3w?n-bcs=Iw`gk==M`J#GAnS?s5>nyC`cHSLt+bV~Q0H4lWJXjSM&I7MN8b-} z4eb-&a{h;naUY>x5CO&2o4VMI`Q$!l4(=tU;%K{$J%i|2lc@B|X?-A?+x&Vmg{rXPkBSv@wW3o$(v6ka7+yfhKa6pXu+?vH0nP=8j0t=-K4rc z?~z({A9vB)=#c|h;>tL_Ku#05Sc8wOBQRj(njN^TT_ZN4p}WFKinr~NWRW0;F4NmczZD#WS04+(MsY)U^J#)zW16qHON*eSw+~b+IAEsk0Buh8jUV8i zmMT}E{m2x(x%ja_kfAC?t|+V2o%2$V;ixz1;bHj z2NhCCxB$XEA6H375n>X=o8$xuIhg-rs-VWjaw0 z>Ch!sc|kwu_tX4|O}+iX>y@H!oEAQsaPvmJn1*BWO?@5N~s` z5{zxoiIFP_WD{g8O_RaN${6Knsq)MfuEBM!xK)e$mca@^W@OMv_RRLt>xDYhJ4{KE zZ!lN4Vgauwk@V*Ek5N)NS#xJ(4fQ8N7ez$=SZen-Mc}96IRlwPCOBIFSu~JYoXq^Y zJNwS43+YVHqWokf!c3$22)x0Q0RB|^uCS4ze?lHBufhcl-$5QND>1TZwDXD=b9w)Q zm6h7JydQa96k&T?+p$&j7KNcO~bgNo-key_zGSRjO$su__BnAL z^CLFD;5oNz!K>>AZ)QZ!j{W_mrkhr@*0pC6Yvko+BB5k{>>h-scz6 zldrQUHcB}(f<}xuoTA?=hJJM<$eQ0dvJ1f~{U6re11_p#eIMUB=j_=98-joprLGF1 zNE5ICHV`|#C`H5$h=_oV7%O(f-dkety|-vI)>vbTMvWR<)Y#bFGy8kyoCP)I-uwN3 z{x=tQcg~#Y^UhnI_njZKY>_d?Mp29tSr?Ehx+B!Ro3Kyra*AqWd2Xb$+$>!b6RMZz zULmI*kaNeW7T{Ap?<@vl%$Uj@P5+nk4lID8;#o{C^~oGHn4IsIpV^ySUQe%{PFYv% z+x^+BQ}oJaZZjWg+`M$p)-~*N%~s{}5k0Y{X;S-s16E-(@T%3O``QnNKYOV?<0`WoW9=(GZ7%VFQa=_Te7pPyqk#7x-PImR!hzfecmtx{gmJEbI^3pA+=tGKV|pRAXnSf=MAxt(QtZY1s` zsI>+H#Z8orke(KIQ82TUG1W%JIp)gFvCk@Cy;CT;2#Y9nieaS++H!9=;gMK_J1$!<;!SOJ`%E2XKpha zCcWyfEl-^F?=9z5+ogS?z2+g#E+42#m9q=?9N?g0sxn!O!`TIkF-tP*s5K0<=Eu%1 z_WYBht1F4WL%JRyWFx)!oyjmXosd~Y^y`JM$pCo!koEN9#jxI832D)}LGG7lh7$7O zM*NIrgsdoeYPx&{=a)Y_ztoqzY?(dxVC=c1_8kJ~+*7+|d^=D%yk5D?y)<&)fgY{9 zM5`xn+g6z!UCgm-v6QV{E9>6o%5ewLb1dEBA+Ix0q&JXG zsb9+N2vXW%{_Q5Kp2jrf3zGV4<#L4wO1ZpR&W|I_Vzo^7cFXB09B|RdznEIX z8;qcRmzDa+Ou4=a7?fs(oKOC(#gW5)gFYsWWN#~_B2`dIO#&0n(tDcjtLL%Ya<7rQ zfm|0}L>M5XDl|6P>SHR)t5D=5w&YPpis`la#(Bd1d9&t~Z%SuXb$r-F8^oEvfyE1O{SmHvrAY&LkD67ndIrtDyw zPHW5f&W{HhQ~b;NG~5?#Cd*9A=g25w#%p>QIym;n1JdOQoIC;2y)=|1cdO!w|8h*_^o7AYdsF)mY58Q_ zF}m;kz>-d5uYOT)$M4f!<~O@LW8>3&oO*v^LZaqRQS7(FZqQu6}&0pb=G&YJV$`-s5 z4}hwhubZDgPC`VvR1SUye`PnzJ1umDezo>Y8!wBkBTTxJBetJgEgUH}kJz#}f4MA?&7XV1N*>2{-_iBXpNg z8CuD!L}YQ)?D5C_K!Ypi+#zu-WKf zYDxV^d@iX4A^_qbZe!d%|2>ERQN08=y%*hf0`n*1Ev$K8Kc$!KvT%$5^JcVGcFRlh zP!q9g(iH$y+N@bPe08jb)~kGz6i9FoophPNbYDRAkQk?4;tpiajUevCA>%mVzYHnP z{(*#SeNMyar8IhphCe?rJw6p}aJ$DkzB$szApI5-g;YHlr9yhLoNfj%VSj)N zW}T64i}%?%!ha!m1_!ga0_+7yOe**q7`kzvC8r|XIO!lkR6?t61A<*F$Pbn1W%|3Q zGW_u6i#No6BTX|tr29Y#q0zvl${s-leXZCoQy<9MivDm(IL9u(2ki?VOp?v53JHri|0nFC4F$KdiDDt0 zWXz|Nl&NEi7zRo-0~3!x4mvHPwlq*os8U_AsPVSiNru5OZk=Is0pBukM-c{aFraT^ zFTVjc(8Je8t@Df?ukJh^*H-|^RhLx9z07Bf0SVD+y1cptroS9+BTv6#xz+tgxJ^Fr zmH!cK(<}Ag!8Qt}kogi+lG#3)769Q01tYWKRG|Acj>@T1Zby|}4!E@>Cq6j`uwRkl9GfKx}4Ifh>1w95|spZTjd5-LiW(>G|Xt>A9Pb-E_;dfkgoUMFaa61rQQY z)Kn_rGCN;{_wz%DKxgUFhmYy}i)4J?ePc%NPV2L06p4Xhtw

    Xa4+qGrJ&NNqSq9fo9 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

    cQMf?Fv~EuMU@QXf`y}4 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

    dHNwv~(;@i|a^Zdd0x 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 bq*mpmO7dsEdP8*!D+;Q)uAxPDSNgvJqt^P8 literal 0 HcmV?d00001 diff --git a/eslint/docs/src/assets/fonts/Inter/static/Inter-Light.ttf b/eslint/docs/src/assets/fonts/Inter/static/Inter-Light.ttf new file mode 100644 index 0000000000000000000000000000000000000000..a5f073690d3ffe5c251c690e4488af8a4fb441e4 GIT binary patch literal 288088 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 literal 0 HcmV?d00001 diff --git a/eslint/docs/src/assets/fonts/Inter/static/Inter-Medium.ttf b/eslint/docs/src/assets/fonts/Inter/static/Inter-Medium.ttf new file mode 100644 index 0000000000000000000000000000000000000000..721147d8311f1bed1bab5e39c18254beedcaf0ab GIT binary patch literal 292140 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%0DAB`*{C?!~6Pr26rI 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%0A^c* zvIDk-PI^oq>a2gH33p3BC0=O<=$=Py*3r+$gHIE$ucaqHjvugPQ1;-h1LL2vzAGm! zreGVsYH|Ba< zS$WUBnUqSuB@vI-%f?18^t3D5b7|Drl7m(Cq`V2k!`;lAciJ zF5P%~&=Df9==Yek-*=R5&MuSqIDXL9VEWegj{#GjfhDCthW7>mO0k>Q?&@VfKjT6Y z;-?pt5!fU0;sgjr{lq97sEOBORlkt{wUy1d{zI!!0`iwO3xb6GA!P;;k z@T{^E|fEAcNSM%E0*;uim`c?A?*@nNR z(C?%lmk{FKW?Z-KajjdpJGfPIXt%y|;*{!3=!bU{zC~;wF{5a_A)r5qMY9!229tbR<_2 zvfl}Kr-V4OmC>Z2IfkaXS?uLkO`J`d)XS!eR#B&ZFOK%r zva*Z48|kxY)E~zP{p91_*}sOqoxxRlICN2GT><%24o)Ug0%Xc9j5GGFMvW)#$Y1%9v=5Uc9GN=~|)N5I8(H%V>A;Ga zsu)d*6)v(cMp*i3s+=ME8FpiRF2fbXY@rN01iCXSGuyTmmQhKU1|jo}ep!y2p|*Lz&8RrUT9%1r;Tu-cC7DKow;pK_~cz}PN}!m1^$ z@9Mg=6N`Ml1O}$lv8kAEXo2PW_lrIKG z5rob7g?-vWuD2Hl=^}hb3<((5+;i%knDLL25+97Gi<#e5xkb0&g=1o7-;TJuc=e;G zpo3$TrlcRn{Ry`4hiqPoH~5y$zgsSmo!EEi&wFZ42<$x_;5ustCk0hFDZt_10k6Qz z-!Ye$Bpgv)Q0RKfKLsk=31`bJV`^~6bgNxcp9<@TBB?K*!z zjEE1*1rKdXmdEBzn>PRY_dNZSI3Or!Kq4uEX%908c{`eSk}zC+x?2goF|0ttvLvEy zi-_3!J6lC~3Z`XutxVNoEisLOtF|yuVbAf3T05|dZm##ybgumfn=yf&YxwyJJ^%fq^rAfUFijlB_JE z>x65k$qQv^?bE_pI>{&tOK_!HFykwq)NFQ(9kM}oU!|Dv7DlyeVbP1{l;}6}Q)~rc zjB!XvB254H&+1t-(o*9aZCT#T^;6JcEpa(1oTn3wI$<%rYILUO5x_(d)ADXkTa5Qb zt62&m@I3lr2bs1U_9t*oh*d>3_MED=Xos<7Y^TLpn+y{?)nU(d*ta)yCmBM#g+JC1 z`A`7ezW1ood-NaPL{bc=;mW2X8Ku-e3l}b)O-?EGBn{n7{>J;j3eD$y*h+25-xuaJ zT0Bkrn!YF2hNm#&?j-Fp+)k8s8NCd*VJfC$2Ji(kI7M_^UF`(Hw1zq(n4F8{m>W^m zIQSoU>g=*Ex?`lPn$TUpmZQ6EPnyza{}CX23dnXQBb5f{Y1T9k%ZRJbxr?rB_b3_4jNaSSccGUnn8+{g%U4 zd)>QuX3MKLUupDC8l$@z`*F*{$FWEMm=L{A387z&hiK-sZcROW8e3g(n3yv1#J(PL z`fl1RFMa&D2%SV?u`)R$`inE1KRE+wg$bX`7?T9<2%Zrtuj32^4|)sxGDohe<5h8o zK9c2UPwY9vGch=egY>h;8TFL1NSK`c4f$iK z)jyuSz7S`r3=Nq)IO9?oY75hMC&C#jp2s%IX6b zax|}J5*TqM%T9pf(H;8HSA&q%IrRf>s=u$$jl)yGm;+dT6FvHBLRGo~{ui&u+EmXX z1}B!N)SAO_iOK7K#q&R*R{x;)3!>ul8jJf6i|>+?R2T(-4>?7^;aGn;<98yA@#6}E z*uz^1WHZGmC*pABG>x~pHx z^cklI4LVKw(p?|v*Lx)93mNm7#QwR4UbzihjfE5z>=RZ~x=1M~Kpe{9|FZ5SryfqW z(n>v>WjleDEcYzTXa}hF796oVNe6hJeKlvyxdCUn8C;fo8_c;gIP{QO#~`+`orBK4 z6DR=5C!dYYbfcpFIY%7l298`!9A-v@tRN1v4Xb)Cimuk`e!{Y^(*+yxozZ6gq6G`t z--Qd*zXvnNRQGoG_aBo9?!7wu3F5O9!za#8`B_q{%GWu%9_=sJ&+NvRu~WIW!ChWW zAC=xXdqQepK*}WVsr?~xl-NMOZ@Ev8ZQV|q-bp5fwq{>ZuzGtQ zDIrzNrxoLCdP^Ac<_#I1XKUg!-V-fz4y_xElWsA{Xk{RxII)eYuFC)MRtI`%)!iQJ z*1xu?PdL={z`N(P)1>TTn!0!ubz8YYs$~3~#E?J8K;`ZMdYf#oeL%T|Q^(<#qyz5O z>9@aLzPvPV)-~z%+qcGhVkPFP)p%`$xL&ED5Fs18(?M{Jnw$zcetFCEfzIlVt?o{_ zvBO2#zp;}qXC)?KKoubAiBNXO&X6)HlFi^u#)Rbt5@f=%)6NMW?e()@ zwas&vE~CTtUnd@9&`SDdZ_D7Gt^FLs{da^5^j3>`8&Y>(@_Y67S2`LylJ=@^%9N-r zzT3jRy9Cn~C-)?s4N>=_6HXKMMW${W)^p%M?SaRSi?Z#gC}ROixb7uafz9VjA8JS0 zpD*$koF#-Zdv7q5IgEj@BPVAdU~4#XmO}Y3Y{nJv*1<`_#0BRIB4E#ePXhc5g9}(D z9KM9ZBdMi!BCqE>gIl~1zGY`2e;4JXb{WT`k&1`uyOZim0yp|$Ms`E&p)As^Y&^)30c zR<`M=we}@rdG4_6C)x@uH}5raC-b&AJ7qLd*{P34ty^WYEVs%|`&MDOCuKj8OS4xZ zBE&B9cUC9+&M>H|LesS|yrl;!^sc$3B^=6ng}jy=N-h5}MlXmb?c-Gh@u^YSg9rOx4I0AR)8EEI*8} z#VuDbJocbFq#5ksC${Eh4w7aHvK}_ctIR>3C8M7%4BvpXa{1I?kGP1amSwnP>>WABzyCD2c|~&?!XU3McIMK!CJZi`L@bC z8i;%4Od9z9J%=CL_?zn>Q0rY@Y9xbX_$F1^g(+Unx~`bQZXVQ@uDYj>n!{GT>4yo(CYb zge<*r>GHd4Gumm&+iiX$?h}{P_oVe+8@jtlw_VFO-3uPLX9T%DdnX~$&y{pyA(pD` zRNJ*!V)ZE(Ntwe-E|RWaChex@PQ(B58v5}6VeLP_qB`35aeU{T-Lp$kK}76|l(irV zND+}Df;5rdyMRh8h=|y+_l^w}OYFTzjWPD#HO834ZlbohjAY3AKx@#X#kVwpNEz0%)Q z8Ajqqs1%-Ggj?9wZ3I0{pJrq$f3g(~)%BPAIkz*7$aN*;y&V_s92j-sj9e!#IY zol1PUpGcXuynDJuP=*V~y@$gOFY7CAQc{cwLu)~&7y#E3j72L16|zQzAzMq#2upWq ziU=Iq0|*L2G4G@Y8;pBMA|8@3a`O3W>PwG5A{`d5p_hN&QC03I_nM?VwOsBqSo?## zaxLlj=Nx)jyiTXgr&DnB#AV|4D_KXH14%)4|2mUW>ctIwC@!F5x&F_@m8jD~suHe9 z>qI(qGyp>ZPc7brNBlca@`&yh>gdi>bvF{nWs$SuSG!1_nE8`I!K3R=El4z3%ANk; zL{;aBJHP8S=HPc&PhN~q=Wk%~6WKiQ#aGbm)@<)$1|zhxGiO-q)!sL(2Vj=9=jM?Z zi_|^kAO6U=zNO+|Mt!=|>JW*3UquF-y+~(^ujyA`aSO^0=aMf-=Pk#H%g&7b6HXGh z-7jbYeYk->qzNx}6L-|2TD@YFPH?=$K0X8K@TF0fGHFH@%}5i{6Q%UWs5O8CR>L@7FjBbB$QDLW`p2K5*Z9_&7m9{d z)V-miVbIvqVm?>FJ{bQK7@Pz!XpBxaMAHyYj^Jqpix_3_8kEc-@{4@ibK0e(JHKYh zHlXUdbZA)D!8v}CB4UzeAA>|S`}w`RvG&)Z-pbd_>SEBVu`AM`8%(AD6}w`xbM*g& zt_)uIugDbxAdeyF%_MG4!mVQQLlJ0&S@lmyIivlSA?>*@5~E|2Q(~eMPy7pNuFJCd zpCI?#qrmj^z#i!tVo>cpsB{mY^{&Ma$^(am&HfLIA^xcoz+uLI0tHHx_wNuM2k1Qw z&Jqm-z|{=l|Y2Pt$v_3J0?DmPU#v5to*UIW@bK4eOw4FE}U* znf)He4M_`>Z4UfZ`py3D>G55J>>_^Oe^2~&?V`uOpMMBv5G5U&k89GQXt9W!Q+ST# zy?jOT&Yq>qU%jNu&k@3#`112!qIPGf|kHqFP zRv+sJ-kIOZ>+A0G6}o)hmMt2^wW_zUq4dz}Ik-bCGYMNmIZTq~G7E-v zigl37uq`MoI1Ut)s9BuHNkmPKaA72FF1_9RB;6#w<0orRmC3u1z0yT_Zp}BekvLoT z3$<89mT^nD7UXL(RGcp^c*G6R9g!}0)g19BC?~&(H-@Y04o}1(H ztlezv`?ejlVQ?3?o5hg^6Yd`g8+l^a*Clh>77n?)>q0NUgYvvCJzDGaE=?l5<5i~0<`Rqb+64X-lTgE(ss4=c%(Xrw!U zq})D08dR*I*KR+gmnyfD=(p2vl;nQ5E$ydiaeX%V_s>b_SG;*Z=cJE`IqUj_E+0K+ zb>t3(yqrG0aGqY-c9-lV0T~c5-;f5Wn}?_GC~E2cxJ~O=C$H49hxGf+If(BNw{g^% zqXh*=#~fq_nD0f+^ReZ*pxzSh6UIY#$!=xvx|Xnzm@7u}jiHB`V+}Ls2+4JVHbi}- zSBc`}D<1to=iO%@N78|wesN-nru+cuvvmty`PBl= zvJ>ps#G4EpIUYFFFCUUT)O9U(>Jn+9S~Dv-+jZ6a=W`K0I8eWWfs{Iu0gOnTJe_!I zSFYmN^lNC>x81of? z((x(#E_n=)?qVA)6;F~-2DS}5N$JGfqg{u7KZEQ0j;Vali^l|4#`4MGCxvd?0a*yW z3_XW2s4Fu-*fOLG!AEXR&J$a4$~|!wX^}vWC`!RmERg#$U^Sz$?5gR6VkIv`RXN1l zRw!0!GK!ot3baoYE2VVkL!@-baE59qE=uVU#&mt-bzZ(L%Lux>IdZ3k4Nf2 zlOmMPQk5p9^p$KAN|D58mYXNWQlL;^r2`PKMJk1Hgse7DT~wz_ak(Lr9W zG(~yF=LA8OfO0rlA&AUz$Wu-XUlV|1@|?M91GAW1L>A}W8 zF@EaT>)uXbm_dFQ!wdp-I&1Qju>rFN1G3+A3H{I4GZCru+}y$CkR7<#@`bu4KqM_l z%xP;saPyc?fI-jD&J8_pd;`x3&uOFHl}&ZY7rvFORDukQw4$lR`*>i@A=A7K`64=GqCKi#g{-;$_ZlnRpr5 z#_|2+b4?6bNhq!ndDS3uGx#7@8OK7gW92dCiY+?u3bx#|Ils-B{c`U7mosPnXa3}2 zBPL8J9ZU4OE4(Y;Zvk=o<=`*Gan>w)7hmYD1y3&A{&45mu{$5`o*|o_U|u}LWTuqXnuQ{Wzy_=^`$}?>do86yai=UnxijCbl;2kRjn&LqsAA*-x8_gw{FmtOyZG(Mtzqxs)^OiQ z`H&9GUv;|Lkk0NaAPE|tQ*ElbujDI@&jn%GJP^>|eC0cqFA(KyW%>BZKc(^&bEM}n zE@sw-bk>jD8UYGUR=(;(_5C_G{&pYv*nO7I45~+CJ@RYSW2>y_hvaPAN@h?Yu&>n-d>E3PFm0QayCc)9 z;2y&sNZS08%YC^Tl!?;pL8q2N0H_@UgH;<^8|;fz9GFXkaW8H zFxAW`Bjz_j{LJC16k2eZblgZRo&(1HbN*erMl;C>a&dZ2wi3JiA4!I05`D9X-g;DU ziC*4@dhfwjv(;E{FoM~(p2m9HGsG0?&BHZMkTYrwG9Vd{C36VSR5BKnNY0znR5<}- zKmw-IKh98Jazd&$Art0rUDxPI`bWTCs+k8BS}6vwb4^7blkE`oyh>~Q-IvGwe%-GH9 z%IxBXx?+20icWBctm~~=OAS4*X1p$#UxW!@xEuqofp}>vKax%)U>5!J6wYpg$A)1z zw%uAuk35_F#e%Re7cE__A?~v&-3k21Tl$n{J)ZD88=Ww~*&os4(@4Xc#N2w;E-KE( zHYRRdwIq9X`1-Yz4IS`=_^kV{9dL^NE_DE%SZf4d(@I)d@B=-zbIv>>>=mD_IjDSWWy-nWhE*A4cPpx1gb z^!ypR=v@`vbAX#V>2MBEILCKhA#PiqoIXw5_q?D<^zjZTvXY+dAuia0{-730HD1aN z29gEXuTVmG~XcGA(lTj=F0JCD-~`-6x6s+}$$ zj@i5mt8y16iCn_DAOwt+odHfl?5qe`!8b{Nr&}OjO~1iGk&8a0@{TyidlkLIua|fH z@Lp-EJ*UehZTM_FkCKEPD2c~!} z$>(!Wg2mbGB0;Ok;j6@M*+TludFn#05=*l5;RBk5?hGcbnTrd&(szx*F-_U~h~+X& zqo3)HW&Saa@#(8J-n@9`9$V6v_LJVf7W_t{cAqvZA7qMuPI{bl>A$74*M`#xrxw%u zH$v%Ex(5T-s)twmq=@5RZ)v~r0JfMrAju1)mE~ zX(j1{URv_-5zVHLXT?%CQU#;Hx5|72&XoBnuR(h_31kC^`_ zeqMoh+Wtw8|GAI3k)L%Zz3>lRPLCKCE3qS6pP$}Mcl}oIE8V^S5*s;gWaNsW?YAC2 z-Xg@ey;qM`)FgV%>&nm@#CGv1r@q_A_gZl(4GNYEvVF<~B@>1}aiz>2#nzVrsDydO zvvV)NnL98Q{QvmP-_yP18|)D8_UGEueoN^9&T)|V9c;iz-7fx6ld2wAE46@YNBb?K zUvNmhP2McQnHcQ`h~KT}&2?`#u&=k}2~y%f@z#3YLic6^*B&{=9siIML}IpBM}AH} z0;|geM1qHY+KQ;%pq%~y?bGi47pOktYnT$|)6v`jv7AhLCYIx=Vli62l=qan0xKG> zsc5!*sSY6iv@|+l8(G4g)XXVX6lt1p=}X1oAb}Y|it1|!Ak0kGN)E)Sy*;)vxsB4% zUOt2FqoK1`^e3&ze9R3ivYt4^O`c0#lwM^i#f3Zb2JGrr8aD%_T;?`$zQ8q_fqk!~ zs=b_*oS2=Rn3T=Ohvemjgy!ag9ryD#A4P#l4m&_wmS~a#8FP

    EgldKWv84`FE}6|o^51~BB|TA!2q;5^Gy=j2^A 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 GrT-t|qF|Z; literal 0 HcmV?d00001 diff --git a/eslint/docs/src/assets/fonts/Inter/static/Inter-Regular-subset.ttf b/eslint/docs/src/assets/fonts/Inter/static/Inter-Regular-subset.ttf new file mode 100644 index 0000000000000000000000000000000000000000..71c56ff75a22c2d4949e6f6f03ac52f2c2b10c7d GIT binary patch literal 261112 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

    TrqB$ULkLh;X9=?1Bj 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 QSYky%HP_acbZ4di3yPU!1^@s6 literal 0 HcmV?d00001 diff --git a/eslint/docs/src/assets/fonts/Inter/static/Inter-Regular.ttf b/eslint/docs/src/assets/fonts/Inter/static/Inter-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..96fd6a12d0e20d7010b196e425ca48b0b5286df2 GIT binary patch literal 287928 zcmb@v0bEr@+CP5goO92;7pXu&*q+++*zP#<-q}{tM+ge@a-gE!oXXc!9&qYl4_xXQH zh3}d3%rnnC^UO2PJTpgPk|f38FIAE*U2yRwj%|+rlax~d%KD{+KVNu2u3RN4Gw}OA z|90uZt1fg$m0d2Wu|7%q#gji@c-EYmyVfj~aev$9cr?RA$H{tix7@e3@(il0HdR6Y+cd4a;h(qGaZl zWChQqq&3TKSTQ{FaFHZ;?vW&|tLny^s_*X!CQ0&dDvXqY+ z(p^-|BuQG9%;>)qmK>kV3iN5h_nWwTgete_OD3)@WqG#p zVZ7ADgYC{dR~TQV4%p~~>n*p}8*P<$f2a+G%TH=F>va!lUK?Ix;qS|Fa;wE>tBGrs znw`&T3$JoU*~;fxc$r)w+7;}helu}buMA}-`nqbzwOS2IZPq&}+AOcF)kfr01J9k5 zXyWeutWH*eXOUjm@O})vM2k*=RsLg^!A2}R$HF~QH|r;y_=z&*nWpi6l$_)EQmyv} z?DC!z#y^U{d#&=Hv)MMj!u{|G%aYTr`b{~dX}tf(*AF>rq{U`CTy+M0O}n-#jG9z5 z_kj$*RW^)n%tKkdPmCyw!%aHZ(9rC0_^mo08KDK^@H)MMI0?m#!#C>~tH7aO&UE(z zi~en)3TZZQ=wk$ad#HqPW1N~?I)wx#z#~SCrCFN09)uP2V*u1u{6q#wnhztvZG~Yi zwA4VAS7{7HPhd3M>bL$V*LQ&^E(T^#~e!2e>Hnm~# zj^ZV6)NRo}`bLjqzJGtPy7x}q#rmsWy1u(#NBg#YzrDVrJRwf28Q!(?yGGCJzpi-x z`k~_1%3r?@_2*Sb<$=XK&U%?FCLX`85=$0dt95Z5^Xs{G+^raRG1{H#lGHTNX(3AP zS3}KuDLj`3I1^cD+zC>$^b;u?gC=E$rp3pnWM|Eto0+K`Ut{Hw-ol?v8(H#lecyuP zX}2@=(zSU74OOq+=$DR52E02U15+mE@6f6Ckk?t^N|a_2?`JA0GgLV?X0n<&=X`ly z=83YJ0;dIlM7=iES>d00!$aLGU(@$L|2#Y6wUylu-7wXk*yPdw`H+5CulU>FSToZe zVzHhkN8Rxam>87FeDup$BjDey9R*oKG8mz(9OUW!F*Pwvn$(n z>2Hkc)h_8vIg#NcYf?Kb$mS~oHoW(jzO zg?~Uew8t+=4iAKil?!GLYZmjXgXY|2%~^uF!@~#25-x>BQnV?B2)tP8wc#|-MES*% z7=XN1E;Yij?n$C`k3ebK5T%z&SeZlx|?w1e}D;p5i>4i7i8rk8BfOhbZ)$UvU)Iw3<|n4(#PNr2&m~YGradv`T0~tzavx369#a zEM+jzpwyUJpfsT@ITE#)OVcsE+kG`mThpLK@o|Q~mNj{DY9={s)3mDO>$kmj_5Y z-~EB`+WyV%V3QwM_WZZM!6+cN%>`Z*DFfWZCug(cT**~^eM-!K%2_iw zn=G9R&Qj)`4<94!Pdbl}O=o2wTFWVapw#j!1IN#^qi#rOf$%Jcj+=Yv3GZV*3(#Z)Lr1Erc+2d!SzbuW%7_Hj~N@fVwJCu+xYMuPrp2Zeydf!m~EM`-lbHp zp^J@>^68RvF|858I+r|wgkw|EQZ!Y~;W~Hczu6VNyIA61b|i+RQ`hW#1N!+zYrKAbpS?;-{H7(3OlZ`aO7J_(5OcI~v+YicJZ4VvzR-w90ImOZC^c z8LiU_2L=x9v9}R#`-44PB2y&nu`Hum4U2tqR-2nW(?(0n@}E|)a{Wby>05sG;a-Ds z+s|(+Uy#CQH>{X3y+w*qk8zRDUsMvf{(gHGV%m3L4I zXCtaG;6X1@Z(#=Yd#Ia4UG!GSI|&{OP0kn3NR=@k<4qxmI6gz;7fgh%!9M*D|09U_ z|M%T@_xs!RPZA$wXZ)E(o74_B9QflO576}gg+935>=Gz~MqP;C`yldq?q#*IVsrw$ ztPvCUa-XJ^brJ49pputG6u+yMh0;P~wpUMlFwSsbs=03B+hJBIsY zt<1~uI|wK5ldGgDm-1k-t4_Snick)*PZe%}H}G+~|2b ze=g+b$K+}o(ufET;VECPvQZZeQE5K3l8ySwe{(^Ep-!M#+!9g;Io)6ASrS&29A7Yr z=3Rk*sz6X;1+9oG1a7RLLqoc%?BTYGDN78?K`WC|IhFDJlnZ|JgDBr=d32?LuT-n2M%LF)b3_PFXmI-jA8h94REfe4_$ZsNFQ0@OwWZ{;{w;iL81(R!IoiE>cXE32H2WipgDZZdiqBnmlLCc`e* z@%pco=vnY1dDu)XcF|9Ke|jO7F^v9T_%tX3f!WG{-sE?tdN2)mJmzSUAaS*rYtaGJ ziP3~!q8JUw`DhaOr)mxFEspcvCtP#C>d&Lnx~g_qs8ieQ7zmf)JKi$Y@KK-5ZO zRp7;;K|W>#PLUgdFAj}zyk3kY3pYlR!M$YROGADeoiJW%;=y*c%Esp^NRD(>)SG9~ zDPv;HkLRac@Dm#4QVa86soLwMu_XAfa_r?}iPPa@N#JW8t$Zwz+|XxM`C11wTJWRA za2+{dPK&)XErO0CVBl?B{u_IZ@-CtK2b5usZ|X5{=YS}$p#RA1bK3zr&Ta!Q=XhO* zS>9*hLiaa!n|LDE{R8H-7){e6(ZR+X#_je&8+%8N0TyA09)?eBdQLj0T z(lpHyKr)w)i37~b>EA)P=r71kBRQMDN99>^ED6m<&oZexcKz`7gI6~%yMFu6UDDzFUj6H>8@vx+y*Yo;bGL#xh-g`4;F%LF zzFU z+}Y{W8YvpIb7#X5wjM$~43T)r3B{03gv-lP$iqaajdQN`2J-^&wB^xCC5xp8dX-|O zBTxiGLs6GN?N~jrr^h%+pJ(y39;f?DM=K`__M8Q-RO%lgin(*APIJ!EoMDM%6u#E| zi}DNa`dP3mLN0a13#Ombb^4Tr!7XEvz%l&O$T@dmeBix!Pv3%vfjP=vZ5ve^f1vqiImfKLm|9 z)TtE+lFq^?gvuFq{v^0;tlVq@@Ky^iW(@*||B5Os++2Q>Vi)r9DCm^4wh8GhvTZLF zM&(&_%49JiLPQbtYn?FH#HXHX$K8sFV;jlN&wA$qQk{?oi`Ei|A{NO5V$o_3#llCh zq{CEyUR6_(ShAMZYQ>hY>;YLW=Eb7UHWHBiS0gC>Eacb$PKW?mTRP>-=%IZhzFXR$PPNdKc*yKGSUXH-K+53T{EvBb+WUIZ|#N?2KaXG zC~fVUi3POPt4d;DSA?fT#(>!G<(s?VI5jqW!5YOiySOTz50>B&N~65V0?&si1pXK9 znJ6gV;p}o1!YWOn?b?ge*t99fV4Uq~b~HBE92fUR6|UThK*I4i0gQlESBa|$j_@=} zm6@LzBPD0gnR_g@oK-&k-}<*LjrqsLnX5_vM*maq-oVMn&zvP+QcW&LsHTUjppb7E zw`xcfsRn#b`;VLkiISuE#R zeCC45T+bVGEwi>vH zW%1qCcH+m<6YRF~{RN7WT70=m_!M>_?>C!%Mc_7lbd}JWg^BXEcAz{>kpf@Bszg6v zHpif|@Nm7b54_&_<5KTMbH4H3FA=_#2x->6}(y$mi#m z1z+wq zyI?{(yzeOk$Dqr9CtFRwo3@&!5riLmF<(yR)4iBNQj^1JA2VYqKP^5E`DyBGSh4H= z@)x#)o#?1HlR?H3_w3U@e(EXqlYNY_57-19Ye@}Q>S~=>P zMlLq8+a~kfQ>+g}3LM?BOiN0&EeeWr~z$HDa|LLWd^r7cG z>)zV1VegH8V}o8R=lW7jZPJRvxg@~RRwnQ=IRjHJ&qCt$D-_6{&#-hj3Kwb>YwglY zgLxBk<46tG*T{8a@H38J3)M8hiH$)sc}~)Nk(U^5E%_sqWXHm-W>u7ksN`5J&-2$I zLrKnHU8Vp;Mv_@uFplRV23v$Mpf*ryY8o6~G#S6wLms`fOlH-r6vBbR_t0{nJ(Nd7 z$(rwyr%YqXN*X)HG^`A>7;i2s(np7L zGb5#-Lz*dYo{>Q1vBPH^~##p;g!HYO>ms;=p~yrW8(H~^c8d=Ml` zNwiGl!yPHe&WQ1zl8nle@xNd0ILOYr_r{N#3xZqNK<9_Qyrk!4y}<8KvFDp0HwCNp zVWbBpxTFsKi>F(^*_9sWUG?I+((YPxYki;=30(?Rr1hgx8sOv=qbi;cJb|I1Mza>Z zp4D#o;r1#?!?aL7iY~#bwT3(xdWljdDx8I!N{sEe>GHH`(-m&s5JpN%o-QMgg=bu+ zrOlGEvqY}QG)M8|kn~!^`)hw*+i>lgLwUaJg@ z>Lb5p=k@MmSuZ&>skyy)XW1`q{@G7Y%89@H)_sjn>IWa$s<&6~xNPxLRV(WXr{`bH zq~CWicHg}RAA)jm2DzEMiz`pDOLEF@#kJ0Jg2PPEE8 zMzv0swXc_*_gj5rG*J24y817+uHS!G6qBM~(ckp=^p~E!<)wW;A1HYB*K6Nzcr7Gp z(nAODy-yEy{5~XIoIky=Ze`U|i!a+z-L7waghfBuxbN1><8$J!`1P8yoyF}mIU+_l z3^h7~j2>4Im2x`Q z6aFqYmI5zlF5d4AFs}CU6*4LyI#d_$M^U~^&JpF!GXnCF5WW*0|9Hip`;=n=WH|t%vdpMY{ny8ZA7WH9RJ(; z&VT(&-}$z`{@Z7s`R;Z^sXIT?UwQp?cG*Xcg2R2=zq;d&ueO6H&_e2TE#iY@C^IRI z4eQ>yGtJm{1YK9$$jy3iaLYsI>8VH5P}{42dslBsr)#2`&lGi}HCUj%dT62(XY;_$ot`U&4xPbVxk~z7#nld~W9D!+2=~?l;Th z3}gvcH&HLGh6SB#V8&=Q><@NOZ&>&$9FIaytkK>u|K)c6`6`yv!74T@OrQ481bz3X z#_E&TJ1N(~KXB%9b13);^ZBO;+@gaskoNYHFCzG_a;_A;5D7+%f_ET4#}s4y_^upKF~9L{2hkD%YPj zu0J+CiNI}olSGY zqBvLZx3~b77|tg@1j-dq;QUZ3$mimmMHa{-I=>9$sRHqL3X>~?0|C|%$2wU8>x^R^ zf#3iFe7P|?wx`IEh#T^KyyC^Oh|>t1G)>@(m~be@eAkeMi{21EB=|mAfAMkdW6HX+KGYI(!R9fsv znWe>!6yZ4Q9L>4pRNU{WwOsEFE@8C^7rpHQ*KTvO1Tpm3d>qKmNsx0`VlWYNQ(%G8 zJysCtR0>2hom*VfX};pSE9c8%qYJMU@Yh(+h0nfKmY09q+@OcQERWu}&V6Rz^yF&- zbwmW*m=~S*smd(2%Ka>INDx8Z5Jr@gebif=Yo$cO)gil z4R5u|FOq~UCRK$DEWB15;j-fN`B)Y7*J?w2%!_(ytO|SyooB$Td3LF4C2ei2Ei75HIbcI0vf_7F2j!Zv{f1GvHdJ9gf%x)J@>8=@UG025 zy`Qym0c~tBR4J-R;OIMWhn)QqlS0&p@no1k*&GrIg2qLq(pEUzuOxC>xA)T)IdIe& z7E)=1u*10738>Fy)WE0)94g*JJXHekr>$_bs+ZS%M<@^fBAFe9a$H;$Z^~v^9U%%4 z->DXkwK?j?_NXPDT9v2sP$N0-yeQY7zYz(U@w!1K^E0xy%3c+U%*^h)66(&&Wv zViSjR2Ue`|wdAZ(y>NzXIGj7+#JWD9<+~_O#T`;aPp0xSpZp9fYbXBY!Ph?6#7 zKvfIjeW4-4oizpLR9uK=nJo&}=zbL&<9Rk*m(+Be(40Fj zUeg?v6}umOc=rdlRvMCP-#PMfOLOtr#c9c#g6&r~>}dVB|GIrIgJ*K*(WMubt1Ps@b#98 z-TSZK^4xzt_W1wwqz&i3`_JmjfA><2FFK*>wX!Y0TYl1t+c(TAd34z;sWIp@gxy15&5Jv5$?-Lj%WV7nPR~S=K5heD5RkJra$(*P{2i z)WP#|dHrsR*z@|`pWqY^-9I4sB5f0VmD}mK!uaAau64O-Nh|2=$Amz>S|jJzERRSy zl@Ie9+Qaz@zt@i;oG9wo;@lK*7xX?xV2$o;5d2caop8}#yn{+E3HYvLD%+gxP zK^g&^1~&tO_FGy}n6_0KHkWzBGS}ivUdG9Ki;27UYUSZRu(;8*MZ;FDZt}i(t+>ge zTuL>$agp~Z@G9+2EbPr5FnbyiDN{3WBCXoS%_>E;)#@|pxW1C}r2&(UyVS(B>jL?-U)WliDoE}Aj8=veTweFk|Y}$??cgPv#K|4JYEwm*0XM`RN1rY^}2gMShId;>*5`2rh8MLK0Kz{EzWh2 z)OF7eu7+{iwX6Mi!Z@AZ^2lv7O5&zJ@%N;$cjdtDeT6UTfBLk%|F-^H?)l$M4ZHuf zG5h+$yz1wc4UDr#gWP^CJ?n(YacAbZwml*2*R%z9-WVwQW#cb}sN5|iD#~e+pnUQc zQ-r`tM5fRm*aI4rG4;ILfb@?>dI z9-=TZibNA_?|o#xM@=V7YtZ{#8Z;~#;jpv@{)seXSX$x>7SiCW+)l@aFAn3{Fj-oI z&VH6^S=ulivb1PNnBUM4=gWLgbN9CiJ3Fl9lASfEeGHo+>@0B$JIis{*-~L=iC5}= zA;U_CO@?GSMQN=h(UL6LS%dalT5XuNRhoR;=&;1e@)*=3B@H`k(Ale*%4p{Xc9wF| zjedchHK?pbX<=unH0-Q_S82NqJ4?95CG4!xCOXk<}+?qJlR=;&Jw8w{YdeoVQm4tCO)Kih8}q{R`haK zT1xyB3?mp_YgqYxaVIZ+Zu?%A{^XPTpL&{JC_On*UD>;}>75nJ-`U>STkevA(diqP z@6}trIjBGM*793V_bJkD{rlfM%qF$%VvYyz*Mr!0?GjakrE^K8kiF(t>?|el!<&fw z!NiYaDJ6D1Q;wQI<&kW8MK=@qb1PsAY zTk;{ZGj!gX`;81M+_P~cW31bf*2-S3&VB?^-!hKHPMg>|NQ~%y(QPy|xa^?prM#PI z;|bkq;kDX91JAYNaL<9mJtwtmgGEiU+f#Mwv=knv<`$H8K;~s4zOLjC>3!|bvUvl$ znEGU#@03?t?*9EvYk$9`WP8O_U);lbD5;;V{PJ&X)%!I=jn_SXpB~)(g6@AHucoNs zkGGN|jnl$y&^1L$r3eb{OyUuHV^d|KDjkhuBRy)OUVW^ZaoIypRNnW)$6x>&H-Kvz zVx*sf0kOkt^=tgGxoHdEo>E#DY&#ZHYF3|lX-aX;Veb#}7V?Gqc~2zJWn=ubmbu$x z7mOqAe1-cA{5l{+e)$^YL`BK}MDKfgg1!mnx1H7a<_L@4e&?QFHtYH$cfWB%=F)-w zm+nb=pIztsl9j&~(ODynvmbx;$<^09RDSonHw0uEYU2})z!%#l%r*AyFO5z#$;|;KIa0QX8=>kua zrPHLd`Eu13wx^|PSQUSWPpz)#{x#?M&RvlgpMKIQmj!B$;pzl?=B|ElIqTDN3a_2% zQ2N}8Z1;YS+7j-(4kKum1dh|C9J_vU{@{GF@ir1BT4Cd?Vx%)xT@6=^<(+rqwyTm0 zPC4n!lk!%b=glwF3y$KQjSa&$)7qCeS7bZg{hEC0RfUIYSP~m$^?{`EE}P)l>iN?V zQ|11l*d!#ABP6TXd_|h%=>9KVUNJ;o;RhkS(2Kmj?6Huq6JI40TMM)2g= z?GgR$%0PdgiU`6b=x>TbqcV)$G|GfeWBeW`y6FoUwX?EkT4wQwdS4y&t-T_@__7P~ zZ#qM7Xl6O3|G4pq&z8SbyYsaoJtLC$BfMT#s7J3{eeJ~;6uG14ouSvausry}PgJ&* z-2TqWs)#oIpn5wWaFwdFWTD<(N24_aJ#LzuIF1$X2;)Q3@_hwft8EqKktHvDB|%3q zab)S+aIJ!UD9W3+tr+yzYirDUCm{rH@}ul??6KjvF-MeFJ}`0JAB~umh5vzYG8w`4 zs6=#E4u$q6R-4#l+aB+kGHz#rhafTqc;JbR^O>Mh2`86zhE?kMr6`yPwi z`h@=JzFYpd=jJ%?iR(J6ZtGcn-3QzIWLGe2taZgZq;Ep^j?gzx3rf?I!f_u=EKs=!8Qs1czW&+Yrv;O9@H1k9*I)62EpSkEvdYdix`Pg;u+g6f)zSXvpG|cu8pB9#)4>YaBFM6WK zF@&B_=1K#ePlVF61i#v94^3wRUo3Um zaLK}#n$sMnDYVqWOC#_+3&&UzbTBQVpDcV8>$A}h*IOP@Z>v?l($QlpUv1%4+TF%F zB9i_}+d5*%P3siiF86haHyJBF$552Tr@O+DXYe@?!RLBN$g~A^{x`!d<2bd;k^@cm zSieXVRWbO54Y9vhD{j%^)BF&{!3=q?MdZ?4pAGSKkLa}}HAe4f-F&qxTCtx=wAu}I zQZHCIRjphGS1|Ojs_4JotF^K^{poUgz7EZ3s?dA~W*~L^cePxDcvVqW{e1Kl`ly zE+4OIYoHK8qOJXFFkVZVMUY5KdRu?k=hJs!z_PSYtkBPMqh{y_MiQn`8E}x*IJaCqZ;ixpQfdL8 z!Zr>Rqw1{4^p{ZtEY~_{B$tHcMhmS_^9Hzh(n3;hL0d{ zEB?mILlIwaa^)+9^b)u95PPu;k@B| z>~3O>!F{{Q*d2=H+eI4d_4(rF{_&-UeYg8wf2#VG>*!)xgiK=o``(RuXdjMo_q_6M zSvPnZf-P+4wh(?2=ERkBp+*RHlB1f8pCl#Jj8!#C;ow)glmUNb{4HFx$vP1mFc50D zFC3@9iq#Bu@~V9E%^3={*#wH>!W@S9keJ?>cwmr}e%by(_Fk16+gd43sC{!A}0X zwY9S=&%^wzePBRO3O=p>jr5eXMk6kur~I%TUwjzrQ1WG=9H{S4osam?746Vd8F%e{ z-=oZ~*|L$beYkKSkMtC@YLIS+y(5b1EX=0H&}JxK;moBhHzdxRw0Zk#PPr_V7OtGA zRYzTEe7YkKYf@UH2K$Kgo%Z_V{F-8isLa`l$`B=)s4^ijT0@HsB3soY+sL}jl{06@ zXe-B#WaLnZxn|~T=q4cqIiFD5pqwSsP^DPrkdg$vl?E%N;s{(@tPjxk`Vn}!z-jv) z<;iSuI=J!!8bhW4PDR)hkTX$B&O-cSV%n05?tG#(`vmPesr%%@*7Z z)Qk7Q2lI1xd>1!8;6oTU)(fRU5Q7wV$frq%4K9=ztF#jrR>YXxi3?R^qT+OSs})j~ zXgw|j$-=^GS1!3mOZ0wTz7rR=Y~gesqw=`0g)iVj9M{O$ayk|c1E{#dnLgPBk{>alt(Xd95Pl?xd9gVQsXEQ-jYXcc&UN=g6+&> z<8xK0lG7nvNOQL-%?WCS4p3?OTW+**S*gIZqC8{)?#Wdb+*GN%xT}t*aszjL1-@3T z(VoN|rQ z^lv0(#(57TIkFid5w%m%`x~w=o&L?|=?d`Hh zp3PF_j$lRr@A)O!-xeSboCtMd_KcRMWA0>5;W4mew>)lsj8~h3-Y(c|xr${3+vJu& zOvH34_x51}A}<&%cLu8hjdpjixQ5IUB08uUD*QH=SOsh5EpDZja5E`z(;V^^QZ|!O z9s|}ghjuzR#7=ZzCUfodvCRP-l1kSlM=BJ;l++YTKg=Z0C>h7e)O>YzuoQ`h{kS>b z7fh6k+k>gNOve)}k_VLxO6Lr^+7!Bn4Gh7u5J~Rd!IvXB0+2(bd9D1B6Ay8B1Cf_o zgC(rb=aBYSMa5 ze0H7$Va{=M_CA*NMoeZtUz>ft!mf+pQp&?Zw;rU#&`37NhR9zsJXBPW$#e76`e4zT z*Q%DiSi5xFifmtD(dieZmE_Cq`jAh_x#o#=E1y_)&g%QG4hH1J3(J0T>FK$}iqDWn zD|9vv^`y}8Y%(WCz>^ZD5b)#|jq-0B@M)S_FvP=|ORg-v;{tsI;mp}L+;sE2HM`3Z z(Y$HbiZc;FDhzrrUViPx`Gu=5)IEq;&bd7EM~m9lAZS@|>w^WZMyi^W08(rcQbgy| zuxtqo30xlG%EYCP%Ru&UWx@?@Y@gK|npW|lNo74>8HzsgvKp>pPr`bBXO+fGtnwK% zRD-!IDT-8^%BKk&wJ+6q0$ymno~z6Vzvotr_a4C+I6aJO>(w=QADR|AC}Y9T@9H4& z&BHF-H10>i7|*%#^wVNzpSmQo9Ztca#;QfK>~{3KPwHwTMKs=|1n7Pcpc}Nbj=AE8|1I69i5 z1$}ll?K+2uvZZq4*e1~#3Lx0C6aaz|3LtP(0bUChlc>>kghK&RxdMQSPyk-qZ7Kj< zFLkq~s&?NjWOpmJz zj_*wFd>Lz*X?#H?#bW$$-#Wa^jE^1i#?Ag@d-MBe$DHeX;zOqSUfZc zDI4y(Yr}uvtB3S|jUn;!=?C8WO&~!{y#2AVXV(Vugw5gA@o!BWv7W*mn8(3^vp-^X zI23(!j_eDmwqvqK!@~#mB$5W!+1bL)$HlpDS|AP6-k3jN9pdWZmG9{1;`l&66d{ho zra+LCev+z=1)hGOw@Dcp^FkoItCSu~AY}S!eH)wkBTSCRuGTr|J$k(`>v;%3(#T;}elfaEebH zv91+WW6hm~D*gr1nugG-5R=x63TP!R&R&V^TW;t1oM>u}txiWXE&s5G$yZ{*@r&*@ zEd6M^l9pbWhbLf1RLom;62(GEVWA4vi3ofgAp)vX zZ+DLHF_|k#D`>qgw)OZII*y#?$Rn7b_27bb@|IjVyYS)*lEma!x$fq(!;{|;tTok$ znefN6&rhCUF2tdUBfCsE#*RMlJE4qd5}trN=CaAiH!d8~_QN6~EuqK^g}c=PQ(>Vs zt%lZwH%!Piq;f)=aPJxGvX!S5G-;U=>sUK((lNv4LvSRUxl1leo7*KA4iVJNU_3dD zwp!sZLWw!o19lu2bQK$TkE@)oLpXihtW^cBc$NXyKqS~x?Hgwzj|wT_5y?SH{(%0@ zbI-A}2L{;L&poHVGw?`%Sy}%h{O_cFto-XywsPM-edp-cddt4SUCgy}CyQ!p)4$uf zQ}^!zd)N)oBx;9f_g2BWrvf5^Kc5|@h z2N*4?(6TBHOUGoFGcc?*Y1MGgL{1luE%H-~$Kt}#<$32&`La`kjX%JLR_)afw*R8( z(1*ul#gZJ<#*o}1BX^tRX`-Z*9lX1RoS}S%L>JTDo)#6!!k0<|6XK;2IL;y(bgp6L zQjA3>OuyWukFyL=C#(D_)+*=|PQHS20(zFRx9#?|31;&0K`o!!*+V6voNbn17JT-CMa&X+PTVWgq z%+kar3g#%Hw7msQd~6Gxk8Nr(B!Qu2l@Hg7G0$sNkEoR-r%~HXiP0Axjkf+TrCM9~ z9t*!wmT*?Wv^-(FiVa|GdnCRVnmJMVb=V)DsQgVVXF|LhCqBaEn=F3Tvl6MvFfC+w z4ckT=k;k+uC1d?^(hpb^rPAXGR3EoB;nF-SEVUz~n+It_d_qc5C0ZPA$t1h&l$WaY z0uQ#I(CkEpiolf@c-(?7{59-`!CQk*vyf(I+Tyck=f)~=k=eOJ$n_bQof{XCol6eq z!N?TTz@Q^4ECw~{x!0YJK2`n2_v?;_M|3fl z8XtH_9flbwmVCU61x}_+;5fV*#<|K6PCL&%;WG~Nv3GLhe)IU8HHQZo*`+UplZ$ZD zA<-L=uZAFPMr5+u!Ql8@H5yHnn0Pb+!#zAMW^4jJCSP^|9|wo3;1DBXGDgH1(s@vV z8Fa6Mxm6aKJc;XEu>EwR?4V>sTq-%v4?Al9>F16s5)*i z5nm=k3z+$_J>y0%XN7&W6mzBi`tN)6y(6189$**z?jv^56$!zHFIe2BJN3VR{D%Hz zODj9sC4FCFTST#uXI_1Xox*y+)%kciV9Fbn%MYrrIn*Q@sKqK$Qi`806ubt!`z;`~c zxzg5w3f=yO87P*US-xW({_f}ymW2_DAOaf`bPW&A4s-KJU88BZLkC8)ELcoxVsscH zaQ%cfVexX1dsd=sc`s1@H3pt>CpuTFRQtIhZA0l{+8#6TD#vzndraY(g$76nkqU(keGHV- zJon_4rWXF_q6~ASOh38rgp-!+vPKFgaO{y{5uIS9L{xH=p%SiE3>B&tQiEr04HZ6c zIXe^eyTt(S_iqb#}9#FVC49dD!Hw0Ask>UiD+ z&DQb2X~q?}t>bNVMs|D>?|3RdLC4$QvO2ygH0;R2@S+4&=b6Y2qbq5eA&z6|vXc2z zCyN~|vA;1ZjU7MBtmgJzD=$l*yCS*djGg~ge9tZC>K?V^I61Ez(LE2Jd*SrfGp@a& zaRmz~9mi&#>=Jc3SLMZAJ&Q}Ywc;o#tw0y^Ow%UhaG{|F>O?+kCATtyM!0mjQMx#y zbOo!jl_pgt+O(zBE^vgk?9^+u+2QhhJBg zgZSb?)mu;8-+AirY5E7g7xaJac>e?MUAO-B-ksY{RomO3)VDple@^ZxHxw?vx3)H? zx4&kf{;?0{@z4j3gU|TysPnZw_s=t8Aq@;2rUuyErRt&PlTqetBW}n;R)7msK6kFJGSQRtDWu ze!1sPP$-7m)(l!PNbZH>wqhRALBi4Wx!F@DBrk`f={WS*cSK!Xv-N5tUW`woX>CW= zj8+6&|DRj&eZbxdlE|<+h*r$t&ZoI2MEhhoEYEN4;9bUdCKv?{8hw?87p*9$NLyat zxxTsMn@{TY?mN4(c`5Bb%UJ=hv+9ud;^l>f=Uw~L$`>}bbp7@E_qH#*yL=vPKdbo6 zA@7A@R|W5di(uGHF_C-79WQfMAom_;kd8cQX`}$+t^=or=|c2aW!}~AFIlqp(~TRS zDxx!dM>%-7=+Wg@T=R?j?kTwJ#rM{%eRYk|w;3B2*Oiw)c=fd{%YOa-x(QDqo_)iW z=U;g4&Ba&Uvyic+JrAHEReGb+&MkDj-SJH0uHRJt;UT#vQkR1LN}`UW4_hyc)j%rH zCrdY-bSoEKO&Dv+CPG7tmBb^|M#=B$lDm#j78v5qjuI-5E6Ff4ZS+g@8pMD2CZ=Nx7886k4lC7gqNJg$bJbR#FJ`WHcjIuK@AYlP zuWXd7l`V%Qrr!Mct&H_j5@vhfqSw&2AzYckbLW(ekOdCV@Nl9)v(PeuTGwkhW3&ah z+A0Zsn@Q%1E)k^6p$T}<@&*d~I%}_+rk9RmMqAMQ!K$|NZVxn1#1u6U>k$bJq(0|+ zvDDcjDb(6KMdHVGZ`Reld7aM}eg2>8>OQ|9nnF~8>W#0jzW()EqU`cvGA0`KHnXVKBj zD{?q}?vo4onAgwHJ{&aOq@!)ph6VrQ@XZ<)f5Z=t`q|5`*NVdJyv6a4w z-=&tqO68nUTs0}_#W8v@6;}Jka?p5Ql}muX z)-{B531KF~$5@!0rDynAK@7_eumv%!z^`YF=z9|MJ>aTBZ62#sn^0-X7};7>>O#gQ z$nWChOAz2E@~8yc4V*k3=rjMLDzpwZ=+`@A^sa#39iw;p+29B(Okjn)EzPK+X$-NK zv2qm&rbY#%@}h#p3{IhiQ`ZT65pFV>2rp(H8y;q~Oi33wGAJMii%zYxD_ourSwVlf z+`}7IgYK(A!}wjXbi1MWpEa;5{1=03@kjCX;YR#7%0~1ATphbbt`15;NiGU@D6nYY zozvh#dxi_m^z$Qe822u#G&s~0DlPLo{2DC=URyHkEd)AU<`>`M^pab_(v)0boG4~^ zvQMsE!=6l;d&Pot&RN$~nWKN9U(S~3wWnuZdUH5;e!X`0-` zBbw;wINZb3qcu~7|8l7Ihnh;tDwbO;A}P%!<$j zC?!zyZ5~w-ZYMxtmlFsF0Mb{Jsc2t>*e5rBYp}_MjyhJkY z-Q?xLmQns1RxcA<9k2qW!V2K3#%z8AVSI9Y2R`A}sn!PeD3zURX^f|PtUbnqYK`J( z-9D<;{i;+KN&=Zyy~lxzsd?+LB$$-~wd1t-{fTNj?mh_gE2V)(9N=t|rMEuTdkPS~ z?NduYy7{YTNO6&ZtL1}60-1vqIF+N4^Cgl<>3+m{q|2P>K;fp>?pl4#qPep!%t0mjXFqne>DMNIgf&hifXy2T?;FYT;7j27=IVI7HwyZbWGjR2h$oz)T0G zKXjBSc@grU9ziV4h9e_rHtIk#b-&htX8xEGnwL>{fiKmtPE*q6%?$?tQqnB3Ds4@j zomXY%uC8iWG|*M^bnw94rLCps-{XBMF3@6jp69;*%FVgtuD9!SPi_0xtmx&U2bNsi z+IX!Y;IU@ZJ%XmkxX9}zM;cE0l<;>+Y+qp+@%yXgm_M;ITUzvw{uCUQW489L#05zB zk{JRfTJfX$x4U-f-#+TO>hbF8r>=pT`Jt`-Anf4IG@O4&e<0P*?^6fL5Bc&NkLioE z(oGm%Gcm&Q3^sry0@W*MZYW$w^25zL}#jxIpzD z*LO+ODvzh?KlmVtB2}SXbzExvbGbKR(TM@c|5Q0*;7ufqRjc@rqSA&xbsi7o5rCi% z;uW-(vLlo6M?2^r^Ft(l$(icMZ4_u;7fR(g2l0~=S}(1j4(ERu?i^*=nOe@_QFUNU zQfdRE9rBi7b;roah~^s^2_z*3(g&0{C6QikL_K>zCRXA}@++)k#pVwGOuks6(T`6V zP-so11VXi;|8M&J`#)i8yn|j=Irs;Cn|^u!?$AA315XaMBNO93)OxuBb<#7vgAfUH(cCwOyq6Px59@@0&(5s5d4+8MJ zYx$RJ5FbYmWY3ZjE#sk&$&+!W(Fxm_96Oii$E9K-7nk-;i*08e`@X#68+OIMee8;F z?)Y*a>jqIt9(YgOE9>1gfeKF3H9NZ9$YCrOZklY zU%OTxF>zNCz5oThg32EVsr<`Sx#Y&um!Uuj@8ZeEP>uOURK9p3ql@umQwaZvI^6hF z1id4t^C#xFsX)QazcYm=ar{Z0?z7$r81F3LPd4k&QiECsT}P~ZMjsDCJ-3Alq}j%k z9OFqHe{y^HiL1rn+RLBRo9z!4+uDhbxGSanxz%1gx3`x{^zaf^yYV4;v>OI>m~eas zzCrMb55(JBO&^F);%{25M+tlDsYEm{VM&2LGH;Utl|T=m&6YG!!Y&PzP%C)}ODZT~ zmkO0YkAa3E9c;`Oi|@UmPk9SuKmLUZ)Atfx5^eD;jF~(STAUm!G?mY&Jhw9~7K)7M zGX{{jYhG^ua-Uu#50TQcjJ*&1n=7q6q!*E5>n|a{^QCX@Q2OApv_oh0k(>kin?0ZC zPeNze)Ycw0|3D5)@WgD=uhKvN3}gJe2OhxJ9B%+Wb+A8uPOp@Ni71u{2Ux`A;M zS<@|!RnqmMgbU7?e40CJcH!*hJ1%57Ecfh9oAFDQdsh7E=O^fe@`%!&d77qq5@IS_ zf;n>Ern^syAJ(+fG6TgyTqhnHhBSIzg;2GBk%^??5t2d!7*L!Qo}ef4ZA+wb_)knq zgi|mGkiDOh5hn`Dy9bKUO2GnbwMG zPlVHhjRCSP)=W9m_;6QBvR@qxq{=Q2JL}<;4#b>*<8`rq#p4g8x+K;YETM0jg}M=#!AuJ6r<>2yka7@^ z@^F*zdj)(R#a;Bh;Oit~7aay~$`qnRa}0h+Ry0}8uV3)1t4_>NdwjmbB|VBi7@ZWI zy95V%`_KOi+sI}qrG8H^hxrK6@`JU*`fv2F&}h^U1y(Sl#ENOlEhj_7eEEqlM0NVd z8s+9-E6b4MWS<;|gL^G6Lk(ZaIqIdeT^ZzOnhWkd^g(BLEnw`M|?CIlZElkXrs4iwpC~r z#idxr(M7>{tlaGJ=%s$XEM9#omTzR->bdD`g{5}!5Y608kZ9&*E``2 z?A4nO|6PCfWe=Nvn8g4_dUc>qsT*qxl%T!&7=FXND$HomVcwPKNJW;ll>FSftrtv6 zRfqjSH7RmX{2yh@5hz|sO zWe^`V$4AzKbr?H-uQSmv^#$|gE)o;1kc5~nCNYVa03Z7)ti0~>6&FoS3g%+yXUQsa z1#?fo{*{)*k#kDs6lh6fF4cdiptP-=i>kvFjqgSqZqj^fKqnj5q~ZE!aZx1(xX80d z8cwXz#TIy3*?aHlk9hTNul~q;@3AuP?tgCB@Xy_Bf%rGo?~Lx(n?^_V2R`g)m7}9< z&4(Vi5}kByC9G}d3(WNZJNSJAK4d`>NaTaqf&4>hg#za=+hNGT*_#N*>+rBoO~L`v z+1TWxbD>-uXhDOX=&pn$=&Rl|M9Ei-c-_%{c-Z9)lYklW_{YG<^}uX!%BI>u>V2Z zXttFg=_2i}V1qNcK`z-M=UX!zzC2@0aa~S)-zq%EfkiRR!LGx)6K!>tiqJ2{c`rZP zBJ6uB>ZDz&@Zhu8hVRf$SeM#n&ZSm8=P zle2I`(NEo}iZ>XY8a?m72cLF$C$80d$&2h#CMihb9?-}1+x)+pm=Cmf5-sSQbn2a3 zG`I^#sU1eHdu)Lkn7Bqv4{e@6&cxNg)NAzVPKED6lO`tf2+3r8KZ4&=t~rzEiWN~T zRzy7e)8Pqp>IqCr{^HP{fBg3yhjusjRmFv*xaZipUmj+a`+D_9zCNhG{+wEbIWl8t zWFNbv$2-U_da3fgt-b80&wZs|tAFX!ztk5Wc%Gd_eH-%f59ZF|he=mC^6^22x{MF< z(0YW+deGmpR0Q)919|YJAVwnp+!_scxKZYfl-#k0=;ROp%l1bid77xku5V zS5A^R{^=f$W1o#U3X2Xg7j8C_H6ftb>=+@kX~~pxg)iOGt;;masQrNsB%rI&@9KL# zJ)pO|`v+F_&jGgJca!j)wuV3a>PbCx|J?^4sr$T9E%$o$#NX?KkNp!LUXJZyr?S_^ z9@qcy(cSM{|E9kCvz`z2y`8J~VJh>6hA;&sN$1dFKPgqhEjeQQ9!D50e_vqnG#SOx zXLl)S*GShy;t3E}v>w#2)<1Xx3-pesnY8sTU4L|_M}PZ^4Ue$IH!63pe3(tyGsxz@ zc=i3o#oMm=obBlKJ-|+2>;9LOe!_m)_m=)Yf7a{!^~dzX+wNx$R)VV|{p{WYqfhEz zbm}Ah`fG3Wu**MWb+|q0*Iza1%_I6#Z$gZFLc_S^j6NQlL8b~RI`N1xCZ)=;l(|A_ z2$N|yJ{gV@KRwI2r$C{)XZVGkVER)>4A$3mAFk?UQ=j{a{k-$=pqizB`_XnD!>>OG^(|u^vMbi+Cqf0>4a4lh-Ag+|(qrm9?^Xsp8})Bpex>%Xq-^n=mAym%@~uX1YmsNkp7lMR zZ1qPJyvabsiq7^8I|f{J_(?dDICL65|3cTto++my5lMn@5!w;83#)^8(p1OnK>q?I zOJDGz{t>>qH1+A~-8D1flGnYc2VbmcXP2=PA8Xe?dhdaK<%@bBd0=npq8?|9UfsmD ze81-nR`AK6Six(BHMxriKi_|C`_=f$^n?0E`XRsm*sFsLUv9mPNl$P8uCd{tzX5lY z2|$Y!4Kp%jjUka30+@2dc@`#YqIvW9fu5U~A_#-XV%AmMwUfk~v1Kgz7>M?;< zXF=rA7CFwiaGu|sj+@lE*8MNSy>Ze{a8z>^eKV9y3CU{8loSP@=`{UGa&x9+Dhf^z zDA7Io7mqx}X1%$k|GuA=r1p8bPddNiv32XaSC@Cz+}KuiaZJ0XGqo`5p-+?K4_L)l z2iWrWu76{L-V{Jk?6SRGziQGC_8pt@a(|xz*02Jh$3=l;>8vkMi7V|52V>a-io{d&B%& z@;J)#NV$-=&HEd^_5hy)g&u@)>u4wE$CP8Zz6g0zf~lY<!}am!m`pH`9k8#kZD+%_nW1V*4s;snhU9@FWIcuMl!?s6Hhxes_G}M-v8jr|5@R~w5Ybe zpnu)CTmS0ug*UrcL)nw%YdTk#zqnS-FL|hE#im0~^q21Z<=rnAZ7=)2-<9>q;YJK| z+Mle$k_J|XHjMd=Hl<8rFkegxj`*eF zM_TYXXy8b{%8HS zWOL(7e_4HZ5%GYBy7r)V=WR959eDHT@oF)^GHK0ZbDk~FT)E+)RrOmQ+?qK#CT_*1 z2Y0@2UUuOrlWog#Bhwpk%s5ATQ08c)3BP5GD>=qvxsN(nMap` zvX^fVKM?W^5x#;`!SZE}{fEcDzucDe5~ZKJQ9eo3FFn?_tuK{I$1xp!m@({W0 zE!z00MQ|!uFMXH(?M%hbTNvWZq@(~ewZc79BRvSFB;YQ#MQ!e-v3ouPy^sh#?D9k( z?b~}BsL?79RLh2?V%W>yuK%AywDslu%g0i0?Hu-M`Ke2@516Z~j~{*W!2UOG>-0H5 zw4k#`(cPUcYl>#w; zl|o8kbcEiEPei`hTycin@$S-pe#%i4 z8SS))tbkMAy{dvjjYR-L4J*zYFBvX%W7%o?Y=q(c+E(GXXEz zV|hWeVNV@MO+M;BjP7)f3I{)-4yx*xf1H7}$VwV^%0_6lcMHQC<)&tv9mF z>qjl8ms}Uh44VfhjJ zq_~+-O5)Dh$FlzMD=*BYZG17fAgGntiWpgmneWl!RcS}4Khmsud_e^a&{_^Du z2B)#%ZWTt(0A#wx;nCl+~0vKx1DdkNiz@yH2xw9*h5d#4`>xWhYnzZ5nQOW2@VJ@UH@2mZANKH|VG9jAUWdGrV~!q(XWG2ae2pt7A6S)JJoM=EV$eyeSxgPw zR+m@DR}X`0JpSqfO7!F*x5R8_l-wy);uNZ7jq|z3Yw=ixK!!4FyB==oX<&1{rwI8w z`{hqZ5KH9m$-kkV3|h?Bh#u`4`sH8U6UpnT1KhtKJd<{ExP#Th=ar1lnx0f%f6Wc> ztezMS@8IpSc_HV|?nz>63Nh*s^O9?|Ib35@f^AyRu3ta+dua zD+%y$9h*UN{W;g=cl5&7vHW1c#-1ObMGJ+-{4OTtKq@35AtMFGd}ZrPE;&SC8yrp$ zhEiSn$fndlT4;#5XYS^O(O&bSSDt(#OwbRyH`+7EBl6C1UB`qZV*oYzMz5bI`Inb3 zTjt}}=;0l|KdZ|e@`%)^)eb?t-I(rFv|Z(LsG~8TZ&$%}Rq;ktBqzlki%YenS6YOl zBIE>U+ud6Ob5-&RR(pnqFIpN^aC+wZKh!l`qVJqOM#3+~Y|4O=sqVxN)}_Z&N-~bj z5oTDzOJk?Z%ZSgvd?e`uvRGT)JkW38!|5^Gj+U+a$hPOx^g*{d+so#@Rg_hhIwaUX z#*#Ya;FI@Qr=?CC^S~YYJCk;PzW;5aV;)DTFzjbmWXz@p+>a^ynDtGda^WyWc90)2 zT4U()CyfX{**5yo(7=ga!_o{p&T4R9!cC)d38*(@feq}K3pPUvb&-Y@vc8YZmTT*@%Wr#+FD!k=`&+WLR0o-6@57a!H3 z!h|15+_5#EQ+uUW_}}F zVdFh{GOn0Ta{kw7T{o0;I4(QYspvx}XaaX3Upy1aMLB*Xxo+&3CW8&0=zoIf_E6`+ zqg$)zt^2lg*%`AiBV$xyY^=#_r=RcLM}pLCwksz#zV-aSa-*#8JQLP}osa)KM6a|NV{~-wO#)bqRRZvPG@qQ^ZG^Aia}A7Ai-pb=?7o;CkP~0l^RX z#!TE0TT;rVMt5e?QBN`IxkF*M>;UHl!z3=%!+lVYg9tXaJ@#~h z?ffd?zDGxP-ZS~$_|mRZSLyp2l`~<_=|>I_&tn-l?CCNRo%EZn&(p8I-9o}h9NVc_ z{hTjvWc*jN*iY|sWpjTSm27MdddE z`UgdAA$zGZ1t88P;DTN{`Eonb<5^0tt9;90W$R4gepV%``HI*%b5x?a91%Q&y5S| zbYN96bONAa9?aKOuNHD_#1PqRL5nC0gGFu@2Sx?`BU6PB6%pyIs_GRo?QgZ;kw;#6 zg}(ef2HLYyBEO?;*{8{%f|R%G-k3H1`1$5^PL-F* zS~5at_}PL+i+fshDc~x8st7FQK<2cotUC0Y3qWi^4##Z|#za=IumspwU_)i&rLmEK zsphA~75;FVXT>h5xXA1>+E9t%c{+0CJ z{{KpPFCAEVZ-4vn@1@7Dr1#Q=*Uz}t_5Ht&KI%sIxXbimapdk6Z6K16aQ zOk2nd=Vr}uB@jvU3-+0F)Kw0Od~!A zsz^ZjN&4Z%i}d{pGMCKHdApE~z}?o0_jfEQ%N#FU(Zv+Tjq%iI;1Bg~VSYJ%^~%5K z;WyqP8;O6JKm;!jNgC35prGf)^0u5w`E|LJ()YnSn_)nKT^%N4x4~|j8TpNZK1-wJ z`Yufnv+`r=E{KnA%YkMgvy%iL+cfLYGOMG6dXkRp?c1~QyJ&v?-K5dSxTu7pMJU0##Hbf6XZI}qBF$0*DU^Co3v>xx{P{eABqz2qfvChfS zcJQYCjb?(8w*QHX2p$+I!n?J*uoQ9qJ40`qLJdOEeHqVxdq^;L*a^t=KKrC zFuc$LEjS|@T)9^>O*o9w=876|A);6oFL-Z6n zTo%~yu#cy+Lnv~Y*#|S*O7*%{-l12}0oV>{(G+VCuJ=wTgZ_u@DSf(9J}PW@aHAR| zdvLL_^W}rbRO=(GPTh-7?R-Ce`#jo7bUU`~+PbYu-6<7zmLC4+=3Oi2Y&7hlUFAn8 z-AnRK<~5riSsl}4GcMV%Zhp>NE7Jd*y{Ysry=KutW5Gx1%iog6PhE|kv(bU|9|GmW zs)W=DEkxhu3ZRH8pCXmPX|b$3MZ*OVSG%T+8^Khw5rTk%>k@SAZ&FcDiBexJ>hqLM zMwm?@{%6taON3Ao?kW;8X(QD&VIxcxO7L7!i;(YP)?>}I6c4qr*i&}`70gby)5}k? zfgmHe?W1g=NNmLRDVcn3+mFvhFD-riiNEf0xogL@wvcZ>NdNxo9(v;Ty4$VCQr5hZ z=CaDIInffvq?zjR#5l9#IVX<^3ofgbWv4fU{t8tFfq#CTVv5c&&h$Op9kwSkxkSXc07=F!EVr)Jl! zY>1dOEM)M6sEH}#{-E`jRBf&XKV8I<6E^$Ur>^~3DDT2+4ler}^zz#a(cc6N8Sp`W z-%^Ik#$F&%CBR~_Km0p&0Ma=J(VEbz`!NXa+#12w0qckqAow|4rdn5~J-$s{)<$Ba zT6VVV`!Ev2r6!R#`L^7oCJwVhW=`%?EX=|fao9CK=LmLZWmKC~-NvFz3h$;T|8~1zyuPM=90jeE*Zqv)MzNZ_W87-k>{}RWIIu zlgzzKgte;W+?m(jjDEWUSdZ1gT})YQ!^j)uJj{xX5y&PvsIE;7^RzCzIv5PM(AA-V z872D9T+8m}_gokt5nO_c?7{d&6^QXL1U0m^mGr2p zQ&X#ns>EOj4b3{0K6YUP*={hD5DxEAm8^Y{!48DFItFtw5>DL;X zq=NZJE@iUV%T1cd^h@+h7>L?GPH&ofc`QT&3V{^y}!L0nK%aL>abK3+zzF{Uv-TK~}7Xa{0&p!>3;F!eKR z-2ACi>&0?U%PO zgo-k=_hSTbG|@0-D!TP&;BhV3Wn4?2I*$JOXRAR_Gro78f%jwpMQUD=RsGBO~c2X+fEMD(uD(3IW7 z-Z0pBS0~9?E>>LM&W@K~-T}c-<*Kl|!o`Xo+ylRR&H8kV1iNofg{&3Km4sl1K|IJK zvkD9tV87cdJ}X6%6d zML9i11meM`Kq6&Q)Aj>TZ$Lx_eaSc3wtpTKtk4`*5fzPBhuSPFbL}fX+<`}NyHtYH zC86SGYE{ReVsD%}dZjmkTO`WT8{fik(G&k6iGDf1y(DVM!Q{0c=i?3Us5YV0jwh39 zpQk^+d`IIQxhIXbI*VxRJwZ^bM-i%KxB0zQ<4A=7Rf=F32o4uG7z1K!B2(YEf5Qj6 z3^_-p=YO-cD}e8-sQ&={q9Ok6H+SCN6tM2-!mV}7T-aTe-BwVA;anHPhbS0LV0eZH zal00`mED-J5zIExZRCqxR5Z9erM9*^UMt!D(dzV%3R3o%hP3%SPkT;$M(a6nO{F2~X%PgB<^<}ndtP0atx6CaSJZQqg9_pQy~s6|j88`1J;*>aX^sM$S8@7z=% zzR()GO?a8TCp#gq?-K59zM!+dUw%G6|NQc5`sx=A^x}!^FA8JRC$4!fcc)|1>c<{i zeTKv~*qK9YWd-rrdxZY|RF#81_fa#+_|9^Ugq*Zz)MZJzkc z52mb*8nmDk{_5wN!7TH=74|PBIKwp#|Bi%mzU?t4DIc&n|CaXy%nw74Lz{_yYE>iI z-hoNydza9+0RGcs<%Z_1d#-g$mB0B`xm2=kUjxxOL(l*AbLv$t*t9|*&`Qv9Q+6UV zVta@KhS+Cd4HY5B&p_A&eikD^M#5vvM1`)fJv4IqoxvVqL4S-LO5@sb>lh{GX{f`M)JIRROj+PNPjdZe_Uh2`B$=Dq_4Eu>04(#iE6-;pJea+CNJZh+1XB8UndXN zy-OlrQTM0@sIG#@#pOx+7tUDo$bEyNe5X9|Zs9T7abPDc&)hqC?r}?+En%2pB2j%* zLCDiPI-Uc*g+1(`(Sc!R3jp|r^qcF7S=9B5L1-gCFm#p3S zI#qW;f>hUCAZ2z(cXl^Okx^AuG_$G-U8%%~j^>U9TBZqEfWtLmAMYXHOHh74pCyeEtomb9{D+r199UE-TQ8zYp+4eWBRL&Y|TSM``3Gp4& ztQnA(SBy<2AA4Mrau)F60?uG9RMOmC0>>HH+KX`PSK|YxCNZ@0J-Ykq_^0mafPi0| zhj)S-o#AjnQR#L1ZX2zmOD@3MHJ6N(+B#`Wrw{vqSz^K#?Sn>SUwE#okTqPK0V`f9 z@K_&>k!hFog*7QDHHC;(85C6+~HJ-G4{nTSrFlu#R@n^+m5kMEjQIRfESi4 z;}wEgpbZ>L_(%3&fO&z0n<#E~4>NoL-&Hu!sB2QXS`CsdrMt+W@iWHkESY_RwjVe^ z^e2*@fAap+rS!XfSLv3|KPT(29wff%u=;w6P=sPdib64I+V8{6xO6NFdUwZq4%%i_A)zCPE zs4b2}caU*=pQ0aiX@oKo8t0VaH2$rv*IGnd`Sc?>XFqlvqJOVs!6%$`@GoiAInZ)G zCNE|;{!-2+*y5D6AW7Wvo$X&5+clfUX15c3Fbg_+9Jkb>&`{M>)uXBfpy96!QeXU7 zcEgQZ41Nl8KjO{@m0im7XF*2|VOIE1fyl=cw}IMdp`F%~sQt%cVvg;H>k8>?A$~R+ zZPnTvJ?}}Gy=r4Xf}v)1_M^ieSX-67r`|fO(Qneq#H94Gf0z*2WO;UKPE%g_SI&R_ zGMr(!9gfARXVwcY z*0Mj(OnmzojfY2FI|;{BzNE>6XHhj|>2mw(3%R*}Ucs9Qg3z#e;{{T!t+QT;>{Pco13YQHK`i!jh31PnQU&5|B(m@j-Az8UjFgF; zINCMVcC*-}(QsytRO*Ee)ZGnl>{x8qVn11Ev;o0aLp_?WhPIIkAINQfq{@d>I9-hh zeip5#(eTY^R2$HP0J~i(zLulOV;{soF>rsu2@)P_u$4EdWB**-Ym1Q$#mn{?Y&PcJr8QCJ) zotE6oHu=Z)hU^_32vcn_=j>71VI>2hLAvc^J-KF-N!M|6{kgspS65WnppSZ4)!LyTa|RJb1)i{o($#OGgA4 zwoPBNZQH)ezpVnnV{pihQo77GL-$05nt|!yFvf#*QJp$%CqAL=-DN(V?UK<)?Snoi z)YnTT=&|8iHGFNVH1S~ChQtt_7!mVm>eB)TuRb)U+^y#kS9a-Qf|Hp#B)* zAQ~|cH!BP~aC~swAwx7}&elB9$H9LJRh>gtJXe!;j(&3bG`aU&TFrAShIIND+37!@ zqg~YW!w-mbrg@GGwin4rUR6oJG;jIgRZ)GIMy)!s?D@_Yll$)g$uIt_5KzYQZiRrq zi63Yu7X6o4Ic>imp%$$PbJ>Ua+f7h{%`0yb^E(6Y-$YQ;ngHLf+|%;~ga93~=16k1 zx$Jl2D;Z%x^yEh-S|X`v=ajq|LFAU-hx_&08rJg!MJQownsHxvLvvY#w&FCO)2VK1 zqP7Nq_Cv~n%QrYOrVacSZmq|(xdT>QOJGAbnwh6SnF$G7k`N*QGM$9rIm}Rzut%&R zcVR6<&=Ya!7%Ae;jvacTK7wjYacy!Rw{C9rq)saSJbgF)_=jxTO5d&cp45DLnJnzw zc$U88${e})c=oyPzCF77g`K-z%{_AY`L&ifL&D_oi3ysh->{bQx4%aow_94tf(t_* zjItZzis-*+;a6sy=pMS};on(2qh!P6i-%9YzGUCNCHAHJ_oWHq^yu-k9viPM@A!R| zR+zudJ&C#k4U;L9H70`4ij@@OCxavSq!}vz8X~`t%1%9+aHq3f)cLjV-I#o6F`Fo> zk1i~HFG4?L!)q4XCmY%pJQY(?p>cF(Y73k#aAR*fwP*2bxlY^{QfKVOS%))Xo|v`v zry8e^*kRp%|NFqD6YRVN$H`l{aS@BvCgXy!ckA?k5Ona+LteeonUU*i?*t7SqR;}smm_uoei6|OS71&?}xgBA-9#k99 zfn!i<&$AsLkriznWchop#7^fGG6|0dp1b07!V9zNhaYG>y`+|yRt5S!CR2f%N+U>) z3XO>v;7J!ym*nAf4o9gHgrDIQwD8(@h)N%>VYQek>484KS-?#+yuj#H}2ntl)4fI|@gEWej4MYZLpUhDCx9 zAcOUcUJT(OqU9U`+cx%{+@cXI|7vR<0sc8vVt`Q$t}>?}C7ri$o`SrqW}&*`-{s1J`Lh-Tnf?XMZ321bl9f*&?oW?J0B zVzn?c8<1rLOnR6ThJ32&jf~G1LqE?IC5*lxiTUr+4_?tZb=J4D^5BuxTvAq+{o2x$ z_c`Qym4@=;8zq~D#;wGX`f zeD3-5H4U5Ry&Kb-BZWH44W8rQTv9_qUU-RK^e^ZrdFqv{k2Y`pB%6>2M*55Gh-@(` z_GSA1g*y7-X&|10lPGH#kIFOt4xyLR^*5Rq{Aire`Fl`cK_`B0`E5L^dcM(w>H=`x zGzugbDX_`SXVef`pP>>t!|PSO%45#&%7zRPb8?-HxoK|`?-wh`ttW2lxU25)kMy5J zAN5?#(n=Csd4hiUQSN(d($DA4FIzup^?Uw8%9pU;@+X7IadOw5?LQsbah5Ki+h(nc zeTjbf?wj=dYhUL!ZF=J4oT;0Rr(`#6!Vu+S>X(C3n2`&>GQczl@ezx<9qIt5MT>dc z+Sv*+p2QUO#}sA$%j4zMJ9Y#_)6pYF;5S<%Ltx&?Yy^hF`JX8^#qc6X~lf<`J@>!hbgrk8S$uSs%|4Jx5Be?%a8`%3I{iknF_l*q2DeyKj>F&#^(VeY}3^=HrjELE(XiG>lWSAdR@GoG=s) zIkP%Zm^#e1jv(}zk^C0fP z!A6VyA0FK}J98caZMog_nW}5%^=wR;T)usJ$13M7>)y_?HCRpGy@~Ls&SJ0F+A{Qmk;nD_q@qlws9;VQPg7*Bq3OzMy(Ejgh8-ZO4utU zybnXLIRT;v^T(1$4sA4(K^!O%&%b-<*>{xCWTJ#dJ%BxIOgxbu#=qYZ$F+ReLeqcnd9> zI9{VSFVTk)+5tub(1P5euZey41O`KRi$hFod%~TZ#;)^Whg~L)@U!-CzVFIvavVT0 z8oe4Q_AH22w(Db(JLG-l2@6SHi$l5p`_z75#h-IY=$xfbu9~*?p-0!pLT%IH>@-)J z*8g?S{;#dOa&e)xF!j~!O#91ATjpg2d-`}TqL=)Oh;Yny;pA-lxJ^r^?Rs=wjA8e_ zgzh}Cd{fg!>-LY=tbHeAck^7@m{xm_@mSiT8lpSeKQE+@ zs6$1Nm(`1yd(j#ltf=sP0>or)mcppy9q1iF+;z@)jkf!=YIJgyqo&{YbGy1$u2$y< zYP+iqQ>wM}w5xTP`9a)%aWqz5pTN~$zR|GN;45C&7f&I+VBrJv#-{9_H={TWGS4C6 zak!GGpMGdVQqr<;!Q$?x5aapQHw6y_FWU6z!oq2ByRuGPv0=Mjd8S~@*mcKpJYALj zDFBoPlyFqTI0eGgMSOw*j-Xqt3o<;E!9ke@kZhqY>hQ!yNT2VArChaqw&%I3BW*L@lNYf$WpQ#^tfm?yA1?19$ zTq8Md*G(lhN9EHnUsU}l=EWw)=m_s1?>?e!xtk+dGFw3s);^46y+~^G{fGuMt0rHE z=C%DV6CW8(7Mf5+NEkJWR-KVgalMy!gk}IcAbAZ95(E-<{%oUR!@SWcCC0|H=S3sQ z7S@wn7SX@b(VtvffK5EGDM2;-!~)?M>UI(@B+x=)p~eBKx}WpwR6=hqZu-Nd zTTu?8=_{7dupBwNSX*1$RjL#rct^r0RQ6WP)r+_ws6@4eI^$JUoz9Ai`{lX?Q;4Y` z@nKPZ+<8fpJ9k%UZ7qh@q#(>*8NfGTK_dJ9Ep}yH|c7?Al##9lhoF;SW~cJ$6f`v!P8)$tfr!G27qIi>Wj0T|+I? zY$>Ckttm+r(5LLTfo9llQD4g$xlqh73e#t%3+CT(j5Uj0Pgixx2-q zPFtm#rkV#52EgiyDGY-H10{@_%y@>eD4Gk1=RGmpL(tCixaWbB~hpBWMME*OU_D_EO;H2_Ro}PY-4rXk6cgsTw zPygAHTDEMUXVbjov=w(x-tC~Dy!F3y2X$@RMm+HBg=*zzWx-K@x^Vf6t;gaM%d8oP zX2tDywH(Lw(`Sf^F`Qf^51lwm-=jGfpP`>!D-KJWeZT2Xl6v`TKkeM+C|~S3VEE)P zi_@BDDV_hKS2)w|vm-CKfE>K*dXq;s!dwvp!G5TS zTNt(STkLp&Heb%oy-Y%1I6>~dY_naapPyL&`Qem<^xx1A{p-*nGDv7GB|iAlR!aP? zb@cu1zqyUvfA%aH_rs=5KhO(j&(e3>Hrp4U`Fq|O5`5|uwVz=p6e+5l_?KU6h6O)u zEiWg2Wnw!3v;}M|hBk;5SVkh|F4W*+h0EM5U|n4`dlZ2^nP5^LKA?yvL!lys*AFPV z(tK+uc#@9VNQ**I9wwHV)DoQ?{|TYaBo7*6`(6m39XiZ-Cr!RnAxZc+86+@ksk-+1k) zhNYnPcvd?x606iGwQ^%#w@DIzI1tZe_^qp7yS9E^_Jy@;FA%HyuWUd;gT8{W=WzRi zFn?mU$Kgz@Sj_kgxvrY*mHYRvT=Cp<*H>5h+zJ^Egvy1trF`*#ySq}pD?mKJIz_%A z7U^Ay@g1;he1*llMYPcv0P0n(YS_Bs{N@F-9xmQO^C0gjOyMfVou}XK-%sv5FQl?( zZ#p|$^NITP*NHmc?h3U_g}CWs7Nf23&Q)qz%lCuc>t?1bZD!V4Lh5;P=l=cl+w-oH z&Q`n7Y|p3NufI-V9f4Z-`0bJm(n>5qHh#MRQHi_MHV&E62hj#_$kaZ_Eh-LSW$hcnWCM(*S9_4)Ul1DHnH1`Mgwu0{KRWk>15CN?P@F8KSBu)#`FQyP;LjP#~~= zM7<0$lR+?F^3^s$(uLtZiTTqqE(}G0Z~g=63AXWb)wZe`ue}&!N`7ZmHS&h36A4qI zAnyb&&#-&E(WG3?tW))6M%R_hIOohqQ<(PZ7=n`*A6>R)%5Y)miV>IyjU*9CkUtk7 zt5&@Lw=&v(Nq;DoWnRF&!)s{sMWVYA8(Q}cVA zh#ZaALe&ApA)_(VJ5Vez5YKXTfZ%WiAUhJpR$lQEUhxtEIc2!Iy%!#$=5RE;M8c6l zPS-*Y2ZUHTcRGHvbe2!!hu_yVJ|Rd9B#w%5;>lXSuI=T#%<^Bf&EO$w4o98KdEG=+ zC$$rhlG9ZT6p2p)@k@}}MZL2fwIUUAAH!@VuXQCU;h5AwI~;{TEw^AOwXi#7lC#&? zu|kx7@Wd&8Rkz;r$AO;2&zwP>-^ImTBH}g+&~L;EEDB*oJQ>rM?|Jx|CwXp}SrJR+ z0~fOEkR5HObIjAhZW%Swad*I|hIH5wy3+w?=`vi1Qa3<<%*p}IPQ(mOG(wanTNA<{ zWQd%iz6&X=Hz~Y?MJW-?OH=|LM*J`bEgiizlO(V})X=XbjXINmuR{Jrbp!Hev1r7q zMxjB7k|HsokY8Xdx>2eC4mcoltZMq&W@XT}psG>X#Q=3Vc3)hZErv24J1v6iiUEz( z+(K;B23sb(kmMs6T}3_uQ`B8oVl4t95D^NVpc-Opq2|U$Qq*D>%sw!2YH*eNuom&g z30eSMb9rxbmFeFHe}coGU~q6xe^m^#zvFI4FpD5#eM9imU#&yXc%5h$8cPM(q|sn~ zsGbIcXI)ZJ7_a&vl)&&H82MtH*C{m!&Nz4$99VwW0mwlq}@JYDTDB7EwU6swvDv?Bi6grT?ZRvxp zSyXaMNe)+~qfssbd!HDwL@CCCT^DE~)k^h?u^+JN#c+qysSYhrhjuj!!43!L79dn= z0>nbT7O}M>cDPC`M2bKHRHd2#b*YTtVnq^C=XVzuOD6uKxKuI~<1c(K2BHBf6Y>LP zY|sAa5^BR!UtrMKXTf@LrtSN}nh|VMmoA-ZFqsUaW`y%USi{a{88&sP8!ebg08YO_IKw?Y-Zr+BGTa1Y9S=&~hf!;>@IuD*&KS zmQC)sY2Q%sKcuw^>1Wf@j<1?JXUv>bv02KfPD?9aX-FP3eVN$&AJW7;7UXyC_|Z95 z{4r<2_|cX;SJ^LNU{ik+LN$*|Vf@{OvyOy`(PP98mdsUR3p z^JDX4A~&p6{z%`9ZP*{1OR$D*v71yXRqb_<&ApHSp? z2kMC;0hpMq)HVg;NlcnZ_>5`Q`GA1;5X>x1fMfyWNhMDJv1kG`46+>%CMX0D10YOv zcuL9RPp~YtY*Q@2(q>%kJJP60(S!rCL(T(=IW>=~S)QGMG%=neNa`plQJ$}C_Nlqm zcXytYL))apwl*{MClIB3oISyk6NSLL7cgno*^N6RRM3c{2M!TR1#H7ds@T#gMs~q6 zj2T=}mJw!u2sToxZQ>c(ZiIGNR-QeFwzK@|gf6^I^i%r)y~~LR8lJoXi)56lwY4b6 zN+F62A%P?a=NiFcFi;gKA$n5MMr-_Ntu`Uml_?sXr9zb}9yBNsZ4wjW2cw|3I%GI( z385z%K2)vN4)+#}dRky4`P6D8nfh8i$u#1H+$PFR9-`e2rAr@1&{GUq&I%z#|^W_YltM& zmXd*GJO6dS`-;!2nW<$97nY@F9`e27UG)9VGFZn8hA-$w`qfcFj*`1b?iXK@CrDr! zA!YPyYWwme3H!!Ii0vEt*~t_1vu`%y?{CQ;B~=+2SepIGmL;1}9V*?tWXmVnXvmpY zhPjdZ<(DLv1mQ^e72WjZmvj^Ts;t%a4f*2`70ijaH5LhccDF>3hF9O3@syu+q|DS2q{WaMhQj*Z}wr7fdE5lX)TFy8aW*rNMx;zaB^6v z%Hk#hZM0ZuE!rxypaGjYKwF9iJfKNtw(pQlX0is@KbYGxc}g6M7KY+a_SHtG% zg+&~eNkVNc4m~NYBQOmbKvvQLJ4pwlzopqin|Xf>uIdVtsY2;nfZU|U&~Jc4e=)#} z!14@bst5KLbP?=;8bo?&Di68MW@wteeEIa|=A@@*&3ZcNCS#BBw=A7wo3qsN$dk#o z4&EWmhZGIWwM$9{=`+AW$XOi{LZV>$gh}BZ0wjCQ+7@Iq?^HYc{cS3o~I_S-U(92yM zGaBjw#pX{8cyxMlTHD{>sj?69?HDvTy54GzPmEgqh~Kb7JC45mzyFX*NzmZn6H8$Zf$S842~lRNeu2MQ%XArUBW11heRh#19;23bog7Uh^N zK3U0BlKI)LuW3dTe$aNSbzcLd67x=bF8#-+=AB>UkU?aEdHtb7>&@1(GE{Dr zRK)C20}jtjoH23wUk~LsnIa}njtDmxB$X7?T`M&h!to_MVj`r5JV_Ebc%K^Lf& zl$fH5Roz`0lGN0o3obL4)HSVJv}mISFStoDm2(!qf65gmRGM=(qV-~!p|Is6-!;M# zuUBCu0u^;B)n|S|FO`&#kzWX@ot@g??xy3o4zDIbFEEj*lN~VeLxaDSI@s-n`!b)P z4xyDPs(RnuEa?alUD;Uq64HRZua zo`^TZ6}ILbxLVM9dfTcOkU(=-f+2Ut_(yW>JNG-X6UWRBr`E95v(`){nfI)pukqh_ zGB$No^wOFBEkmX(FPuB2D8o-0f7Dp?*4z!>m+pRk#j5zUN&b$ZQ&v1P*RUtcPdEN~ zW6qyfZT{Xl@cspl__y3XDkssn{@!N4@GOjWA&K#*fCwC>ic!r%mw`89*64}ciC(u1 z^aZ_V!VK%-p9E2H#XwHR>^Y&-EJy~fD8TWxydKQRF+#QZmEBRn58mN7=AOi#j}~9s zJ!{W}jFo2ri}t(Y!QiOfubB6D70ufF-p6xxCod|ScyHVtcT5P6J-#S;_Z)2^-r0z= zn!?6BJm`+NdnX=EOL}IGx?ud`sK7~qfiWS8`Ma+buYPautnrJ+1V0=Y_;B!;MdORQ z_Get!Gs|U119DvgAZP=3Q(>lhstrq zG|U!1LV50jxyf-K$Y5>`gq6mY8ti>X3Zik%SJQl+{W53L#tkt((`paHFmmScgY;9x z();}RJ!Dwx_LpWNm^i|S>!u%7=Pa00OK#uq6)?meI2P}DtLUi&N|&{K!Gwok|&*mxd9t&;pH3IS4>)Hc>eQK!>2bWNPa&sw2CKq)2CQp=fYc7vfPi z9l}g>n}WMD8^uPksR?Ir6?JIZQH_=@Q|w9jr)j5c&M4ZZZTi_$=l64~t^)^`LRYzH zgU=Xr*b}b{M8QL{_40OkL;T(gXtL2x069_azIg&on%)1kBI0u%lz%Sm> zC_BP3vTR4n=;bfgx6dxF&)9qISu$(yh4kX?XEA@ESW_2*>u5ROBoVkm8XCkLw3vF! zA_Q0Y(IisoQx$~`KVDxcgt_chV4|uzC;rvdiP2(o9eW}VRV9jTxP9?d-KDw@1X7k6 zzXa!Oh|fs2gJVw*;ui|w_Aoc#{DqXJ?0szPk{z>*mhiOX#0;}RcCO@y-eg{l$R_MlF%MnzOQ+cUApkP=jZtaoW0x53Ng>ws}y)pzp=D{2%x4|1tl<(P>$* zZe4jeX~CkSAD}Nu=nGu@<-SY+3Eiwr=5s?KEP-LmJ2>x>q-yl^nYu0s;igu+o|(Ar zQ6F7X-Eyf%m2++!*u3KgtmL3SANWoE7^nyuZhE=<(!Ir7uqOCFr`oK>WhK zq;N@W-Mk@owID?A`EsrGvz@R5bXEy@v6)lQsl6Mc=fw=H3%o40<^6b|@ zby%HWj&aovPoEjt37N02P^jkFwDyzj*8DB&F%R+uOQAV<+*FITDRNds`d`bA{lJJ< z*WI3ba*hyFRkH8G+=Hq6&MIO>JI2c`Rt)Bb!fs=IE><+^f)8ZKV#OAX$yJQ$<>YdO zS+K}*g)G(NfHJ=&)nExq1-(*@(9s=k{#I6eBC~_6Zq#;SD2D&9CaY4ZHK&qOVvZDnEL7vKb zRYb9&H;}GZH1i#t*PsjBwRGujKhI%DRuxt>nG%hrhQ)K{q%$5>k(jzHIeFRHqpk#@ zVA0a-WLJ(*n7ne`B3GU=Ky7HsJwU%D_hEqG(|7&&V8u&5sN?rZ?vaJfR%>&i{BuTD zOib1c{!?t*`eO-}hy1gA{*g4((fRX_n$nKU$F$B9Y*HB7a5FLAUof%3*E6v^FtJD1 z&6b(i>~)V`$HWAi+Exc1mfd#Z@IN+U?z-wkTS>i}iLq5=lh_Ch;nB+Bc5ow~8LjXc zw}xnpq(Xx;tO&0)@r}G=(UW{!ljjW{ROxZc)-)Fjm&Vv`8On!ZIw_@apn()9A1!(# zQSoO96!p4TST|^X^0bVp(<`@cUs;=7^;h3UFLQEoR$OAmj%{C_KKY@hLqBfj&qBSjdSDDhu{4Pr+x=NhY6!f+2?&4|%Ls;jB6 zX)+!|8x-sp9lq^F#=1J3VH2U6EYl1Wx9(swQS1h%gsd{k!)%5eVm&_3t+xu&}1n8AkILbNu-YEI$b^5t8J!^mIluTMsSzJLX-$jCoaoe!Kfkz ztu>%ErlMu45T+i0qLzf&n;o=~MB7_i9VD7IK^vSy@~Gr;GQ}%=$(*cx!NO5xYFh5j z&t7fiSim}!=*B(l7oNB(Fn|_1oH}OD4cVpzAu408@uCXir< zE+7Hh>CxDjd=_(6dak>hOmRW3-%sM*?Ft6XcRD<GNVMnMv-(zenM*(}aJORo`E}{QdWrzy1M;STKRN z>KbIxG)O&qI5aY^4xn{pQX^2ja;d4gI}+J2&!tc_&vYw_n-1HqgZLqwPgX5LHTV{g zrb+X{x2Ku&8tJ=v^_JLzmGI0>m7t9-{nNsf$mC_K=bro+>|sX19%GBH5;a@JcFBO6 zVZz1)4_w=@joGa*`?c7fa(LPFMdrjrb7^Ygw6xU3Wu?gojbYyIrSmOam3C+@NNYmhOdvt8s}1z_ z=!=@W+L#1GQ3@>F0%$%AQ_98Yc2}*gqLug?M3YPz;2(<8cl`qYyKs={bF)#fj^Fg* zTA@kYVqUZNKt^m+Y>t z1xaD;rv+22lO|cGOv{PGc|mNCefnD{!|px#>F()|U%51A0m3z)@$w0);^J0}pRhVU zc{@fe5tG9qPn(&_^sN*UT!~_Vs|w`w(N$J;Gv^f(s1uLTy%UFA=B+A=mix0&B~V|3s8*#Z39?{nhDHgkr^@eo02kT<0=Mz7L_GP9KQtvqiyWwH#g+|d5ve2 zmo0hsKHWVv8JxO>@oOjU$%xOHr199JbHqOV&7o(0dU?^@Bc?fz{rl6z)WxSWtTmjv zY1=2RiZQd@y+&{dHZK3DW=48JWhbx;7Z}El5NbB8Z-`s^!1$#x4eK{(!v0N;oJ(U) zsl}!A9s19CXUS2NH=w+yTz-O&05b|Nc5%bPw|fbm*}1HO2bRV)w}1G9P+*bLBAv) z4*9^H#}y!jaY%y#NdiQ!=RlJfA2K&`@mPkS2E?mtHA_n0dTr_(zGQJkMte#7y%gvzUW= zK35{^o|L3{tSl3CMQ}q_GEvXrvC1?->M(C8eiT@{|%}5n&?t z=7o|P9(LfXvW|eU(a0}dt}oeV%~MaU!N-r>OK!nK4WYCdQR;u9pH#f}&Knmlyz$O^ zSeZuXMkYxyDlFgygB9r@YXI#aLmI`jGfmaqwaAo-8}%l%dpmdGb?YM(*?{Y95fjMQ zMk#0R4&&*_Wgl(6EPIGx+Ej-&4d0_Nd z2(>AKXJHa85*jhB>gvjb<`%pIR$kYMZCoY>P;W$Ghyx6D@Labzb5n7^FT2JpG>Gey z)3$C;8@F^=U9?c=Y73Quw@o*_xWw|V9xpado40nZF>};Cp+a;ytqYHy^So(g#X>&d z?V=q95yMn}WUc*%G@z)7m@E)B_xPqM=1coeem$tsbNTeVJYC@Fv}MPPE8fXlv?bpd zYmU}+old|~OjIdj&Gn;(^&fq^n$==0?Hv04!W zN(4_=sThr@*oC_Ca;FKrI|Vdp$8g>WJaL1|hcxm!b$!1vRD=LU_YWDMZ|a8THCmrr zW45lW$->rZHLrixdT|rB{U;a2u9&cG>6~@z<|Joj>1PzoHtvUf_jKZnP4V%YW+XoC ztMlDIcXq*yqVR-pg9)LY3?|aPFgAAHyx3SqNFxw*a6+;RCcgFarxe_y_v<^qUZLcv zFWr<3KDm@r(iXGi!7Ymn%g1Uwo{$n5Ez9Un&-bIHx!hRF<&YR-I3p%az`U!%nLxy1 zgKmN*sBJA>Hg-9J4J`%C##88odLMcw%APJU(sE&v&&3QZz7P(SSvDnUQhK`0q zjA+ZjOW}~fA*DS@A_5$t9*lYy!?_evRy_fO)I=$e>Yh4;^K1ZQ93U)KZ#j(=62(kF zATV|@bH*4NN!mE%0R@tR(~zew0eL_TiP6W14Q>*ikKxqd5O&0B;(0&~4uLQV9VaUV zYH&yjWL5U)7pI0?3V9ki1k{l80AfcpYfcRg!A%@2|5zzdqc=}GuNlg#zFV<@^**sthMX}!5tjR=* zpsH5;i51!axeB*9RE^;C2td!W&@x^@xo8y`Am= z&9?sgtE7GOWeh=zSdKx_gDe;nv6c;rSc^eX0fH&YA(>(=28HFppm2yuti+%&2nK~i zQp8#e3M+*vs+6k4pfCsqMaff%K>_DyQ~|5t>oF{o6EKd3o$bT8EMj-h|hZ zMmkwJ1MpJX6)JhTNM7y^HFjf$7t&j9g4Z2NzgW9PH);0{O__{0cgyU6}FK(#N}_ZVI+>21#sY%j@asuUq6_cJtibyXUeW;s?Kya4m@6IBQui zK!v_uOjpfUE&A=AsDGm;zpJM$spmFXD^gM_teeiIHki!j)Fn&JCQ>`^6ay@J&4zcu zD$VAlOHAga%R3wXPYCeduk`=72;;#Bb1QQcb`LKjOuFg`)#m^A#Q81a5jIW!ZxBxx zc2iPcE&I>2>c1vx*O6Zt2G?0W4JB1#PuneKzVWkX46rjYw$J(r(@_rr8cMCKPyTJq zaFMH8uu@wR&8Z{RaJ8XLyfa##-_jVXOG`_k<;r*B)`ne)GR%bE)FOk?B=&UN60Gxt z;XjVmj6q7kA8rs%Z8S0R^tM|PZjyerUpj6fP##BjUY@Zzt@;OTxVt?3!+)9HrRgL_ zghC3}G)hsrQodPw2jY7N@uBsaM$*WP@Kt%5Vkt!zqinjk_zq;50!Sph=89ZJ4kFQJ zO)>6=lh_AW_0^h2u~w-MnR$>)pANY`bjP8o5Q6dI67xV8Qr_k3UYjl|Qs9{(YkI6~D3fHfpM+a6GV%nSeV|3_o1ONu`6tAtb2- ziF$$|(!)UpQIn9hLKn$(!Q2pvhbDNa-eUl%PCL3_!O=9_FyXc-(ae;) zW=#cNOfZ)6|Mw>sXBwuiTQ}8^2_*Vc73zLiZoqw`va!)YYno||&O}>@pPm{?sU9R~ z(A26!Js2@$G~kV;cB2hd;P8Hb3vkoY7rLy|rcIkM13yH6{A7R4&@z|t!l?0&JvM&) ztXU7lCMU<@H&AKEV@D+zUR+)*j)0L4Xc2_t4tf?s{Oa`6Hhub$ZtnWD3|)ff@--We zlsqtT;wTT4!>dSwMI~RyayrT$aeQ-Smo=nh{UJkXo;i7ESoFPe=H;BAq?+*ig^(ju7`)uAFcs2^v>dPY>R~z-x25Qc0^x>UJ;@ zz*(eeq%{LdA-W`WrD8mh(v>G*T)PutM^?@k6~C`>mJ(enEz-qM6Dd{+U7aXc&6g0< z`(Y79h=JbDSo$g%(b3#N!uH6kiLKC{o-VsKib8Hf!}GhqI(mA#J+&%Y0GUgxNx4?Q zCQ^5lrkG~JOzamk(N%2!>l?KW`{PT~l65*|CZfPVghihMix*Zv9y8gT%(r`>qqf#= zPfjx@X^e+2T{=8{ZT2)3ai(Z0s7@z4o(7GUbr@s$Y}LA=>Xy#QP1b$%>85F#ie}Bo z@G+x`3$1DMJb|lTQ%x;86L6i|6~l22)71QbyuA%vlvUaXJmA(Xgf@qQYbiYig$=n~dDq zmXZ{ixexFEoO=c^qwI13I@c%7*2VKv3`47aqp{`OCR*B1Rog&I zG?m2Y-`MC+&8VEBsc4JTMWgbZ)*L?P(OQ*^mjzOuaAD{ulcaG{y$@TLc`iv6ry_Er zIn$?!g zycA6Udf-w&MGG0L0zZIQmRSoHK9;k%WX{Dsm}YFLU`W%_+v54~GOtT$4}=?#q~bVD3`v6f>3RP}Clx$)=eYfmV|Znv_qH zTu$|nhzPW8OOt2`Y;JOA1gi7Jbefp|<#OnL=3iU}`Gz9-f+lZ!`)SwY4OBMg1%0SL#=IK5AZDWj5yL8_la;0|JG6EI;O#CtQ7) zjSoD(1~xubIbIP}ctv>A&1z&L9V5_y$_EDUkMo`x$GY-L_^y)nuVD;XNS4gyiSyN${RMB)I;$4`|sJ;_Z4GJ7L-s>8;t5 zV5go7-6jG%NtI71kOQEc3!NJ-A=fM9BYIF`QIDqF{=3!yYH;7jS!GDDxXE3kq%+bh?!a5l^w#$8wHw0^7Gif||@o_-Pm!){lYIC(?~b>^ClJ`r9oKC|m|yw77jryzt$!4F;&v#?=!& zM%jPg?>nn&8$_5P2)e1*DEJ?`ll_?c>^{N_={Lb`lFWrJqagZ8%{JGHLTMu#r2tQV zx?!I3n8DFuy$AIXJ}H#UZWxvS_O&1gC~0%~iM%k{9j2z9#)q)k7Inj1aQb0#8Bs@& znq7W2X=9;l1us7X<)?beW7}%Optzioblgt;%ZNeg4D{bGze8E_v(YyNthW%+fx7ByF^IOEN+mZMNW$>su#siOLE?ZL{ zk?(aa_IkgLCAsEQPNTBxeHYlTt+4Bkw671#{NoAW9dJOq@1W;F@0$OX(Yb@3m+ik^ zv)^|2pLRe9WO+I(v}G9H=#8nwUg#}dkj;hSI*u(g86ER*BOeFE+SaW5z`J>XXs`mk z)kg$lp?kHPog|>=d|@Rvt%7;r3WHeXLY>toj*||oxThP^PaWr366|{38xF1gC9v7V%>u@s9OhK5VJII!O1VALHG{3C;_*rAk$^{Efl8CpS zJkj)$tAs(cUB>K-0e0gjD_7PS?QhZglP~>x@=5nEtpDxu?egvD2DfjI?DlTB>ORCG z9Rcj&c7lxn`?~l9{hYVHV8L@A8=w7nrREoT5e}^!Y(awo<>aoDFEyQb(hf*geqyw{ zf7u~i78-#%V8R)sG67+mz;4@)i^P)xY{yb|bff_3vXq@2DV|z|9Vwn#yF4idw7iJd z+RaipQZwP$nE09G=LJa6cbI76r$j+)TKwSa2TTa)&;}42>$#{)tFL#YuvSrKuO|g# z@}wN-NWuPPWlB0yJZ0YONb!_8$Wj1rq^d<%p<#wds&P2rSkg#~;4j4&x#6 zB|4VHT1DxOzEE;nn2*T2bFUTGh-+A<+TzxpYUcH^qiYmI=Ys(mYySFL4Rx<&P}q67 z4nWwn5F+;WKx1$1sQ{$Zzz*&JixutdBQnTZQq{k)k_5v%JCoE2#s7`DxfB5OAAI87CngeJfLZ{(U;J=ZE+l0v%z2>99f$$X6#Wqx}`xA@D z&|-3Ht4)B_(e992w|pzB(?9L4JFC)ep}4i}C{`PU1zu2?MW9ZYGvhnwK4JdbbFeR2 z-eA}#u>2Og5=a1^r!@&|p*#h-!suM4aAJY}lHktHK#L#}Px1Co zQfLW&C-MFPkCIO_Z_XzkXrV7-U?p0uY!q@CEg>oFcZo6>Z+6Mexxfz1ZGpbEIwyep zD|XBf2$=7IN%&~h-gE;FtyZv5&{`5rWXU9gC6h9%l{E5Xyh=L8>0JcxXuFK^|1_#^ z{$GqlO8P$m4=t{?2H#Bhb7B_UstF`q2pBy|FZJuk|3W8COW^*O*|EXLD`9^%nxKB_ zBA0vBl&LG9C*#Pt=gsETBo3b|r%qYra*OFnBcmUg`i~3Aa0vO`w9o%B^^xdNkAzCn zD)Ioi-^i-vmR{Q&;i;l0qY)! zZac%X+tVocpkIPUfcaOO)7ON13;*NDhY^DR)mGV$43mAuA`(hM#Uk043=?|F-$Hb& z7mbKiZFiehLZ_;@t2~u`M3IDvVi*x`)d-r++(L}>zPwjx3^8u`W20h!dJPeQ{F%E5 z1aX1y2?8K}<8(zT4Y~ku?0Qg1MN*MmkftMIG?FAWQO({BrmB)bEYwRIU zA{Nh+a#%;za#mmXP9=d?knHKo7ne9>z~fk5bja@==H!h37I6&PAuzcUgeKWvX;cm) zPm*FGl|dyJyUW;CEN>A~gjC@>IZUM?$!!;W%5--F13aX9R5f3ChBGe(w18Cbe8BYa=%WPnLEJXQ(2`-0Fo-uhP>M%k73SV7 zk4>bgdA54_^6F#@||`$|6RK(H1#PO29XFtwmrjod|)IW26P!;0%{4r6VXE7NlDdCMeSj!IRgX%>+?@{HO#W$0OJX^+57eiZ$FVPmC?CS8VbN!kG4a)?}9C% zK&AZ87wTC%)x$fL)w!uJv5@uE8o;Wk*YWOx+ZuGfI>FoB z1QG`CNqkz=74i`jA1{2}+N|~q#SF2SiRvS~nu;9p4b|W%@Hu7ot7kH$W;U5_Kbx>X zeTm?!Fx54OT{*;Y%Ziv1hJsLA6Cq4(S*N}vEU*#Q@sSLhjfSwQ%Dz+=>%9H3HS`fY z^$7b^@s6&DX1UHL*NJ8*e@~TRZzzjz1U}>HMdUOS!0|tgNI*9sAqd(=Tw)op%np>bxT& z!fkC&jw~r_jJTsCuhY~HQ3;|G6WKAv-bo*#ij$bS*{yOCM8++kMtm?K-w&dGQotGqB*|+RxTelL#bBRMkyRFDb5@9RF@x z>)q`f1gQPHX|0c<>C}!s+t0Q-P;BU?PG2dzo1CC-bB1cVIX~(MHLj3b?L_r>xSG6m zPO`eY);5dwZtCQ9+uBx1>ZZk5Dm%Vwju-oP z%`tm0U)LNj_V1eG#r|D$yx6}>4zT|Rw;m7i6Tj^y$GhXZw&unDU30wHziW;c`*+RB z@?guZIbQ7FH7C2v*w$*E(M8-!;dJ{k!IPv47VbFZS=6GOYmw^RdO>F=_w3q5|6xb8FJ120`Ij!p zE#P&@raanu{5WmeVSDDSw5=C$bD-6pp-_?xXRh&7T5?6($ewI%mG}|I6u?xEb^Q%! ziUCa`^dLDjbHmy_`!NrFV1aR$i9u1CL|L-a^I%pDx042UqEv^NiJ=!yCLMWY2k}3C zocQJoag8_pg@%7@O*_nN<%^*}mZ)t~-L4vmhauQ!jJwK1QTBz0B@eGODoWc)4}lFm zj9b*RaBnIprLl&7dh|Gn`=WwGouZC!4i%i4dHUN1c;CqT;E5&Ya@SQZAR*7ywywQE zkA6t9MeB-&-KX1LSl@DR(_6DFbMh);N+%YsH13{k*!#rxZ(fOimWUVJ2!#i=H;j6y zwqDYRwkGi35g5p-X~3H3RjOx|$cTy~V<=gBJZ}U^o**&I+nm|$yR&8Mk+zqQ(%O$L zLaD1nT_#5yA|dCOF1JAmOvP5|6l@+dXTerD8Y zO^eUEuj!>XPSSeY@}=iV$RRmGUFIqgN-b;>Uv4|HwWZJ}qri1CZMB0$pLmj~=8^LeE^pFM6NuqeJLV{~;@gXufkc zsjPc&`#Znw+3@kyErx@w<`>#dm(!0Z{fI0o9Jc+(!e(0hpQ3vmkuO?_-$~;e3)xPG z%3>qm>73djS^+y9QwCK=F#(JrsI87uJj-x5HFqGM6sgQM!kuAgWLo66u+_R@S-Z_w zQ|ISTq$W+e(qs=fphW~{=;Yw=XxSr{r9%~}1c%3yu6aVpb~h{KZ%g3i|3@jWOTZ^W zgCZWY850+TiDTQox5leDIdU-Lmhz?Ik_@hb4;CsDFL>PJ4F+=$-c>YZ`a<=6g$l)EhA!8nvja%q1H1D*!)|Is2m)av&*Q}xc{`Q!2QheW8 zFITQ0;bhzAYk#DlhkQ?Vk^ZH&h!WaVR81z=W_?DIsviui>v`v016v_jx|H<=-9_bG zOs5&A(afiL8=Fp_Q^a2thkb~5h_+bACbmB&lUcm9BTA^%0c(12CCnR#3Kk)u9a*Z{ zu_YL_cDuXSi!Q-qRWK$yV!%+$VJoE7JisKTUol2g+{YqJJToqUrUJ%n{EVKkl8~z( ze|&ZMl7Q%dfwRM^TWjg@kOH{$W(p-gef8B(qItv9g2wLC>&8!R<0V>O0KhHOUz?&c z;9H0)Okv;x$1`lN(P*{6vC0^r6v3rhq_2g9(gvZ>LGIhTxNb`#WWANS@64Wls(|Lu z26dhs2w_T-Hh~1w#@v_b)vAq`iiUW^?sdCX41(dO{+;~pJ@;aCM* z5gqgyjgXj-Tj4~ovGVOW_!eneH};!bXIk1?yT!he_&@w?T>jxnZlfv7U7P>U=SbkB z<#G8(A0~QDSxbaaj?3WGnH40cNuAZ2TYT*P7rxublZ+(jm-ZwqXQ5ohCtPGR!2s$r zQm8f}uRwC2L=T{2TaZG2b^hrKj7!Sfl?I2MI)p2gFRxvAtM>e1Xl3eh@(dL?d49kcrLH7~5STz~Z+^iXw7H9ho? zt=9|IzOeRlsd6K2`lO!z{L)LL?}b_tu+dgkTU&AJ{KsdVBi0$$t_-v37Tfk)FFoy$pHJ%@vGAxRWN!Uwb!R0Q@A5x zZ7ScCkOR&|z!)a$j?(Dm$^^U6=q{71XpP{o!`v#iB|>Alk*=**u&@^HxZ1IE5ESJY z!p}yK;4HKjj_DsAG zbP;d<@>={;Z>BEYGcEm~WM~+6j$S-bMZeqg(k0SoW1@|$CHH+5>9}L-*VJ*i{P=I# zu(K@u!UQ=_K5(bOGn(6(;=(vE*+rJV2j}lL24nBQ^eayiQ#e_4Lf!CrI397f7F1 zd$t6eKV8l>-lna~Kgw=E5bZlh2Q=ET zrs!E4p^3(|3q~BQ(zr2AzrKn+V(NFS*j!xwMGv0}QEf0% z!+!%&WHhdr1Q#{l_&K;qfDM({9`Hy-?9@pdaOMk{zbAnclB{}>u!cq9tWCLnM1XcTx?5Gg$cA3wJRz=&0FmXq$b z$j%G&{2OnOd+Nq4e{TKc^u0S$*B?)r`IdQ>WpDcA^~S7rsO3Ba{>!x4S_5my4B#6w zqekbav-$ZIG`|v>*PQR?XTxtSZZpQ_=5qie`f*{{-?+TEz1<*wcQH#BOr;n~hLUn> zbB7AX6GXLs?bT9fmeg!olUqm&A@Hr0qt$gQKFeA6nbH2*qmOQPb<;K`7#AXM6gML` zf0LvHxZ*D-L*-1_Oae(-VeXnutnt#TYu6*Zq$JexHPh{wm7H%^`oO$`o>A8Ta7Ap) zPbN+!JDCiP6_X|sEteM4T+$LQQk=5{tXyyCl7U^0fO3pD4;O}v9L3zMNdd6@R+dWJms?y0U_->|eL>z$Dqfam+BkAWi778IfzZilHG_ z=(clZgW^s0xXnt=hI{#*9PvK8V?rU1%N z6}y^v#{-3a+(kMfy>fLFL^#D2I9SVo^+rWz+l)C69}RkML=Z_Rolv&niM_dN{yy^Y zhweOkY}Bw3Dfi8K_R+~BB9qk4Qn>9No;1@q>%No`!$uvczVjhN^qAF~is$9LC1sXQ zS+nriSI^8jur(*Pu*@-LSj39L1$)jdy*n8z?^5k zI<{~P&Jyex)tLYs@{@7wSreuZ&@3b@I|)E#VV;A)=oc|0C4Y{FNSZh3@4Fq;mbZlr zy>y&tUxTKx&#{6X2jj;dq&e{Zw(e5yIWnzA$f_pO&cFJ5!P@tB{kmGtHT}91lVyU{JW#z}T;>$?Rgnt2Z&t`)Y%P&gYjQ0xaU@*M{eesb7_iHCY5!tXr(Oho<&M?H*NZPW60jCV|}z6zVTjmfRgFQ0U3C_|1w)M5AlRI zA$v=(SyDh2stUf^Hlk$wI~&Yr=8c~J(lk?EoKB2$m98PZ?fc2F$^-P%kmU6fO^-ga z;fIYe>uX`}&IT@o$U1)CN)5c57VRvO+1XDgr+G-Ay|Z|}{1XWlTJ;Rg|J9f&9@waF1 z*gOZu;ho?FGAWen)X5;?nF=YRr3ZVSmmu8$-bm6}K@4l7_UfE7ND;0iaL%lN;e7|r z(Vu-^&QPv!-14}>5m*8aiP%lA3C_Bq-?T)d0S>-)MPpaU0o?U#E~Y%aBqNjE^(>ma z0rB+MUR4yV86nH)Sbo4&ebt@^jPmSNjf9ubrW~XGp#f|Wt`J}5_;bT@{Pw?V=CCXD zn%J^-Gw+eMT}^lU<>YGccKyWaNQL`o(@b{m&Z7Pu7jwW}5cW{L%Bym^ZvL zzGTFS_KshrU6&Fe?Sp!EzM}G$-Z~-o&|e9 znYKKdT8l{B*tJu~kALi*Sub10p1x8er27NBDhwkU-~l1d_2NPt^3Gf!<^8}g(P&My zpOv0Jd5%`Sg@Ds#vR$flTk!lj^HaL<+?r?Kf3C;D-%N$1_t8V7=RTdkU@5oz%a)oI z?=4w#XvRaE)3MMD183pl)G{~Y(=a0#XjmV9;((6X%Z0P@^n<Uj3h) zdzQ1Sf*!5TuBJ!NG42WTe(dc`L}z$JIJIz>6)`q)k)fD zTu$Hwj*Grq;!pR1cv*T@B8;E0QGEcD6q~Trv^0SP@{d=k>qrg#_a+i3rSF*hg!zF; zcOA)%Po4O1x&<*yW!?0r6CX%<@yVP|mTvxGb^3Erqf({SwY8XQ&v3z$S7V2YTy^~x#uULRzcL`3W#>+bMEU@Qc3T|gRJ=}>3=o>gtV4aB}= zv1@z>Ezg$XN$w;>r>)cYV(nUhBa=Cs5Qh`N00yZ&Tan#GojLeSm6zeKAuUcPNg8uJ zV_nVCr8VoU3^RKX`EgqF$sXD=n`vWKj(K3-;mqtaPcdX{Z^zta^glZdEC7cAY^6MG zn!$`Jm_K3^W0AmUvty^??m!Zs0EDMz8sGS-?mbv=-#dR82^{s>F@ty4rXSlJO`SvL z$AW5|eN+O!m)4UsYuEtNB-h2w9etim1J4KKD?GEw#X{h~J3zw5AV7oK|9Z2gq>Q9i z03r*VZZX3DFZ`PB8_FaEp2+~ilymE^>R!`@?M;a2dvJC7ntNZQAF7>p#Jew9`s4Ol zHTxN_%0@5jHeGP7dX0o%-D0$DonsY%Jc#Xd z1(|t?+CQ+MaPgRkq?^4prLZ(UeCGD7f+Gx@7Z43jn1aoB)9Y^#+vGKq*yKEZYWrjF ztu6TdRfcK6FFSnx6$iF#9ab$AXefRv3 zFVvIa`}WcE^}F21=8(VU^%HS{23zn<14puA|2R#kYNX$R}d~^e?b7jRwdpWa7@K@AKqxCWRrQ09v znJ}kj_kf9w+LY^7om-=sxobg08U6CDo|sBJdW9NJsH^6JHtb9p!(F|Tehc|WXmG6F zn9T`X9{wjk2VF;l2=Yfo5t55=&c|U_oQIqQi;`^;m`5PxCgPtFoGRpa9{{4;9fK(d zobc$-#~$(voW3m1yk~+K3%axOlK@mG1u^b@7pUvt^CGP^-I(InQ?P6L^m^(;GfnGE zfv54;f#-CaO^x-d7g06Tm&S7pVJ@~%ke|+dSmi_=jvyve8KSX z!G%P3c*7gpc5Yvu(}x-abD$WFu&)E7M9Fw%{}$)QQA-YF1}}N>z}lSRN5x)FCsrxF ztwF<_>Zl<&9?JD?f$Kz&B5d>>?9U;CNVLG-1zbTNbV>lYQDPskrV`@f8i*;Y|Lmg$ zjGMQger?S^Zs?yS*3bK>Ag?NILDehyAI*0aIg=6`x;WWDf-_~u(C6oUKns6sraRBh zTQf`u+)LEkU!`*C5qkZ#U8IM)*qu+asXuLCD}$>hAJmE;x3I&?ur**3Ud%s>J~kvA zyl~Fs5AsNX8G7o+SmF}1?iewOv%WIeqGZ*u1qrci`i0znf}&^dGBwotEsK6`S|?DAKCx5J-1+A zRIO&ijpLs+FIv?6+3_12G__It3Uasq4ch>?!zUdZq7QDMVF=gz2u7k@aX@06BZc=% zXO>iN1-~+E1|L@(?*#?)>x-~lAT0C@?|D#9Z-(~Z!YutIDp%xvnLndfuNhmvc%_o4 zH&AE7{#RD+dpt1c@qO9r_b0l8Nub-U%O}3aE8V$)D0gu)+Z!Zsa>@Ga-E%?$AK$mq z{N^J`zCA7b|DnDf7gcCLNqR&ooIH!H!^;-zL(da`TtlQhN1D+4kk;)AaYvByei!`s}?= zgapnzuo9ddZPf-UpU(Sw+pOL}TZr)PyF^+~o#6Ty_Zosi47*pF4^6?P(?mk3%D9rL5HjrMOtYJwDj79%A>6 zKWr$4>uVgk_cqaD*#aVxakh*28@i0Yq1o>|{<{i9rNr{J3gN|wNf^;ECN`p_03{8= zH=vx}+GJOiG}PtJm2_rft0m0|dn+luwX#MX0~R!BEYNK_#_W+QAxTlgZlxD&{s!Qo zH5jXk@GDVT1a9fmk42-4V&Alb#3AA>Q%PE7wx2a4B}Zp;iqWQer_o#`Wmf81Zk?=7 z6EZ90d{Hmwm9sxWrrXYc2$|(A4k4pl&co0A3ie0H;CcBK$iu_~T+zz!S(se1o3=AY zY%oLlk&r0h&PyHUKOi9tysv0?UFRDuxeig!Rgrj4rNJ|pMvARNi>fqCFLUS6NlY;q zQ;4(LTbeCj+xFkFW0I_fF}Q!(btpG(1JpC!XTH{>_IKJCwi zV3SGTjGDxY^k4MN^C=x-Fp=@>H0ih!VJgS3W71~`>BAo6{03w^uzn2xdzoZIM&qRb z$y_ms%yv@0rgmx949@Oie6g}XQUv~d#T_e;0DB$M%Tb_r*ybN0kYPtXwlZZ&Q`Iy(%y zHTs}O&+HGKdH<+{QE_|dPqr`UPkYA4B*aX3Ec8I-qd`axn_Xs|x@OaTi8(7W<_{mV zcuAtY_ut3=ed!BFS3P;|!2J0K&ON#6=nG4c)Z3o8WbvTCn{taDzi-nTW=B+sT^0i< zdob3;{J!jQf-S|aT}T2(fwA7fLIe@Rv>k+&5=yra|0Hwr4D;mJ*kO~RLdU-`Wxa9W z7V55XtRumf#7uV{B>fJ@{l|()=O>qE zdT)+PAz#p1`@RS5F%=~ITjd&ox|;>ZM+X!YF6>p_z0}s01bED%NlMqUtN(T!6g+uB z%fgY{AB0UBF`hOMJy=41G|+8b{^Vl|5y>FN^!DRv@2Z=LjfwBvW;kn{S(mo|3B&#c zIK}mCO+qYFuv3HlMo(7s6zNmWB}7ah2-g%CHKtn;iHcg~cYBmK4XJeBkvc;kAFuCq z-+j^-_Bw3Np)t!KH;ZfD+6arl%lneW$^%z2` zm?2m&Sv^_A!fD*i+bGz+a&9+^5I!h1EPlw6`EgV8<_sJK+-8MKa8<9~2iERr+Nfz2 z4X$z=N3i#$Y$1fb>sZ)YEIO|bcX<$004aDGXdVW(kdDfhD=YVY^|Y8Imp;P+tnFKC zFh&-Q`a%dn)X0bvG$-%c4s*TV!k3eFuZSo(IBQhilr^|B@?p!#v9vGnxJsz2|)-7krPlOZ7my*444qyYp~yhC~d7P@5mLcPray~ zwh*(Miw%;dZ2%D;f;PR3WiOfRMUxO4Mu}-YD;KU^^5mw7$lUMNzVLnS`fqb+uG_6i zNY323cI~#hr@q`<^xg7#Cs)fcBn1oJf*Yik?M3nPcKx+l-y%&o`>oPyQdBj9N3Tue zVClq9NhcCdcY{0B%14~H zwQE0W*-2eR8^4+`sc}=$jm<)+x}i1n$iah0I)7T}>bdjg&0S5g({ZmdU0VQzMdCZ$ zABrd<1Hi`y@6{qA)!v0wV06nMCJ~jGX`;m5{>&-9G$>TDRb*0cFmFK5=v#AjLtBEL z-dTxANS_}&M(#SjpmOKaK`kNqkZSCN&Qbc6E5t%HJ0WGuZ;5V^Oknb=p4z)4rjl-< z*YMw#%9thl7VT;|Jd3CZJon;11e>3A_&T}7FLk`f0k#!8y4~n`91s?~JdegdfT{*Q z6|J&`+J(9@(kK@pa%~kYbVmyr)TwdbkoZ2<)wV>4aZYD~tP|i~l4(KsL}1bx(~ePV zeK{&*Bk$5U8>tj8`$_h0I&mkoh;faLV&$#+QtS9I)T$iNc9|GP5J=R&;`$lNsU?3^ zSQxtoF$ml}&@k4pz;+yp4iP;Z89T@VGDaxc<1U*`8$PI(4eO4isCBLyc!WtK@p4=_ zjTACs%j8(G7G>Sg0& z9mt}p6!B9Nd_#bcN8+smPMM;H0lh3Zi{qpgoalzC_^XD|{Oo?$DiSP?Xfe}+`fyLP zc=)xDqIbzq*wcPiTT}JVGpEi{gS7_pXFN!4@5V2D?BOSeW~RKkr0rsi@!+f`6= z0ZHbWX}-2Tr@3U~H)~7E^KvTXINIz!O>ewBWBkPVV*|>=vyWt+IfTf4C*RiOG&RA2 zEgab@NJMMlNabqcA4ZZmboq!;h;>V)hrNz%#dCpTR4&mXGn^tm$fw^-3$-LowZCai`nh)=s0px zkS1zr+3#?|ktVcJBjG5vO;sjW=;B#_5=aQ(lFO2%tpw>nx}=HKS5@)$fb4wr3<-)i zc>e~$%Ey-=H)(%i$oCPf*9ga|M>KmM!~=#8F3$;~TQ3nPmJ% zOy3sM3!j-kd}=>!JV^6P=}!ls`D^Qh=r!7(IIuRnD06j17~C-crO~ALv#CI;8XCb! zt>9B(P~n1TPiLiBx<)gr*_&$RZJbuxNMU!E4a?Gm8DsqFZtgCAYk4j&o3q%k{4M9M zB@5qjzVxsBq3^km#E$z&u+cQyD5TbrG@6=K2d`Ik?iwMKHc9@jCMHCZ{D~D3q;$JITCNqM z(XbV}h0SDl7gDFz*@Yz5$k}2=H@(P#PS!Ljxn*Z!Egy(l1wMv04g(1U_4OBpi90uJ zB**qlYX+QT#Xa3EE~F|v=^rA4NTrno=2PdJhiLqfgHnV$nWPgq>5v`82#IQqES4L@ zQ0jzSmjpgbuQu52KfV6?Pf|0q(CftrcZQhnt~H4Ha*`Y6AZ4$?t=z~bLCXcJjFWe_ zLXjwU(fUrqFgVw%}m(>8c3t zJ*2K%U|o+$W5v(TPBzk^RpqbLEV}6yLZI`f)is?iA)B13E#a)I*Z7Gy;F!nrvwaz7 zTdT=n5d(ooEDUe3_any}KxTM9h5|zv@tSc%{~%mC$;&SwvAmr;$c>9xx-j08ZsqAF zs#69-+ z!U{qAHcvMQfjr%Y{)`$4@ByQ-{=^X8UtXI>k4Ia?%kkd`Ocl<41JkAQ&|yleNR^aU zQwfkd>#eOpadpr=}H*1sqW)OHv zFOLg%9ESajDy_ig7U}$xpac@MHHzmzo0@c&~LVFCxhw^5?ujxBW5g^-;>?|PuFR+ zw@YWi)t|8?g-IWw%pgY!b?B!FpsPIZQxA~|djplrF_b!_Y==Wk;Wh=5%7TKRlzyT_c*s96|Ogn6Ga zp{fAUU(k2FbMygHX^SLXq3L+Jw7*@5hFGpN9iyM0_P%jWle><^$hkt6SVJq}V;>h` z$I}IDgQ2vN_>#qy9dDdUvKWP$WQP`5o7xCihO;;f?acQlVL5?m4BRK zcDrzlk11BiIOO~mDZ!l&Ent5sNp{2hr;JUoI}@Zk6sIw{?44VplfZlU3s)K)(uX;Y z>ce@S*fw_z8m;hrFcz)ou>~02hluT}TBD&YMIwhLOF5D8uGln<5Vd5MU$9^BfRVwL zkD%z4D7p(in%Bc8iNxjjXrmS;1>Awm;Uv$W7{&TPn(vO5LZgQJB|iN(o2Xv%m3ct) zy>h%P8Lb(yuTB#3NwF(`QbynS`S9v&(+B`L0tlrF3&E6kaGj3}12;~O7lUGL6V`i# zKA`tV&(^?bpbr8!#fh|`-?~fWAv>8&sxJRZ|4yr#$OHRJ>4{&;X=`zT6rJg+DUo85 zT@Iy zb)_UptZD$dX~Y@w2Z^Tfr?YA0&XhYCZa)0wLhIknWu9kp{|2f7zkFB zv%vrqXanO|%g15B#zhKV?y9-$y*{cxI26zj6fANL&SIti+I_RaB`3^s9k|ckwV*$S zk+5CV=_=D|7gD@ofvUVJK!4C&FYHim7aTlP(9D_g*v>Z%S7T=v z&7?Jx*EwEctISmN0MQ)`qG=r}c^t=fRi_!u^!*uk8el`U=D$sckOY`n2qR+aeqOF2 zrV)#4G!u(!0(H~GA26QlD6DrsHZ|U7AcPGNtus?=b|CqqMl7Mu;yU`#(WB(vx;kL} zqx7S?-L+3VQM;S}O_kFHOLjF$`=yC2sII0vntq{$)%AOcZpRMdTU<=9?btzE_F^++ z%gubpGclrK^nj~JWH-;vmIRzv!Y>{Kb*Pv;XXaR1IQRHVNnMNyW^PL*=CzwgEjoU-095=W&5QxM_V>7JvaSRU~UhnWi5 zXp`u4H;Q@gOflGQSJz!{hNL6jW)muHHkXkwp+yc3Tn4|kln_TaYD~`RBOv~pRN}S} zD@|*F9dJ6%J1K0C47jR_TscX2p9H#`k^xQR;sQtqOT|y+&s2@3jh0kE{#t)Q0GcF2 znDfKj7E&QRNT%nxC%sEc<*VWhS51Z#O^W!3)@FX62FfqH9ki#Jyee!JLdjXOM&2Rk zSs^^Fracf5w_@MCu-OA)c$<+kK5az6pufsB)VX#E)at_?)6d(t0&hBMXfb_V z{=kZN%g#Kz?5$N}d->QjnkAdE&iu0|Hg~VQz%ABs1$&=fV^9cDOy?DV!ZI+$n@68C0 z09Clzmo_CYIXHIt<1?17D1CZlvO5FH3o!M8%D^eLUmm^uSsnfKkR8@d@o8iX`4{Oo z{Xllgp=Uy4>+Tvf@2=SNbwAUOPb^q%pHs1Z%7+7Nu4c(K zV;Le3;PN}J!{R}s?Giq&eux*CCem;0YYA?eQ~%uOW}CZ!HXpB~KkX#`@4S)r>LY1} zdFpZ#9Y|J^YpW7tE;3hgim(}8@t{|b4 zo-x?Uo2c8me|7SLyEThjn@DK#V$IzPl2`AyF8{7*LuJ;;XPCL(YP$3Ldb;@s!W0XW zY3Ysgdq|JHC&?3s4$<8wi|FsKpTEJG&zEnj$QTE zGNIn>j`Ub~px*`=uRA~xq>5nt+;Ip#2JNVDMj1!-)dVo5C{8%yfOs*MV%4Mg8dh#^ z<#nPiZ9oX{g6qfUHUx~@{L!-6$MdFB)$Z2gBm4&s@Y*A7q0VdAb`YlWzj9W>lzRdP z?f{{`s?B6_(7Mx44(J;(eXo%8;+NUs_m8`y!!pTAKRa$;UANL}leDsKHBL_o9?BN1 zcR#GRYCi7%_A8Hl_dJ{!juV51SE; z$nK$j^o)v=z&pfrmE&C#i{9EDn}(4=B#hA-jBF6yaD%RsL0cM$1UqhZ76~NjP%{CE z!H_BYY>h;-+?r39j~8Mnn$`NOB6XfOsY9L3)4|f<>A7AaOl{%mcn|Y*D^IU$a|#VS zeLm6=3B491TU$<>Q%vw-CMGOZ>tm!&kb#~TFe@z*Pb*5V;3RrlXCxkjrcmjXrSo=_ zbRz`0tR0Y!x>Vk4fl?kaNk-z{cX zNF=R~jl}EO7wviKX*9YSXh%?`0k0Tv$wV;Ik8yaZarptz3M@Xsu=R3tB(L#-9(tcr z5O4~6KdBSVRv4GGE9&jswEcy#o3dcQ-=A3`tfRH`lbrN?65&qVy2~v&Nv>h>u<(rH zl^uF|_f3uozPIiq3=(2qSyyj<>7M19Pq`#XqpHRIH&m<8i{3Z`9LGQyjSVoUH?x26 zewQ-jz>qpAwJy-}DTX4QxTFfoTU6}eI42)R_Hk)OqSqRj`!gGOHZV*Cqn}PgwDJ+ zutziQC5{M~({Uv5RRIMx`tH;j%CP79EjyMDsa4A%U{h?J=2{yhzk*);~%9B1s zNoV=$GHw6Dc}WcfZ0 zZ+_3xoAOZ)c%0|6a(J}y$2sZ zPiJr-ox{;S58OM9hTsW<^4=$(S31t-DUKmA=8_5d_^o4t9t{cOzb!btjR@ta5ngZN z^)cUwktu}>ud{xH*AWWTldg?yPamSBvwU@oHy?PRy`H$+Q!fdJrc8tR7I*XZ@f+}< z9Q)1dC-C|P2&~GLbo7h%HK9uXI%OV_e_K+Qe3WDPteqYy?QjHkg5!_}jF&fz%3 z;V_~S8@Goahj9QL%n#CibK29vDO%4fDmfQB?s}dn{h9?8<_K9gP1lg&Uw}#_S#kHyTLw4IWPh1H`OTVtkq18_ z(X_sr{(JK)WFQ=PIEaZPW!gwwS>uoNQTla;oxXm3ok!s$;z#l(3D5Y3%(=d6`S+#47s3PVm9fFt>T_fIg%$0N9ZpX3NdfJBZIOlUghI3j%Bmi3_g9K{w4hPsXH2 zjpP(9f4F(vg)#l1D0O5lsJ_%)^tv1dJ&-yBA-Qw7Nk-LKy2sf} z-#aX1Z~W+~DiUu6*K^$4zn`xn_Z-RP7>gTZ@&-D%1b zhbujIV!tZxskj%aW>f6Ze_Nb%&so^xwmQh@!-2FZDDAZ6_%Fsq4aYZrxP|~8Qd&C0 z^uSMKAL(BOr`r2|K1}~nweiy>Z`1cKR9R_dRpR1bTqRNp_HikWVm!8oq*C6mq@Uu6 z0gqT*gIS_JuHIcDCBytI#a(KP6{DqeceX<;lk_bO+E7=WJJlgFLly6NV6TiQCf|qu zJmzN}+)Fl-9XkySJ?8LSvEc!$iyaOo;e)6TA$L3NJ@7sl&!(6J=8?RwNyH9*Op-|{ zKPKPM`Pep@BO`a-B(as@4@5>xnN)ddPsE;6xK)6ydIa+m6rqZT zC4~V|NnT~AsJp@4ViY2V#;ukxVx}149kGJV`~&o1Hz6|?w-q{1AaNKMsN-niY$4hE z@?hybJ&tsuG+D&IeU`k~?>o%WWm;&6pE79btm5K}@4feZaMj~4&%SHgF7V8c6Tbrb zHvIv?i<(eu{&(M!JWOsht*xft?P6z;_``0hIJ4mGDV4V3;xUu;gQmo1CRe@UczrrM zn0EX07azN4${VYzZau+*>881)RkxUL?|JPRK>_%mjEKk}}od&i^rK%jR(t@#@73oaZFiY5EjI3j^4+b;#`G5H> z*0`HRKM0Id1U)sGXpRt?3X^U9|2~xNw=wedNI^rde-xww200+*u|n@}MHi;dv7GIIxo zZHet`^M+LylRRuv5Cc}IHiOC^Er;s)+YXpV4?eskaf{Gw>P)w6B*kQ+ojgj!Ii_U9VOS`qKl#?u z3`0&_dThp`awhUClB=X-yw%lMCGKab2s(03Xh2+V*0M)uC7J})1fQ~cV6m~jyyTL80G<6vh8n$NCzW+|@ z(w&pil5KfQK7RMKVfO1%LdmGr(-u#A@ZPdfE7&Jm>on05x(vX36Mu+jB%c&9zF+_{hPpOU6O0liZFSI-P)g(}B{VfCfs#HF zexszOhL_A}t5cVFN+xT9SqWX7QW88gUITLaU|u6pWF9pQZFQtfo5FifPiRyBf%5!c#QjnR_%RFKFbR}W>^goUkuwzV8 zg4D$3L&BK4E1_;tN{Wt-k|adV5KX@Mi2OdGoNd|(B#FO{Vnmf#A=+`w6529vm7)^b zV5K3svDFo>1e+=RliV(xU6+a$L7xhO1Z>$Vb+Uk$EUdGj=?>bPtCm(Z%pPk>dggCB zRmGCCv(n=ZpPCB58`a5D8hcFZ_UZwSZm)n3G?9jwQn@|}*sH2(q&F^%-Xsm&DCjR6 zsTpKdq}EI#OR4#K8D$rSUMN%7N?G8~f;Y+(v*BQ55OYg4P*B&}|N7XaNP#Vx8;QYC_6F0aol!YL z>ZfSad2I7BcCK>enFld)KW*Ne|g?2+5{?pXF=c3t*I%jN8|TdhK374zwk28GpJNMP>cadG=F za~KZ;2Qvz{35x8nLpm}9ahBT6rUD_S5s8>a>PTYcycZ|mk(vDHGl=?|JoKKv-<+Mj zZo=fvQIn<&44^qdk$23gE-XGfJ^3yAV>K;r5Hlz|44x%@KPtF?$#c&w$!J~RmW;2y|o8x>p z=t#FS#yJJad4Q(YCIQdm;Y$WS*lXYu3F|FmXuZ>G;BCm{cGQ^_85%QZ>q*crO4Ts$ zlfBTe9w8D`5k4%mOh8a9`L6?8j zC=wEB$yxQPb>jG0Q$wtIq*?j-@Yq>Xg;YGx>gbnyO2~-ME|a+Zw4uha{zx)>Abvsm z=N_eJ>tCk-yuQ7B=ta`YWIpvc36YNdWGRuIq$wlil|^zUY=*KsC#_6-;qkl2?EB7A z*t(^RUfEG-pSF3HA!knbeI<=M_FmmEb_eNwp%O2ri5qeE;jrq8z}dWmY156vqz1u$ zOpk?ECV)M38O`pI(*_Z7aKFL*xFQWaxxpxbhY25|9U>Ob{*V1_`penp?tNs+*oUW0 z5S^~(633O(d(TXv`aGeflmy$8rVKdq(?#NM`P<@SAE#C}Rcb=rIs0p7*@rLK^KG73 zF?MEh?AYn{%JMzuR#&^yh}2wO?(|Dak6gON{`j_%i7#58yRW>w1{)!*Em>mkeGzL1 z0l+wd_gp8e+WEVb=dNrNe*2Gf0$Qtd|%)|2@I}UFuN6uX!cUx0qBPZNHa!rkc zOeOs#=^6=0|6qM=E*}3sfBOPa?QxU-t6~?BRE?(DpWPQC4Zd{y8(l%z&h%kgSqHq7b5yB7%~lf}#+jq9US=LWW97 zibh3-MoET+MusgWnH5{4R#a3}R8+LFEfuv?v`d>?v{B2pmIyP?{IB!Opk&sz@Be-K zbvev4=Q$tuxzE>qz8s~vVgAi4nss)og;+LO-}vXUjjOJJD`(UK{GWYO6;JJ)n zzxKWE?zeBAcKM9h*r_+aUFQ0G#^uv){^MO`f4n&+HrDm`AGHVCr#)CvaWLi+?SbY$ zYE_@a9IU8#a9X?e0B6ZQ(0=+`K>LaZKfEdHw%f99`tZROzw~$ei}Gq|C}=4vYAMh( zZU2k^?K>Kr$olnA&nl{0)}|;$7{ic$5>skH(j&9)M5nP;JCX0GHrV_PHfeJBIEBN< zdh7?AS7=FxW;+#cuGeb=#v;aGQ=WykLm!I_8#W2QCJh^Ah_H2cYdQ5=c6V2{F<2I` z8#lnnDlHlcgDA#UkZTEcy|kDH%tOk_9v;OUiLJKn`b&l`rsIray1N}}NR!=l_DeIz zjA1f;@|ZDxrd-x7l^Hwj{)RkRU^=dc>!>E!!@Ts<=owj^%rYFK(O9GplI%XZ=f+?| zt}IaT!z(pdYW7Grg;MEz=}j3`lYU$qt6a|fX|Tm?Os$+X%g{FMIzH!EZT9pxo{P`5 zwXm&jz@PZmA-Y(<=blEOcdcJ2*THtnW`)DonC`4}ixMdgA3X(m za-(ZUb#;7p{NZZtxWm^_qUD}A!NMxl$&HuAh8jaWC7OjJenIhu97lyAzCjPPg+P1w zg;Ft-8rj0{23yN9LxiJ+BVyYOp|uS{I=f}JF~Ah8HiFL%IqU2R?XFh$p*wRaUJOd6k*G=5Toc5LmA9c$O!a?83&2?>+H=`_SL zzK%DBayVv&DDExci9b)`JVNQlXNaQS61u4w!e&>$B=Sq1{!6;>*MCVD(RS6XN9K1;>4I_Ad^Z z7_xkZHRr%G^#?i=M=YwXk&NT6bLJUB)fzizo>?7LoWs?NrKd9xMZOG0mXXbdU`IRW zopc#|mAaqh%5_O3_Y|nZM)1IwmOrgQcj(A7lsb!D`k?lLV2Jd~X;$9lDQ7=-G?NjU z1&4-GS0G7FS%pjQgSx#B|CilTQq;%=BhN|B|T45DN7^Wo+qf{FbTuWXgS4HYA-&~?Kn|v z;P?$&X*O>qJ5JlxZ#)m~I*Prdl6Yh{CsG;z|fnxyi$ zmQk5hN7EaUoz)0fBv4ftl505fJzWcs$N8~}>7O*t(;223Ru9V<9E_Rbp&R_<$NOQds4xy2MmNrFN}|26VD{~=6hcBK4Ral7U?}QT!PL}s#@1;0vS;ayah}6` zikjm_jT=5N&`zKUR{m8i>!*mC=wE?UT)mr*&YKVz1FED_Oq7_ypYk=8I?igq&^GF+L9^sbtEmrs7b2KU2j%*(L`i*qNaEh_2BL z$7Cq&k|kRneRNA~YHF-UPkF&j2a1-?icLfK1729{TE5AEM~&@rV-_!t;T?~j!nD{~ zON$QNR8X!|2YII`e8vDN}H7ny1a_wAY&> z9E{9O7VDRG3Ik8P%@Nupo`hJx>?Qyp6EjDQ(>ts2)#GdSt z?C5YQ+RQVGW>2QTRL)31(=r;Ljdy7puDx+x<#v6h7wM>Sxu*Bn@0x3XNr^|AqeM^J z-})Aj0;!$wNESTNtvP4jFFEJy4y)$lWTIWEabN1mIH!{ZZ9dLO{YiSS{bU>>sdH31 z+MTLap&%w8Y!4aBNw1?X>%z%;!mjqgJyy zxv|*#USF!c$?5Dn=3q^Yvxq0p_O@^WrnEOXSYgbLB_FkHjT5G^UbsyzQIj2Q()ZQZ zN39O>yKLyJg=1Q@+OK{X#5z(#)U~LjmhPw)g|1g;lhZWLYPin1kF2!faA)buycJ7Q zgI77KfB1^c6Sb)uV+`gt&p|}3-eKde8x>hp>|}&6_8xZ>X{F8_J(+`45pvyPtrFXN zyd}U8?c3rg(wlmf=mzzdF!a`H0a}kU8};MRr-T8zM>@v*^y}E(+TyH)mCK6f-nn-B z0 z8k;+`YDc3i^y%#M(TZ^ztqCn3!=ftBEM8O{w$ZxkYx(UNYje}vI~p3=HL>ve8&eLw z`>xa3+oi>7}|5UzC^t9fr# zZ)_jA+~;d3){2d>CU$c5rm>e=o+>gFh;U;XK8eNn6Mia9?Q9jYx7wM=i3o-22Q@O~ zjG4SzW0|?IrDID2`a7U}GP`jl_??(>JIn|kn$dtvzB`t)e zWasgdZ;q7G$M@`cymaN_#Va-6Gk-g@d!Bplp2f?SEp~tEg@pp)sgkZD;9gi}FLf;} z>nvqqSxt$)rp&dlOxhF8K1{c?t8EwVW$~)cic+T*Q5~xa)}Aj#-bNvKdY1!@prKgN{u z2^3>!Z?c0{r_b)NX;(P+=#_RZWlWW|Z%HIq}VM9{Oz)u(qv>V0}gqViCt zs=BAQ$!ycAtob-pZRl|N$iFZoarhT&_F~yq%V;DaW6oIv6Kj5&7MCWA&Wumi9$2o% zCzSgdbAVRt*~55ejB5$^xyL*MCnE+dd`xS%cC#Z|Ur_$D*yvT< z`9Bwf{#*+_D>lj3=FX2wIsGtdk&2>v7?Wga@lM%1%N|E~u^RN-4c1}@JCOUj9X?u( zvyz0o)|aODbwYV^Tz~RZ5 zMUH}|xct-}dvbnUV`58_F!i=N@|;%ZG3v+wHp0i?gR9f3`YE(<*eFzk+kdv4$FKd^ z+e$gP=}FXY`_Zz{#E1!VLYE~(B!{Gi;7eJa8v5` zq{9Vc6DN$H8#?2vOOwKQ`1th;wkA-)O+!_EPEHrIpt+vzwwym(iEvwLq^j6-XFtz zRU@h9dw_Qy7=j0S@5t+)GUlElZ~B474rV-5ot%u>%I@Q+v())*YTaMHL-{e1>|4<0%?C}hl#L4!TdH|Llyjt(7r@p;}u2Ay|) z(5S#mF1)~d=-`X|sHqN{3!Q;hHL_F9C9Pn{6c3A5m*eQnvFAuzw$*k_Yd#imtoax* zZ!lLo*}9MYpAH2JRC!_uNTzEd^ixa)-AN~bJ*o&iH+}P03o}RmInJK^$o0j_Sp_Hv#Q&j)d zT;c3-y~f}-1S{a_F{75gu|9_5QT-VzF6-zpSEQyjtG5olOZ)=OIi}fY(mo!-e*_r%zb-}GQ& zRWa+S!ehtJ@$(7VVD;U(eSZ0_*tA*Y8RIAUdmr-)p`kqNFj0qR_cxT7riOVa7>(K6 z^P2KxcV2TIw-aVoYDKcBL;X`#RYjB!JF=Zc&cnJjcaqU%(Y{M**tZ|##x1#T6NIq@bJkqBI33$i;TQ9C>B2x&2*=!GRLY! zsk%P|OMpro@;`kg&~W|oD%F-U>+2{989#AW+?J%xTe8-N3>_B|7It|^*6thEuH87& z|1xvU#IUdh#)6m)$r-n=+ZYiU78Vs@&M&g9yna(k!W2TxB*bj5L^bXj>J ztqRTzzI#jlLrYdYV77gHFfQMkw6gH}QCDpZkI0N#WqV|Oz_z0+s6RT*`HoJnCbUOc zF4fpT9fPT|#^SO{IgU{^#?>9#uK|!wJI=h!YJR^oQp5M^r-KQ)q#PRjr5su6%P%w`WlE#fJdGdhun;8p${Zg!-gB# zKJ8jMdv+cvt6N{d@lxuY^@lRwK6vQOHxI2`wrnMMG|0R(t-SlnC-Qxs{NRHpeU7|e ze)C51XZuE<+#;n69>H3qXTcd|ppQDm6@W^-(h0VoDlH)KD$nfUwUwQ_AFnQ3yCdFe zjo&dV$>uj?ZPLPJ%dBnO)E(#h>BBycf4u1a-0a-@7nLtfsam+KICsc3MdZ^lk6=BY z^y{SP4F4pLEbJrGOV|`wP>#_4{0bO4es&#S{1MTRi}+&BACPge_WE7Byi_JmOK{80 z-&1wxtqd`Axk(g!v~h~=`{~_PE_v0}mH5V$R2G!h#w4v=>=u@+HE@Wbw3!aQ%bC@$ zX|W5h+)7`u*_^K($LIc2qw$;hSlx=tz2B@ru3w1YWXvR5&U{&2Pl#}j*9Lav%;V3R-0 zy;{Simh8gS@7x@Q*;Ti3svfJ}>(b4GeO=KJli24uX|haK|0?36V`t2(d2Cm4wdasJ z&mq2*iD|L1p^IaD{0g$R-1+1|ufVXWQ^P`HVnWnsSX7i_giMQ#n>5}#>$crHwWg4j z5y46Fiu_q&VH1KQ{qrL-Z(5g&67}U#+~eFy7%L)wISIyJRp#dYh|0v6NfFT`ASU)~ z)&5x=?dx4y{?U;kH6ISta#LS9lJ$2-D?p!s_(jQ{OII3WE}IywB63E8X|?^DGlLG1 zD=x?>tY2Oe&eEZbrJLy~N0?(Zo7J1~3>HI=R9aAfdhAsgwtl+utiLx~)gHS4k6&J2 z@MTj)SbNONeKP!!hvhi?D~{Gn(&mPT&rQ2zarx$1GdJB!=`uOewRUH@YhZnjsm;^X z7o}|Al&AijfpyxhMFWQUjG^aEQ3LD637MzI{;tt>u6tZPd%SBD9oMCX)%rl&J*;L- z7i>;j4YTqmErIeUplMwDIoo*-{;Pnpbi!DruE zKADPT4IH-Ho(6N56fPGhyIn4N7rQ>WB~5p!HSuY1RA>d}0?$bDBMjxGO7b?aO^DTB z=SR90kzZh>@QqcggPELRe8`Hg;NU280Y^b-Yz$KCSaP)E`=qD*RxXtn$fx9`2aaEJ zT)Y32_D}7`<`vB{<9)O3%kR^}^8eb?WwvE)pFb*O zcg3ly8+J}R@4RU{RT3R>PHdvCBr-VGlgOu@L_TG&-Q1vc(Fn2}V&*W9kTJ~K87HxP z%Y%u$VfJEgtvyeMYpr=Q(Ar^@fqC?ZLoqK}%?&d3Si|9}##*&=y|%Hcs_~dcM;pr> z#h2bHhKq&j`d3TPbVKm=FKVy%)4Kc)I^;ZSTzg<*e%h|Lwq33)j^;>Xo!hy-RE)ho z##dyb!YfA03@EkMYE>M|)G)F}9~t-B z9JTlzphUmWZ;ak!aF2B_81CrWcx1-4k6b&VJmB81Di%JGp|!U}cv{9KgodW=&0w>x z3arJW${DGetA!lsOn*|1&HKBsY>Qs^$;w^-Sebg;h9tl8fcw6#hfOnG}wn)rcKLrHtXZ@Ovd9ms85HMYj4w^tUU9??PisFf@vq% zQ#hLk(I?PHVQM)QqIKlTaQgc-GS{B&m8$GoB~4Ag=y)#<19)N1S&l7%&StMTx6e%d zx_s{8R{3UGY)`jVasIBYPI=sCHTP(>p02IeuD+Zyq}OupArsx5TA78b#tq(T*i0qk zW3JOWS$m-y>y>%PKF8EXk^d`Ca{7*0icqu;bAvP1Q}E=fUSEt$(w^%Gchpl6F{(-! zuz8*C&SZOTOJFeD*F7hPt=(bM_C`)Ml^V~xVJErNX!bXRGpIr(W~#ob-ZP(U2%nm_ zD0l2cf2%bw^{%bqX%oqao+&YeY>wAo&&$c$JHr)vJ8%2yZ~O4}L{6<4|kOYL#!XC?oo}`#px<>^c0_PSn_c?)lx^X{*Lt zdb~ZO^>|;3)!>(URp%7gIYLX%-`1a1g*(=cpPw*~tom8f3^UG_pcIv?l}guj3Nt$; zVwfRaF9$rAbpcwukTTrdVCb}#qxWvTmEpRonH&6-mL}2$m0E0UCumm{inC5X1*6fd z7fdcE%2O2#h0lk=$F6$M>p0fk*QFi zr-R>bRNwm}&G(yB<<;9m2fNK0tJl#%eyrGcezSGI8f(fWlmVz=M_QbC-hZerZTz562l6XW@VIx@#> zchpsCNVEz$6Nx38>|)^N!U-OFy;T1Z^obaGVCYc>_wFab{4a!F)`_KV?^ctojVUy zUY?W~i{@1p>whQA;7U%no5VPKXaDoWSbJyHfqwTV&OAQOpT$+WFXonwd-iOMTC_yF zV$Zhos%gyhd!1BZSN9jZ--Bf0)JISnpF^+^qiL zo;cZb^0==SZAmYd^_iz?i?u|X>?rYXO81B;_HRy4^VK4(v=J@6wGBSiB`xY7nN#B1 zYU^ca-J0o9UMw3kPnDNwaoG$Hlg&0~pl;Q$us?hp*@!j_Q|o1vZOApfa)IB#Z8FN{ z#ab6iw4c4DE1;GW`rpnxw0{0wnN{XRvC~t>j!m7OFwb1|w06Brx5kxoC+Wg@S4T~sRZuAtOG@Zv=p$|7;ir!U|CiCUqwv2Boh?4UWu%Pd zl7gH_6jTf59t%?{u!CW)bzA&s5#1&~hmW#?Rj#T&?5LL&^Oh}KoV7A(*(h63soAFN zU`0ole_S;q-*1nn0?n|wz$!(O#*LSHoHHW=up5J!5g&*aF7x;?-% zR|&1wJ?KY3<-{(V*tr%DxH3nN-9X!*vOC%B2jBjQ#mQ`Y|A^0%A7Bc6{6m*1aQjBL z`G-MxBnA}y?nz~J{Fzb4QS_5hwI%rHgJ`O^3gQ+^+&HVLUvfn4C!4Eutr={v+Y1jQ zJ@MSW!{!>}yu_&~p`j^LXC!;pn9}bu+crFr9kBn4hc}L2JY!v4z^rwb&ln%SWiBQp zWwMO_seN>`<+KR6S!b{T`{kWxAvw^w&E4 zsaw(Q*|n8%JNMtTyEbP2s>NRTW{Pv99(-><2ZGCbWtlSewwUvs!3abNR+*4_chcGZ z^e_47_qVUOw%Fh0u`*!Dmbl`|n|9Yt<8N!dqYk@NMSmceF4k4H?tem?BkTDay^2Mz z+Vud{Xj26jMjZz5@Mz!z9~Z)YwH||QBysPWk%1PTkxX-xuxs6q&AXMrMXs< zI!vWaT6aNyc?6frT1w<`-NF{Y8vGsY$;`Yw&w$jqJ z?oQ9#t}b>67Ik-Xf(lFJ?a>ZzM;mK7)O};Fw2m2=)(h-iDzSd!hhh@nwrgmRR>e~L zcvH2vH8=O*dy+*S+{LDKSPH0()glinGi6wHPvo$MYT#FUK}BhC<{e2jiLtS<@>ty; zc4pi*uYz4tF_wZ|x6ir}8{FkH`u`y3DW*;zGGYjeJLclKyW(&cbH9)?7D2U`RE=6W~>gjh1_Fl z+cmx4M3@(++Xm;xWG7}T)1Vfy>XBT%no?%`MB6P}0&?>%nUoo`0?VpOg|c<4R7BCl z{~x5If7Zfv$O~prRW|d@$^MXCc&ziN!HauwL zFmu{3RH+iPaE_MfRi~c`gMD8eDWD=TE_P*x-;k_~l`EEbB*rD?$A(|A z#4xAY;lJt588VQGm`z8sR{SA9H2=}%Wf>_|DH+ANKDlZ+Wj6T{?^)w+LRHV}Obe=t zj%q(Av%lng=H%KBee~hMLx1o*JY+tTh>JEQW(=*7HviYnInUoybI&}yqfYYp9XmS}aVtTFNo zgrpMU@17lVx2qOiR;TaNBQ*mj0^Dt96>~@TKA}yQjjF*k_R(O{*>lBMwLa>;IHIAp z+h{&Tj@Hszqj#OTBiGQ9-5)-o7w}dDZ;jLsd}gGl7v0e+0YUT>F>shK@MYJ;XeR7b z1&Gl|^_^AmVd0s*J!)2BL|v`SEvs6WWj0s`pEqbu{F=N8W^b=LKg&!@Rr#!_sEH1n zF>=SIl+7azzU(ydFy=?wV&gA}2=n&#TjduY6XKS)Kni~PdLDfdj|$yoU(w4g`8v$c z9+`Ua(#-IU`&Vs?$gyQk44<(0o2JG_Yi%}LHMU>7sBl?;Eoy1vq{*WkM`War)?h*t zi_k=G3I_v}(`P`cj;4D*0XCujsdt)8eX7EdHZN<|O$#2|w)6RF&-kR6X-NsY55Bx@ z{l3&{+Y=aQ!WV!3mqDqwQkd<`T5glO$bM`^3g11Dp#H2 zvt}V3p|uZg^bZgAWuh@`&QB&9$;N6j#6$<8U$0R;dHViY&BWG3Uo9Y8cBjWWdXy$I z!^hItyz+A1O(dZ?B-DpOhpB{~>*)c{Ps_aCb}^x>N@0JieZIZ)o+lUV$+q1z)9RIQ zQ`E{U{fFjcsCG;K?(ju^J|-Xk89@u@nsfei(7WJ;^|tEV@EadVE4w)>couTS+} zx0$ohKN%NdDi~_MZlf$DQ*&6lk?2*#!dw*_C31I9go?6X(T2I6p1$;pb`{-Ym}W1_ zIr!wuhZ65v73X=w+LbG^6VqdNKL6~l*w~bm6$!Cojt$CF`quHBx)buAzSRi6LrMG}WQxe?C(o34_O zb&fPcjU`U~+h_eBZj`_p>a=mDc!6HmxZ}s^9+X`D(Dh$CS^Tg%>Q3uoAKfpWE^aQ+ zurl^`s(-bj|9;B2Nt|#Vx7xk@DT;w&npmoG?&pRTsoOmVT?W^^9lSVF`?mEqG=B_GvQ~)*s!!aL;{5G{3y@lRD>QYZJEo z{`XtT>W=T}tEzI`bC1K6c*wD5kK+*cBOZTlcR^*PXTIBp6H!@)4aZTP9Fsk%xHRgT zG!_Tr$zeR+1Yug_Dzeu`+e=3JGN;J>h~j$z5ce* z=j~U}kvz^%F1ChK`%D&bdZH&!WQ)F!;MfJ%guaTne!1*em0;Jzoa+&(;&cYxwZ|E; z$a6@|qx?fTQv1h;A8KE>&%G%nE-NM`%U+^?#HHLkuU+eG<0m=Xa82I$OFQG&7{SkpGzuRlA_92v_^ z*z_kzFO9(I{N((iR8y`=i|*-EnRe=K{eDYh-U)TNW#xCbALpjacRV91D~}cR29hht z|E&8h2RtD`2GFg+yeKT05({JF3D{mPk&nqlEN@s;v{{ zwYA2kCapHjU#n{B_D}P#)~XHGa4k8m`hgcZ_P)o z%afxH<@FV3@ihv*GfE_m~LY3O%1yJ=z>ii z7)iT#6Pw?wSg|R6`98*+A7A3MDwp!R!>{iq8 zx!S-GR}-klNzz)hf9K1))|P}t_%Dr`8b9h=liXNMIBU6m+<{GwG zlrnSO#$+z*4f?z-{#vb zA85J7lzU+9W!n4Nm&S_r8tstw8SSERDpoZffXAWloaRhNF?FBcfuub}730Uat8zaJ8+~TPtsE zmANOha!F5@38yNp&eQapMc3P-*0?XcV!;A6LFw8a#L&)N#w{^3nWmhvBz>BDPl;hr zO^v_SDnnJd_4X86tv6@lnXeVTWSqr(jfgM_y&mC`Cw-z()guGc#nPW;_UQilGW>L% zP~~1wzq>ySB++WFH3g6!btiGZHLl+nrxx_Zc6|Q&>z{Y9ta^pkRo>BIY29|{&^F53 zl}Naos1#B8=IQ%IRprfU200))_L2t4J!=|At-8)+r1H*1lGS?UO+EIj5ePAI9_D}u zoapE%KRbM~vYxE;cV*>bb@WXLD||Ruf|cg3%rq1-gRga(>s8RLttVuTR-xx)F*zAc z-!VwPAWff?b(w8l21C_m4@}I!YTD7ktoHnj)L4BIefr83Q^(JC_`51>Dk@i2FSufn zr8aQwzR1XVYC?VD#CRFNo&)lG$>lRu`>}i}0w^W{xt`f1-~y$KqsMrRmL8+Ik43e{ zYVE1I#>`h1_Hgdvi5^bWsjE&)-LTMFTemTR73k%54kfOsGY5^22ra&GZN@@R{G1FAslQv+|xpn)ak8Yo_dbRu@c-4*#e>Qy25b6?xqn&}17T!uIfXG#tFxXs9Wr(2z^=o<4AW}t z>D~(#T(M9ULVc}(zWKxw$2CU*?q(!*rfcI#e=)Z}hV5N{-M~YNouKW`u*L z&GjZb{XVnWne5i0b1%#=a&ShEc0%dWVVRy+Y@0M^%Ct+u=I0jK!s4gT3<;Z0op+2n zkEI)d3wN@RF)lb@;hpRgj3u1o)EC|uVa^+1y?1L?$Y?d97@)L~ZGU;`g-_a+u3ft{ zwceDq{KgFLx8J!r>2wiZam+X>B<$k+YnG)Xc+ylfnqyh@Q=xB-R|Y`+#0S5|nOBBa zMg*HOZf&uXcTYLCvBafNSQyX@ML@k3`!+H$qIwfIiFGflqbB4iy_au#JL8J8fehyE}j$V?@aKXUQvNS(f`rP{= zCL4SV7sp37T^toCMSXhpp_I_nd+$kR$$=>5mcBfpde%a}jWVyR-4SU}M_jrWWU-K9 zBV7Z7$hDRjOhA2;3&*LC$&qF)e!< zv6(*bT_(ycgjE_(q7qMi>c`APKVICb$P4hu7f?=o4bd zFc=53VFhf4I{|k?{w0JD^6`m)M6dzr@+pJIfH?bn0^bX9K3%f&N5Djw4{HE_&i@=v zacvrTF%;PiOA^ADKAdk5#K1yW2jrvge!z|2Ea1Hh9)(xnFF;&|Ti_y?0t?_~AWg%G z>u}OE{8RXk5dMQ;G^_?>?~m;Lk^S$&;C5j6^t&VQCj1qC6k^0+7z^mah^25X;C93V zfZGx8!goT991Ig61+Im=;0WN?Na8$_v<93Hm%vO|4%fjQ@DRKRAHdf_Tqxmpa2d=4 z;(Or@fZGcn1Y~jH+weKy?dWB7dxzmHMBe*=9&j2#4oF_tjKUJK;s*azTQco)6|!VI|pu7?kW z2sOhfh=LSY3%nP)4<3P+g}4OyUxNHELH=PTK>lIKKMeVYeJ#W|3BQBOU>>Z78(D4F47)f_f~X87Mmul%31&17tdJ7>on* zXW|MVeYxSiGn)L5Mpn@e!js?-BIati1&C|RQFsgf1}BA>Is`&s z1}uY(uoDi#bMR;Q3Y``*eh*K>_d>)O z06E2l18qs%DkuPC8b@5>h)W!CiNo#83xQ0Sc?DbrH^aT~1dxtdq+=Foo`tMu4+6rT zP1v&ud-i4^e`h}gFTw}#jS%rhz+F7<;&B&GI^#)a{C#i~-h#iuNfzyqo`f-QIV^!| z0DVk20MEdm;0qz<+ycmX&ZF?05OZIE_u-$=D@5WJ*bNWEOYj-|AjCZUpNIeR@P8iu z&%^(DxSL0u=Mm?5@4?sL6kg)kYefF|e= zA~{QlD=70U!>WT&G*>^&u4hHI#)Cuqyyv9a} zd?6Nv!c%mI?*MdpF@7y3zKe-(nuOoMWiSs`3$cVWE?Ei0a|!vd^m-uvONswd;=h#V zONsw7;=hdeFC+fTi2t&y;AXfNo`5&tGjIrz?g!&xHmrc_fcT^zgje9t@DKPwh~?)2 z_2F{LVFohDKn5AeAS0WuAbPX{KUd%`6L*(rmKQ4ZjUqc(QhB{&m`LbpatcM+N zKOpZlH3)^5HJPYr_ zmqM(=%{tPtj&!Ue9qWT21{T8Aa0}r7`saW=TmKcD6k-GZ<$A#NK;B$K-dr;V2>Y56 zctD72hXdt&<1{z|F9W)}@jD^%%n$&PKwjq|_dL>)S1!bLr0+U(^t#Icxo*PGP1FaQ zHo&d$dw3e&fiIwsliY{FIG7D9U^5W*=7-=#_yE2UBHsujVG<<4YPbRJhNJKndYxEbz+C*Tdh?H1f_#qCzY+xmNW90+qOVQwYN>vN!2hyr9%fb0v9 zeZgOaxM2l2gt)Omh?{buMu

    Qe?PT{|VxcO4J23`XEyBR&d89m>IY`5{-wz+U6 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 K>9chcrT;%KY-A|_ literal 0 HcmV?d00001 diff --git a/eslint/docs/src/assets/fonts/Inter/static/Inter-SemiBold-subset.ttf b/eslint/docs/src/assets/fonts/Inter/static/Inter-SemiBold-subset.ttf new file mode 100644 index 0000000000000000000000000000000000000000..97c3b862716e06f20e5ec45c2fbb1d19b959de99 GIT binary patch literal 266160 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 EA9bPs82|tP literal 0 HcmV?d00001 diff --git a/eslint/docs/src/assets/fonts/Inter/static/Inter-SemiBold.ttf b/eslint/docs/src/assets/fonts/Inter/static/Inter-SemiBold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..ddb279290ba32b02722d7bee592d7df22a16e86f GIT binary patch literal 293028 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%0D38jB&{w}Bz~6@Z)fNgB$^HtzXy?o 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 UK5^r`24)mgeNAnHZmsnH17|=S#Q*>R literal 0 HcmV?d00001 diff --git a/eslint/docs/src/assets/fonts/Inter/static/Inter-Thin.ttf b/eslint/docs/src/assets/fonts/Inter/static/Inter-Thin.ttf new file mode 100644 index 0000000000000000000000000000000000000000..76be6252b91e87ab5ead604b99d6945c13869f08 GIT binary patch literal 288568 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%0A2If4Bfd4GGEOY<C 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 literal 0 HcmV?d00001 diff --git a/eslint/docs/src/assets/fonts/SpaceGrotesk-Medium-subset.woff2 b/eslint/docs/src/assets/fonts/SpaceGrotesk-Medium-subset.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..0d2e1313ea8d17b853185a2f7b9acc73fe771c45 GIT binary patch literal 28480 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 literal 0 HcmV?d00001 diff --git a/eslint/docs/src/assets/fonts/SpaceGrotesk-Medium-subset.zopfli.woff b/eslint/docs/src/assets/fonts/SpaceGrotesk-Medium-subset.zopfli.woff new file mode 100644 index 0000000000000000000000000000000000000000..8f8bb5ec311bec778ff917213152aff783231e08 GIT binary patch literal 36224 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 D4OLc} literal 0 HcmV?d00001 diff --git a/eslint/docs/src/assets/fonts/SpaceMono-Regular-subset.woff2 b/eslint/docs/src/assets/fonts/SpaceMono-Regular-subset.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..e7d5877415715c1418fb9ad6f48dac61bacee4f7 GIT binary patch literal 29972 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 literal 0 HcmV?d00001 diff --git a/eslint/docs/src/assets/fonts/SpaceMono-Regular-subset.zopfli.woff b/eslint/docs/src/assets/fonts/SpaceMono-Regular-subset.zopfli.woff new file mode 100644 index 0000000000000000000000000000000000000000..31832cfee03791ffa18125f42847b29a79c5c65d GIT binary patch literal 38840 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 literal 0 HcmV?d00001 diff --git a/eslint/docs/src/assets/fonts/Space_Grotesk/OFL.txt b/eslint/docs/src/assets/fonts/Space_Grotesk/OFL.txt new file mode 100644 index 0000000..f831dbc --- /dev/null +++ b/eslint/docs/src/assets/fonts/Space_Grotesk/OFL.txt @@ -0,0 +1,93 @@ +Copyright 2020 The Space Grotesk Project Authors (https://github.com/floriankarsten/space-grotesk) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/eslint/docs/src/assets/fonts/Space_Grotesk/README.txt b/eslint/docs/src/assets/fonts/Space_Grotesk/README.txt new file mode 100644 index 0000000..a576174 --- /dev/null +++ b/eslint/docs/src/assets/fonts/Space_Grotesk/README.txt @@ -0,0 +1,67 @@ +Space Grotesk Variable Font +=========================== + +This download contains Space Grotesk as both a variable font and static fonts. + +Space Grotesk is a variable font with this axis: + wght + +This means all the styles are contained in a single file: + SpaceGrotesk-VariableFont_wght.ttf + +If your app fully supports variable fonts, you can now pick intermediate styles +that aren’t available as static fonts. Not all apps support variable fonts, and +in those cases you can use the static font files for Space Grotesk: + static/SpaceGrotesk-Light.ttf + static/SpaceGrotesk-Regular.ttf + static/SpaceGrotesk-Medium.ttf + static/SpaceGrotesk-SemiBold.ttf + static/SpaceGrotesk-Bold.ttf + +Get started +----------- + +1. Install the font files you want to use + +2. Use your app's font picker to view the font family and all the +available styles + +Learn more about variable fonts +------------------------------- + + https://developers.google.com/web/fundamentals/design-and-ux/typography/variable-fonts + https://variablefonts.typenetwork.com + https://medium.com/variable-fonts + +In desktop apps + + https://theblog.adobe.com/can-variable-fonts-illustrator-cc + https://helpx.adobe.com/nz/photoshop/using/fonts.html#variable_fonts + +Online + + https://developers.google.com/fonts/docs/getting_started + https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Fonts/Variable_Fonts_Guide + https://developer.microsoft.com/en-us/microsoft-edge/testdrive/demos/variable-fonts + +Installing fonts + + MacOS: https://support.apple.com/en-us/HT201749 + Linux: https://www.google.com/search?q=how+to+install+a+font+on+gnu%2Blinux + Windows: https://support.microsoft.com/en-us/help/314960/how-to-install-or-remove-a-font-in-windows + +Android Apps + + https://developers.google.com/fonts/docs/android + https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts + +License +------- +Please read the full license text (OFL.txt) to understand the permissions, +restrictions and requirements for usage, redistribution, and modification. + +You can use them freely in your products & projects - print or digital, +commercial or otherwise. + +This isn't legal advice, please consider consulting a lawyer and see the full +license for all details. diff --git a/eslint/docs/src/assets/fonts/Space_Grotesk/SpaceGrotesk-VariableFont_wght.ttf b/eslint/docs/src/assets/fonts/Space_Grotesk/SpaceGrotesk-VariableFont_wght.ttf new file mode 100644 index 0000000000000000000000000000000000000000..1e79375f7b407be8e874833908b52e586148dc63 GIT binary patch literal 134112 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 literal 0 HcmV?d00001 diff --git a/eslint/docs/src/assets/fonts/Space_Grotesk/static/SpaceGrotesk-Bold.ttf b/eslint/docs/src/assets/fonts/Space_Grotesk/static/SpaceGrotesk-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..869a60f04eb7ed84f7fd12ae3f557920c72f19a0 GIT binary patch literal 86400 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 TZ}UAzT*rpc-x_5jzP7nO_!umk literal 0 HcmV?d00001 diff --git a/eslint/docs/src/assets/fonts/Space_Grotesk/static/SpaceGrotesk-Light.ttf b/eslint/docs/src/assets/fonts/Space_Grotesk/static/SpaceGrotesk-Light.ttf new file mode 100644 index 0000000000000000000000000000000000000000..76a195f12bc594c97d9afaded7533a3da421ce49 GIT binary patch literal 86556 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 literal 0 HcmV?d00001 diff --git a/eslint/docs/src/assets/fonts/Space_Grotesk/static/SpaceGrotesk-Medium-subset.ttf b/eslint/docs/src/assets/fonts/Space_Grotesk/static/SpaceGrotesk-Medium-subset.ttf new file mode 100644 index 0000000000000000000000000000000000000000..721d8ae00c94f2b1e3d82a15f3ecd268e054ae15 GIT binary patch literal 76920 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 literal 0 HcmV?d00001 diff --git a/eslint/docs/src/assets/fonts/Space_Grotesk/static/SpaceGrotesk-Medium.ttf b/eslint/docs/src/assets/fonts/Space_Grotesk/static/SpaceGrotesk-Medium.ttf new file mode 100644 index 0000000000000000000000000000000000000000..667905f405aaec5e216c0082601b85eab9e999a0 GIT binary patch literal 86528 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 b1p8tTtI8lR$%}-()`76z{(|OxTfhDfscs0$ literal 0 HcmV?d00001 diff --git a/eslint/docs/src/assets/fonts/Space_Grotesk/static/SpaceGrotesk-Regular.ttf b/eslint/docs/src/assets/fonts/Space_Grotesk/static/SpaceGrotesk-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..792fe1b396d23505b22b6a948cb63bc1f4ee37e0 GIT binary patch literal 86504 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 Wi-f(_fiT~SodlcOc23G8nEwEjs6Czl literal 0 HcmV?d00001 diff --git a/eslint/docs/src/assets/fonts/Space_Grotesk/static/SpaceGrotesk-SemiBold.ttf b/eslint/docs/src/assets/fonts/Space_Grotesk/static/SpaceGrotesk-SemiBold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..2171d9d301ab057e209b85c074cae24b57436786 GIT binary patch literal 86452 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 PQt4lJBQF!;S_kq!xb+I) literal 0 HcmV?d00001 diff --git a/eslint/docs/src/assets/fonts/Space_Mono/OFL.txt b/eslint/docs/src/assets/fonts/Space_Mono/OFL.txt new file mode 100644 index 0000000..5bb7346 --- /dev/null +++ b/eslint/docs/src/assets/fonts/Space_Mono/OFL.txt @@ -0,0 +1,93 @@ +Copyright 2016 Google Inc. All Rights Reserved. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/eslint/docs/src/assets/fonts/Space_Mono/SpaceMono-Bold.ttf b/eslint/docs/src/assets/fonts/Space_Mono/SpaceMono-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..18b8aea3b732460d13bb8cb7de812dbae7e9ee84 GIT binary patch literal 86740 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 literal 0 HcmV?d00001 diff --git a/eslint/docs/src/assets/fonts/Space_Mono/SpaceMono-BoldItalic.ttf b/eslint/docs/src/assets/fonts/Space_Mono/SpaceMono-BoldItalic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..51fcc39906b9b2291606a28aae897f5148d78316 GIT binary patch literal 95396 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 W#!vdx4;-b<)2nr@7;mOzr}|&46QYj* literal 0 HcmV?d00001 diff --git a/eslint/docs/src/assets/fonts/Space_Mono/SpaceMono-Italic.ttf b/eslint/docs/src/assets/fonts/Space_Mono/SpaceMono-Italic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..119c545edecc22d1f362caff000f0e0d4dbe1b8a GIT binary patch literal 103628 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 Wm7jFdi-wZw?bM=Hls6;3QvENE(T17; literal 0 HcmV?d00001 diff --git a/eslint/docs/src/assets/fonts/Space_Mono/SpaceMono-Regular-subset.ttf b/eslint/docs/src/assets/fonts/Space_Mono/SpaceMono-Regular-subset.ttf new file mode 100644 index 0000000000000000000000000000000000000000..5cf59572e27d1ef2e66c757f8e185099c2f31f17 GIT binary patch literal 84504 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 B%h3P; literal 0 HcmV?d00001 diff --git a/eslint/docs/src/assets/fonts/Space_Mono/SpaceMono-Regular.ttf b/eslint/docs/src/assets/fonts/Space_Mono/SpaceMono-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..3374aca03058e66d3a2cae074f0bcbd73466aad5 GIT binary patch literal 90972 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 Ae*gdg literal 0 HcmV?d00001 diff --git a/eslint/docs/src/assets/images/404.png b/eslint/docs/src/assets/images/404.png new file mode 100644 index 0000000000000000000000000000000000000000..347d16086ef86174fa5f9913e686fc4e1a05efb2 GIT binary patch literal 256992 zcmY&<1yodR)Gpm2N~fYA-JPP8ba%r5N_Pw(jkI)!AR*n|DML3ycSuS%_YB{^{(J9Q z%$mh;IA_26efP7Uy`MdyN(xfg7^E0*aB$e4rNvd?;1D~27b+SG@X4j1ND}adZZECv z1P4b*1AD=LR(W><d<gHPBJ~ljY=nFd_yx&AOkNBQt}+_)-WVAUao^>$xR{zd{K13w z4~oyOb0L{6_08kh&WO7-?9_QQ<DBF;^dDYY@YgMaF;XYbu6M8SalVA$m@bD`G$bc< z?W29(9D>v=Q!VOqNe5-!G*)v+1kK2@d<c)aLQ$O89ygHTX`TEeHK!7|Mxo-zUMtwe zm1q@9`okJ-=>u=m-Li8=k&yO#MbJ#?-S|?yUDk?RZc$ZLm58nSHou2LCXy1qg!2FU z6aQf1ZEEV_<h0L07nVa8=J=ZU`I4;;EyH??g8VubT~mW0o+SNKoy+=pXi#x@xRX^j z>{3WuHbw>TA35Z3jq8Hd4`GM%nw`nj+}h>8sY_rN+yyXnz;0O;ot@^iAgAv)F~1N$ zt&xv4Iy$P4`fP@z|9_WonEV-Tv|0rrZfg@q)ym-+C`)L;%nX(yFoIo3g15h~E33+B z-{_Zi_PWF`>XioY*Z7}G$p2kthQ_-i);QxgVnMjGvx4$`Z_?cV%)|1<{R&#!vUWnp zL8W;AY?=4}SbpAlyS-h_yx_@i^?~&`Anh!Bb0g5r&7!@b!Scutwl+FtHTdU8p^*Fk zzfXQw1jh*cRmNXr`-noS%;jMDqBkf={n>Ri|6?>>c5OZKAyNO(u!oX!`m?L}{<~Wg z&5X_p3aKfRt(~o{XjW~6=7D=NKW?yJtp=vXJe=L|aKh2J`-=P1v!nar)O`tn)tX{5 ze7ibc5w)6sZ@_M3m;z^IXD3I=W>vf7U#y4sY~_aUvp*q~W~QcABoW@@Icc2ah`qcY z2RpbIg7z^nor?eeTlU@tgs|4>mTDTkTuMi^;J$12X(E1Kax?}k4$_nJ>_Luy<o_&3 zPzQ7_-D;~biv=QM0nc!R79zlWDaYi&WwGE1B|bA&_qywt2Sd+1KkYnk4=wh8c89Jn zw}Qh<XQo1aPPbwG-4?<qBPrepge_^{!}I=v^g4LxslI(J?fo5kAJz2R)6%dHIxHnv zuC?HC(STAruUKWcX@hvlS+KKHrhZA#?x)M_BUpdl{u{PO5s3e7#)iLf7^`NgBTX2i z+AsSx$oBSSl}(CfRV0xZ^cz+QsC{I5kEdj0czDU-_mqS3f^rPi(dGVqH*BfK|D6bq zs2^JuIrr-d&Q7+YLtaQtC<W{~C|j$Qmj=b4<&K*`3kwS;i8=b3zC>E%L8kK?o@$%` zm<{Ay^S7|$Vv5Qj{T;pbT^eKC;j3~jQ$uCm9fut7(%cL;>HDFQ=JPx481w08&yl12 zkJ*8ErqX9yfVF2S4<{IfwQh^rh`V~i!lK_YwEghx;Dd7vKM@!LXL?KNzw=H)<o~bL z?Py65JR_&ib9fmdMzE6GN6OHZv9wfANJLcaqBK|z+atpN_J|y%?IDJ61)Q=DJ30d@ z2IGz3Xc1<_Sy#8yn?Q&33eeHv^RYmUtP_EqYUV|g_xa7AwNF)4SCA&j{VW5<hWTY1 zbHqw%6Cqw*=%5A@`lwc`81~*GHCPx3k0*YFMQO5uOi1!=a1NrA)p1TrYU3h8LwcSN zCS-FXU%Bfhu<=54Wvff#Y*Fst76qM1P7Ta+=K*!(uxFa8Xsn1g)gXZfmoG0bZ!%hs z2BGYv!#54F^j&>5hG`rbtW7t8HsWts921Z6kUtkUs1!d({}=x{{AZ(w!Ukiz`1SpU zwKnUR7cL?H`ub+7n)n&<%H-?UzUHHqS8|CEaltud?f6`K^sNg|t?I!3Pf_Q2?c5a( z$qh9z5B3*-)jx%?(roZB(7>V%{LR#At8;q>oHBo(&(JOtnB*pSvfS5w$hw*FZu;N) z>O_Q7+=v?q>W7<52H5>5{@d1CrB%i+hc02?wY9a^Y(ne1guNQ>4gx}Svux#u7kPTg z+hnupxXq3y!{<K7w({0j<HRL(YJdBT9@QXu=KJ;UbUw^E;$)bx$XAGSXstAosLW9! zc~pFiqk8heY-ZHX-w{&|HXWWnx=8swQwxPc1@CL)CM}e!bZ;xWSnN)sR12c8AFjMN zzqk|t@Q|YSj6VD#YB{^xp<CCVS7i_bCkJ~F@H~Qum(pF13_zllOGg*B7CV2T)fTh% zx>27Cj5}ZZn~Ocf>%Z`5hea&9BrIa%O);v|k<SXleutyIjqcuR1*Z*`?p=mdXC!f_ zRy)2hJDz7y$mJ3hZD#00Y+f>6Wio!lBV?ZlY`Ek77&|O2^dqTRXE>6HyAaxDbG7l> z6S+W7Uu!kkd3&3BoUL6ZEljE!jyUeCNkaVm#HQ@iPXL!+QCi#T_i>R%XCAZm<t35Y z{U#>+SB45-x9bjs2dHWsVgN+R^;)S}7wL8a!WvG-PP^Ojat?3^Ohf#*oujum0#!Ex zQXX|vRM2~bdcMAaxkawVRTE!=Ka-et6AaQqsy}tQa_wwOK2+wl0F`_pX_&FyIzwOa zvzN2uveY%Rt}ymnc9sL+9D<a?0>jBT%tr5RGRG$3ZG^-6#{Jy@R9wTwxkb-cOY+s; zf455_g!OfY-rpNJ?GNrl?=WNbVj31W$<9X3wAFn8m(mi|!g2{Yp2_%E&}+s-mI5bs z7u$@QV*oWthqY74u}Z`WoG#AyZuVpLVt?&dQ@#8k6<&EFWYVP0`vusG+|Zdtzziwh z)J9LlpX3mS7L5p-cric!4PKtQ%=-L0NAtVe3WhcaQdMH>zTv@<@Z-?>`Z{Uai6%p( zqqV)<_{E-*r)ps@kW06|KLa5IFJKsIm4aE2&<Un?%0<bpovq6^u&$q{8sJG1Q;tGj z+Mhg}2_t(i_va?SFA{l#2p?a8u3scOouLzE3gR>JN5Prc8rVUR&HuUF-Lw<}sB^s1 zUT!-AsYKm*HPRNpk6B<|9{MGQiR$ZX)9!zN_EbnTXaFNX_sX!y-m+X}mRHjG9Z_)| zt8{e6j_F|jZ^<Atm0dK|rX4LT2Y;2%7*kUbAQSz=-@(q=Qy3Dw$trUFNPssZM0HeQ zZ|vM%u5AnN-q||N4(%Leq&8Z2co9zxYb*cNvLex1T7o`?R$Gjgg{~orz2+}FDB9A5 zJ@+Rp??KkO`d@w&hbEZ%<h?LRSx2reDKF2mksod=vK<NIK<njO1454bh>}_V=K%IR zo+Jb#w*rQSrv4*{Kx%Z9{y{*r==JNP5>C8{t%J#+-sk*AF#9O)<0@{}Q{VB^S{iP> z;65&ua8uQT`;~S50<whi?N1kyomb254G-G^!^4BgFGDkJv+rGRva+O-6K6DBj3`s| z0i@;Ut2tE%-afo!8J0giy<fz@dO9`qc{o7LOm0uNdAF2qkzZi+72|0>n@%RH!J%s( z9Nq5zcmM?__Xt#&sqJpoNOy(l-95nU{U4r&D%}$~(bGp7MpMt{akSXzRLAXfnlQ9| zE>i~u*x59Py@@%>{Gmo&nZk##iT74@3*N;G(8jPcbW?;hmfsu+v7dbUeL|X~fqRk* zJ%b=Qj@Ms&-`CgH{IwW^`yR(`-@bWxe!W#?GgD%$!BA9G+<^d&eu%lC(MMc(9J;?B zT6m!#FFD4`QraexrS=^LI1f@*`oP<#4_eLv?i$wJ&4RoRPL%jHNLk4#Bk^nWO89wp z8b22reQwY1FTMv61%`ykmN`4p0}De9d}c$a(k56&To5MO(uYneA%2^DQIqDAuXT;( z<LTqVo<&Q+DRLwlSC$fcuXq(2ny;?IEk@Ei9lFG%2+i@Fkc(l-+7azJlXARvyr<MO zdSwdcSJ|tzZhG5cIf61o!1t>Wyika?!!q%eKqJ2G5B^%ooh6KwIXOAGeRV{cd{_DA zh0rayS3+kgp8#Y(Gg}?C2|bjtI9*>{B&F*|DHQ`&it?UxF`sr!o~a>0GydCM{V@|u zrr=Fj<#xArl!Y<YhvJiS{3faTX@(NI2a{DD3yWh-AlGa3W=;_sy**Qtkvmq!52|dd ztwn0i*m4Em-W=$HXXcJnE<5vtf0wi-9exuWywkNYZL4a=v}0x|G7<WZ!f_y6*NDT3 zb!<<$i)I-ge*5+WtqU5=UutVvu^s8oR;8zh_-fs0XrSu}3X8f?bp7j?z<ejblkAoQ z&50e~9S?hH?Co?0rJsDXpY0lihSVT^iuI1MtGB+IU(USAVd#$guMR+@j$hL1*-p;h z4_dtPc{)1fO8%M4PsJsW5SxQFq*J_P@a5A^DJ+X|AP5DHubFC?Q1F(};mz>!BrceL zZ4bdNbv;;~?hOi)3UTatW<sD3i(0K(*<?mDB({~tPFHmXBo<b7s?H2F5+rc!3R*Zn zeZRK8bk65j!_$ZoM*Vdyqair<cx}Rtoa%`5j4>d%>l%rUz{!LJg185lPI<$g03A@H z!B8Em#a&d(I^+27czh6>bv?Khq%*s{W3l3|@^9Epj99qo<);tIQH-#%<nYV25P2Eu zbnOU>p8D)=ZV2quk&~HCnM*mh=(pvP22G1YhKTadK}c@aEH&m~$EU`UP9m1iX1?H6 zxZe48S>Uq;Nnq59QA5DMhiWxg&UVr!n9khvRiWVRdsCo>Irhvg&NnVDEr3gTvZp&M zXZBo0+uU!b$g;^vU|D^u0T1naY;wn+Qy@QUkJvq3W>f>joUObANe7&k1KUKnhMPda z<^^EuS;`vKFnp1_&U)VNv;2(+knUho_f5!!1PmW4TG*WwvzeP^Z9%$zHx_4;qyKmJ zPUiP2Y;yAKU8Oz2k^i<d4DTXETk5fz!K|c{r29a1fUOf`k#Ax2RVKikUd9wSZr*}+ z2S?UVNUDKvp<edFsZxs&w)4<G69QQkj%FP<;DyNrL*IXw`CZb-RLG!%@l-{CRfs_z zpou@z8E-rUs`J%OACHb#ydU`*`Edgj@_x|;jJ4WY@6UI2kw?7>4x~wrCMt6;`@ZV+ z6<H$+i*MQO>%3Q|zc*nYc{<PUX7GAYuY?nBe5C}8utX6!HsPU_wgv0THoP1Pl9GG6 zoozqL;is|#3P;!`=Y3OZ82Oqz3OFhJ*LO{f1=J4w4X?Kc9h@rc8u1PY%<Za^(JMk2 z5LUmHy_6d$t{+Do3=<%gZ%s(n{C_$VVEz4Eb2(q;&96Eyf>m^lgDrBlM~|JFN9P?A z{pv_B!?s>?XZsYbrt)8>i&L!BQVs!V(Y>Paf|gwVn8784(o}6;34cq=_muKsz*nQM za{^2I8(#YSZtKbeFDu}QC2!8^>$Vj7uSsGFD>1$w??#R&twk37L!#@9d381M^H2#B z;pVee4m-fm`m>vhiwl}B&`3%R=gXMznk!3q36f7dlp-RKPvHhYesMvLuM}q#20TMv zS!or6Rya<>*eCAaYwu>!;ItFv<Ye0l(0v@744Kc$C_lli)eEg{4Gk4C^p2@@98kvA z1Yh409V~n^mpBcaSX5jd!(ffOGy9&sxmF@VB8Z&|3GVa3`4jWvkC(Fr<W)+abRweH zqk*1;)v@7S^i$teeS`;%tS4UlCuBtPpW!vI4UW_vd@N&0PwjQ+YTW0HetC$t{<=bd zgAks|Z1Y}RNlbzSo%p;+7<>1&1xYHacI4<Fgo|#*{W)Dr;fRdV#O-bp^HSmm@09*p zgUq%+Ui4lL{l>K@X0`Y{8o;4pImRTh7x%}ji+YuyTo6&*n_iH@<)EUfeDT}KNh*CX zsXW?c?c~{eQ5?wJGY^uAr6m0RVH_m;!wK|wX}7}P?5+S{77Z+P_o7Rlc1cIxdtDwt zuk>P#H+;`-mEF5f)@b6}IX02-K|LjQwjv9`mzqXhy9Zry;o%+~0w63HaK*nxckAu8 zsggUn@$8JWb3#g7zw)`dN-CIF)ts6KJHIJrW9VWha+6U0SarOKy*od;>ecn@{?sl6 zSsrdiS^7?GPyI6EE%`+wQ87>w8^D2>ltRUT+e*p3cy%<U+<7>XAsBwRcQcrh8lg(e z9KeCMt0ogR!E06O3I_SuZZ|DN$;ZUo`Hv8kkiXa`(;c*li+;$E=6XGI{k(3|PwzS~ zsEX4Bf>Eo&Bwc1KNBTo}B%?DkC$hD}CXf)VTt^?5Qb^8%8XFr0g&of-yFY`H!CQsX zT6-a=WDACWnsjM-uFWomy|#zC1~kR^ou5xb1v(S%izx05e+`<~m}&)AXxB?C?RPEk zPRPKj55{0&XlPHGmr;z*#)yE+C7o!jJIfzhh*>*<M09f_oNPJNI&u{Ho}2o7EmsBT z&xBwMtA5T$5GhOYFIUp2SNIqY3N|z(M5(>)qq-kwT)BP_y?4yNSNN+%ork(q7L>6h zJm=Mb99>7*ZCh6clxn4ehkMWkTuR%gjmSvmh{)F=DSrybRc?m$^BUJ>Ro{=-<@~a& z7aU~!H&=al`6<J|0c&htS~<Sbw~=4=O5iOMI>*Z|ZEbazsIrHz4hI3c{`n_>wK9e! zV(eKb-1Ro%6ifxlXLD?%#@5TO66ndRtC}ydgSk<jp~Lu<7C{erdnNz30L#&|w1rVS z8_~9^>iT-Du!$G2z$5kF2yC`*ZLasuXp|bf@of~^TgpA7C|lMbvZU#~y}gBAo*xL1 zV-B@Wo>hlulQY0rmt)~~U(NVL)|6U5UBAOt@D<_k)X<joE9SOQ6M?1{k!7f|re+@N z^AQelOlJ$n8s5R(PAM%Mv<k4G?@vO-rEE)9?=$o@^_L6~@tQ)F1K3wkG+vx(zm|^3 z%)wgs(s5(^&2H_?)X*VQf5GP)38k2nG-3F&0);N?Ixc2)^Y~?>{(+fGQ}=62%(`mO zGqY8}-w5R8sc(x|=Isz*+4AaQVMZIm4SV^<YBgz%c%0+VLX2Mxc1l1-N)CCVnY5>W zy0HdlIr%VT6!-VZScU!|m9aRtsYLwa9$;@PM9T&5`>O^zv=ro=`=btfUR&x4qvPiV zmuMJ{d_Cc%5?X9}Snb>fp_y{7=5W-|DC66Snk^Xjy!<;)y0sh2eYS$w|9!)?edD_Z zB~WJvy%K0y(2Zl)kGb(a`_!n*8Gq#9ar<z0HJW-Es>!iL98^q0?5|)xy#R%(=Sl8` zn=s_jC#R&q;z319L}AXy!5q@U!^>NbV&W+%LZFh_dUF5Mxm(B^%c&HF4$<bOE`YI3 zAm5#1ZqDnRU{I(j3Z4{g{|AhO#QUIcZ$zTKHt<~=7kj(WjbJIN&_0fQXOej4n8-F^ zITDm$hw6GI@B<xayvmQmA~2$4Wq1B)<WjN0SG%PY?nR<W0ovII?HiFq1*p{yxkeNZ zE>C@wZa_;SeTSmIqot)hP|tMOUzv-TCo#4vjSzfE?&t>Jo^70ZyvNq7MCHOpXlgbY zV^R-H@OciyH#2R>bq_$Q9U^<7@Dm@Y`=x<|-T-!vT=nHg#zXXtYx)jS^xKMO^TmG4 z`Mp7k|6pWH2sa9xHw<2jit>ngpxN81@ZK#Fpw@YYQvhqlW~)f7MbqRApLH?nw)if+ zVPv%(RDdOrHxXFT)>b=}8GN;x9OI2!6hJ|JdqN;VLa&nOAYvm{!Far#9(^oK-mCd> zlJ4in5)I=#s<D?|Cg!C1oI!y9kgU^B4h{}<AgX`1aP$ha1x=t{ClDk6$sCCbpMa(V z;u^K%dePc9F4ypE`bbMJR)s9T@lVx<ntc*C68Bs(?{}O@Y4TX@|GrC?`Es`Q78ZLd zT3TJ6-|7*Mg}rJXp0lZ(>mg$8n~JI`lb-udp9nTGMr$q%pobNZlMs?a2S0HUA$5p^ zcOQnzvu65@e`9r9h^`q7_Bh{FkRl+>6P-VFJ)$nvFqZfn$4y+Uo$I*ND0L++S4>2~ z%CwX_t?zk1&fWnLgLSRRof<g87h?9_e?TfJlGDZyA4+NFPdggyOU0$)2E1@IE})>b zM|94VocZx;w+>}kC7#O)x-uO|ZQVO11u~htBu*6l{w^aqOp)XjKoWGQ-bYtF^!a<= z4c!mm`Z-z_B6uNb1O0tt*E^<zLuPeX1^Lp>%Y#-JW5Uma$M=g<{PZS=2Ni=oFpS+T zV5FW($o)IUaWQn|jLkTkI>I!N+p~rPjg(7P*|W;Ld8yt!UzgEQ#5k~#;-8UDRU}5f zhU0>O+X->*85|>OBtwVk$nDI`%LCU$-TVut<e9TR*CbNyNq{D9fdz}tzZF{@GC1ql zv9fGOhUUDB`G^?kf<(k*X~+@?NC(Z{>jYK@T9Nxpims=B#{W{5o=3yjLhAtj+WykW zh<dsraX+%fx1Uc=EdhzgNe1$eWXGq@Zmaz1CanIzgQfeSl%TkBAPfo-gn~=#teF&R z^D{@W<XA04$6iK!FZu1>3~HXeyc{A@C($6TqWm$b_9xS|y{)pc)>?Nvp@iofUKBmh z_U6C>YW_Vv5)J%34664`{-*!<{cp|@6VAUk*KkNKu6Ugn!JmEM<Eb$e5f+`aTx_lq zwX|WQ&DM2lemIe^tgS?~Cb`U-mRoG%Sz$W~<Vg8L>BzGs&gK&qFk`Tg>RD-1wLFjR z3{<xnlAlRXV5iWtD)B-85a`&f!#Z+}BUWFSa8&(o@MWmK=4y<Y_Ib{vEc2YulD`rd zdmLK_>gQ~7(jvHMcrx7jGBbp;;t+f~OJ>zTO*OnsCbP|L>Fnb8J7TIUD=iQEr^ko4 zWWzVvVpo=cEP{p5B&BGKwD(^r99os=!r#WdWLr8kGO`@%G81-~9Y92lVgEIv0%cf$ zcxHBXw5~w0#f>~z3B)=%pK{aq9)Rx}7h&<S=^I$LR9m>!@jFJZ3U4*ihRf=Ouj6JY z*M0DCo~6F2twioofNo`n#*HJa*=OpsKRh!PDmvn-ue?>yyF1eai$fv)V)*FzwhxL3 z2Opq7&c>y(DYk0OQPYO>%ntHpodkqLi?la3o(a#{uJIW|UJEB_^_NA1Iv4n7d5TWK z(o8HY%Y#0(rp9;@Nj^$A6t!?v2>)BGMHD-=>+K(OsZ+f5ddEJ5%_O}s`N4>qOiEp0 zeUO@e$LUI8SZ~C!y$~pXH<og*1RN=4CHBytOPs0^d>E-$F7alxDlV)163;MsvqiRM zjXFUwUr{$!wf9srAp%D!H0MR4b2!=^I9Um1Wny6}@pmi)qOK!5p%(j)HKLKgrWEmz zYT_Td)Ju|1==`-%YvmsG>PQCIV$^4~hjE)&!bwCLKqZhCEK&akVbAfc4KXY>Ic|j| zIL(CvK_+}2^qb&%l@G^u?C+zH2yk;>YauVM-uWX8a=fuz%eARRb)_f_v3Ens>w~4y z*6DV5!z2e`I$&I!|2<w`*;1&j!yUR{jSAo10R*07;dlqu>+w33RFn~c7e{tNp3Ha5 z27c&yh?g7TXYUOWx5ku_uYG~KCCHY7wHxnK!fLJr-z)KkLFR{%u3?YARh7&xP9oxe zgmwBo83KG)?#|<3@Pw~zI9|Jy(Q2rzSJIGit6)UO+>Or`+bmm5aP4dV327w&J+B&5 z@$ZZ7e;)`|y=k+SEj{lr*)li0)BHESieNyrs0;krsLweElQ0MO_xEK>e?tMf<<Ua7 zn9J^YUe+YVh&bN2JATvB1?wkBUjzJtp1)r>kWyXe4b|%_Dxns0ozg)zW3%!}ixH-D zFM{|=*n`YXo$eS35323Ym1*3w3Kf*K-hJvi3>zNT<yVk1?g3XCo0{(5FkOTR&u6gr zBREGd50rH218EZeIZY<k9vuJ89X_mY+tMYRrT!Fh9q%_zA4jc<mVe3Ut)k_3s7d>U zi7o2k@Td#(>jMRq8vL?URMCPH>D~O^O&k>}=+`@cHT7*8voO|ZgMlQGRL+DX0P24a zj&ZP(P2N%}Md1^(S@BXamK=>kj0)AYlw(VvwpXPodjQ&oXxe(<?|wJgPuTYQl&~D* z07w-yS*{KymhE1iKHCCxrU9<l$FGP_Flc3NB!-Hwc&UEh^?m;w0o{uHl0EgZZ2Uq@ zr~~=3!SkZ1(*uu}hswKYI<wJc{!p>_6wD>YxV(6Po-FFZp=l&1d&iXUxNDX{r@Ihs ze72U`@-}Z_I@>C2UF)N!Zo1<2TJE8tBrAQoEFT`z#QRDY(ZkmsAc<2tM0;~%+g|^S z_!Mak^&1M&^S4W=wB9V78Qs=g(wKH;-x$!Oj4tvH8cJ<P;&7X!_PJyrY_MYG<$Eia zl@T@QC{ucBYgEQS%17&zq(t)fSc~ccTf=!+eeW7R7Vn>3=NSI|?tpi&Jfx9i<fy%W zFydqBFusTgqPr&6*Tr75etR@>-{2+e=46}Y-dnTkm}rF_ZwlWeb$oEpwQPWj4|-wA zK%*9@Zm${d3)@X+GL4<>?HO_13|31VV@hy$?M8M)@CB+aYrU?$8MaJ@?S2TMVwO8% zeC4P13A{5SC(MKuP_lD`$Hw_@C=~+8@}(&_rlU4xM~a8Hp3|z_n|+~4=yNA^{A2c) zcqP2;GH}=g{xidvE6H7H8UNBf-D@JUMxEgD@yv2O##N6bHdlahZvJSR6SF|$1Bt8} zJms6Xqgy6r&D~f7Wh##!1AlDG7Eiwr$qnUw1rW4RSonfoiPs`XSuS@<`N|SR$7PwA z^J~}O_`tP%@Fq|~Fe8kVVu@(LLUo}(B{v_b_*C!_NQKl<q5IWlhv)Z;aoOSyGko3D z(vGsMQxQZMOzjPi7v+HVb&2>MCKe{p9&E<sy8WCS_mzSeJ?~Dxug8M_16G=1^2P#q zxBP*((zMq(q+f?bgh8f)p&h0GNFhmjj~Lt%@R^%McJz-9WqD!aE37`^JIE$Pn$RQ@ z)VdN+6<HmGOD?4+z`wq-d`2a#<e>lBsJ`60u4S$Q&9Ht|8!Gh&jkbyAhjM&|#o_?d zD8Y>~q+&TQXC-8JBy!dL^6tg`gG~3+2GkxCybK$&`)K-Vg66F`1NPuQi_P_oLfn9d zA^{}^K`qej%GGJG0>F!ak7CvHhlx5t1T@)T@1`Z46vjSuUYn=0hZy!AFI!^)EyQX5 zunw)u$qh67Ke@uX*SqUoiwty92oI@}9S&r7i~~K{Njn>5A7uP$&<6i~XiPi%uV6T5 zgth^7eDMJhj5J`t06f%aHFdA+BIqMtn06rJhTjd+i#o0w|5y}k#nPb@v%c<=ntAAO zykW-QUFn~Ob7(MtEn}6n_tFM*;41`jr)y%0<w>#>(H~TZmWMWq^<%v^-9^_7sK_Wo z^TYiZ#o!taJ{a<e!&)d!4qXG6RCua%1HWImVA*3^V%yfPLX7FUpmvU<$-iNmNg@0$ zT8@a^r>eHfTC9HE8;QhOpwB8MhDCN}stP%VK*BsuR@Xv!scgT&&ezs~>J)n$#Lpi- zYTI0~<NkNt&78ud%9g|)m2>&Zybl(jWf%$Sx;B%#%PVL9z!c3Qk+!w?##&xp&N_}` z{iH3zN~JU=o0!R}ej{J)?s=r+Mr2U2bmT|>v+&wnbaMJ=c`>f&o>E_Joh0@Sm(qZf zS<N7dS3Bq=g%k6=VGz1s-}&WV5Bc+vRB?lyZLjqNrs8K+57@}u4+SbJ@eGB(Tm%I* zM>B=*D2d4Zg{a{)<StiFKU=Rjs3(pylg?MP7!s}>%(@GLI{*!AxXpEOV_6QN2o853 zU|4Fu=+CCyP`osrrujZ8`5-AR^v?+#q1U2fThw?u^PFaN1{I0~iIeNqrICeHfwD^Q zC)hL5`dY@J(1&KeEH+L5pi`?QHU?4!&=!}>kMB68gd1Ig)u3ip3xd(JZn|#bMFvgJ z&X%9>Wwe;;z9Dd;6?Fr-qKqUNJVK3pyzF9dayeJiQePDg2H#kf+sL=_O@I9+p3BcD zg$IiZ0%EpewDdf&YJ8f0Gl=?sdSE<R>G5~e8Tc&f84ujBYAm;`;oFT&?$XOEGu)k$ zNV;B>1pP^!>ZMje?a3=1XN9t&JU2&WWOp<muj{er11-Sx&lyh<+AgM%=vgfyhNJi^ zy^8=xV1)YprN}1tP{QlW)&}S{Ryd4q6U=bXZ*VRxm9hdu17Diny+|~86Q`C)eVv~} zhX-JkKWdt;<%2#-UPnjmWWlxwM%*X1Ab4&8yrev@ClnNMPJ4;cR>-^RIH@S0Bm}v` z!Xn1G+|AXk%slLbH1B&ys#rlY`A001c?k*SbpW7{1Rm?VdLj^Msj;!_k*@(g)MA0N znrfiLgw-FAGud+{4*@}UT3CmK@L3L;0ZQYKfK*{o?nKa!p7eRGCd_e&jc-e{=Z!Kx z4KQkiSk>0%QztCkj3e_QA1?Y(kbvx!DzAC4UaEus$Z!&UTX??kgG^${czS{<HY`OP zbsQN;E#)Ts9D~*Q#@LXXK$=ecaQfLDwJFOCQ!V}xz|7aAaEv1j$X#J{wNoF|`i{0k zLCzAZcto8Sb;|(wEM{ij;uqFxDl_Z?xvdb!8)%GRqW#hGhzpNGg9$nz5~sR7RPsoc zJeTfOIAG@KYG*f5HOpUC-<M;4mm!2Z7R$lx)ErXf31Ovbv1b%R!%#UGL2XH<5y1`1 znevCPc0H@?f^8M5PEbL?m~a!U(DVb+O3L00WN~pZ!)rl4W|PfvsAA5LIXZ|NUV@+2 z(u#vkW69ucO{6fcDN0&DZ^e0&jS<V35H{U#jYSzTTb2eOho<`3mN-?vH+q~JSoF8h znV&7fLXq#Sy|KrvtEcLQWza1?Q-E4EQ@9@k#6Jn9IlIkU8Lde)2FL5L9J6gTFqQxC zQ@c@*A^?KzyG^YceAGBpKaf38{Un&a+h7lbm-%IHXGyTy{&a)*AK_ImDK4=8*%vID zfr=xY)^%zUS|ljWmEUS=Gw8dc9gqEOHQ&ZC_NQ*isd#Xz2HIJCO9BO2(ruELlZU@C z(jj5&Csp@F?JYvS{=UZCvAC4N)Vlff>8=6HMc--}+EE!v=lq+pgl@R=7`@+##f)&R zvGLUnc|{lpofeTDXvU}tV?SOG!fru-cXuBUl0w~5d9h7ZQqF3e(Ogxvo+~C;%vOf# zh|P=k;md2K_)w|5A7bp=lt5l68fy&aT+p<d&XWuX9^EuION;Jw2&?$o6*hr8sj6zv zP>mJ`uF1hd)Cr;znTI48Q#h58TQM<#UJjowo-Z=G9W4riw;%*mcY%WfdL;R8mqbL! z<&<e*%jt1$E`sZ~R6JgoQgRWFYhbO-iVkoP&IvxwwH(zGyDasS?PsPG_s2J`5ibND zavtp#J%VrS60H%8Ecgzy_#}6c0mdO6{LOyI(P|5N|Ly4?%@PGin-Ru?lPC6ZjrW6x zJ(bauw>BA-;y-_EUP*|V*gIMb@%}h8i)kyYqaDtFc&!G{qs$|^JX+dcAi)q7Qh4W- ziTcF*W9N5xLm{0EIzty{>F-4e&-c;ft;H;*kdDnW6}PKXx6c4r(q>e}Why!=A30Gx z`MhW7woMxp_hF!+75$g}Gm(T??Ue>CLM<Gwbbrn4hu<a&2hE^G^**m<gAGq+=8CnJ z*NYjA6GLFmyo(upB@KYFGNf5%CZTprma<|_3F|1Mz$FkkM~iqkY9tVXECn*6>M=xp zT8cG{LDa8PkXP(T;sP;+b4*1Ib55<gZ+vfry11-Ve9!_xUw&DFa+ElyeM`#im}?8x zgq08!Mn@^;1SJxUbUD$5BwPr;bgD^NqtZ`lkRx6li5{G?D6ep1<WZAPy2)Bqz;k0T z%6uEc=i@7{I4nBI!@_l~l9OLEB*WjL!>hm4n3)~P6uF33^8vf(Y4ackr!&M3D(j## zz6#LsMKyD9uw^dBbS7teTb#HOj2P(o&SUgl^^ppV?X|l>lA41J;TFo-*3UsD5}qb4 zBw+0Grj&<+mS~+l4&W_$qL%3={=h7xWFP?0<TUql%Tbsu(1hIPchdqK+~>07o7jk4 zG`~u3)vb_A<gjiza69|9bIZ*hOh)}<Cu=XmEr=A_(C%=L^URJ0mi;lUu`mydwOsgH zJ*CGHu&nRx;yT$%5Y-zL$Y6t$i2gIHOI{@vlK1M8pV$@LbqaP=`cQy`2SSxstn4gd z&g8$qXAQxA3M*^28N@=7geWPw_^8Iejhwms^uwj66*=sEv8<-?6Z&FOH=MeUf+5wE zpSE6r{S&<`Q@-jiO9LJW@5`HPYitIhKYBSfLM9rv1hnB5q`*q~RS)Z;DI)>2XDGqK zl+Qaq8Lx9Kp$m~=udCl@Zp%C5X0Q<-G&*~_HKBi5WAAXe^KL7t_rvdoYV9{;bM`pK z68tK#jG}E*fe}_<CHU6KuWp(?^4IwE^kkprcFDv}nNU1`GGa7pT@IJd`l3f!PI<%| z9_nv=(Qx|UMw=d=<-~C=nHkq56>ejRFBpwdS*dBNKpJ~@lC2H!E=Q$?z3}YnS$gW# zW`!#gDqZwELTM6HPVGX*cq5UE+?bthM||;Z1X_>p{!vX_-TK8_*JkQb2@X;Ot8aFl zT{XlUlELAan8j>DemR2-#<upgc!RbtmVSJ~_EYtYl-=(;tt=e%^V4K#sXY559RV`4 zM04AW{4O-JZ3+g|?fAz(1<DYnPA&zlC9MSGfdUoamo!|!TL)A@>kG_GZM%4qdrCNv zQeqz)5Dm%zzrjjx)PvgR7bF|9l8ELMEGz}-9sw(;DUml?CYXO&N+a0k1v%dVZRF)4 z!oh5q_J5^J%q)cPrs55Q*tx~_<AHwGSwIS7%>s^IUZq2aq~B>wPI}%J#33K8zN)5W z(S;mQ&+R8|4jf`FQrTIe_RqAjuL&B!z*6d`@mzHWWl7|j{`cnQr#OikvVz+2oo~YJ zGK7p`L+J<0lLTe}@iglO=l#O<*%tpxPQ#OTFABCD6X|j}Xy+uiUnC})NRSZK5K_gK zVBAsDX}ipNB1&TM?u4<oCD347{j^a@-fKvHIq*JY2U|Ijs2x-7JJdbp@5Mis$&N#k zQGG%}JyTV6!ZVlVnWx`CQJwnfX#A{E-CYuv>pMLg?4y?<K;P$50BE?s$#WZR<iAq! znFQO&HytnH1_$+;<iEoxb%#0xY5q~xLpq%?_F*r&XV{2f==e0T<n49XpcoQAZEIDa zm_htm3XZ;1ZY>XEQM0a6Mo;6UY`y#tp2p2$C|vdc81(w65rxOX)Ud^4mtFE_XLRcl zXmPG3uQ}STeso}&WUe?11*k_3SFU|@=H<~iGthd#gUw{f|IF6d+?JE}poTtbrpM8E zg(O8D<jE$rcqwv3McWdfU?qGSZlPs1V|u%VOY&+k&tpI$!4Q<L{KW`qamD>y=kjMe zLO;G$vnEhr>-gc}VU`(D)9R6>9HHrPebf8xM3G3qf6OeAey4O~7m3}^NcE)1xb&bN zl*kC#1cva+i1TTF^aEu_4py*2?ym^al8}Oec{WbY(xY(<Of=+AE;?jwDh>*X{H=II z1!A{2yk3~LOHCkyZx0vQrdcg3i|$qTuj`I5H>)&z^hvb@2K2q`E7UP7I7Texg%O&- z+uVG8&R06KM$&&y!y6#+1u3bL@6yZuMB*wm2;GT)MPuVEQ?;Y#A-%qukYydeUXeLL zqdFwn6pkM}O<nhp|J4GCBpHXR+IY?mp8(D-i9OQ^bgb!1S~EBb6C}cqjSj1E>9<~e zJ<WIP><uTfp&ccT|H7izVB}t*WIWA%z^Yl#jw9nC>{FOhL+aGX=-L};0}XThu^Y}u zeI)AcK3t=dw06y|bW%(!9FQnM8iCXj>+#^TGh_Xh(1hdzBU_0HDbLF}BYP0P?C~=A zq;P$M7SRy?d$y*t&>-3QB!{d+m_ec`0}<%@<BwTI9pzi(1R|`|pqM!V5Po(Nj%!_^ zy8G!*%Ml4(mf>25N#-PioI8_bt&e$NVO)O+-MN@7my<LyUfWHQFH0_$U{E45HuHuX zt>=y@ymX2+$h1nQr&_VJ8}c)!_VoL%s}7_6P)B8ZhJFJEVh6rzk+A#_Gl>?yr7L*@ zMM7okNCGs>K;DjG+ti00O5fyjn_FW1nz6!VYt!}<%IlY6cqXIoDsDAWMR;a-iCL}x z3IgJWK<?u5UVLN)EF1B2MNSOFRkLwV1Emt7NWw&JY5!M(Og2kvJG`l)?s>gNIl34) zF|Qvwq*pdcDP?+%2$ugOf`|k!=qYCLwxQ<9WX^4!2%!+!e8kNNQfAr!lDf^KNk6_{ zkaEX4Si^#lXlF(#1Q10J4f^kbJJ$%<%7N+jWKRP4BB!%_2IV~zd5_PPpq&A*c!o*D z{xUYH*zB98F}4QvTKQNR1~)^TrCe>2V3dUqFRpVY;^*C=1j4iaZsD-PVS>uCQjnil z7id8dgF#3Khlh=56Qo@Gh22Z(PDB=ID$d{=yC9x*FWs7_t<S17YRGW$DfWx3rz3*L zn<VyRTjclME*5avzPXDu^UeHc?464Y2jv+OUgi*I70Lidy~?H{dQ(4!j<>&>>mNvU zB-V(1ulVIw83(D6Rgi}m)vo%Pn}c;jp(=G8Tt0kMXM?3blZhtnTUhBE=ZLcfU$8i& zUBr`8isv+-6pDY_md`pK=00jl$xDiBW=_)Gx;9W<c{>DhFfbd^kqfJnj0SST&oA)` z8R>($Qu}<yAbg;2BlXH^kUruBch<YyC1sHLZtNJVr$9AOj9%dObCeh+n`iCMh=4E9 zs{O^R&yCodOl>S7S>v7uzpO>CHf1lc_`v?tGV1(l=g8#j&r<`4c3pv!(4hArHIKJ` z93=%Y?a_L8++HefQA+6n=l82$dn31$e2X>m7j<~Ic~?kC7y~e>9}afPJf3QkbLP#` zZJmcI=opm>Jw$e=lk~DeE^8P0jJd7pWxhRkoSX)ub0RQG;uMF5Hp{O5I<Oi1SPxG$ zSnfP*Z6Lj2nLVzRkNUe&`={)11a)LYG)U^F6d8nfE>uxAlW6jnwM2l&z+WqBPMa|v zi1|=13lC3nfwB@&TI>S;)@x<VlkeJk$-2WLN247`0h5&2zwftu$6^`VO%BQ&67}}~ znx?h<y1rgBqINIwGW6Wb<6)>%SUYSIYOD(1FWcc-i54z+36&+I*x4`lV^LUSXT)UE zjzIi&qO&zCKC@5#`AjuVLaP*D|5SVm#LQirl%;gJA9RAIg>O$PN9Gp>N?Vt*Hv}ws ztkTAoF(|RY7$GV_hu>aXa`6#SDp1@4lgr$CH{K5yv&{`rviEOg*#<s0yrW5=FD6j5 zdD+l#x_=ys+~>G8HbGSYDd)i1)ooA|0_Ki6b(y*Y{U8r8(Tiuus)tzL@MjgqM8$o~ z2UUVu%U1)l)#R=|VfgY1ZkdvP)akNZ4K-e&dybSwBKijEH-v;H#_-#f1tFDx`$mWa z%O*T4R|z-EO0i>e&ZUlCLOXZIn@NG1o8BgZGQ*|HQfjbMSqBV8joCc>_F^hvB6hjG z^)sP5lw>qMRMYM8f#|8VU^GL}B5#_gbs;e+Nw>JTcr#cJ!?f;YYa_KCyIm_}S_=<P zU{r~j^#>+YAPKvcLmdaH7Vh{}#?m2GYR$h6ZSG4~H#^(BFFpnX|0<iN-b%w0Gwe8s z5$hQ&zrK+nc+GY<14IoaF<9asF_v|2Kf>G1%Lp@U@gsr2)`Er%Zo*DIcZrl2;tn{9 zbfbnWrjT+q5vL$7mG}et#I5(NoxbGnD9FRRz<6Vya-|q$RL5Lg%smC7DN8p36O{eM z66q{~KH*i8ZIZu^i>IgLz@_N?_2ut-joVC61#b6aj+(%#4Q=)2Ddqr+ExCQ0V4Pi3 znbQjDQ_n|x3~8ASN0MW<Xg&EK<$BzmS|$!cqZTRFyOBK_{iuwnzOJlCufoH_uV!ZJ z4J_rm)1XPfa1*)Oc5^dO`4bJd_VueVR%Tmq<y<S%5R)_Z#hz@mN@$W(o$EOULFHY{ zmaYwIj<(<2OE~Yg@R8qzd)N;gq5nlIX+N<2Bx}D*#yq&WaNqFv+W4<N_7#b%38jmG z%T{6*(GzbT2oTSgvukmlE;-(K!bAquWxDP-#k{Gd!Tu~od4l6)g-LFqDQFsMHRSF4 z{<8ts$wAUeIa*ioUqcl)<>`WUlOE8$*tyWgXjcz>9Y2TAjN25B2$oR~Bc`FCD%^Dh ze@_YGWb2>>+pxET{a2EwehtKBufZt_e@uN`act3P5z*-&BDsXC-bnoeu5N2Vxwhym z@rLfk$qwxwQ#jBiCQeq>C%9)T-n^@_CY4IBzz468hFwPR<q>KAmcj?fgp2!8<4#2q zK3MK7Q=#5kJo_GjY_MC<#dO{}fJ1`4jlB%Ncj95=Z61$`f<x<(w%8tq<dG3Ts1OU3 zyLQKYNNH*@7~diksCd@Yma5WY!`E5t9;zvrnpvfplnqFrlTMkJjkczKd)55i{qr~$ zlwykmt1S1x-*!v^562{}!l9kZkgd5-#j*3X_98av7Mp2AsPm8h9!$Gmt2dv22T!C9 z-LAFvXXhL+7Qr2JO6jAIEM=mq`RGf0(T>h^F0PC*?K-n)2%Eop_mMvlNu_^Mq-gVJ z#qKToS|wg~<G(rLlo{5?b=K6NAmp!X_l=}WcJ@o^nx=3nf8X|}+JC+>xe@U-5_A>P zx8HTOiH$7t3k!eQj7uh$`>UxUhbtgoSp}$4rU2}Jc%@)Gby&<yre3XCQyc0XbGahb zXRYQE*z_JyTu>sHt*p_ATo39k8;D5ZlrB3T_zc+~;%4Yk9^cS;%>h_#Em@ZE;Nk|= z9aNbHG&^&=rGxn7+CkwfVZ$4#b%uYYvMkmLjSk5&S{tJ;H!jJ=ntDE1FC<nHds%uD znyf^>atILj$4G6I)P(#p)oSEwRn82(@@xu*CkyQeLIW$$9*ZspO<|`NCDf^@ZP-F` z-|f2buxoxn^S9?_mQB>;nP48f{H%P7xRgsJx;*|RK0aphYwc>!Pz}nk$@#0PBKkJw z3-oivv9Bmr59!cfFYlBBtHHfreq>70ykaih9S(NHibBut&?-C^fCe*l|H9Apnr1%Y zMpHn>i?d^!l53JayH_!f`yv<2XlLf^4NNCVFn6FL=_mo>#l6yHhGEcKI0YAH&o#4L z_I8&ehDu^hI07Qe?*6@;LF_WqyaP6-xX1_!6odSIV{sy~h|9(GGLbpNFl>1GHvC-- z0+Yp%Eu(JV)&hKK|HaUWE3H;B8O0`gsUI^d?oGM~;)ozWrJkF{TtcJc8GK5Xe)@5R zMV99sl-NUcj-CNl`~bIahMlTD##pG{?p^QarY><atlEp0*R5*^VYLg$E7KPKBF|rX zze$IvOiJJ0Anx&pzJ2x7o{>EoV>l!p`TceVMptc0-;L+2MUs^COM+3(^7S|b<}DeQ za1F`GHl>h`+kn!fYMcc|bF2W<tqpHxFZ><OVE78^5^pB`%lkJjEUYn^U0Tu9$G@@q z>VK5uNC@?aQbM8f=s)~q94OB*Y*!4dnVGx@$bw7KcZ?n$?T$LozPngC$~u&{<O<t; z+mX}$F}|d#pNO9)8ulfgqxfVb3RXg-Z}23%q;FeZ`hu3~DSI=7j%h#X^k#XI!82Bp zrqS^r<LO%TcGoR?hg9bq`oS2g>rWOo!Z4|&k_X!u0%GhJ*564<sB$bK227cl|5o-3 z-Q`G342zd^skN~SsK;_3)R5i2&=L}Mv+?$}s+~S6OV-%uh=AA5i`DiVwrB!Zmt$|7 zT0?$E|54E;r5>d7-E`gf+i!%0R)4Lc_=bwAYjgvQ<zQe~Z=)^Vtq1KrdEC9+$QS9V zY(EG~;taY<$HemMEMoz+{vsM4PAjgn6wC~W_CDYzCSb?3B2gPZ45-4@t`lsDk!xb8 z#!3X)3nP`36n^GorK5%Wg@k}FR45$lH;6A08mE{$#Xx;`1e4rg&25q!HJP#iP*Fy! z1*d9b@%cOD27WhvE{hiw8+s+X^^5MFtC803vP)FKwWE&LYQxG(lfo1S&E9ve;qQgc zhB(blO%XFa|I*7=z0mPf#-rIHnp`|7xAn*%AObzwH)>LnkpCL20TH3m=Ow;UwU^b` z0SZOu!e5?$HcbO?4e{D$fUo^_i+j{ri?|roR)U;b#I%)XYURcqXx8<_cD+=R$GZm4 zjD1lxp?6A8$qEU=Ws~kJB@Tb$mkXLkh3n^<Je-8B;Kt-{(|dzAC$k>Up`v%fqphQZ zWmaJ-Q@Wbrt@t$<n$qx;J(J09!tti=H~g>FexL@5o~SgkB6$C%2EOqyJ`i}5k)aQ0 zAy6XV&_q3|$rPTe;9KO7mYbX(D$=)}$HK{R<!Rng#S8y<G>CwI?4)vk6r|tU9!?`< z?xfpL@>O&U?RzM1e{6C=3Dh(1a_HRTP9m*O(~{Y@Imb{1#W!ParI09xk(pBZgmGX@ zA$a}a%RAcwzKqN-EzwYM-F0!4>0v|MJNsrSt+9)7DF>cf!??b)v~}Xv%Cvti7T<73 zV}lVgbebmRo^K#u^QiKxdkduI>yXaM(CN;l<I$eV{lbk|C-8Wg*;Bc)^ST4|ag)TO zTb`glyMU-DQO7(QWa`qGP{-8I*#9E>54n|*N1Ik-<$l6W$y@UvmOfN5TLO)60MrXI zw0GG&&qGsEh8S89o52)7msb+SlXR8JlWJ9P#<o5xLOr=JL#DTWk*X}Z2}+NInO{Qd zRLMLO%=6_bBL(0+HDq&B1h=JWy!9OXJE4oI;TUX<6uIOzO<@o_O0=n*^gu?gPbetp z5<zprQRAg#`F%pC{)`GFtknJSiX8*rHVLHrUi$dFQDlH9S-vP?e}fzAayvDcLUTD# z;`2n8?OG>VVt&zIywuwG9%wLlxgbGUKPJRPMhspgyiJQmgW&XWwEvcbe^;N<v6Rw0 z^DdroXnn=z?_N))yv0MUU7JT<z=om7Wu?Wb0|(zS5p!E{F&PShp)(0^nBJ@ezo{U6 zY3kE`o*71~8l~#dSRUhCy1v6gmVNF4>7&f~$7eDsY`<j!VZ&gmG<p}7(<6oqx(ozR z<^b1`A<x0Jwcj-$pRKE1W)WkY(4*5BEyw098*=RrksfV&B0<`5l)-d^n}qiz)>^)q zi57A6?b=C?PEKA7zq~@>g^7rWbO#6BoVwu{nl0h;bH_jUF6^@J;G4V^-v6Pc!@BDh z=lGg_@Se8ebTHoJy=UQRaRiEudOxvqbTAK7eReYz^O<mf+|T%Fe5(|ehWWjNHslOd zJ1qV@<$H2t#Vk#oNXryzVgDA{>H+>={(AI+#Vxwp(dGtzf^L~D{c$<MsvV4u-YiTV zgR7UINEC)P-fEi7NVJZ`8;IuP(@s*Rz?1r%#n-z8u$F0_MdIPvwU+j88*R#!tSY4> zLTjbsiX1Gs|0^7O_SrDxnONJ+_9nAM3Mk1A<|_IrzZBT~`0IKzYI#eBLV&JFL4Xd| zm3CnfnRF{@3v|#EqF2_b@YwZmlcTM#U-=HPa_`4!3Y(JT`lM10dBT9YJ_a>}RUG0W z)Ikt;Rnh=Yf;KHF^k5=e`^fMXNUEk-Iu`6kggU_v7<s@LzX_@U)nDgk(LfEo^djj; zm!^#9^+zGY#HS%(I05LQ0n+>4jn&=Hdx6tT{;%1djct56rAUqZl|n5-h@m(Jntr4z zK9$rXo@{3Z3TpmKQ<D0rk7$e@a*XjS>R~^U9XRc{>gqB%3hxaX;EZsjff{5wt%+JT zyxMs0ag9drhZ*1>hH}T3(z=C%mBT-po%0vx04NRs=1sv|^0~hN9U(rVTTLdYUuk?C znAW3QEHZ|-HqDA(vGkuZxMLgzTWiNyUQ1Hc#bOHn<K@X5ko~YlG&}yHqVgXY#iFId z1|PgwQE?xur?%TdtYS9)k|{xNJCR%nIkjuz@Jxnr+f9|_1{Kg8%I;N!h;$V^-VGll zpstxomSQEe0V7vvei#Sq_xB6o1&XZ>=Ej$t7K93=f7<oNhc9<-E*00X?OV%yh9ryX zXVm=@!iLq25~DzS954JwM}Pha*c}PjGKtO$za%&7d6<LCR*6UuRB#E5gy(+w-5LDY zcAQonO(hyUaZwoR$w&N91eLEM(lFk@r6ZkJD%@39D1T75DmUI2GBifmhBN_^yUe$2 zuyYw&RywQ&zL`A{x)C@od<)C~A^zj*;PKT<5BW>(0#BS)6ZKFBzR>I$t{ZOaFVa+p zDxeO&qiu}Z_~wA!3T4q3nEeQRW6NqO+uG@DThpepocI!Ofr`7K`x<fthK*&Bv|5z1 zYmQOQ<L%payk*3se+>l5B@p)G4=;j^Y$@sv#F>`n9P54v0i)lF!0@;vLh+baIi<Ru z*|Y=^>A{<KK?xN5%nh~+Qg=>Uf1KbG!j*c%gcAy{*I$CU9YQq>s&3bLw0)F6w|SgZ z>mQKxN+Mu)?$X9zq>vu)d+%f{Xs-!wS7&)cn3#sXL%3(u2m5!qyv$9SS9sc;1*4KI zTG&2dlv~ouYvCv+wN9!TG~o9uKc*U7v%S#t&<AuzAawyc<BQzebv~HP=<(sL1PKk0 z&qo;Uum2rMmv(8*ntJ5bUK#B_{T~1~LCC(O0?PLH-?dbK{jv79Jk*9o^n4W5fgQWb zIs4R8g%?{f?c>d?j<}6ufb+e}%NP9|!6Xkk1=qS^Vq^sdH%_>V?$MZb;lhP{P%g@I z!ebBIG4zsH%ER{g$13Im&PBagoEQj=C0<747G@aar&5kR`qC()!mysYpo5PpHJV_Z zlX909RN5j6jzHapSV_}37R*aZFNOQ3vA_te-?(wRh3?K&CiaeE`>?gOW#;DQY|)E4 zXaB{&_=itE^WER}uV@UbJB7G3d5MEHpQDD4y$zNSZ(nJDU*`a_G!JmBDX+wjDK?<v zgcW4~up<fQebsTo%6>8IR7#}y;=4MG!fQ-8l@3qeFUsb>SNq?i9Fy>zl8tj;x8e;0 zcfRj0eDoPqcyTD#6HnajuCBh{!idml30_$ElbMox%c3}R<Hp@g@m=oHINz6EdMQ_O zDIzqcqYQ<^$G8O;mr|aSV}3>479;XdIfmS(#j%tYvlIt`P}vS0AFT9+PJ^Tj4Id98 z8zkov<9ieNVeXK?_a&haQ-x@%R!HMrbDR?F%SMHm0$^cpXI80q(X9s~A!hr#MSuuY zdY^NrxtS}!@4N%>^wUqYE?l@{=jJdH*5lH8>f1Xj#^=cTcyx_$zltTl65pw8!*Xoo z7+?WJcsm?#tc#=a9$;~<;P(fp#Ps0naaVcw9zbyssthYiGsry}r?|nOS*Q%_G)l@S z8FVV8*xbFtAY+bL+1L$8vU50Ckse^pm0;<y<&O#)-KJMml|2fJ@GZD`^L!@5+`=GO zEsO~L{`==znLLwi-$a=wlaJOjOKoBOMY-vP7hY(;`R1D)Q_P@2vQ!>DnohzLV1D`T zzQQNO;<m(Gm}%RRRhY|oCeh$C!$(CXP~}(Y7gd0jp&=!f)>&FzYhbvWGbY4(2XX0o z8e>7W@(PnGWmI(0{e~)ZU`ntnFK?wYWf(2OSpm5s3^+FC;>CRYZ+C7kPciSl`+n9q zoNqn-^m%jQ#0j926&DUr34>f!?Vz7Vv5rApqh+r+?Vu(pvI~rGmF9}AY=WJ0dr~=% zMx%C_Q;N0RcBgQ^x6Uc7C{01-WTrKhTkCf6$kDrFJ=KkJ^q{Gf5PZ+3r>84!_}toC zM00N5BIa#aQAp3cRyHI<SY%UY3rnoDh|r{b>N`(jn<h%-*95sAJ<2=qyV#kJ$}f7e zVL;DpD-Vu^L%%YcK<*t!(;cC#<RU%iiZ01n7g0EJCqM&&vj)fdwTtsJ;|H_W2I)dR zA%$5EcdK><kX9YKKXZ9dQ5vIzhLlEdWj3MM8WxQ&|KpVs4F?VmNVqQ1xDuMPmn+yj zA3+Lmrr73gIyB`GD!w>w1(jh;bCzFp=gHSETzD$C{^EGw+qZFi3<ikUGJo+ep3jee z?z#87@4j0-Cs{5nlu8=g!LH1T<#6<)`$a9Q5V^$QnCf|Yp3}z9ZH4m7e`}jKHg<l# z50BUA(TdU^sGOWSIR~ds&5g|zH_Bvzoh%O@l|i#8sMYQ+2Da+@XwFE}X3Q3qextm( zQUwqhqQvq<jw#Q@)2qi-+a#MPJ$}8lo>ve_jCCr9!(nR=n3|fiJ3A=Hlta1DDvX`| zPd&BXr3lanj_E}um=s?Z{0e8(Ff{HLLBj&dSh$ak8HQMl7UtQP??hvUORrV``Tmpv zg^vw(V}XImo{G{KePNV=U{=^zSEOa*F@kq2F;5)Cw(HJGClHYd^9auv#Gx4Ddjl)< z*6;n^@0rhj_OpJ<qm7N{aIRnM0nOGwmPbd#@iN7{za`H-cN6~Tk6vzn=}Uk6+rH&b zetU8r;EKzz-@zXbK*Z_kNK*Ff)?0reVd0g=b6a~ZNLq=hp;e=>qBN(7^1B1OnS!G3 z(aL^+oi0UNE!|XMUm3NBkZ<cMJLHBGf%-fT|0nP)Yjk8lcKDs|`wRc}GdnvwW@cu_ zq80eU1+?Pcf+DsF$~MorDA21mvk&A$#LyZ{W$-b;ufP5}T848)nT!cyOt9tF-988& zR!aVJvR?Xz%d!-uFI03?8ezi#13bV1xvf~H5cA`LkoU2Ql9XaG7T8ygEXhPF!aQ;y zR@7K&;}R2H#OK^y2Xe)D#T3f#hM^!=3kwTwT+E^kmEfYs6fMN>ytA48{oJ?LE5O2% zUC977NEL9z4LDRSv0!b_*1|XCHA-%s`!dC-7{pjBpJ(j4WPS>qr6@{s&~m5agq2ZK zD8OhuEShoN`MDpM0Z$O?l#S-AtjN8Cwc#eF@0z-+;EJ}~SNz+x_RgRGx1Rkj^j>@V z>F<Ph-@RiC_veeSv$JW=ocXqV_KPAoD0<7SS~46^VW<#0kGkM$GG!Pt%dllZN29LL zPNoB%CS$!6_g^)wqtSx7SWCGtD3hPpY7i`?Pt*lk=^Li}^4__;yEozv<10KK_<)MS zf2gtxwA%vi7H!ym<BrQWNcqKWT#^ekf)#a9x#!{iVPWBB)+1W<f^KZA8gzfY=}f;E zF|i1KRRqC$=bc-Cfv}*4n6l<u1%K`Sl4%FKjs2~!W$EO)&6^Wbb6h3(RU#c&BVIJ> z)(aMaOEo|x2uSthw#+Ne8#|~NXQtCADN4W4G)gB=&Z>K~GE#Vd_<k$DmRzv<Y)^UI ztO3ss{VKn_{i`a!b;nz=q$5ow$KKut&4mjyc4p>|U0Qmgg~~5lg3p|JKMw?eF3=<= zW!7Lc6y!=P%1YU@?2<JYWi#}q!#_-?*eWPzA*3La!NP5mm!J3aD{jrOXAsDCen~^$ zczWakL<K1A09X1&TRf!^yl0JDf?3e3im?|U2y_(`M@v@8)kcDL`z&*zreF=c63pkk zqn=BQUg#{rdBu*_Uw{Q1>kBt;K9wJbR$e@?a1$yDK?V83g?YdLSO9nI!-we*mq|;d zF_DTNgL+uJX}Ws|8%){2?O%m%6YJdN%l0^~YF%~>I(Kijkvp{U0_b>dc{aRUc>$5@ z&aK;~v^r>`s3^UeYPa)0jOvRPVT>THR$*mO@YOMvwQu`a4VP^&H7J9(pD7!wzZ2PH zH&lL|LsSrhqjYg&MKy4LHsHfm@>19}8<?8<M%K~)ow@w-^wV>BGRimD$^Xtf>)F;_ z7ZDHRo)l}S1V8i4Gv<XCUdR<<ghhe|43I_c(8WEO(oxK{v$5fAEEY`F+*{4ZWkxcL z1i`fEF^C~?pw?fdU(^DuG=c&Qa7!)#i>nkWt%35}3s>23>#yHOJ&Lw~tiI%4<1N7$ zDH@erH|{sThGKoS#mBasJGYuyd{GHr%+t{A8I|AV<x{Qm=fA}i?m|!HQz4-X(L3)v z(VCv#wsqHDNrO-^re|g=QJ%QQn9}g}uTGbi+5BuWP*n{Tu|q1eKn=W8M%g|P`Q<hj z5`uI{$p$t!mY(;pb4@DBae}5%IyE;3v)R(Lv;#>Qgt8M7_W2cx%NYHglsf5Ct#FNM z+cQUAo@MQ&DbMLUgq!Kn?%Lu?K5GGCd;3GJrKPQWCt88go2`^}ZgekPSZ-aqgaNJ= zvcvw8bpb*FW2HEGsf+Uh)76oO9R|jtVP=SQk@mM>!dW|@hw{tv@<3Sr?J;3+tbD=c zP3`Db20;~Ir7<=PIZv)Gts*H1Vej+xQa)Jkpgfn%XL!&nidaZ)(Ah5RwdC{E<=1uT zQlb1(#KT*+F10UQIM+hAXS4#}zyB9nPe1)FW_9&p_s*R^uxRzg#^ULxH?s@-TGng2 z+TGkt*RHYqv-S7t-H`oQTnmBal-2u@Qb(uENyV}kQDxsGEXCI4H>8Y0#jQG~fXnpM z`Dom)Ph$$Rybzj#Llt2~X+}Pcl5>wnMOaR6qbPM4*DX4rXL7pSc#tG#VNG|BmdD4_ zMaO>P;8+38+hy7D8$DlO5+=*8RI+<1-3Gq#jl16J`_4Q0G)B3+Q^-1(S{M-P_U+%x z@;qafmvLy=g1;DN^hI&2#SIM@5gHX?rwn`JgL8!jc2T*Uh8AO2j=wVZoO5X>A|KLp zmldZm00;~u+#mz}_I4<WLth-FFR0f}xTFLvkI2)r%tXM1e97HxNbv>fgjDnzwp>|3 zjY_?hMdZSbtg>IgiQxgKJSyCQO4sKi2-XvMIZr=b^qk^+djIu*{j*Eoec`+RHy8jD z3y@_<K`a$Taytei6vWEij_#AC;s-w70MyA0hG%p)5_=Y4BR%foIRwuOs@CV)by1dZ zxl$CR0oaLz?$J2SjiS^sJvEheqKHltvws37Z%ap7F8!0V&_)~S%HGrwMQ5%kqPHF| zN~>_^-+u0Uz6-|z<8(-vu($Uovh{ys3u|x@6?$g}J>DL7akdL|gGSk?2#j?jA3laM z6AmXs846vX-+AX9%j2!EKv=P>_P0pG*7yt{DH_O(<Xy;P&p3O6jaiFL%E+Q9+O4ak z;5}?oAq~6rpmc>{6;sjz>|B|-8;x~`Qtx0;KIUb;jFsAvjStQ%XpH_$k)d%v4~m83 zfN}aGRDN+A-GQ(nz`y(VQTfH7S6_p7-~C!v;h#5qdyj`|QKJE}d=GG$huop45%*Pg z)p1Dt$$foXo7f(;a6)~v-U7^(U&Ee7v{%2n9#gi-8tl)<)7kOd1zUq=DN6s4d-Qy6 z6`oP|Xr&fD(#Pzl@(X1hKhW_t2U>X|(<o<cYDHt@+Hi3}&<_=xw8i0DduDA7m*@ul zHCS6Kl;545A28_URw%!JkmW4re#99uaETG1Y3wh83NdbTnN29a!DU2-t63i0it>}J z$IErGWB@An<O+q-yO5=G#g{9?hNmftL=|8q3R6URTD|~Qc~Q2k66?DBf#S@2-+0AF z`GHkV<mSw_$=w;q{h1@S{ZvTUYw6|z&i`l(F!pfb5-q?O{TbKafB!-Y8-kgcKd{BL z0p|@)9k8_Y!Mx%4#y5W7K7I@X6S(;%8n)8NT|h3<rLt_&I&ZLJI1!_1D<NIEc)AI; zO=VoLKUbjOR?i%}6O-6kb(eSP5Guj+Jh?Sl#|bM+e-!S~)80M0rHZg3DC1oK&=8+d z)v)oQIQ_qaWjkh*`-%*}Ou<1ewli%3hR8K?V{bW@hZ350O@|%7{F*=b!Ebe2Yk5Ry zlx5JHEmMhMW@g?N$}f7t6}fO;;3uBA+a+TG%1;ysixgr^Lw@boeyz=7t$0u=cK2z7 zcOc1fTsHJiRVv1EyssEqXW6<RyUh;fWms{%q6DY{tOSU0zJ41Z9C$)jS7znqJ%F-U zUncAA<4eP$Ia6yA=r8yWjr*05Yc%#$q7ux{fq}8GQb)@#{^8hPv;bqpkFG#CA8_FU zeJgi+F08*>2BRo`@Pimg0$||-b7!C-vLQ|>dXbKWWI3b|hpn=FjCoE-Xvrfb)t*Qp zr(*rKknG&9JU2=Q@e)A#{IT<J19Rd2Tq?i*n#m&E>4G+xiqae$Cp@pyC@B$mT#Hd! zfKy&&u``(3a_aY0lwjMx$5o)MMS6pS^!P2vQrzKTr+H9}?VkPB*Z=;XU0Pbpw^5eK zRN~wny08crF-~wiFpdjGZ#bF?5@jSZ7@!+8%2R*+um5!lFq&V$Q%^nBC1n>OnJnAi zEzVzD2?i#07j2jY*u;j%IWIquH_9xy-ubY+UoUqC;zGnyJgQeunK1OlPy%dZGI5qx zcpKSDNP5c0E2<o<*svmO(nA|5H|QCpbG-D@OD$K~=GWuKme9D67WP=ON!>FpW!G`n z{MxS-<9;t*gwE~Ti>>?jf47BhLB$+-*dX9onJu%n_6>{c@4kDk^-uoU&z=7>-?j8l z&z?Pf9!3o7JQ#Ri$|@SR3w*ox@4ywr+I&zdn9+D14a;eQ2~G%XOfR2q$_XwI=80W% zd5zU^$#hS$cUe)CdT5-mPNQ_Z!6~)c*`IF%MyLRrXk3kE?OPBJ0_s&**`B0}AMDQR z%dfjSsq=;4(4O^s_wW4L8*lz!KK}7ft^+IqcI2<E&1G`U*RmXc5zyle4FISFzx(e0 zlq;@i6u@9us05>uOJjja@uicZB^W*JP&r0RaKs%tg_SoTJO#m}RpiJ@K_ryg+A+i2 zl3bB%6-6z;N<gHNFg)rWrIjAgajPbQuFfVp#?#8OyxWY7D412SE$#|U$}bHIp&$)n z+%T(b(K384pZ*Bld~V#hokxL2S0IXz2r!@LU&>kvbb&71hECXLp88Wio)vr^_JKM} zW7B=UlijZ%u?Dhv-QQGc?PZbWf`-4c9<l;iXk+K%Zp{9!SVw?mx178Or_`2~;PQAH zhfQVaIAKNU4;m*-?$J6<_;@o4<+tipCF<j%YaAM1Ps4Ksd25y5=Iw*==P3>g9EF4O z>&i?kzy3U#%<}L3<>&vww|?uNX+8b)H*C?VkKS$HnJd3I1{gix&Ybz5y35NqEh@j6 zOq46Xs05>ei{-enzxi}XC}VNum(Jys--_Xa2R3!`8@JHXb;hpUH0XHd7G7KRHnV~I zvnszz3~im13QpOzvKGS11Vh`q3Xv?Xl{^Tu82erBm{_Ifr#IrTDUJB?m2<itNF1wz z0kFXJTH?4CRCLjOC(nmbpf6lN7odx73~(_mz~0_Q9w8AUCE}PF1OrI?&R4Jf$n?z2 zPoq$G=JWy_G%+hMA6gTW14`c?h%~Ax#rWW=f%rZ3XF={|S(f`#R^G~S0F`(o92)DW zR$)bH4qAhEc6PH)#SSRP1DrMsBS9nk-NFo0AG4ue(S5nRQfxrIMYh*@(jH0agz7oV z>jg+X*}?++AYb3wdi=M4<gfqL|6+BuaDxWGAzwvje=+L?1_QlqDLx8v?%b-qdv}?J zjOFqZS%qngFveM7K}oHU)dHN%M*Dk4f`*Fcc-+bxOOM2!A(>MZV5Ndea!LxWY(|w? z2;HHhwQ<bFh0>ie4P2?Mt4Im1EK|=S1-(L05thfG4va3)IMn6RrKh^LZ{KcFBxoEH zbN>8!^ELDi%EtijnP30)e|Y|xKmFA2U`i{yv@>T8UI9kxT%oIZopscN(<-qX07=X6 z!Bho-3z})rBM)&m>n5&jGQDxW$aR$gQ-E2Jwfa<)rg-=0Oc7SEipi$kYQYpLz-F{9 zOR59atwBH3skAa*S^;i;PT6J!7h#~!tE?VKDO>^0p4Yv9^Ly|A-#_w^|KPW_w?EXH zo!!jcor~#^&YS0+d%wG|fR^9q@^Qcz42vteG#=PZiG<#E!NoY4%csQ*8IkmgD>SD@ zX0$vujf|5bZ873lb%9nYs063PsF(-I<vA5pAlCE7_eCtivNzDsSQ267O)1~L=aB`_ zYSH|4n2}fBvN!YQ&8<8SMt#O*Vg1GBzcN4hlOH?t{mcLEKS$SRy4|yfqyX1pT#MRE zsq;S>_Z^NZz_l&$fm1sU8lZM8FVDwsy@^5$4fE(YVMXa5RD{tgjLNW%6P`@G0t{S1 zt*5`vUfIbzTpi5&@Y4!*^hg-A-89LKW=E#lCW{L2eXjuHH+JWre(CN1^WXRzzp##J z7~kYOzw>GM^<RJ29r5d#QjFoCZ)Vov3oV@QR}@{5!Crs;b$IEem+Bm*V#W-gFQw!H z^YqIMBrR?&jvV6+FbT^tmtU>6(~3mj2u0#uM#?w?r9R3xxMC}V638VHN$=Hy<ol=x zG1kM#BN8%K=sa>ED#4@>qvDH8v;r4nUeE%33vet9_J*SM7pFh^XTNd%XQtZIf0Gm^ zbbUQ&1-OZF)^B;#iyi90DXVZSeSAn+X$uQ&+FD#}m*!lXD67{wrDeL^G8C#36h&#q z&h8%U?(RaT(*<R6Xk`lU%mGCO=WW}l+p6Bh)+?jU%Z_zWH|d_OLKa{Wudvw8-tI5_ zzzaY2x6uNO(>;<KG>!$HnfV_wYcRS-Zy8*!to$V$<C~B9{l#DWMZ*mVxJ38oOulMm zf8B^&mV8=~Jkm<bJ3%UPCKo-S_Yd7~U$=4$(I8lg#P^h$YBXrzekWYmr*x_GN`*iw z!))Cq#sC|(?w4HYC7hd1ZtcY-R@4~qiih^!+S)P~E)=2vFI>2lrJOg99{u^&($bbe z<@ZZp`sKgU&Xiw2#O9Fb=hSu2n3q=sg($au@Q|RtSDtx%6gqxeF@@FNn+@|<^V-02 z&hzIM-N^Z5Is916*6F&blypvEMQIEwNvBTE<x?r?G)j{P1uh&lK^tc(E6vNHKVF=1 ze~peV2)&W&kEpauHg=%Y-(n?24s*NYP@}2o>A(4<fBI8@rI-dOlX}i?X38$gKkou6 zy_kkkp>ZrQT2mJn7h9Qy*O1WwBSF(T?#HQ-PzH-wd4sFrGM%%~%DZ;YB9s}0oSA%u zc%UoV4xdEzT#7=d0<2W9mdDdA>muGeM^X0Z5Pm3kQE`ctb1>J@d?$?u=5Uu5S<$+& zC)9rBkqOc2OVb}=1zosC-|V96GYjSKxCO;D0AGWXC$Du+o?Pwz{lEV+=TFSdeu5gn zzz2x*M6N)N2|<7-6HW`%`&fQ2((8$qvGx8LR+VmQrKNL`HJJYRmBfp37V^aTVnR}$ zFW7H2dbFbS2}O^d&!b1rX!PhKj~z(_=sHRnV(>Fii&iR&MR_)=rp1nqq}m?m6CJdr zDcIH=l}?l1PF!8&`%cZD_?h4Mji37V3m5KKjCX>=zi=juA}}a2XPxoDe)hAUMFrPp zvQyVZgwEH=kU;TPR_bH6SP`$q_cyTZK>4LMljKagEhyzs3#D6gt{e+Pj9+yEs&PSG zwL(!U=u4qQvDIM9c`}5RPvX#?0Sb6JcLeg~Hw7zKHy@pk0*&yoz?ep3fA8OaqV=H< z&D&eI(EVrApgYjg(w{JEYisb;+rRoR+AZ_vyqmBoU7*jLK3(>znoz+y4C28+nx)Bf z?tw+yg*z{ZUu3ACYTuFFy#^xoY*XeOR6&iETenZ6M=MJIpnLSr&Q9K;q#P}<&YPK@ zhJ%3D=}q&eA~N%~BS<u<+yhvhP3bul6jysiVY=MI+i)BM{Kxn11L>N=u>70f@#J6o zcR%>Sc^?q#-FNTUVi?$5J{?kQ4q%#D1Kpz0I=sHVo*&DDV8v$bkO52G(i=v44WSFJ zy#8U=?bixKiJ}sjQU}*5g7xSC;c{Q?IABqJtwtrHJ<IVX73UvRbV=dG-b%6*Klj{o z2Hl_0>We)0+?>TgSW8QPzJ<!~@4WjDfBeKu`xAw*WrLte?Y4o_3kytX3{N|WdQG4N z14MqEsJKvHrU9@A+!O^@X~LfVSg;e>snJVNO6`k}QP$|uiqbC_Fl#p-E4&BF(Et_T zX{P}1n*|tn8#UNj>gsaZU#>*ERAJEbLa3PbS(HhpcJeX6_kA9EKE>4=*xuRwPcJ_6 z|M<Iw1^ABrzVDmMEWS6*g-i>^09X_W8kJu;1(J*e&E^2Mi97Mz6y(&&Z+%GuDTSB? zw=yiv-M0_C>cv%16o$G$D@`!W^|`2R$}zu&DH4=s#h4CLV{P;9Fjz6VvAu?TtjSG= z^0+0q@h8;tXx*4!RDN^U9jvr*s-tXo3)4~g-Pt*xPyU|S7II~nB0&G<Z@%{JGt;R2 z7U$vCUtAXH+|7p8N@dxn@O2muQthf7r|sQ`jVXI2id!tOyfp4RZN(o?XIuOHKw^5O z73Vi%PkGM}j3K7K7^OmOqWk=Fll!cW6IPUdnQFJado+#{R`=+m!63g<UFTrT)pZ!< zw<sVipT~hPkvw5SsrL<Z1+gYGdLG&`(e(7up_{aE(*Eqs^w0dy|MQIx;X2AhU;gqF ztxW0l%^E7ebQl^Fa0nT0;5z=HQ33y)YqabY;PP6&&4#VzcZ>2Gm+NdPTn5+A$Jp^8 zto%GATjF0<W{c-#`BnK<qNoC_)It@G30oS=_ES%r9JfK_6=W*-70-_qB~_B9pe4%l zffrm)VqU0=Na)W;uFu$OiIsV_&ph$O6Ww>;eZM<5H)o%I`a6ArKmOxCbmoKK{=|O= zl^ZXv9F<=hdQvFFWI42vXH_o!6b)lQN?{Y@ZP@jDGpRqG{on~du^9XN1Z3$=bV}PJ zZy;o`Wn3_e|Hicz1?N|eN-##grN&!PlzM2K@IpRL_=GCLV@}1*x6v_WU6^XG{Q7{N zG${`sA0(0mNQ_39is*YyYH-7gG-8JdR_Ka?<NIkPL=(<B@{9E+zU2e|zn}i;SI^+| zk7xzPbd-%y5yts|QHILabK`-yQV$M211FR5bgB3XXv(5|oy5!Hx`e`SO!Q$$Ig`eM zbE`7Rq-7v!tCfXPK^0&nfC2`HQ1mvEr_KwMyrYZeBr-15DX*4Wb=mR$RJ4x=zrtg9 zrAt;{Tz6Jrv#_v`k6*#wOH_i-ojcdUU=P{0DJFr($>4w8e*X*K`-x1AIbWXK23HZf zvZj<3%amgGXN=bs0|V+I(n~3qJ?xbp*?b51Kpx&o%9Ua-AjrRF^dr;sD|GMxSw7Gi z>$E7AOvqwOdUjHHqAu`Q-#iyS=vXggxxC%32F+5Ge!=L`s0g1tIScK!iZSCxWTa5v zr0PQ+Fe%>W-m6?*7F(~Z$g*u@yBQQz)3-U5L+eDUa=(c@)WC}g(pML>M=d!2=RWjj zKJiW8bghH35Do`JuQ*(y?6kUCxILphMM^MJFj4;U#X6&fRDAuc9#^hh2`+_|!<AIp z7xfl&9mQnLr3XU$jLZu{xmJ`I`f?}%Vyr~d_k%Zg+)dhNSgB4_UMV{=##fH_rSn)G z{E8}Lvi#!MUvz&iD)QBQAC3XW${hd)0Y9DRd*@&MxBt$G6Q}?C;#!N_@C~Xh6}{=H zHY_Zh5?9-+!3y&krx4R48KMJwWRz~+VdUtfbrfoPJ@}1L=Gr4id-E}cy*_`P6}VVN z$N!4pVU6AZ0~NP=KE_<;p&o5TQJR6BNRM}Rbe!;*fc4kR%=Eqrn4_vAgV+!*%?mXC zpV75nCUp_f)+A*SHo=-@%dQ&(OnM@<@x^J3Kb_4i!kdpC{NTU;mtXxKF%T9;fd<&h zhl!yz81s<~MX^=*g`nJp%C8&S%l8>^!Ks_`m(9lQ%Keoa7UO~QGPr!ny%H6r4(&Qs z0z}0j-A;I#O}K9w8JZqpy@1?cX1RHIr5Y`eht9`JIDcQA8?^6vL};Em{BxGyJa_{t zzPKN^GnLn(^857D0RQ|eH@^MEiG|M<7wqoCX}p1#Z($FIDpuZgB#!~!SxF6T&=Y(> z#G`Q2(pJ)9B$Z$AJ+y`88|r$w_lJJ1rz8}_ugG`>weCDoam7GjZ7$EnpKUdYXXri; z-Xg44VMXapIE|9JM^7SBiGvaORt0X*#R<ap(l%)S6I8r_Dmy4KRi0&k{@_XuTBhE5 z-oDThFJa-->Cb)YQ~%K!3<`=ve<>O?=0W9`PKe5{^Rmmw@S^fdV}N-iXn?>4EN3M$ zouym%j#CIug$W@B#A9=r*?kqp7IzLFd!~@wiZ)a$10{+oz)FS6SQ`NDcH}!8NzoM* zOr=-P<qaw_vg(R)9^Bds%#|kpqd9(^8+6|Dh!wH3{8|duKrTB}fnT_Aq2-na$N%Eg zN8fbjn?ISI`8;n}q{B?wUCHNQcO7pe$u+uEW~^7TEAF(^IKk){Mv;mI9|_8ahy@sc zxk^)yg6vy~HSYU|y!8AxiR|-ZqM@d&#5((l#krtzF<b@;%d$=hR`+N{>4#$aohd&~ zSly#12N|=%ZNQ)%t7!wWsKAF%pMs7}V6C0y`eJZZP!Dg5q4r2FQ;-7QGL>sO{}=w9 z|I?47cO3p@N-dxw>|&?n`A}}6;&EIs#$3U5^uQzKmKi5Nj{PMsJ{Qz9NR#>Mh!|n~ z7~gW!%c(ien@Sr`C5rZpC@H+6%Uw=l?k6tYj~BMl8Ir;%&M~;VGmG#{*Ah^;J!3RN z@Gj6dZrpAyFMGG=Jer|%d(OuJ;~1AmkDh3K>7QNuE3>mR|0OSv*R5pzqv<E7r&^gZ zJrDguk5HsKcWBmE5V%N7<#^nwb3bOiCB<6Mk<FdAh`|M#VTu1*B9FUfE?CsMQd>wm zw#i2!%aLj79<3<-qwdiM57tp9W(J)HI9(IVVLSU#7n-0EuJl~Oux(UOY}r6U`dl(C zQLbCkG)OcAHrHNTl*3f7C1d;HgCD$b;k$k_Q+I*nB{U%5a56M7;1cukVP?2wuFnDF z9vxG3Ssp$u5($oeKmES6WNyxu<>5-NyQe@YR+J>#J*rgTmRsDEJ!saOGPy^OuenS$ zsU#8*L9QF>MHI@fb&76&{Kbpt{!EH*9+sb1%-MQTfun0r);pQc`Ma~TV?OsQKlSY= zPRx8FydMYx9Pu`(2rMyZV;8T3ZD3ZeHm2TH+8&KsJf{2_?)z1yf_RabWmrBF5NZ2Q zlQZ!kR>gL>KYZm)(oNb{%8eW!u_AMeuv&!`r8nF?dS*taQ91~?cTHa~&zN|*er>2u zVrtuyCrS2f4p-+!RkP5DnK)Odyc&79AZSlam>3(TGkfy%=U#vP^)tmZkp&n`6y>U7 zdAo(mF9yfrQz5ZnSOKIMJ1cQa&Z{WMktoo)tVyoXY>cm=V6805bFMrKH){RRm0I)# zQ7X6|HzT$y*??88E?>T#=$(zeYg7Tc-oP$I>UP(g7#xT7E?IxwzI?ndD!n-NmzFng zq8s#v!3fZq+6-U#Z$ACG>2~Xf%X^b|WxY;DyQVS=@ad=pxQWd$K@fSvR9&K6(FbMh ztFz(`QzlZp3wa9Lj`gyevNs|u3C4xsg@@*EK-J=F{Bwyt_N4qJ$^^9vD@xz&WY%D` z3fr!BBJCGhM|0zvJJtTA0yLJ@-S8IK;Cz)8d7kLbM&*VU187(rZ*h8Ce-X3*|MB|$ zBHa&73a!Ar`K9%&WA*R;KmUWj{9{xO4Iz8xnP<#bzxq{jb*A}%(XfzPhDi~Q1jGV% z@qybjS$}0Zgx1~i{z{p$;#nBM%cJW4JbKo*ws5foyWMBAr+jwGw9aH*@{2NG3(WeS zwRgaD?`1;t+Tz^Y8jKk#H7ONX#bFZrdnv?q`TdFvdX>Peh>6oVqzL2K6c)50=l%E3 zwVrt5Za(`R_G13d?ce>#iK*$&m5PV;S1srJrCY-FA`0{%F3{pes4+Lj2af8QS2R|m zYwGu(CQ6*oOaIhL34;qD{gUjT81;Do0uQ*R$}|8l2YOKVXhj)-y-p{0jaK*Q(KDMV z!25~oZHG}1G(AC6!}ml@x6RMt8*+DS?KtCD+gGCiv!V+H_#W`ED}}rP-olPv5wd;5 z<;J~7KltbV++X_5A|f>8<AE`LC@x(@=)5SW2-|Y_Su_eXZ9|<aG&{ydWXr(NLQ@+t zH)k>dyL$;b*<-?k(g*9Co49y(%C?@jt@g9lc9#t*zk^^czLalgzs+xTtzCsq>+QwG z!&Qpa1zHJUy==)mtXDRO;>_JLT?_)KLr!@VJCzKoKou@|-rTr>-{Z0=f;MdAwcq>i zzwh5`T*vg+zx1WEnezJya-H%@Fcg)4%N^mXUfwvsXs|5$gzVjv>*ap_Oj%iO+rs`S zXT#E1`8DJ!OwWNHIz2D8?h`CqA3eR?oY|E|k#bo|PP6PBbs~<GDEQrbm-)<^)#;FX zG$@MFgQ<4gyGKt?t9$g}FqlPkn0`>%Q5du)zDKdLM_xf+l<hy%D8IaW6C&%Wva4m$ zFe)#@m_p7mrWi`Yjiaqrp)Ajznfu(AzVx$aP~jyot_lk<8e9yyLKA4&Wf$!q-inyo zQea#<DYjk!wPAo&<Dl{l+Yt=a;|3S2jbUG`Z*1V-^8JlRueEJ!y$$WJWDobXOu%?~ zVC5Gv<}9GFZp<s~R_hDxX?XAc=Jr?cJei{XEF1!=04o7vssUb!d6;Hfb}_nMId;77 z(R1T6`e`xzIi)*Iv3<!YzNjFhD-OVCKl|0Jk}W21$1wgF2kV`8Zri!J@5{scfA63E zv!Be0T`KR>H5#Q(>Xi_>1mA$b{=$1NtI8HVQ|CrZ$_**#z6?0B@QwlB<IY=cfYh4^ z!~Qyh9L?VoTa%}5JAZlE$$iI%*al#he^Y-huME3!!YJfu+pj3S@#BO~&gnEtBci$D zF+e5Nr{%Yz@G`e*pC`-#&AKCpq@w(W&!V*A#>YliuAj>Wrr5Be?WAV5+vRE0(QeLv z_n-dWJVpu*8>8tYaR<s)6#NQ77ic*KnB1X-l1mD1%GH@$i9=(2#UPM$1EU8eUnZ+w zQN0P2UTCkk&D5Kys5+%}-^e81XLE%(Q?egyZr$G8+`7EJzO@7gguWTa5H?oV_p-5I z0&?7hG(LqHt&h|v2WH3?#6+yU(N?C&cPmT3;r3r*7GF|`m)&uzwy*#f<9%^ixat(v zU{roT``PQ~KXC4wzgD`kvUz{mh0s4dd<SNmnrbJ;01tv;{z#F1Nq4JMafZ1!C4Q_i zqi(!0xry;s&az|5vBVbQ&r7Z!4)VHV>0UUA9WQ>!enmt-^vhBwN>vC{6eSIg6W-o_ z49Z~4%uGXTfI24@)t5&EF4FRUVNgn0AhM7Ci8i41=S;OkLAd}uny9+=-&D86Nzn_a zaDm2q43+2d*)p#;Q|6&zR~wrTfAFI}{8Mi&EPOSWrBIH-Su~z_;)yOzGkNRQEnCE4 zDGd`iGl#gt3Vi%;4blB67ikKD#h(Uqm+rUuJT{=>o3WfJyjO4u<HNPiE?nJj7iqNs zA44MUBEFAMjMc4F&oTnEwD?lCOo`?1R?q`jD#0sxdg(S(q!;@sKtfSw=w^feqT*X9 zzpg$840eU%Rj|hrE9}B`2Vn7=zUen`Z?{XAUYbuWzv$fZSR^Dpl!nHpTV8f09I3bj z5teN^zcAOU=~oK8uHbMfm9q4e$mpRK!efg2ia)0^&D88a7+CjqG(8^hh2^tQ>AB~5 z_%bGATK?NxtI?wsr6H(5Y;W(tUZwzRr_tave{xmpEU%;3u&N^WkjigSR)b8@Q`8@5 zd*$SHx@l4h&q%UXxkb%k#Xf3FOK*!=g88^#e~5eDg?v=(m_K#$b5A|BZVKyf?gH)e zudL)ju$)YG0}?^6OeoKV(Vyu`BL)$WW9Rrb>l~4CsG<9i5u#mw{g4@C@kL87{=s-D zzsSqzBAr=<Kfj+AVO4;SA*?cpxsgzhnmi`oZ%UsW0M^q+`>6tQA?u^#FUqNqR`P!@ zUc6|FNYJ<Z^%P3+rK}t}*Ci;U4Wb5&itlpn0!`7LFI{@dpwdfaVEVi7{gY3&+U9(y zeDT`9OeY1hu+TMZB=-san5}5F0+(Un`B*Z!Oq;TmIP4Z6=HA^Dp4aQZ5e1Q%@@3+o zP}h&&#QH05G5n1~MOPjxm1E3TD8g3VqZNgLb?V+;Cs%wQKi+|^?SgVpkYZa_R$@3+ znGU0&P5>$|iRT*r%t4VoFd)S&*8bTrwQ_YVyC2$>_wCytjn+v|<ejSRcI*64{q$>} z!098=s}5tVyz>s7U?Vsk%3-*4UV3zP>*P6;2w+P4@(t$x3`R~L!h|8wF+%bx<>T)S z39M9vwsskrGKqgrj<Mn^K}GoX#>1^Eun(vLd<<c(&maO<1#U-_hPZLOR=6d3E3mKx z=c}}jCOOA#T<6we+%D#dyT#mMQ2CX;iZt)<4WNA(h4Aj(Wka2lw{8`YpXrGI;<MM! zPqo{hEGm4aO0Zs1ca!Ci)5^1gAsMUyTT$ey8hQB`Z8%QYwLzA(bfnmO<#7z?#}Zk( zKeIIOJusmn7%Xk<h@puo?<SeIem_waN)qMOm1+668|!qSbI>^9ZePEHqD&HK?cLeg zh3!n~-PzsEzlR+CBn}8uku_*tT7JuYehvCMli}V|Wp96ZC2XbCq1d^aDZ;W7GFoJh zVl4E|T(<s@)YVNyJ2p(OrjGuWb1$a=ir7KgnwtKRx8C~I^X0K~xv`-%G8BsMxpS-e zHcdy#y!LXLjf^3f#)4!4h#yeQ6`Wr=`|W9pOiRP<jBo|8#r(j$TvD3#YtGnsv<*`y z%q#6F`@h2YE54lUcZC%kBaBvS7$K?vA7faLnO9b!tYm<t`AUq9!?9eEW>_|!IG?@< zD>hP~T?Oc;H7XU~a7@U>i(r}3Ye^|CtiM>1uIBrSQ2c)>cZ0?$kLKoX=jCi|J!QW2 z+&6!YHzZ->M+&>GIvg1Y+(*Mv!TmDGk+Nxqgqv$w&sT*7cF#=F=f#d=vmoy?u>2;j z*NOtFO1_D#52p;r+Ekm&D^3j{`t)m#p+ikMj*B<(Hg*j)KP*?S={*mlN2{!$Og`l1 zjMiS93MrotIQCKY)_0T?jp~v<>zvR;+ZSa=xVyBTz1zI4=<htTls;8;kji)LN<%GA zB=Y+NS?Alx87zdO*z(k~=b!r4{}N>>nqrcMm_dXhAQmdTmjc5y%6cv^RxtN3Kap^g zrfuuw#{AM*oEdKomU0gdxGH7X;|f`QvpVk0?C-Vx4s5lL<d*9Pn~#1TMuaNB#~kKH zQZJ9QTAi%F(gnq3^u2ei;_-ELRsrTcd1VF2t-kbk!xok3C2>uK^1Hl@<zLE{cMbMJ z-o3k8@mKrDU;OzW&UQXuQGVSu7S*%uapShK7*1_!N<_J;6%y(cp3o{x>tqr4E>bWa z$lHtrz36c~vmyll&@at@K`G$u?^BS%2tQk|d!(LuzYS$shONtTIV2f`F4LyG`!4nV zcgM1GL{WwTzagCOcWdi$;pUuA{ti+TC{g8iDE6favAnJv?gz3d_ZWUMkOs>El;K#X ziUo*w%+h(PS5kW(h@698gG(#dE8YHHRzRZwlNp}>;(zn=Kg^Zhr=EJMi?eJLu~%?N z8ee*O&gIS%Ee&7eR~MNM$#Pd{03SG&8)$+h8DYqn;|w)c$PLH#OMdX+A++1wA3B0o z-x|!vb8GMj#s;ebd_1ACx;}CqZwxSil^ljqDWC|X736i54pVN+<H~WrysQ;>K3RH2 z@pbMq#a|JC0heS6E_x*~S|RpO{`}wjua-{COns7<Agx=LX?<LoU`K?PU`0=BI_H7Y zM0s*+AUiVr_#XhT3>PWmLrnRX<Hcf>vaKl<Vav8{O7g8s8=gP`1@CfEY)5V-=2FMY z;+_7yr=K4alex$u;;(^SmAXeOlLA_MA3xsB6<<_<1Am^x>m7K`C}V-)y?q1dG|6@% zX;qfJBhAhk)V;3QxM<O<{h<;}G&Q~<^M#h+@cL}v=~fsvpfVI^dV1z(fAS}P^6b-3 zKheVAqId7!4bF&)?WIdJWQ}CEs=|xbU-SS(B~=7Ot@LP+1=y|2hhv$mv*8K;7E3q8 zW7~#pJbVnMJ+%U@);~VNR^Jp)wx{9C>kl5j2t%L>@PxuFwA@W3u-eAP-mqRY09GqA z*JnznUOdao^EDG2^IPn?Dti4^@;}@}YcJN7%gYyCp3oh-oC2v>V$Wk?{RNs2ICss# zdFwD@;h*{wXFq9L<~$hD$C_vWTftXg<82Y|J!MK_lO}8=)F`>>3O=F@0k?#MXaLJ} zurStEz)ELEEDzgH`mTF9iyelJHB38{ul_zi1ZIIv3EhF^S6GpKF>F6~;g`q9-|gZW z$UTm`33dbbXi$_RfedQZ>2%o6#6c!JUO6~;9FY_@YEErXc5pmDC#6#czD$~JgJWZ` z=A|Md_#MgPV^-)$$EP@-iCqJGTt@DTz^$hAtcu9caQ07M{N7Kz`|ehUT%l>^4N`oI zp=l_Sc}3U-Ev0<<ia{9;W4_Qii{Pi1q~c3>#h7^(=G&%ftuXvPpv>s4#PVKa>ytue zA<dpy_w(7`6_{L}Y-h^-{mn<O!hom(JfVoGjtonq{giHbI>IUhBerS3w;)4V`Q(3W z%m(k_v#F5yZoEjY+@3pk%knhh;zd%3?;7lVM9Z%PdnVs`XU_iful(YZQ|;CdS1o*D z1s|k$g)#_{_DR%{6<6H`>qAjnNmn{h!?Q~b$O{``V5#!w3>$}WX&(k1%TtLWN=l~< zt*<4)X9MLk8U2H(1b%6JT(OK9L}I^}jpUPpVN8&sM@Q2rY4m7ioWXZ=cXu~ed@;CH zhuoY8pfETNc(4NfJoqL`$e{JVO`emL%~uRpU3nW&YOej(f%Vx<B4>H-y7Sd~gxg?I zX0xFlE*0Ox6*?&UM}PaBUs^^_yW;PeTn<A61kDAUNpO||l@{BVyn%wIJ}Tx64lmIS zi_0PXmnp(^4KG)S3yH7vYAhc?861m_F$oVcBaS(8AOHHg#lOXD^_R21mtpcjY4+y_ zjS{U2@Py;y22^x1Ss}<?GY%hTA@cC!DCm_>DArf<d|~vz73TJQ!%7RU1QlYk4r9=( zVp;B|@hPYT|A`MQ{`aD053ZS8I{k%**?=43YKIBAs+k%Tp9kXW`=>X^F6>^}(-Ahy zz-ZO-`ccpZp}8w}e^kZ=vvqIz4E9RX0EnYTN5zsWzr7yErry&Ofn^xN&xFK2e(p*~ zkEJ;y)je7nABvz>k6|nO+u7ZNF0ZQ^_bRz%@cHXIJ}6D=hnOc?JWri2G#tL<+TYyv zRO!7XK*$pndu7j3!i*-7Bk=aI@l0Nkwc$ltQE=2a;GPHWT9`liN%XWsEAYa?S1nnA z`OF-pELWsauu_WeQU*Mg!`#SNvLY|R$nm`HJ&{vva>X`yB0SJ50NHK)F@9+a+#!Jh z>BulO{n%uGUxwqM{1O-?`pO_muqwb4jH@_e)gq0Npk6bO7T`$b5`}lAF{?7Ao5IC; z#q|KL<i!`t?~41oWGHw-Ib?)fYi>AKXSDj>aux0}yO!156$dNiC!Tns^{fBiH$Kv8 zx6bou&yjlxEnP8d8CPa~i<Zn@aX01mLjKpQ@f;P^hRoFDGtu8Z_D)bq@_t9fek)X| zv0kMcc)0G40?|%FD2NRwl*JUxV7rfFIZfX+u0VVFh$+KTn4_br?$Jk1R#1*OMNq3< zc(k<*+m9a?*4~^^*0cvzYad^FE50s|*Vsni3F+%OFTxlQwP60&>&(8rXZ5L6JbS-V zwvxHhG0C!;+HzPsQP;04kF?;81=KDY)B65*Z-4PexfPfngR&Y0#45PtXYF7LvY|ky z;+87jfwW%Al6ktNp?2KcFuZnexivPN8i{06I;UmF1lJ<UITGY<&tQK!`+F9S9|I}D zssK+Y?&CGW#ZtB&yw|KubXGty<~P{SmehO3^Rlq^Va3KPUra8Q-b>7t1_LdiqPy(f zow0HaU7uGog?QOpg8$CX{LHt_o|yUs1j2YQF?!V!XqW}imV$nZq9Bq&)Kte|IuU=O zQf;!4Lq<v3r8kx@t-RPs*D^nbo|&yZ%lN>5W7DK*^8$m=ilaB$^d&hMiuXEwld0#x z-Ra8j#wYo0E;JVI(bl;~kNaDo9Ch-bRy(`i+H0-UFiM7!V2_medsInx&Q?6m0^{DW zXP|N+VnLPN)`OojICoN(h<2+-N~`WkHbrbTxJO<pD^_-ThtIxL!>6XEKXK(}fA$P+ z-Msl#U+V4KA8VaEhc3{C!GcABwq<~<8}`PH6>sQZ7GEwE2G>ZkV`R7;@cD(=eHbS1 zSvCeZW;ymUa_RXN3>!Q$joE|EZTyvRdZ3r#_>wEZ54LtLH$6ZV;0c9XI3hxD)t(d9 zj+WAd+lhA_VZjJwb?$=|lu`a@?%%@g*_ahmj`O%>O1I~W!T6BXRjf=`Z85HdwmHke zeJn0~;FDS5OQGOjXs{GKgS+?gwzQ((Sd-`_rEXoZ(^M4+t~m4c;Jh$Os?B^{0ctAM z)#MYFVQ&@Qm;36EUWzUCW`|aO6Sa0%EZwB-n;;RO;^;p36Ofm0n*Ll7V#=tu?y`42 zym$T=cX{{GLh1POXjO!jeId8@=0U9<=YM;9d(n=*fj$>me;<_|y`w^HC6?}d<(?(f z;pz&6ey}}umddrv-26PIT5PaPW=tnmj;?LZMKk0T@RS<IWRsZE3s!i5`ONn0pIQ2@ zPome|bI%n+&oV=VL1p;H4IUl(t|?~iK*Po*cSa0$ddpnAc+rN6?us*_fK9}T3FiNG z*BV%j39<@1`L)syA!BaPeRHcZK+yX!_T<r?jk%It^1#8MCI|za?x)u`cN$s2kHinG z3<Z7AJ%4Mi^g1QBQANNj5^-KvR%r<?*JCA7bU>^;&jl4Kx;oR`b2tssbI(1ORk}BG zEAY?#!Y?d+)0uDnT43UH%BqdspQWh4Wur=m<#VA17EgfbsWvPu%!_NSx2{P&xzY=3 zpwh*7R6a)G9RQ*9P;G^e&VA+o%7!t%uW}&WJ6{6y@%i<4t<X$9kG*5Tm5TSWOgB*P znh1eq*e3FnZuX!keS_~HD!Y5ToqSxcr_$8eV8=jTU0x@%_udreM~k!4KhslF&~Eo{ zV<}^G7$I8>SC3Zex=>Ug|JX9oUrV{&<osO5kZENC{S&P@8=o(>7vI-ET3`3~Q{Dr3 z13++H;yMjGzvb7?wCz87{|~?OV;{SG2W7A#+p-}Ut>7Gs?ZU_W^7V_6n_qEC^F_-8 zVzGd#{<6e68ECBVOk_W;@%e>;$0LRfR(>E`jj3~}tZ!`K;)S-E`Z6e-_d2_?-@CYI z?$u>d3-AOZT%MiIm+o=p6#@%p)l>N;3!1YG^D!6R&4nwyX!#8lU{rj0X#CY&;y@*s z($1Y*wP+E>u_vhf7Cn&98B~TpaQd5nuDH^&PP8`B@yV25eu%dU8mc*k!dfjUna-`D z<#{7HMLsM34w|_8Q+0X@`3{xs3N2apvMn1@dw@4pb?xmfxL9$KVQ;b6c7OD;ghEo# z?IO<tqo8Risk8f~t?qZyM3BzA$Bj77R}?0UnM*%^89n+i-fHD2LP4z_J=%tyoxM=` z1px7;MawYBjYN9hX6QRQDwyuk2su>AChFqBuZLSki<&Ix05{zDS03YXK+}668H3lE zL2qGck4%-|vKDW7tm!H`7g-5B50h!A;idePUU~rW4hA~A4WEKHEEr$jH$CyqpQGKG z9G2@57@)M6qOwRwZ$38_l2>?F;+7BKabZ}z7%_a#((x2jwbJ0`+G!^DiYb%$cww## zO9JH?B0tbrDZlGm0DDtUX3Fm`gCcpdJ-z*pdu3`~J1IvU!>qbFsa~+UeY|IuFTu&h z<o=A5y>|TXmgxN}wq<yH+Q#V5tFBuSU2ahEMJ4#=&B6ue^?&qFez@Ik{}Q{xptmz@ zIBi9dDej4Shb@%W;j+irTYxL3-PGsf)d*<TW6T;_6Y1J4ca4~2JztZ*pZdSZpZ^Xp zew9s~mD6{6yH`7=^jACd-Sesa!AAFs_Wf%_EE7dKgo2=jxMza6=RvNItinw?B$VSt zVeReYf8B1}>gvDQ+SkXhe`|8peE+2qp%&mlnQFITDr-B3VboUO)HwnL)vs8w-iI;| zHMP8{%bm<rJqN!mb~pxu`=dWz_vKJk%e{!XQP;E}IA5yMyKLhM<$QZ*>;Lv$-|_NW z^13kca~b@qD%+J-;L^%l;$_C@123$@#gs}=$h2_f$`!v&0kX*bS*%MVPaqG6w`+qR zT`IogU<tne;2~by=S{118I%|(?fk7X^Cw?RWl#(7F+wW83@g`D0;;qUV$Yfzt7F|c zWO)$w=H19DJyd?l>Pyi8FF`S8q}VDdOdkCigDxys>}4e77nf7*sZRzsV#5l&Y(Q<& z3QHDD-~Vf+0>m;`yl-NE{%IBE8UXo7_~?|16|T~+DfYvt=p{%-^7mW5>t)ZMgk^sK zNh{<*P%Hcb?;(e1J}EC*pP6T>oE1jdozeHNk@Wru*JH}Bh4}B3tS0~x9vB)uS_$cN zI`H`M4s2~b&gbr}D8FosX1(%jB5UcaweOz3mIq2*M|{4&*n&~io74%%&k?EN#ku-B zZ&1qzKF5_6h`nqkk}iwsB_{;M`wG0s%#FI?Ioz48t=7*bXzk#{^z1Kji!V_qztuS{ z`79rW3`pL9D`HsO3f&?LqPpVBzQJW!i^{K)_Y45cKr_FOStIX9g37N`oPn3ej`IPu zNYQmlaa18bXdXP+M9J!9Reo#9e!<qKGE4bVG6N`+j$yrEQhW2if6U?=bB~exxyuL} zr@<`2McS=fMU-c(_=@Py7qablY_TjW%c8ds$Nm;$NbcUH=+CQ`#+i@>_-kvw`jKg7 z{gu~S^jez2rN@R*4sFua)p`pUS%nJ=@B+K@Sl26CHxaFtOuG%MP5#IuCG|<&iNi*1 zX#BmK(y9(z;WQPCH-Bv7N|T?Cgq@VN*i@_w@{<G@m5?_q(O0-;f3LSlb~p&{k%~~N zOg@FRcW*EYYmE{-lDEixn%H)z1$Z#(EWpx>jHe^A-6$2w!Rp7l`phIZY7-lst9RLn zGFWCC-JgcW0P~#Ghg5iDnZO;|_b<7BV&j6PY(>jXXYVKf>gE6NCn!D(Qn*4d8(Jsh z2F>zuqoN!0DUnKL*xD6~K~sxmdCN>$jz|%`5ptk)Zqxj}EVJ;+#u;GbLQ{X_uFtuP zFW|V}B~W_t=IQyl|7&cAT7V~;ykd|&WA0-Q>*koti>XA%^&dPcxZ)VsqqhPfE39Xa zTwX8|;7b;lH*UNnDiN$5i*Wj75Ug{S2U$Sn_vX#dEzLOVuYtI-UR3tBR*|oc^8{vX z;5lRUpfvYI4=ndL&}4bTM1O`A0nB<T{{T`oa@2Ge7CI_ew{*Odp<Ei)jZNO=Bfgrx zsPlTT4e}SA>=9dnB_YCRayOZ})5CfK><VHX{{d#GP8vSW5C4kj(OpoB@MMF(@9yqi zKDHOFzCD#o@4pG<OVz*r(+I=QRoa3;84PY$O?9qUha)9As!d-yPW4)v92(VDoB#f% z*SQ*9zPoSsU*B(_DO=H^W3jv@OQlyTY$NJ?H)95vTKTEnp8k=)b>+(0FaXx2T=6Yt z?kLQ@r1X*!On)mY<PKfT6oQbvc=hT^+3(?p&{dS*KrUrOpSH})3`4Y^CD)dHXbn}X z-8I?Y6;S23Da-2{8_TgBssK+gwjk)O;sL74EIIi;3LX$se6d!bKv(2W&D@{!G-m}i zr6OD`(RBqw;M17jl@*EvSS(A|XY!LN0$}0Xa<s3kU{~P--+bzm)>Q!c$xX{E8DZmU ztL{$JqYP!M5bd#b+NP~2E5isyOc5+KqI7l>X;4Q|{SKjMG`G~5#Hpq5W6Nt|7Wjie zz8f+6O;6?Z7Gh}9QDJNLHK*S<)tIUUttuE*@7>#G5+@9;Jf%KkBKf-N9zAiOn={Va z`w$ghbaR%!ZS2Ki9c2EaDNR)nKcMDIG1cwp_fO|h-FG<H57G2nj(KR6_08yi6vHbc z(aCMXo{;hwXjpd7ga*ezyz|x89n8cE-hbfxUTvAF>~LpovSsei1_DD!^>?&q|LjxW z{Uf;MX6UfRIvOnQ2C^Md1jowEAs27>F~FBxrg)I76{j4d%$YCqTZ+l5><Ltw7H706 z?FnTYW4yvIT$}k=Vi<!O0j<B?PHRbBpZmh30)=T6KcUE8RQcf}DT`>tvTG7~40n45 z-U;f@iTm>XJb(cdbHWvCvEWy7DkMJ6<mZ0w7nZ*1iF04eFM#zk%lq<`d2~Muh-I1Z zPWjn!=*D$AaDnE;8_E9iMVh^c;v01xHt~`Ux3+HjOaPMZ;*lc9v9gjbd;^t1|J43y z`}@nrez87&#YSaU+@^cDi+lGxqd~KdBKX_pZqAwVD=oc4|C)Jyz-xcD!z(ZSmkCT^ zKu}Rv7wExgw^}egJ(b*FS9b<(x8Xk{!z4Fqb5{1)nsn2<h(x*cZkGp2*Xn3XU<w!L zKm4OVF7)~qK1ajqQ{&6>XA*_9Tz%_B4KZA$Jf61Ay}RrG=HL3UANi3x@^a9C5p#Wx zyFwSxFgcM5iRm+K#a%uSb*)KxH_G+Ie$tTXhP_eA9KtwY4SY2)HnaAAbbfyBI!{y! z@PxuXU=tG_>)bsF`u3|rYFWX!e6lVMdfKSc;>s`nd-v`|BP+pjJ5+w%IN*G_c<!4% zNgcP*-cfEnO5CUK1!Y(6bYZ_N^VQL`4y;pttCqjmdHF2`N|O!MBY9Q}qfum<6X`Yg zzeBk+QRTP%$;f@n|4z{4_c&O3DZhPN%PT*a?A8a^k6*K~m7xKtJ8tsZ*~ssV>*^kT zbim&V-J2h6J<hGYD3HsqzZO%!UVKwk<=1$%w@+;&aw_`TMl_;W>64(ddLKH!e5;$( zP@A38CXTQmtp?DeLKR9_ERBmarcQyk<tcNew^~}S@5Dk}F)aUrJ!il9?75%gDdYlO zx<21co~&?#rl44;{N56>WB!jVra}Vira&q#Qy>)Al<aF|e!4%I#w@_)E5ia~9VBY~ z9SW0mV_uPossK+o#rXa*O0(?!BC2kwytlAg5mFYclw8l7l+JB+4qzJVQGgMi!vF~6 zE`zmZ5eTcuhf^RuV^&v};pWX>SZbTrM|jmIG;gRp1D40%lgv}s&JI=8^=e3M&3arp z^lnV9mGye0``bS?X>cr=^Vrq#P6`rgeO{1JD9iP6y02a|QQG+L75w>s5F>7!=NvC= zk8RO^Rv{21EqM1wK2BJ5;qimqoKf-J%`Cq``vU0>%L=xB-7@vGgjuYhAtIv{1(--4 zr4M>MyGC`RZv%$^A*6y@l+RKs^{YIp9^31receK}ZqHjt-v09)iAJB~0{N`H0f35# z$a;0wdAUDJ`|v;brEAaQdSR?sHYmrHZqTc?@aikeq4i=o91V@be@PjpU|4veD^At~ z=0zBFgQjg0kxA*g$&y>SkLq(Go!9VV4+S>%R~d{YITlzI;0Z_eYLT0Wl{H`ls$6O; zz&@X;n)ujwj!UMf%($`}T7&boOU1<L%gZY+4J*&pJm1ZmpUwTyK5(v_fZg9CUuXC0 zsx0cZ3lHK~D;ks@@_C=s6~e8d)nkmQij0+pFLDMln#wkmZzkHy-VD<lpE{X;A8n6Q z(~kwwo@j49gwbP$x$g!P9aG`?$PLYZs<j%#=<k|a;`f8-H|I`hDtWCx1{GmzyKcE3 zzqZm8eEv9f5svM}X^i&OU6}V|7H1b3YC6bbiinMuU$z{|Fbw)_8WXd-H!G{Is<OS# z6X;NbS9-zgWt-%T`xyk5NMN0!ATBjlB)<+DcIL3YW{8dfHsSq8hn7V+F*EC?q%34M z90y#C2}U_C42C7w3wiKjP%tUL7zvtY6JcY7^T&a4XKG|x|9~Tgor-nXx4B_n%hHUg zMut8R*4NiF>+jB4(=s0hWl(S|@TYi!D!>y8x6-=aFvAk^EW8F_3bOAR%PN;HS&T)c zM?G&=R7!l^6@=S`vWrt86}yVaf1$OPqCPL1bLVjG-{m}K5lkUpGhhAcfA!&(G0$`5 zEoS{KTx-iruDdU&z+?IrSD>Ue-&;NFMXb&&FS2ZS`1Mf3Bd@>)7gbdj*jXb=Q|$g4 zGnB%S>PRs`T2<LJB5%4=V84Xc*jUw3BE7+>LFYn@lg`<zkdow6Y5fs%N9JcuZ8t5K zE7%r<FlG$fZz>)fWEs}z(T4+Cd$+fD@@USe0Aq(lPm5n-J%G$y(X?J~nt`NrnmW0O zWwlNPI&eAnSQ98%#`y2vH2Uoe`l$u1O}z-iwf6K5#+7TCvsf1IT-YA+da`l9XRIwW zk*=Xcfrh!0@lUbzoRjType#QB_x=G|ftPc`1zCd2_$}vrW>kK|AX#JuzGaGFsRblX zl3dBQ!^dl)(>E1;28HZbTm8hW!TcPi6vAA#gS7;=+tc{>Vs<5GK^cbS^>yo?p(?<W z3w3jWiv*B=yzHZ{)M6CjnN=1h<{IPj=E=pljJWx(IHs)3FzR0s{=QIziypwzCx$A@ zV(#D7e7zV;Qly`loB7$Y$q1MEI#Y6e3uJ;?E6n3Bl&%*lhBjQb+HGH)6@SfXkX!oT zxwD21we?p*b#g`FHKIrZp;g<)pWi_fQ(9P0uA{hD>+{E2e0Ger5O1DG%c%9ORC(+} zEbh^A-8cR$sz*1YX^U=qY@5Wo%wy|bLT261-w7z!Ww~S(?r8MreFdK@PGN+WUi{nZ z?6L0-|KT-fLEY~kKM6p^HNg5EP;+%K5H;VOJ=EIqcq50uj0!H#i0)>}0sDsSwL5J0 zyv&j6faLw3We*`sbZdPGD?wcg5Z1xgR=x>&ZKqDoev%9psPN)C2Er-~9Z0c6<rl{Y z%V1dOCHVU5H@Zc{XRh$({{jV6ZHQs=o{{N5wU)E;x^>^yx|vR@4-`Nu)ca4XZL+_Q zfHEwmHTCFKzX8g`<0=6ot)S)jejn8?*e6|I93+zPB}CHrJ`Y!ZdBo>pZ!!Nb&reG6 zFJ1f9k4#NX{Zdsns`lK4H(%tbD88;Tw?ZK-70OcCIB{YcPMtahDTe!qszPHmEtV%% zP9)WoN^r6WQv6N$<JFfuIwBqh105eP$FO{Gq)2^(fs0n<pk!$<&^5p)#m_#^Z6LIQ zSYTG-NPY-A42p66+QbbDb}sDg?d8gE@;f!vDql7RJUu)X>R+-RKVcCux6d~`RqaN= zNY+aKv|0vcrl(<0yfw0-zl;ti__!^u1lNi&y~_kqRAomj14PcB{yb8}p?3yGfu;_0 z-?5*YyGol^D{t@1db031DtgNednOc-+J9%__mFk$*7oiXeD~9T<u^%oD-0OtqF;D* zCJ^ZcO&*3TZaW$Yy0}ocq%ppv_;T5RuGLM|*-z6JRAq%t>0p##41SgIWM%}u4az8Z z@AUlKQ@ElQ;0cEHq8euf_PdJR)B$E<igCWYdiAQTXY-1HEWkWX<TERxrV1^;<OXvw zpYF(|Kn$!vr`l7Wl&ydb-EYE^2e%5s{ka@J>WpgPvB8l%1uB`TMwDeVuNiH_G<Uv; z+i-Y{4R-fbexbUr|0aJ>%HL!dD(*|dMXR)wlO_4^l)8T4&xOCYK^|bnH^Wwf*MYyK z{I9_^B+^IqepJ3&er{V`r*Agu#9<(CqqgcEJrsFRtF3K#^k~buIrpkW;uTHLr*9kV zw{^RF6krl%nra?(dp=m|I;glca`fkQb%lww;Josze;-Vw+@Q2t<(FruNi$*j{<3Q? zhIg12o4k1}hn<A6C;Ss<ZH-^LQhQaWvoqzKtK_{G8a7JTXPOh3#sG7X(b^SDK~xKR zPlW`&Poumml3~dk64$R>xe~n#=~|sS&p}#%+wBhiErT*Dme#knmT*OD`w2z#Q28#! zh()P)EgxcB`8MKO!j)ssty{NT<UUk@X<2gV(v7SVT=r?ybGWhbj9FOtszvK>yFK+w z;bjO#fZvy`&gCofQ5oHC*qGR^Q;fah40$hhZULsAR8zeI`4D31L&42qLFutxYknm? zuE3OyTE$u%De_<|jJQDE|FQChT$<_oX&o8-9S2=hd_(5m$7?aYg(jKLNi4zwZpHpE zzwJ>rjU`m0a2j%R-pwq&SQjRdKdPy$1iJ?Mwql<!tyeOpwg$lPYc~0_Q2GbIw-YnX zEx>V)m*kH=*fpg}jBYf4Yq<l2H(Dpl@B8ZFpIf4dqj`Xf<77FlFuSW4rG>OSj|skq zqC?pP*B9%=*xTFtYu~Z-AO1=a5Np{K?$GG=jPhPF#bvRSN0t$w2{si{3@a?WPBisH z|B^pu!ox9jk^@zGIS)3s@B+V_{Vjts3Q#lnTW97^zNQx73B|BrR?Ko_`FID)$~So4 zNRPjf<9$T{EJJDK-z|e<e|aIrIN)--P<~hQJgEGl;=8)KVQ$|1s`b|202{ksUkP@j zmcZ(<(!vxpF#OPn-XI^1Wq<Vy*pOF$3aIv48-Eqyt=C@_x2^@*ZQ0}OJBAyTI4YW) z#WXm!detPbaI5fWM6BNIhXPg|*Uo!sXx&1*6UArT7n&MisT0Pymrh#15q`D7_v@Da zeT|e|Mvqpjuw*Z@_Tt>V4>OA|&fOa*zp)oKDvifq?17(j>=Tx+`Jl?LNvD@C)z!I% zmHmShnLuaZ_1CEJW?(u;P`f}s=OwSAX!RNuCLofrW`CXXD~k{^jxdf^54B;y#qhK? zl&JvX{a%9hRNF<{U3OUt<+tRVEn~v?=`VxJDy_XMEC|+0d1>)WFiaUX(lT6Jf2sJ! zlwXu%rMHzBf^<-#0-X{6o&{x8;4lA|^A%7g5;^#v^<bG|(|3+Vd&Zc{aGp_&nTRO5 z<-QdW8JdG`(B%4D%ma+v%_9Yd6=cEJ)_(OP(}DHZ*4=bqHKKdrOR^$SC0S8qE$uJ& zVJ|jXfKwLIpm#R%Me*z-qp4XfdNt7KiuicTnAN+#(ndwB<!^YTsUIU;{+O^YN@}y~ zX?BdXi1x~#uR}y?2&Ad~|26%vzCmAKDhJYUL1;-TJ2!0PT2eyLaR8suUS=)Y-Q9&Q z1`u=U<-5Tu0NPIdXwmm5k!?^6S4!pE%%kY0kMCJ^7`|E@u&ZN$2O?$xu8-Fsjt~Fo z<Gj7=mf%e_jdCT+m7Xh=FTnKMW~IL)BeO&fDaHV=yX&HBmrJPJ16g}h4}{kXyv|J3 zpM@3pPhF>|(4{h54SrRC)?W;oii+?`o>I6$7pE-ptmJ99Er#_4ifv4Jjaj(av86z4 zD`SR*G5O$n#nw0S@xL#$O>O~JMuu5GJwN*awE#~jO!>{bkH|HIc2mAgQEerT&AEE@ zYQEo%ncxy~&@1N@WRsW@31}{0f|Or$e=fH1-y&)tLd%)J`deS`6g{x<JSL^V$pUCK zlFuuGHq0MArRzkN*~OuQBTw2`i08fA7V0{ldGE1bkKFtIsY@{iKbw3vjQ=sq8#5w* zv{!#b)Cqt!4Ygm^T^A{LL1z%{<C#Ey7gD(Z7-f5J>%N&D1Va^qbR*8eeoGt4&#uKD z!|2g?pO4+#y^pu6bN807f`y8kOp=<41fXJD>sd@9y__z_Haw8g>kv``fW82yY9CzX zHt|$Dq-)^y6Ev?YN2B}#$hOAXcy{TD5-Ps{V4J?H24rWBsk=0Jtf^j?;Wt_L@mcr2 z`@XKKg6lQWh95*}1zxq!J@+v$XBI==!n}nQxR^17%Z)e(@YSn$1C+J`FTHdL%L+77 zx=ya>*K}@j??!i9q4G;*P|@s|18pQ)nIR_oQ|s@@v1f4{uvYC847q^-lWKY3E78N{ z(`6YLM1V)kLq!)AVv#vNM`7W;5ve4K@xNHN74rdC$NiE8nAZRG8Xx;xuetJy+X|tL zECyW2_4%wT**&4s0$euIWC4~`dW226h;`0Zjt3Anj7DNyg0cjD?bZEtSI{H7Jld3v zZ0i0Fjs_P@!iBIxgzt<LxQv%AN`c~VNm(N5j|r`!^xpetkne!R>oEM=xgXS7cY}P1 z{V^+4DLBEzfo{$i%t|V}oPKWGKffLitI^w&G_Sd3qMD+_zTVKFMHKHrqyXw5QTk{0 z#0(5dQ77%+hiG^O5}p;ByiM|ztz4?*JDR>f={MQ*I?RFI9C!clk3|PU5%oD}&!D_! z!@NCA%T&%5KC5OHV5A%iOmf|-<x^iGIQ7x3Td!ww<2yDM<f=&H0kA5j2zO(=@6J{f z<V3nfBM=3}ipjrhTrpoZ?g$u$`wt%CNj`5{t;?W{5}SP}e{}+zc_l(r*OJO0bCHGy zA2@e)mdbCX1}`hGOOZl(guud8=DFuK%s+bLOJB_rmWp&+(<X&;hD!HP67cB(gf7w` z){F78wp;Xw;{W+HNb{#^+pwfk(x5$UCO$SzZ&FtE*y0_4{*iB1%~_6GWm5{qp%m_) zl{p&s6z%#j5jQcZP1Xu-`+Mh19uvyDxNax~xw7LbUY@jWNY`+APO_pOWpZop<DH&v zyk?MImHa?}lsPT>-a(Tx)5>r-F1I{+a2bPQs+(9Qx|FK^I~YwA;8aIcG%xhu>dE7R zF~*f#l-}Q)6m%rUitKrHsdB?=+3-UWjce`#{fFzt_hMQ>z1S+|KJuN`Ci2d61z6U- z;E!ph0B7Ioouv={zn-S;LJ2Nhpb@eJmoCv4vwatGWw<P5r6>x>5?mP*O!6!#v4Nf| zuRnU7HabOUc^e^y$;<nS2Ef`stnFS^7w8EED*&>1x{ARt_aoQ2>H|kvuKf1Emm}Ss zFJAO>xEY%A2v3jeh1D0i5v??esgPDJjT3qOAN`Xb2Cw{5sr&}x>q%E<*8-$^@_BNX zl;0o&)RGjCs5^kK+jy3Ewz`7*#fl}{<NTZZ9_AAH9jsXH7fB(hFQujGCM6qA`Za=d zCV)s!(QzQ<F6`691#@@rLW*E{f_Ih+i8iu68Z0X^?64B&VM;4sM$2>At*8fl#b+Vt zH0!cyl#ZGLgwq#oZ9mT4oSTecrQaV0QTV+;EZ(VDwkAX#cIk#0c7E`2zoxR%fJi3? zl^LE%*)PJ5IGI-ePBlIUFP|#xpfGxW2RlQphd|FF6M_M-`UoKGV@fE$yhN(cN-Hn; zj@#HJ<==sk=VyV*T&3JkU6>tt9zFSJ8<k&LM}?Ow!e|Lb<+f0MSF+TVJTJ<YnGET4 zl@)(H&MpG-`ipBePM)<+wvEXI{(+-MV*`tJ*((5G&4ERP&M#A4p!b2ys{ZY&08c3N zfx3@Buib^)bCBJ#$ab<fjOU{=5!MT5WRyO#1mo#(y>yE%6k!a4Rcsg5Ukr<1q!)kf zO5|sTZw(+N-B*%(^#WFULWhxgj951idLv0i-lh+?kZK<Ll=2$xw>DI4`gsmfrz9xT zQqBCpLQO(YwtZ<Usm=i2;~n`HoP<FF#!&A|4TD-B2UXa(71X7O-%JXQy*|doc^c%2 z3u)o;eF<X`t4FC=C99GmdUThfN5fcy)}Ke2(z}-_z4+JUTL|hKS$C%1zi3Be{jX}9 zUPScR$ae~nG7a=sp;&;blI6aCRebl2RJ~@SKj?_g38exUrsiiBxl=VlwM=<bCDFtZ zYsySy4PI3#BqXuE121sb7Dcqg_Z)PfigvH+>RtbwTCH*{a1rz6t|57ktiHwm75cLj zS0+zgL8bU2{UGFdXqmw!&qKrY+`HAvZ^N+ZP{RB1k03QCFzYBaq7(K2D~9|s&w?^~ zEG%gaKcU!g9$>z0M82RgB5N@lJ1q0~6&C&3ux)WA((-%B$OwSNcIgIPjr^QnMRm1Q z*<I&kSbKBVXUkfTz@5^~`%4+iKoHi;_Ng(zqk{L$0zgC8!IY%euLKx7rdJszyk=W} zn9s|LPi$HkrO4BZ)RPun4Wi@7eH6k)nr)jAxn#z!xNil2u;XH`#^p_!sx$>b1{f8C zyv<F@gqm_ocWQn=RCiFPA`IL)F>1)od3$>Y1JA^T<QigMf6rr#2|GpV+&E##x5Ctw zTC5LLwye7n=osL^8DtEwuWKM!85tE1XcN7HWOc{)#nSq(4#SMmvSZgAy?&FuuX}J8 zU7(@(GW@Zw7v39sWjpM82n!czNV=xS>OB)H5Xx)b>y%@G3kpkcC<|Upeq?+~q-yEq zWyH1<?#)ePVZLpd=cG*-l19q<dL9A#$@Vnd24z2ZPc6U`3XOwcy<PdT)}0WX=F57` zoO=jGcn*|bIwX>2%dr_Zy3*~LkNYTsVHMjH`FXm|`YX?BrE(PpyDDMAyeXaB=;;Is zsA1=@)#FDkk_%5;@-zzbRQ_zR9l79Pu85Tv!LWBH@KsHe7W*j@hwX2Z0+9>poyOf_ zE$d1T-So<r#(;P%BYa&36~qTse!alsgeNMi_-;%>c&xsegT9w_O6s6QKChtM@b~7+ zGM&3e9~P+euCG6U2M->??(Uvbe%bZ(d1=+3GWGqN@;eB=fjC3G1$kY~zpc3T(to*7 zezvkmWn}dGeS}KIKD7pQ6#zS@f3t18h@NS@S?GB|<$AR2y6V)gS2b=6{Q7NJ9+bx! z=~@F2xIc5n*EW41P+ks?2we<!E8vC@Zab;2Q^JZ%TPZId!fR&hmJRO%Hf}e+Dl6LY z#F$|^HW!PzXXU;#mH#b)vTvvYJi#yvFwK|7D+3xEQK?F?a$#=Hem`GF<QR;IOLV>; z#{d^&f-kx4BL9sb7JgAFe(hi9<3*Mrg{)|~3~rJx-d?fve^3N6;yF|GdT-Hge<UX( zmZ|-81$N-;2!+XB=~WS-yn-k-Z3Q(k#c$H<c@ILr4OQ9uUDE7|$bH;e)=jYwO7MP= zc1g719|*mO|7fwEo8-GS9K$@%z#x(+w?_91@^;-cO1Yc#0sP3FOzD33@KNsOytA_h zQ<>7+au%CGA4;+VD)BH(T>%lej@gfrP1jJ!(1mbsqwkkZzg@jvJO2Kf@><pXd6YDp zIwziIA6f%m0rdGY*WE?5xV~^Np*UCVyKUt0d|CEeTDDD{{oFQE_GMMi)}&r@LS^th z`ORF;GUspot834f7T-elD~G~`^5n`2U#FQvKnB0^w@EAL0`0bQ!;PE9lPtHCmj|)3 zT=6COkr{jZv8)}`%3(5CQU!Rz;Vv8i<yc>1Ossy*D+h9G=GJ3ZIk8G<g^lYi6=#1k zUu&)y9KTWK^-ENY0Yl<1FBk65IQ7x=Okw>^wuLd_yEq|0;t+5ZaS-T${VUH$iZLy@ z!WTYHzU+_K{mC?b?O@aDX^i1T;dHvK^JfOz>+s?zCbN6vBKtipj7s$Bw-nwhZ0ao% zNhO(oT4g#H2;>o?x!1u7h6ThuLs;JO82>vN6YQ&gn{vnD-Er#7Way@EpQp2}c$rQ( z+ApgxPG7XO^%yocA33EP16#$;)4y!S>$vEZ+r;-@h?(q^={h+1M68WpGCxOD@#WOq zbF(VV7s0x&oW0o$@<^3{W}QQU=a$bt`iGysl%8J#4CQ(foXPY|>-oeQ_ALfZA=KX5 z-kEs}4DS6@H%2-2o#LUVPR@R^m;wov-(@HB-SP*7a|4I&&~6McL@dC0@qE0nKV^m( z-%Cbee~WBKVC5!bj}4!PVR^Jxm;m%goLmag!C88lfGaxr;}%nv-tZk+0SZqaR!)>w zT7NHI#ChLv$|TBj*P#3J=RWrjzklk)^#2gt1PMU3twHIkD93OVOGq@pF$-N$$#dls zr$L%ObrSrekP>ovwXmO5lyp;V11;>sRdByhNX;`G9MIR*1jWlVQ-6l$gn~^<(c520 z@-V?Ymt#(0Fk%nz07=PHzWNBHu2}Bo?@OKRHVFQzSceRygOQ4GwQdQ@68X_GJFKf5 zx;8(2w3Q3TtyYU&w0M^O24JWPAbO~HS&P#rdkE6+1Js<<)}+<mPeWU6`1yz5zo|R5 zfxT`gj}@Wx55~{v^$k?w4fLsB^jjwcRS^UmQ1=1J_BUB>>;ijVRqq_KztzObC_2Yz z3^27d-owGPfO|VzD8~qw3NLSyV&i}*Z{j(D2|rzyZFhV32cCZVgKx>XfD3p~tI`eH z+7)XeVKq>;MT@UAyioiak_U0=EW>%gE3)uPkH#LP8n1n0eIp+O{6gF0(;z9M$EpQ* za-q&_a`y<jH!+REzw=%(>PhRNAXt~zCzR`98ckweZ1ZT)L3dvs9)Ie@)Tb&|&|Dui z>AQo_h!FH52bl}xcou)Wfw%>>JhD8gO-W`pvFsBQPm{_zx3*bvR{jTKy>Ei&S=XCy z5@)M_9<j$6$k*;r+5Y$Ul*4NpT={J-n5EwjI=>Bci-9j`zyqVfOrU@2&hD+mWd3e! zk{c#hbNoAG!^dbrD!&j|L5egdFtRfEBQ4#d`->ip`5!#kgg^S@`}tHxsQ98XZRsPh zkvHEzUl{UZk04A)ft80oPN?XZ0k!Xytw{?cXw&%cXr|ycY;9KM;E0bYZT=G1<;sN~ zr?7beDENHjM`LQPGpr{}ta>+*3+M}*YW^WAUfA$hxz0P1s|vIca!+}4r2P8xbGfO< zPh(^2Ze{Ak%%{luTcvP&=E`p|9B;+tUkQ$LifnKOQgnsoHn-^F9}NXWMVQHoHc=n& zCrxp225BOdF-3pO$t9c(93W;PwI(73N36n?Ji^i&R18?J2-y&%B^com0ROjl|3A;3 zoL%@|SQ$kDUO})B^uYzv78A0eYN_EC;83y0=}nldh37(HRa^sFfKO!>VAHq*P?|3S zX|9@FSCa3Er7JFvE29omudD4@wCQ!CS~0edd_B)D+7fxuk(=Pp!X`>RZ2GY*Q{G}3 zzU#wU4)>GbjW*Czx#Mq&@js$0srD$?Z_=*ctS*A;)kf25+{jDoNfn&CH;*_BtiE#J zwUH+3%Ed)`@A`Obrc%+wKfe6lAol&&pRDg+kk|7hz|*q;vM?1phI%_(`Q?38ckf}F zpcdePI59o#qY6vv>dNvP8U6QP{rt)i=CnOfxqPK(QLzRul1s`v0M*J@wEtL#-2KBp zat9R$whYz3Eq}IR)l|;cbi8&tU$soWZ+CkqvjTtotuhUbA}AN41^AX>(;`_GPX^fB zz|j*knKb#ak`haXA0Z#xnAandhe=z`17g8Gv%bEAix0J@JO3*v`+!+j3-IJZAFEGb zV>ztbj#aC`f&i2?D1=IHX#K@J<-Ve`b;XqPx<POZT7u<NNVC%mKU!QbNP|O(5zF9i z%P}0K>odQ12%ZBkvvm2f!8s#c0}w}En5?5C7u>M=tjM9kKFi7~*L~-?ji1)Wwwo%o zf%U0rXF%)<j9)h<Qj|@c+CarPVAF>T%%BQrRiHCH^IHD<xo0!9Rd^o>-XGQ(Q<uN& zRASvUWVN(zo6>uIJNrON5Vw){EZ7ggTnNjuxSJslvXV!SX4C3mP^-;{kKo?@jXbDT z*M=Sz7HZxndCl^>@8jLEb;>VG^RKF`s1r2$^`iATRH{`{ylqg242dr$yq9Xc2xSnG zEv7LQ*@Tw0aTod^Z`Vah<xd@oK6Z%r$)uY9KqHnkJ0De%$(_D5*{YY<7HeL4Vq6ML zV`}ON-W`>?JG25{3Ou06D8iNBf>O-Hm6iOVSy3rQWYUW4%C6nWbv`^$dP2H%E8f)u zYLzk0L+2hS`-Hux3h;!&JGX*S|E__d58Rg0chFX_@e%%5Qh<wy&PBPnPA)4kH)!J0 zrCWy5!|}fW|MFk{XG^U%e5ANOy3TOvuS5!YrgGoGvOLgK^7vh>sH$*pBU#H9&jx#9 z=NwQX6-f6he<d|Ct3M?*bdh9}%G?vva9`bp6?tvXye_AEoPlvbD2l^BX<lBl9_}6` zHO^Bu#1L%zSN?#S-Cju7I3y;_#*T>zPnNbT9RYRA{h^6lI0=>Iy+g31b^rB?9}c%j z5x#eCBVR{1XKpEzf_v$%S5pB*rTuyW*}aKUTk*1?6IE+RfLI;V2l7_kc}%aH>vckL z>9XFZbC;Ipf$u=^1aDgPo3O)u=TQ~2_T{sYBkA4heXipBXXoKX%JrUYVEi1xx|Dlj z8Dl%#Gw@H}0PAoL>#t}jqCWI4&;W@JL0kDcne<85@ciHTJ3o6~9=oz~(T1_DR!nI` z$>q)#E{*t+R>FhwZOg~?1=kXv>z6CRtQ_O&U2gI9fn@ieZTwROc>h?_ntgKV`P;HU z0A5?8@xpA}a1JWE7cXA4va$)?NN^vPx8md}9CNY4_Fbx66ZQoD^w0jnFSpv}BYE}7 z6;i`1Pf?eN2Bw(SsJNAiP;QGHk?K$guY~~E6=k28nSuHFQ(yyeNOt$~gG?el1<yYK ziPN}P5IqEe`eK`$sLqvba7^;l;d{ZaL+DT@S=xADA_0Z`E-5H-rLz?7CZPhC_v*dS ztnBSDHOmoR4@Bfl6A#ow*4|jXm3mJ(7~ra(Yca7s!HaMF?xwX*SZ-Y=d84#2J<l`L zFGTNyuYW@~?BUA>Q7!-<?$U8{J}dn*Gd)!XZ%dH;{zpt$Z1gLKRDBZr#&cZup#N#$ zYRNQ6>3xo95G=~dgJ2~(`;0K1ha)Y*sU~B;l>vT2QH{In$-b$dc=Fr+=1)*61xJ<g zW$E&~l9hu2tgaenY)L)kTH%WueYgj7R%Q$3VWA{P%Q`4G=m(pR@Z5i#UBX#VMoQP( zH`D?=+4#Q6z^%@0uu$)Yc}2Hq#pTJ5!QfSVd`0Q*Y}^=);*Z>+vEnL~Ujp4*{M1Q# zrT72-6k2}^<+ms=a`iD-H>36cTDreb`Hd<Vw2z7_OEEr=^^K+#Vko)c(ZA){d0lCH zT)c_ov*|-pX^BH<{BtUgiL9H*zFyZhTIHADlr57iKVOf-<T19<6CMeDxlY?^Krt>1 zR=pVL{dRdN9~@2Oy>g3ccwbTmu|3j<BUXx3el4q4Qk{0T=2I3jX3uM>zE@1Dthj}Q z$EJvsn8?T_S)OL<k4v1VugoS?MvL>6wRB%)$Kdr!;vD;1V;o;n-+uwC|3^tF5hXGt zTE5sf?%EY=#o-ouyqE@>zPbJ>#6DKhE><%{E{k8g^Sa^Qc3i6QB?VQD_?>LcHM3%* zcTBrwe)Knf<Hx*GR~T2&Kypjm>53u4Ng<O4!|<XHkq`5Wc^Wt`NFzF4j8J|pJBFUN zVV2?psTACsvIfe?$)xz-QU!RjDZXUZTUBjnz`I2|xHK8*k%K@nF4xP5&u(AdQ&+e? zQ>AvxgjV1iu()vYc~-2up726=8t|*MA|k1{C%>On@Km>vfbE4@UnT@Sm+qm7_Q$e+ zA#!0&n(kNwpK8@?sMtZNz*nf;D^zt#aq74VVS+>I8Ac41YB*OkST99z3aK=bG8oUo zi;1aFqoj9dfa!U>F=+vb|E|7WwoTu;gQs?Ea6~wX<+1dwb4joiPx#p)X@gPsE7kqP zP5XlQyV&Ubr3t3k8#6Ea4*~i@Rug4etRnQ+0pSM)CVKopHG;TyFQ7uqHT59gc~R*q zeN*@QRKIuE&idrxpS$U6N7IkDnmZ~z)fQlDFR0Q2Sh0h&)w&yG$|p6UR$jZ2Lo0ZO zQdp2mFh7krt6$d2Zvbb%<Ga57N6`p^f46Rtj96NMFI~Feti6TNWJOGOL<Sitqf#Vj zAf1_Ab40m?*pMD5m0iQk#5ASofw@8FLuI=5w?G*+*0iR+qBZ;EVq(fJ_ztb2a!BN% z2-4&x4gEn8pJ^MF-W&ONVH*3pynNT-)JJ#z_rLdURvj(5E93IKyljZvNOT>FoAYVp zz7|%7rh2?}OB1FQQJ_x+mA&s#O<bMaU)|FSo-bWmw74dxh!oFVYm4MCvNS-bqK`&A zsnOz-XKa2I!99tkfl=Sj=%~8f)^EF1w{QIJM<T{ufgFpKKF(DWrtT$=eU<z7H2V1j zrQVuyfo}3;R0}kXZ?jSDlJf25+YQgv^CIMVb7EImebT1a$!(8)CZ3hb#UU~1R;u*R z^wboz+f_SD>iZu>&6TQ0Ol2jRqxU(0U1_QUs67&D50KwyvZx4!3-liYY0EJeXcBYE z{xs>@%)WK;;6jBlb|EHsF4SjM6v^5s3-^BP<A39uQ6?;0plJ*+w*pgS=t42Z{e>%Z z;dxj!#FU<m?4r4LUwO&geOss07MEMTLw;UiC}ryUMrwrI-+Y9Nk7rNx=Rp}Iwgc_& zRSWQh!^S(<Vza1$ctuApNVaS>q8~T~ze+2_E5I$mWm<l85cmp}-+%q}*Df1Ue)Ed~ zfQD5|)%a0Xti^uom)^o{A>J?=W=)`a-?GMyYfE%~h_A~uzO>2Q{z}TFso5PnQB7LZ zplI1X>hu*C8*~sr<DVu%zXFYg@Ql@`IIy6^+H@P=)$l%t6ViHNZT0?S@Q%n)WnSp_ zeh!vc=T%Di4ey&BBVUt1@$D%-j)YW|m3roN`h9SvT*!<Fo>2DE^}Lw6YNO6VU%A-8 z3LQU3Y8fvd(&vr3bA)oOfd(Oq66Y{XE1*&=uxIW6-QV|T;z>Ndl($D|c^v#yvZFAX zsk+g#T)u6i8;s;Fq?O;`n~8ktm9&0jC0oiL-kNLJmlg5GDQi&^{4RB!l>Cc~RUhK# zIQyUf=b!m7ZLF-2;!8v2aJd3BY>pIQK0Hq<z&O9Jzy9hy`6n59NAhAb>v4;xQ#>3h zf)wQgvjAtO$^PC3W#lZ*&%CV)@C1V&t0}wad}}T~YVQ_exc`Sc&P^bmr`@=5BR8eW zil-cxL6+ar?YVG)cDYvg_}?4QHtmmuDpvERFBW!18Yqf<W%1r!y66h<d3byi-%|;^ z&bNW$lv0FKHDX*8uM<m205oB`@3xis1)^wcA$1W^f!y@C5iX9#{*njwOi#7+?l17^ zHlm#P*;8FQ^eFwKmiwU>scRo4p^|80F0YYethlFKR&r^*?`u3Lgb%qLDuRI!3QRCd zzlbBJ$@d>4_R|F_pXF}9{QEayuN6N#uQD25BMG`aFHV+dDk;%rUj(KqS~XBAyT+#t z`?UozB4YK1|Mvi2rejLgrMCXpO?BGXc;RKSJ&#~AQ6iW8@@(qk>iL42<kgUPQgMW! z?|Xo<i;f<*8j%5fCy=-yQ@Y#$#J;;qyBU|u3_BN3Z_iBS(_fMm80E%7W~A}Jm;7Hb z<H$;WtXxv@PKGtCy(pWB!qQ<QR$RX>XFp-jgDbuEz^uS~+xVvn@aS2^e^ddUY<PX0 zfBekV#o97ZfES&Zpl!;ryequC97-#W<$(z>&kakHn{%r#PJcw}SO2rM?`gGK&*z1* zM$ed-{FM?=*tWH4>xvh0q#_l`YN@`jwrmv-Kv#Boj%X86u}c+ywt;9B(ORi>l<BFH zri!dNCeXdvaYaLBc-8^wb#bz7veh&L(6?|JY54sv_oZ;f(E{`#0ylWD10a<?wxbm8 zDtXvj7V8Oz@-?!3JiY_PT4C+AQA@GBkLstvU*^~^84=iEFk+ugGH-+DZes#DmyY=# z%VcWHtWuGwE0r9rm!32|m6W<1srr|9U{GBY)RyILzHE%_KV#=9-;i<rAdV<KUUXk~ zK|e({|BdpWn7@qCLrt*suei*`(xY+;oy?@lmznGFowO!#XyT!zo~UI7%SYHvcoca{ zu%+)1!1U}OYf{VlYV7&ndH2)LQyLmcNM@wDf^mAJ(h3YwNLFRrv5WM|F)(=-#M{C5 zJ4M<G_i)qCJ2(uBi;K{np2ew<RzVpV)^>jrmxH$T%J{=S>Y%xgOn;OtL-w>4<9KgW zzW!pGq#G`hUs-ukWrh_S?L+Q-<L~`aR-gPI?EPEJZrgPjhK=$4d!Gxh``D5rMWW88 z<t71Cn2cWx<e}%t4)Q1&Zkb0)mfNC8T?aA@6nSt&8g2tPscacYQ51<Az4Spu3;R8Z zslo^#pmFR-j7?h#52;HikqIf;5^rb!BmY`!jycD5&bik2?S1zD^Bd><`&(;X#u)Q9 zF7vj2Vr8&N=4#t{`C^RtWDAvB*)GCf-s-8&8<H@2N;-CcsjLjY`r2c7|NGwGYB2(1 zP|bk6-L$XMEa4F&#~`lvV`OA?v})<`-OIg)A%eK;+jR3NC5DK~3j@<Y_JWTI1P#ra zu|2;mia?yb8l(fUBRBX&5t(x3-k5oRaka7V`7eI|8x!fuq-6^M-6O^G<hZn9m7&?b z6k6t<jvD{d!+%RC?;waVpV?9qb+y1!CGTF(03U)!H#hL;(alua;&H(97=!b2AgA3M z9!J=o{(M-b{u5f!8Q?l+#_#2K)d45%Y)1}mbaCqT3yKjQxjL<k)!_@>Te|&QAN|Px z=`Srdqg*h#vnlW1|7}x6p8`Hsm#hLypyYWapWQ)`IQZ-YBehF(;6=di{_|BweCm$e z&%hNf0rZUC{Znsz@PnVdt^hw=a6T0;_%7!p<f`u$RTqRE4k=(F=a->5xZ5nA6lO~t zJH?;>{Q42}pU^8%bjE5_b9{O0OS=UclonCWZwsylvszxLwSz4zXQBO4d(T8<;YKD+ zQFaN}>1{L&><1c=sW0Hl>2QU=Q|dm*Jp%;35h6>0(gi46My}OpRTu(l&mG850_Dyk z8z|^jhDqSs%687!I|h4<hbXP&cN^0(652`yq951tH+Ki0JIvO(-}-Kzc{yr=bvqh3 zY{U@i{phfV4$8nDFy3v(5=N`BM_a0v#Z{{|<h5MA!XZdyE&3!Eb|~yIim~(CO_V#o zYa}NE)30(1U}g_k#p$!#hiTYkBWdTCWe8)9_DM$-uuE_F#0!}do<1o*iL}9DLw=^- zJHsIFm*Jy$fdj0JS@u`O&PM*!r(?=aD$6a<;xeqdjQk?t_T8K1@9)ADE&_KA_|D?| zF3(p7_~C*v34zZ&pgi2atOnEenItrWf7Sk<(l_c=uxEfb$C&@LROYMhH;4E$@aWY? zZ)@>E#-O#-sQVfNX@jccsj&}PeaY%1n6$YrOT#Lj$s$O<QeMvDQx#^jvLSTBC&ED6 zBW<+}^wi3n-M!&Ro=2gLSism6MQx5#(kNsYbUL3}wW7iN@|np^f!kdXDAHh^@o#5` z<#yud<rrs<d$zM<j88m^eC!<8CdbnL)?;>m?>%^jtN_nl@)C;d=23dk;j>~*))9pQ zpbx{EbOT4oY_v(GOPa~W3BXR@D;VYYc$xacy@W&ssg<_ss7l3h0n(&D-=lFm^C$(u zrVcNEeRgROjzhYANbndPhl$=-$4q4Q>B+EwtO%~Vamc1n`sK+F|1X~Y#VzzJYu3f_ zZ8qa}{&zvQd@iYdGHC<r5JPiTnP0YlIi2!qAt<-l?p!O87ma3jDP0QQc;gi~J%0Be z-u33|S>Ou*itXfA2l!#arcT-!U+L8HJAdX#YIrkowhj0qd?>kc9=0thd|82qwi>+r z^9gwL`0-znPKZ}hS%Kt>i&YRA#4S#5bCCwWLn{f7beRn!!*gg1cq6yjh58hrwsQ+| zwYmq*izi7`<ji<AOdvu$;cLr7!Uq?QVQ0R<l*6{&gw`Ldde%3THA;>H#I#Yg(No?L zO<&>i1H4owa&L0lI>hZ=_Z3^kFH`v}^va9u@Ion_oY}WsqK=uUzdWBBNbFMY;zebY za*Taq0Gm_MA%OmR7X|_VHO(Za3q_dm4bZ&zfk2-J?g2*5GzIZKCq&Zt3I`zSwgBLq zh~{R%ZW7pw!>0BWerFY|f5|XYzhE#>HrOVhJN_w2DEqJ(@oI8NIJZ&;vd$I`C=3@g zCnufxg1WSB5>%%f{EN#X%G+<hy}oOkvF<utSA~~!nJv2f6}y$hIbiz>9N#8MtHWz` z<k}p<er9L-`6z@8XgQOI*Hz&2Vfp;g-{P061N<<72PxVaE%7X8$e<l-KzWninr8Vv z+wv~AoA__8EkbD%RG(P)I<wIFOg#_0IKTh&ouB)05T8C`=Qp2FBT=B1CrZPSR-m<V zo@{xwj!FEXmSFBZ)D=SSVs%gfvddkp$-SiGGec&|QWKY+nZcm3C(wyvC$Of=jD=o7 z96563%u?p&f=nZM$&4M2m-$3m@{Vq1_oMb3EvB7t#L$-gycj=+W~W;oUX5uRC~UpL zO9j31+Q}|AHp#RT4LU5GU--PowlK-X+Qr-~A?bfhKkSX3=-DTvJhR$Pe<q!bUgAx# z{F4spXta>B`ok2Ra3!#>a1;hRJ*qCA+`_+uM5Cj&LiZ;<XrTY}d(p?vz3LZ4@4@j9 zvLMx;nlsXh$=MU7`zqZn?37H#S6=0=K<#To%w}|}Jeb{NTE>>RC%^iuzw!2GKl?e8 zeKQ_;C78cTA}+l`fwvm5%P)TtsnJyB#3ddBnP%UM4p9|NFX%H!47cxobNTx@xWZYm ztfDWUKjQbR1N?x2jX#vuaRE8VmopKlHAG|us`vP2=;dF1^Yh(|UX5QI;a6^MK3SOC zgtJvDid-g?Aq8cC8E2Tvtyb;KV7G{4kRlP=dv}2ng_4@Et>o6f%?OkP`#Jk@!oUlX zs~wLbOgjtEClNtRZrtIL5N#Rk1&PnriBr%nOIci~3SR2<XtiM6yLR?Jk%xwk8z#?I z;oI$9W&Fr6(<febXvQ``xab7N>EsEI+Tky2>)2k`gKA_0Gmpk{6<8+Oly-142j>L9 zY;zAKRDan{G9p&BF5B5=+}|tgho$*$ZcgyZ<Hzvm(W5Y)f!y-yWye~@T|L!atIt98 z14-y(RtDI^Rh(?`K2Vc>uueMJ3Re+oWaf07><)yvT0og>BByCc{E8;v-Nj7y(W|fg z``go3uq~Q^I0yV0inc&AeEQR$Ua_-nYPLbEUo$aEY%7`tBUK?XY`9{6VYuD~eG#~u zwRof^5ngO7Ug3p7IoE5$qS>uYH6R*iu?hl}VG%Bi0MeIXeX3keum~nT1N@2A;r+^2 zzJj0q?Dwu|fBBdHuTMYp#)p1&!!KtarExmpCb)Ebe$iZTweb(P>xX`^t|GK_x6Nrm zc9=cxS6_V<-v7S$!4Rx|P4ulb#KZJX;q^)S<RT>0cJr8K0fmj;Yer5db!x^9KktVD z6Dp1V)qSX%JL)}c!w#wAHG2g5<#$^UIZxVGTHOH1vDWuxo(IIdA83;S-r8PlwYkRA zj@pry{rx}a-vZt5GdMMD<J*)Q{yqa@u!@PhEhEA_uN~Y0Q`rsBay0fGY?vGV&}gBn z%q@0_d-vVzEzl!4oe*wLr@P;i+fr&F8f)|0Y~!ZwbSLu=VLPDjAYovrvt{2-M|Pj9 z4vpm&=->Iu|0JkE@zFO2ye_t5(`Cf~+R~JFL`d5RZC=GzbMoy3x)Ud+asJsq`NH@7 z{lEVwzxLVBe(JQW25;wp#fnO?E0-`{4GzFrAru+JN%*ognpcmdlU&l5jg{Lkyg>Nc zb{q7M-XQ#!aE0A)*H~Zp@CRQ1qcZHe0{lQh&Q{rN(DH1sy!>i`a&7{b*|bPrECNTK z!PtI3hl}&OZGm34scdvvZoU2XcCo<+KJ<Z4ZgjQt+kS;S88}dyEAi;IYqk}H`YX3U zEBYRm@YAe?Pr*CJIEVS22+y;~WK^H|UrKOfm1r^b8p2?(C^#8nOOHXF2PAA&bU6vz zr&n=k(&*pN`K?=}TEFRbi>Tej@1SNUz!2ySiXdM!8MZpONqSi~dOKO86CEpf9ze+e zYKxX_oR4PeZLBibBw{i-NT!Mg>t$*o5g{#h;QTf$8W3R4<Y$AP>tLG^008Vt5JfR- zgH-4ixfMj%k(uHj=@0Z+?eAm_eOJS}+I!kodzZhPo15X5(goZY#tCJ|d9&~X<G<v9 zL*o?#25^+f_OC>iLC0U8D3bKetZBusWbG!59oH^Ic;!1;I^s8=!IxpRt<aw-N9q`= zGhEO3%A2BjK?j8G%XThp;1)<M+&RCu<tU)SDV^RI?ffqA#s^=AJLmVaa9ssH0(Yyw zH=nkFR|)@cA)4)yjxmZbC5~9I@Pz`{(IV~pzn|jVg8nB&I)MM^XaD10y%Qr(H@Xov zYCm0@$$Oe^%c*es>9(Cr+2lM{<DG5zjimf$aHI9U*I$FzUw<8TLlMKHl_@t%Zv8VE zwx4``K8E2;n6xd_>M?lU=gVOUO7DP@cm|rp8Q~V8o%VLC<fyUD!5)Kczj0@GfpC~E z6D8rAEY26|xkI!&#2VtWtIIfLu#XGBtN`29PCNW@7XLvR(NACtKF)op$=!Hp^=ntm za0X9=H_$6`O*u=pykA#<HEfRW&AQbY4-9hItx&C;US43J`X}og2XGD}HvIYbtjkk0 z#3J!B$*x-gt~wQ0VzNHg1z)lIkK;1gh(R00?eBFWgPJ^M`>3V=`kO!afBc@7dRtT} zj&G*G>-%DlE(<ig$g?cuEGxx!5$FJD?e`w6055P|1wIB8to|-=T>*ZepjT-&rxwLG zyv<6EvboA71FLIj1&00Z+UEQ&g6DJiiBEj0Bwnwrhh;^WC-461|K(@@%$=xu%K55L zM({>*M@C^fExJuL))_y*Cd7@<ZfAgFRO}SjRcgr7c0tYnlR#|0c6QP`=a(Sz@zo!~ zH2Hn%T`iBudK$=jG`}*NWj0`5=~`-Sz>^c4O;!UyR8>*MMZah;B(>F5?gFRi$JFto ziDERi+55FUXp10ir1&#qVC5s&N#X0Nh3kGowV+W~e%_E9IlfHsF_9prbAH#ShPKAb zxVX+dSK9gQ^hU{qA5%LZl^=HXE`0I1qf+kz$^%F^!UzN0z2Pr1OSjiv++$0Idn@+= z!?GLdmB)|Z)mL7DM~`j}I~39C;}MYb*+J7`OeD(9onkLd`@ruJe%*h=c+n>}XAok3 zkFo3d>kOhc`A>c&o!U_|n=8V!<t=Yy+q|VR=$`zOU;P_zwO3x<{ls#g%<8Z3iZ6ei zWO-(r^cQ~N7jAjcX5pDHX`S5-Q0zx4&(TfNrCcxG`CZ_;3VaB{)!zlK4)6m99`ttu z`F4BVoM0gkq?5}Y^7_Nup(DI3gxD9}uBTsPaC=|kK2gpJe+6HA?Uf(1g3>z-eF2rP zq87~{1l(%WNGZD-<xQZoI+DI|k$TNIa(bEc?_Lquag2s(Kq}s%P@t36pp+&yxfG}q z%d|w$w<`0Xhyjc&WXr6W98uv(77Rm0*sd+o6uc7TjZ}J(G7L!1BY-HkL_smeUR552 zXjPNaEvQ5HD|8&gMkVQNyco#O9L}XB8snEoD2j!}u_B?%83lHwo*s^3U@+mGl^gcr z%rJDTK-{T=IukKnDIU?nEC53~Iqry@Fnl{r6U&gkKKgEfrTQM-+}t_6kKvWOzvYbY zCF{m)N*kva&$53K$-6*A>griuMgoPpcgDGLQoh(DB4k>rPlD99b|^RdE4b(oeBCma ziJu=pv@<WV`!u}v>MQ?#+x7ez*pAkHhQ9ZEzn8>z=wg3<YJFa8)x{=Vpj?Jk<up67 zQf~9Rg(5GiD3hzl@RA6GXWs$3`}?Uo7QYTx7{Xoaz4M_Dyz=u=+|>bopkTH!O6`KY zGAd{J>>!u3XZFVDat?TX7uV4<9Rb_+mH+nhKmS8FH~7gK%>JVl%0OcWFp-+dY%#OK zn-0Wglk-Y3c$1y@!3b$yC7>OOdKzYw9*Sfne%Zkw@drKkj_PmA5_x9Q(3OTSL7zfU z1nFNBsQLxSYm*EqS$@k&E0x1?rr{Hp7nQ@~>x`<E)EuRjId~LkP>`d9n->FFnd5gE zhN4qC!vmtR|9pWiOiXSYECgDaxPYp9BG;4Dn|*H6bSA$X7(2uf8p`PKiDxNm>oy%Z z>O7>9L3=E2{QC*G6w_{~eJ`j+m9G9qvhceTmcIS?Zk6}(dYiLd?LAg6PKLmKpahpn zL+%0m4hA_Q_Cd8pqyXQAs_`C;f9G;pb(7$-!1}hBK`lo#AAo+hgW3vRW_9CY<`zfD z6M&k~m+9`p-}=jc`7b}=PiZa-DT|r8eH-{Q^-`?m^PI*0Tx&&N%nJ4B9y_r-876Gs zP1=yX*J2Zoas?br&C?7143dO5-gtf4it&YK&rW|8t}p_+{SN%8Eb{6AKVY!ud&S^p zVPNc_CIrOR4~3GQ;W87qzAumE;wx-3cH1iPask%+Uw!np-R4{Epgm%QsO#9VkaM$q zqz#)Y*c#fp^+<)OQ~|xf1slS^5DN&k<i<LdGpWutAxqXPuK0U|Qqy*|?nJzC{*vV6 zcuinOH9JFMjC~ix4wbAk)bFN!qFHdnxE%?=Is5>-s^cOMZ;Ou8$TL^G<AR+;Ju%Sw z$crq?ETr4SZC&V0B~4_AD>D=vJ%f`Va7dYkT-h9S>)odQW&)OHQIJi0q%`<f(Ho3^ zD*)mx$L$<tS3X!qKr@5ES}#IQ^Scd}5-%&fj~_o;FSR<|t^6+Ao{x@AyY)04H^=JP zp6Bl;wl8ziGehe{-^3VP@o{g%EZ(4@;8{8HbHwGajV2%4qChO;d4(7=+(}h7-_eGF znIl9M_eZ|}%};K-2^TwaIcB#Ut82GGZ%6DtwN{rsmM5QW-z!G}`F)iPZove$BZ4hk ztG)Nq@s;q#hhMuJo40>+`K~QoAqAq_zj`-e@J<$gb$}l*@L(>lN_@&e4Mhm>_7A%y zTHpA*!7}>>RbDT`sQwmVwawTqpFnza^XRWg(JmcMKMM&Cs3gqQ)i!h4Kl`U<^J=I? zS}O^wiS8)rkIhq{N;`^`#!13#qPE$fBcb<PHKGoT*GAd=z>0&EnHe!DRWz3z9p;u+ z2hU7+P)3#?(N73S2S2Lf)<&}xZ>?y49u**QQ%S!^Wn{xdPH14%3_+jW*`0<kGAKzn zbiGSZcw3^Y4^h80o|3kIPJk1gakO%rP6CLPaCYuljy1s(jY+{DfSjFdPH(gY+5mR& zPC>LpM8%=$(30KNu_m4BEHlQk3L(TO*hNi8{wfxlbd$;X8|&I2?^N&ugQfnKZO+RU z=f{s8tv5UGm|sc3?*8y}nZkJxZf70jsS|Tuyf%+bkmZc=l9B&7n_KFC6*z`Ecct`Y zJQTC@?kv+XikWT|exwU)HWmbNryu9AW_Es}{_-kt`4rOnZD8XFE6s`JR%dx8SfndO zY`c|s8#Oe0Sq+2t>I|@i+wb7r>L&hKxNe0GftHJ}KKTAm_0oKINcZnTD664p-bd;A zbrl|qVA)o9KcT++TLjITro^o%+JyxT{=0wnAAaopufP6ZdwNDf0kpSJ<5Jf+mRq{r zN-&jpE?n^{+L<9qgS3FYdwKo!*Wi7xzpfm{%pKPT;N^{|$S&=L>qM}RR?tFGDqTiv z!XJPcvYot<5l#VmgmVd>kzQ&4_Dx-ztTzu4CA)l&gKp>2J1#V{b~i@9zGO=^=kXYv z(}5C<qAa^xUFPMwEWf}1jc@kzdSuXMzRK_JaXr~bY`Y`4T-oTy83t@vL9o`B>dh_D z?k+J9OYB(JZ^Q%DFj<;+pFJB+hTKP3zuj9_dF8m1=Ke)xi2&W5j#F{nRE;-@Kkicz zU#@#voFg%oVw@{yiYAdh(k97nfnMM6RDQW`+Re^wn=m-p?JpJ!>TPAs$Rq7Gs<d*V zH<BxV@Xc@k>3{8y{q!%I8=w_L-vXA7FhBF%Hf$3|_HeOxn^yK|q7L+)!q<Lx)gM27 zb3;E1SEz8;c3-=F7ym?W^>=|saD@j6<+dw+hBEu*KJcv!vyv6cgcpZN=U3dkM;s@d zU})FYZ*b@Q{zbnnSyFPWZ&JpJyP?RTTAu0z3#A~lZ*e-XrWF2(#BEo7TRyuY49anw zGBkHUW`j-HW}@CByAWzL0&nr=ve<G}MD?9I1Vs)sXNu;s#gJIvvK_5H#(-4IPCMFa zLJvB}k<4Rj5Sy$T2r`vKM*<u6Tj6Z5TW{4^mNo&IZ2G-rZKZ1cK|8*T*OH!O7%mO= z3^Rjw^5eX0Ggf)ajoX2K^fBjG<m?bG4J91)j3e9cMx(-ye{u-oJt!=Pb~?ezp$6yt zvXs`&Z^?L3$^G)cQthYZ6GnHdyo&>@E;tesaT5}5CtW=`-E_)E`*?kCoK`7BM$TGg zukv{aRZ?KTU?V-KtUyT}E-NLWc}vyJBTN}}`1VV6VIZxS#32?;cwaw3IkH!l=vN=F ztH8fl?!Cg#e8yAb1)3$G>`DZ2E_nH-Z(+B#R>c2e?_##9Yi#6h+7}JWR_NdT=YQ}w z?^t~Ej;DVYuCTye13mibH{N*Vol(N;7U%~I?D#S)vs+~=2-$QD^}s{2H)(Nrc~*@D z&*J>v38`{ML#_gUWzlbMMZ#{mNHP<Ga%U3TVPhz#YlML%FMMLWTrBC*V&EZ>^e#Fs zRAiFL3$xs6@m{@mjt!ROEp=LbFtX8Pp1txW^==8~OsmzxnRZ3+j*n%BlIQZSO%8PW zSi4`AR;Ln2Kp9qRCHO{&wyh1vfwB9Zi-r!FNcw@PJ85WJKw+V^vTLV>%S6wmV8>vz zvqo+sC2F!ZD~FXfuK!8ru_A()HXH=g>15mVpl?1iI_X`JLtrocDu-KY*pV_xn(@5{ zksL3jIY<7!WUyUowVmzVF0}%%J2b4Lcb57|#=qQ2A!+Z!tuQ+j7zz0La=cWGS3AEl z(B)8!;9wTdkAFA>YSq_0#A)U3w=Epugx*D<p74^tWZr?yYP7=Y(4B4`eR6Ytmo3ja zLHi2HdLe7Q0E?a9X2xQ@1dGoA+kRLaTF1y@C-a$Md12Pe;`}mv_=E3T3h>i#{WQ`F z%emj|)@KV>2l#<P8Susx*akb8nK0U*zDpeJ>_*#6#2alwYQ3<agnb5n?brU_KXxZN zp7NF&c6ye_+gs=`-+niz7KTur8)~=xp)e9z*~@LwF^=+#EaR;QP64}Pd05jhPA_j` zM$QqnQQic1WLh>o*4*9Z*!Rdt%_qAXg4T}KdJh<;K-W&xNn`+RPQP{HT{7AII<%ar zlEBDelm;2Wo(69dI-qR8py*u=4g>ZqPJkItwXF!r^rn8~IHWc<X^zBmhu#XXjf&)~ zt2yB$#|1?2TayFYan2YbAuD$Y)xprOaGZ^#fR-AcdXjQCM2rahk-VdkEV_rVlyceP z{K|T%)uVOAcZIai&d4;MHgfDnJ0rqLkQu6o;l!W~iycX+i}uqdqsBLMGkCVdervY( z8{IhB(<FvZMj?l;mq~Fm@TFLC<(~hVMbH6P#aLIJJs<vJu)Fss|G|IoH{RlvU%5S* zS>$7S4E$A+a)wt^D9$kNhO|2pwjytrT$wY!(v)5tXr!0qGAxE?-}xrp{r%ZHF5iLg zVz_gDKRr74E8(ST#4B75f>|vz@zwdow)X`}x<#<8lOsjw)V$_GEadO9Z9?iZCG98H zo1p*PPyP1azMDe)3C)5%W9t}ijG*Q|SEziJ*T*j?Zi(EsC<^kkfh4yEEg`SJ_S$+5 z_)?<<GwbXKfmuDiC*2u<;p!$N?;Hkjxcr_0N5b_pY_?aiyTj~wIj#&d0G=v9UT@y$ zb0~Xbs-U!Gd+z{))u&cQHTl%duiNjwDYK=#zyAl{$m4y6?N{!im@ITO5~mU>+T+oH zBchbxEvVa8<aQ2tSHB&Nf8?LG<yl9?)b86E;H7Wz7U$8bqsZ0js@Bu<;cW%wr5>Xs zcYH}qs;7pi$Nf2yr6{wyh*|JG&Bx9~ME8-nGr%S9^1C^&_FQn`r!a&ktl@Usv)u7w zb`=*o+_n&?b|be*=F_+s?&$s9ryuzX|Lf&>*<o0m;W|JU`%~^plvzuDVEb0`&MUdX zPVRLE>kPj%Tc9O;?Q5$p`RM5}{FiskK85cxpxfL3?86^=|DW5F=eh#?K*1<I>A<3y z^^$2goxBXd&9IdVuvX`I`!3t^wwwh9eEaRUae030t^fZYy6as(p;oD&&3@KhLyApm zjIe;Le)CA)XhE%KDqEP#Mc`+P1rG{06?MXVIpw%Z3xeFD%}=0yr;s%IIG1jSPyE&L zc0g|{lqI16IdsBkkQT;<MvyI9K~_pwRD0jh-q*fiUJ5#n>P)c(ueT4I=^KilEeUIr z0F0XUNO_y_q{ka7W+G>T&jM3eM_}@6BMM9%%$4uGfhwEA3A<(-JFv4jE^k85Ja=2w zbv<jvMm*2qiibbB_~>4REqnrc;~!-*cCu~OUDRGGSek16gwdmIwfE-c<aJ)4Bv2@1 zIi3!UevHSz-C0I-#_E2>39%d*=QO`Du#9n8X@s{=8#`zaVOPCGpLg_WK$<Y>fqg&U zO+sf>{X$3AWMQg*#U`rYYvtpu|NKAy%TL((EekG-<BM#6N-(!TgK%yu@527Y;sn?9 z$t0JGdl{YI1=jBa1AJlm?k#<ntpp!&eiyhpzz-9woy)Myl-(L7l?{9>XD7(sswaQ9 z@3HYkSlefhmZ%^4==cAaUA59mu>CpCrFNLpRj|!2w%NV9-MReLchHr>vdpq^O9}2~ zr9sU|uuE%^a(U(1v$pDS#5_1Gl`}sD0%b=&tG*PBO=av<i)~EmJR2-~3K{g7&_>{y zZ_%d4FD`%HDBneV3L<Mgs(k7gFW|W;WmFg_rrZn3L5mzY-eh>1TN=!WE)D|Ts-sMr zCU%X~_a1EBn5lujjjeX(!IbQ=NxI2RT~jEaJ^o!_+f#ITzwvqF{?KTW-ae1<Wa41^ z(=G8*cOn7nYVXa>>i9l>bOWcG$gGnSa2mE@q|1vtD_rVc{?+G+*?DN(v~hh*R%VlZ z9&JQtu5IPc8chTagY8*pB9BcwVpt@(*ieTV64?3JYAS)ZmqJ<)7?&+US_sKYonXLb zhgDou(?0p(f8~dMY&l-XpVnMpaeP0OeEXL@+Okm7dchsSWoxwA`iyciQaHqnN0|XH z+tz0b+6n&d_(t%$?fHQ7yTH`}ewa{Yol!!_VML)-%~1Uq{vO)$oi*`G<-2R^?a!b4 z+;$7}a@#zAwEXd-$Dgde6P4L^(h9b#WU(3TU0Z}mC~(GY&XWj-e{*!CBOWtRor^71 z-w~8zc8A^66bXgD?K$u|FA2f`RnPJlf;5mTLF+7164z(Qh9zda<W>4m0U9~0U!Tjb zaxK{KF@{CNMcm{xc<;f+)W|^OV@l4El~q&55k*XkI<nn5@5UKVbLC4{DTpAGNSPrP z({J@bGWaEgHmRne&oahiauTSQT<uE~0}1DdBttG>Vt=FL{SlJ!kD;d_Cmi)EaMZ8y z^0M}V&@Q!l1drruFGb2}ROhnt*clq7Z$Q&++WI_Ew>KUK_U}jph^g7ZC<yJ6X3GR} zWmgfj4J1RlXiz?4fHjsPb&;WKYc=CV?V3xHQ}U*CXVe8j9Df5{&(aRFwjtupPb_!J z{K$_ipWTFroi#OIjI}^nv~gm?eg%c?TQPwn9b|RZSFR?%%#QHp1b_3+3I5iP-tqZ! z@Ni+V8h(1unO_Spv3S42nZVBPDj>`jBz-`b!rKXz#;}(SEFe~far;R5Ha++G&wugF z*WUm7uQhura1TO#NiK~x-UA_D6*Z-Hm7k4nc(-SN26!!034i^ySK;;7U*|yMVSsb) zIh<MCl!{a<o>9B)&pOBWUJccVUC}dabc^z<*z&u`WXw)a7lr1|7_b<OrjM(-qIQm9 z$_q@xi*F@#eoI;=ZZDHI%!A?M#Ub7boHSe~pWbbfH9Dxt53Y}MAuhul{6YB+updWR z9bor$1iQ<N*;s2KcKmm7WgX5H%YK{pKuble3wi8iZiWQl+3hp9y*<{(mxlGbz2$80 z#+@x_kIxn#Tml4KUMYT`*BB|D2ONQD{D*=sMBnezGKK5kVb&QPHK4~s15C1hwh-1c zz`yf9mOLkwU7qiiw9z#57A<SR@QEIedw25<Hm!Pt43>2N^dEoWd;b34|C3+4GdJ1U z<<E0s^etcrnveTBfA3d*_gC1!#)$B<C-Ph|yyWn^|9m|c{HZ%`e+C{9(DI#Mz(4!O z2VegzoB`Jr;0F%kyxFv!QeYkMWeYUgt<M1RZ1ATl?q!DVmDgW+Yek@(-@tgn_}PYS z0-91L8Nb>_$?;^IO5$+FO<IhFWTa3h#{e0JxZ)wLsM)BUHRh!AOX5Emus8)6JYx_? zA!9WePaM>Gtx3qCYVlhgph)4!bT=s2221)_WRnQgvpx&%2=`rSZ^P{6L{9EdFyTb% zQI<KZhoHe^OYGP9*nKCvTwN*kL2OwQ@1Dad6L?!2Xv2Pgd2(LP0%?$T;uOadlN54D ztMW#|*Zx|1ZbIv5{gD;!4w2psb8rk9*4fC9cG~1_5P(n{?-{h!-p9e&-n@-Gw0M1{ zlY0oqK^-IKfZZCc9H%po+bz|6rZ|uQ5Nn|*+>aCI4TY+wr=z^{J6-GuMFN;kBy3Dt zR;?Z&@QVc75i*I#(Cob%oszAplWDL>6fJ3f_+R<RC$|NcEw$JJy}nxqSoduW?DQ_j z0eO)~)L-2LO&fqXBTOO<+z0sZ2VaNVyP`g$2X!v^@7=zOf8t!{cY&(|{6N93>Xz*s z!HlmGo^Dk077>QF;@bqzCqA)ki{{G+J^?o;{0SjXz)J9F5g_w-+RALlGPfC&(+jnX zBn>ZM9)xRMSVc)YVoD%(ipTL!&G7;)l%va|qIbChg5_O1#00QcAV)S+(grCC3UHb~ zO{Q%*Y@BNocaC&V*>}K1k0xMRyFn|Hz>_UF=%lmlf)nwrru6pc$Yiq&%kdtd29Z?! zCjQBeu0n%%!NdWhA~Hmx3wJ8*CQzL5^`gP@S)awfB@(nNOW=|~zX!Qu_GUtel8i=< zYm8&Vz6yTOv>fx&IT>P|1L62K%%~IC3=HpKAK|mT%Qk0uwCAi^=?VaFdhi_ZyELr* zabD#{8wpTV(!N0+r8d5te!x*Japy)AVzUY}K__yA6DmZ;o&e`qDi020eIO?)>g8x+ zvO%u?S~+EDN;PEXIprTD&at!+@$~4&mxavFeQrz5UmuC?r&)kMgJf*r>d=;jol}WN zvrCXKie<11NGmS5CvfK|0=#?YG=2wulx}Z-9_}eDtG>&Y=MR10^*{B-8?V0u7k~?C zmn*!4(7al`<+++0VoZ~~3`=b9SXX(?xrxwK*tVoB+n@iVH(&q2>%X?)VsfCB9%U*? z8(vjdmjE(pDRMR?Qwz=8;wB0s(rt%k+yuf&ZQ*JQv?2h3Q-#gx?b!Ow!H6%sinb8P zsI(J(v8~b_{^j<#NKv~j;nLCUl*^*SjDYGHlwcYl-wP$bQp%`p`kohp8IlpfBTRPd zh0Je|YQ!GK7%vC&^%QQcoCxz<rkiuYZHWg8718d&H_8@hYd7}GE{(d_=1g-<^}QgS z5dB#%o2stvR#lBL-2S|GSk$gGmZ#VWdH43&s!Lu3te0AyP7v*A%0$~4)WD8lDc7d4 zbo#yPO3D&Bll!1MsqN6pW9|1=&u4MiL9h#56d*s}73(ffQ_g3F>~@4~bad+7XYayq zFI%9?J0OT>gj1CnW<mv9x#jO>6LR{&r;wC44Pk}3{w4Z>n-maj^3VRs7ry7O{k8w| z?|$~PpRENhTcH`t3gY}P6J<_r#o1oVZ&<@6y^VV@g5Wv8*M9H!m!Cg#I-UN;U4fp$ z{ei#t>^tyNmvVd=t}DRz9OSH(2-adppZBeoV99MC{AnX`4npNGGioUDZ>ztbsNVvv z+n<$Txh0nl=!O&e<tnLJzS<RFuWP+by1l&xf1@avm2v3uFl5pNk&X-Z{*>^J(Lf_* zZKeg}?bI#rK{-8ZWJ(ny!sM!V#l_V^xsy&|2%0$R=4j!9=r*(A^F(Z52c->?O+BbD z68{3lQyx){eK2bG)<@JYc*7%=CTvfcYCN;Yf#*|OqnIqwN8@MK0kxt|Zu>iGm+x_Y zHFbwbyabI=grjY$=nYf63D{Ylq%NZ2KLj?O!~R7Mf7>w<CYdK2jyRzQ)Dw2oJ}+24 zVf1Ld$@$UxtonRH{t#En!66y60>QriZ=E6;zTz`gPd(k(q2a@l?#%ipMIX0jHlc1b z2`G=)<}pv0$aQ8fnJ0z`-?=0UCW!bEn{HAnS`2N2EOCBYWybe4*e4M{Ien%n6$)?Q zt7`}%?GOKJANizoelu9?Qn77WQmW2xu=}PB1`*ynQg<KWjSszl`TIL}rtwFg-NK)v zmw#LIXP*)L=p|QuC0rfghXcwUk*m8RuFfj6Q(T@&%$TXXMVQzRjn@RrMFiz<d4n6o zpI8Z2nc`%ScI`q<)EwWIK?|N))rnw)7WuO-OoK!iDo6GV<0qW@h9>0;4W}q6eeooO zvb6$ww=<06q)rE@o@c_yhsBp;1$0VUQtv%L$oiam#vm%g82eosED5Xh$wjGbepEa! zV6TZ8YTS@*!=TzYS`G;!U5*`9I{?#<V@tO_;lP;Aj9a~uQCu#BvQ17KWX}r-M*Pdh zq55QFw`X!W=f@AkR<RjV+3=r*?Ncite0l7p+y}|<*Ul~~?3f~g!xJHUU^&yfIK7XS zPZ+5sIm->4Ik5EjCo$+#r)UDQ^OngmE4Avmmxd055dT<5^wVHxvH@jg+t&i{=gb>@ zCI4rJzv2ZQ4Xgj<JhY{u=AW<yraNbft{C<YD{Q#SMM<fdc7E~%T%FvFjvrr+*tG?h z?IJ93rnlOtyaifrU8Zt#v%UFQk}c^(mi7$H?o0kDq#1bQL$5D?|Jh6I2(#n+qn9}A zo59rqzULseC0AKzk1K!?CCh4Wbmk%07J_p7G@t+FU;Z>w!B2nXuYK`N!qZzD4)doB z5dEuImG&0p%Au#gR5@_FZpj*1az}V-S_>m>8v2YC;!!r^B>{ACMO@oUvp^Vn)Aq(r z!=w<b?KMq9{8fV(jAHIM#u818xM9(`uqa%MEqOJ4fIQI@Y9CSo9`<!H+!-$83iB9v z3B5K%m9n7$jn+Jdt?|5IJTp&W9%;PuiWn7xEL<TjA!6?8GC=KOxEv=1PxBDilp!Cv zw@=6MMrdjsN+-cOsw~rX;3m(UbavNOGenapMqtPPrC_1IIK0c*Uf%BPWQCPG2xmIv z?8IQ`a99?Gu!9-3n&y3q!%$HwXFEb`I$amn&i>X9a50!g?hx%g{qH8LFmT*uK7mTE z{HidV9OY3G!>XL)K{u<Q`C8&nCq{F6>sNl|r$1b7f36UH514IKbF_~gW#S!=W+!Cf zub%Ja^S>CxJqWOl@LkYn;XQ)8dj9%d1^=BF;rKE<2ho0omjI$O4qz{!&^x0yKbHl= za_(0+*A>i4u!3KE=Qn@y@#Dw;X+vsLPz{f_FL`GqHTft$6D-Rpg?V-cSmL2-*=pRc zz4j`+FFFG}f}S;N{W1X6HYz@Pu4piDe0`cNJ5`pjkMyuz61Qs$591|0jDu5p5Pfbb zLmn}h)q}5>tZW_TJn0y<%JN=9I~yC-(H=y;HcN1Qm#)s?4kz-f@ncg=#%XyeIVF`g z+xEE^_%lcfcMHe|Qvjp+i%z#wv_d&#ob!kl8ayHXC?4a|G+EVwLDx}tGJuyCv8?cv zpWRuA%aNLMVOi}x;i=<04*C;Lr`!n}HtC~Y0)OOCRcd&d5~#7reGDd*4EQd@*~77v zcM+e~=_Yhf5nY#HvYNOamd_w9XMn5uRwqw3Z?ig}X!yZm6(9s#pc^xF*G$P{apX3O z>0@NOfWQ@r30yw$bo-Y+`a|FMb0sk?NAP~+M}DNHG`6Yw)R8Dp<;uR>GM9c!><F_1 zET10|eC=!NXOo_u9^sDz-u~oWYkwS`BP>quT|NH8yXyQqx9`6C^KZO?Uxyb6mzAMc zc;R4Yr}#WWbhv-kU^B*`vSSy4vaI~_EZic1_<L;c{Q8&wi_@|KECgJDz3)V*=}6C$ zOh>(UFnNjHT50S;xg^Wdp{4-u{(0^7b_v#{2TZ-3g}_Pup+jtOshM9=;rYc=J2d+9 zhTKL8ljX*2WB}z@`ffv#8zJq-Q;zbK0X2i*`9gDu0h%QRbEK0#`x5lDu0uSLTi}Td zxq0};H@{V76WWfW-c4mrj1P!&jv-tM!!E6}+7c}`71(jwAs@O?1*jl-!Pa>EFV63? zgAVX|snzQE_G&4p$)Ft1XUw4bF`<{IhL@87w#Tp<&GpE6G>@Z8#*cLdX_%!$VLP~W zd*=Xu`FFlr@COcXp-W&d!P*#bE21SXnkaNmbSCJR@}2Un_M52la@D>Q-Tva!k9^;s zUc#0w(2MhHZ-JIa^|Euk;;x&}HnwTlQ5KV*57Ggaz|Jt-z}qLdefv&;ee7I^xH-J^ zk8T0~4!rx?KYY<nuY~6%<F4@HLD@N-0bSEr1oFIt@Su@beTB0NJoCm|O@8T@e(A~g z{lG`RDh2u)Aq3eb2T8>n4m5Y=*RMzcWGlc?nfT%*=>W4ZXXlt1Z0VOP12;CL16-0_ z7CJUqJ=dd@`c^4+bt6WNU1#`3T<)Uy;r29T4xL74kd0TnJJ}(x=n)g=8*9A<FiFDL z3^m%qJV#P2oC6w<c8o<5>SPxMvb>+~MA?cRwDmOF#8ED*CA_ml$+;Z`Syq5;n=6xY zBccb+jxIUsN0s4FV2^X}9UV<(@ql1F(N2!8VB6Qcn9&gYE8(Q!wydn}fzzGAzg%W@ zDvpOA*&&mgvtXMfz;L<okM41d`}p|s^XkVybs@QX0wsUSEP}m~Mmc>dqMJ+59B0Cg z{;vj*BcAsqxdOa6m5fF?z^4+2h7SM;wgguh)E+TTD-oG0X9qoUZkewrUh@L*dtdvV zKl~T|!e98k<w7iZ{uj(#NVXf0`8Lk{`dK8oTFfBu(07aTo59!q#lKj7J`T6|^n^EW z-bu!f;_2qYceV87u410lgm`*q`Jvl)zX)*iwOe}jMR<Jrhi|-o`HQU1f%B!%72Z<_ z24h#syR#jeplGtE3A8Fi<hOvM?azxd{MY|)f9sPsH#dJ<u7)hX%cQv$Xafh>>MUsQ z+1BN#Y+OECZ-TB_Al@1+@)MNRn8qW228k?gS(k7SBCCcBjY!X#nT4KnI9dU=`5G&i z5f3w~ZGENJR>|2I-1yxf>ijaE(;O>}HJ~7~JC30Qh!^_6lNxXL-pd5_8Joo<oneDE zZCC8RzCf65Or6e+e?;#L8%Z3Marq2V8*5Ggh#(PX4NUO;UXO``9kzKB<7B<~bP_>6 zMly<xY?x<%hXBAX5)HEs@KV;r@#S;2IL&A*03t^i!j$_!9d!^Bs%wboV&_8C_R2{* z8^4z?7>H~`eLtOuu(DTrBQV9%`gZi&9k;nWT6QaZ`M327Fg7n(Il4=h^^C1>QrTH{ z_D%Umt@=6#xFhU9=Cl1wXE=$zuIJ_m-hKDoKmWr|f8ggiZ8_7c@&`xtw%$&pKKWV7 zpn6KOQ?g0o?_vk|p~3YMta}b(+w=MgLMlc^$C93vGYF>_H?VltKo%xKsBl8$mEfD3 z<%T{GTU9pacjE(g6sS;k_P_{<k9W>3OsK!=Y-`Nqkt=**ni-(vH%g-jY6j~{HbvQ~ zL%w}R!Cs<43gK~iulgZoeB|+Rm44JN*3{xO#gqoobzu&6)WH#yL0lb~CK*poV1SCw zV#s2{0S;M*=q9EVMgnk5I}Al;7%q<YxJkgkTTg+KH+C8*i|H1o*}Uz8W-f)q9XP)L zqq-XPTkO1_*$Ox}{#$e;0AL<0DIwD2Wr(~QWvOQjjz-d=JC{qX)|;G9qwUTSqv9cH zS2>jCM)nL3>}g=t+m~{FR|*tgx|IR$jI&)!w|ST&#ka56WX53Bo5mO^)BnRhZ{;lY z@ykwQL|&9tI)Upi&i6V?qnj)dzqdl)qp`^zKYsMT;+vqCVCn1@W0-_fOa<2XyTzPS z-Q_3jU5=Nly#im2gT3A43NJNW9pHNoW%U+}6O2BYis#F&Fu=F|$e@xQ_}6X|S#i;J z`?CcM9U2|ylJxaf3^Wlegq%N9EPiR89U7!N2ga+WaRrX@IXb}3ymf@RI*he_4$vT6 zDr|t*a1tI;-({hSip!zDn;bcMfmvi70ul^xnD{vgY-do^xk#2H2c7jOLlit?NM*{d z6-+B*#uz!)mPClh*~P%gfP_j<h)ILm^b@Myf0H{Q8<03PF1>bsv#Q@+S7IlLdT*wm z%i<IaOfp09vmBS&Q5`@h0huAr;~xbbjfg`0y*_@ke!KV1@x8fG?Z2lD(9%lkNRIzG z{G(KY*a07B%QxfXnJ-NA+6<1x;ZzP?KpLd3xiE;MF&F*<tU-Htt8I`xDRq#KCpSvQ z{U8K(CdZKf={VaBUqT{zXWdw~asRkHinsjA&mVDr<L?2Bm7T>YzLgU)onLl}k-wV4 ztG;E?=}0YJ;U$A>BR&AITQbBh54%lInFQI{hy}{+d6twFYwP>3zVjPzz4G{#|Dxe# zdXWr|g>#KFMoW7)XMD+@0bUX=+kX(to*tQ|peDCMMIxTsugDjj0oJCi4wrxvdhdmR zY&n#{^V_9u{8?M1FHkRTd!1|;h=NCDo1zN+R(}B^wb+mpl+`4gM;P|#+4w$gJA>a% z&Bi9d!7ZPAcnn7@Xz|vm4<q2h?VjB*gl~THn_8HrJSA*QLYmYH>AE*D&b@=Xn2D+z zu)4f?Ld=G=!#AW0k*v#b`;c|(W!VC~UTRf7U6dVP*e3<{HRSmcM)z^K)BbsYv@wJ) zauJH|j4qxhpH<DEwq=}HaC#;<qJr3!d*Lu6fPTmC1D^qA`W1DV;aL9-&j4>k?G|UV zTH1N8lv+7dP%zSxI9K-uzWt4F|LK44-}~ubl$T%yu&EMqXMwF9EbqLrwO@bfyWke+ z?>4xu0N-;E=XVz<a;|NQ7F(X31#1<Pbbgo5Ai*|crpN_h@c7Z=PjW2VPSrqn42#*w zAfA2KN==HT4s1Bvw>$x;Goz~wI{lz&@rr?Diq!9zuK;ZhM{ELYzu}6h3^MV-RbtR{ zZ2dXogF4_G)qxN?7OLNf-!{i#j1%E<v|iI8s*poq6-h?=1;ium%w$Ly2a=>urm7<6 z$W|N<;`adQ)d!}Kl;5rlL(s%?WtrnG4l`|yNqt1yy=_X$Zr;~Yr9NYnE+}y_%p+Re zt`;o2XdFsqq&;L8Ae6By>sm1ZlJX(v7k#?ujIovgJ$#$fyR7u`YOi!|>}DKNZ!x|G z6MeR@i1Rr*pqb{TI1gusTHSIAaNaUxj9XWwEy%p{%c<>zotwy~EH8!pS;(X-Owfox zZtJ(>U$(8XMU)!D(E0UD^4%!ZNuwCs?756@Rj(ArbDFBdOJBNq^|Y)4uVK-5fHfYh zzr3nz7KW_AtF**BURQn}9$Xvqo`W2uVt^BG;gB<5xiO}|S@nT{S<`Iie?LP%^}qj} zU%SikG&6F^Dx_l7gsZ~@v2lZB1UR|8-j*}BJp-D&)cB*Kz(~_teqUc#fM1i$s3!`Z zqj#NikZ>k$jSng^BTNbYosg{>Pp=4%%5;f5(Hw4?bW0SqBTk!~S?f<Q&_k0YvttXz zq!W5W*$wJlkT4alfNoU%1cl(JEIHN1Mg-?b5I{bdP@&md!xx6em@RWSNn`SU<8B4m ztzxMpC@KRrS(qE@yXpm}11DpH^w@6Xw*p_@)(?AR%1)**eDfnD60Z@mXmxo%VBVnq zaVKij!b0`gmSi8wyubT65Y>Cxky>pV73fmIQ7M7L083+-Q0Gd-Yq9E}rx2o5=i6tu z^)pCo3T&xQxb3`HFTOH%3<xJU+8M}c-1%U`Pu_<Sq75e|QLB%Rez=2oe&`4O$RArC z<W11#Q%J;RP{$K=A0@PBS6G!6XIHKomzAaK>hA-A%Sxgvyl^nitsJ0gpxY0EgC6MX z<p9h1h$0WHWuhEmc7m6S2>!#r`8WUg2_FB0jTddyYCa`d9oFO}dG17jo`tpF0p45~ z?eGc(L1p$3KyAait+y=zxGm7-=QZa51B?`^t-vfyrr!<LsF*drofd+$DABp#?8a&9 z2y=VDd#Nf+WzVt`4uE0m$uyRUsFNIlZaa?p+&P2`h6#r+ax!v!f%6fVD#y&uE@ik> zUFbUT5@7ufFwFEXAJpqM&H>TP!O*L#4mNfj>``40`vmqQ&TdPzuPmdYg!6q<<;0Hv zlHyN<Qr7iwRu*MEX6?|N4m){vIT|g#ZV|h{D6M$G)C<}e7tzOu+BQjvc6n;Lu-P^U zU36n19n#o%Zj+DE7U=fez5@(4uCz_Miv;_hL8>FRnOCN9bYF{{Um4HO3|u}={f*!M z<`4g?|LU9X2qcxFuy?UIxdlh}^Ptrsw#Nfed;|Cj4+pNT`EX!QTS{p>(y7(?Ef;5z zc!n>0>C1od=H~RXcDs-lTpY(vCIogEbvY!nhev1Kh;ka4HeUVR=-)o0%FBvVI=}^9 zd#yOY&OVAXmP#;$iw;1Zx1hur@%DEM2Z)`rgu#(xY|}M3YQia`u-iYe<(Xh3GFb!v z>i`q{9P?MYVjmMGX?ks&ldMSq&M>f7B)#!4H&(0xM3Ju$g>g9U9f5m0)8*is-~4uY z%6KrX)ESqmse7x+E@RM{&^`F*W;1tin}ku{tgljjoOQ!MheofTAEby=K@dxn?b+&0 z)yJ{h?1zD!CPnig4ZC8P#qD(<W_DFzw_o+8TQ(OA8M>*6`9!!+G!AfWg7DpE@7C`C zZ)1;TWcxIiJp&v$z-?uH8<*?N=8RMEU($1cb9`HYGUv9Z2WtORLjKNn1NuuJ{lV}1 zx#ih>_Na0o7lCRd)eEgqyt`ikwnXop!nndk;d%!6;Q&D!n04T@qiO){bC7P8lf0Fr z+^BcUk-VCGCntV97HD43S=}gwTc{V6&g#pYweUn?y1Jkp&HkN0`i+{GEz9~@3uk~@ z3&n7Qkn1n&M9IIifLbBKnRqh4mI>w$u{zNysq&vJO?U=MgwgpWJPxw#+%JQ746-EI zttka_Okf8))IK-FL>&?Xu4en@9@r+f5<xI>?o2~u<9LhnQ8G*#^R~Mu7$JwFwNdgW z<44ILH}a#pGd5Skmg-Tn&hM5O41=Xv25uZp;NJvudu9X}B^8bibl{9;F|HGw1)?0X zu6k0_KkK%w!-(>ny8v?u5Xq2p#((5&a9qmD1m52J7A9U&Ljn{0B^!XBpK(@F@atb{ zSUP?p13;oW*a*I^z)c=94JoSY!USrb>tX`59TOYQj=YMhI_UQ7+}a5=+k7hB%4_Rm z2&W%6pXCfWiMDgYX4^JVCRT}SQTaS!xo3x8Mc5VYIb0j@o<rNQQJp&!aqF+$$^pXZ zEtg%XnJ>A0MBrKo$t$YxmwxFVKl#2N_(NZ9`Mt9%->aYnorcp<X4S8p47NZQd8g0& zYQu|K9jKLJIkPBaTn&H!`(KAwUwsu)uS3oa0)XE3BohJjl(9q=Js*Zhv(I>05gq`@ zR(ji(FG|zdJkxaPjCf8K6<g$0@tBjDzfE=qWN!N#B%4KN!x%*QT(^K$zByvg33wHu z!ok|b_H&VOG);GYeEBWVS=}R;gmbJ!{LJvDRf&tDC@BpRhBW#SDejC;r?Itcf^mj~ z&PYy7U`mkYNiNfeHI}GbJTIuS1!c&Eal4l=#TcJ-5G@M%-sK3o8B&h+u^NKg0$sXS z`3JD}Cln4asMX+T<(+@!3aQ%yE&H)6iyzmGE{3+Fw<DEJ`}KeNkH7H8{>^{$Pkw!g z605+*0NlVF1B~q3UaeQ0biD!k!N7AAc~^K*z%x`R54S>fj(daKMM)=kdAE*md0sET z`s;uF=YH(wl}G>IXlqk8yG%eG+e<sFT7>y6&+&V6gsTvzRyOUx5dYsCUn-PJsh9B8 z0e<Bb=)yoDwxW0^$EwT7*f~=tdc-OmVUI&x>$TeC{!%Oea1L>lR;E7-dVa$m!#t|| z1FQhdv{__T?P%#y*=EX#kZ{u4P-Zy_;g)<CzfqK2==vz5H|eh7PF~}z$TD1HOie;o z{%@`hu#o_v<;RF%KkdfET*YC(AG#r8@~iFene#m?hn9^KNkhZCKUrsy?CcS^D>z9t z*|2z|>3c$vX|p3^LoN%KJpY@XZ^yAf?5R5I_)>&&x|<jspA9{LpexLdkr<vmyS;OO zzgqC4azJ?tG#IC|I<)m4!DG;NyUqZc6b)}D&IIYjm1b`~yM6YjKKhaG|Nkxb(fq<M z{KBoVf$MX0_7}X(>}uTPBa!#&1U~?{Zh^l4U~RfJOsw{T^l;@?B^f0I!unoj(`rKT z!SOY0`4IW(@y(AHB+Ay2vKt|m@7=jJn_&W~!9`AJsT$ghGmb~alfblJ`H=ZDk#?)2 zb%`Uj4JO>8C!2VNM@uI%wlQEtypvJRd`<|2(_}vu6**KK9&eN0sat{y42_p4t;_>B zm$qhU+s3#CY)kJeiNr9di%4Zt^32$6y_8?O?NYX3##PLI+!<r%*BT@?jbxHk+Kmhi zSx~+gW1<Z6^8=!6geP3s<&X|w@*Y@oKCc-6$V)>5a4uUQ4=OFYlxEUmC~Q#UpJB-K zdo0^I?d03m2Pi>;JBSuK;B}pqa4FzqSR=Qyug2}|#t!;sItuwBns%Vhfj0hAE;L=0 z7dm)-E{a6bt|Cx~2fM?cU{FAVD{vkQ8Y;gkJmQk&F9tXb^Ek_!7eFPy76%%)Oxf(o znBO(WpIKg)?*T8ythlHZ<xSAiSvAftZ*6A#7IRvq2P4kc!4+O=xH`c19HisAtmd+V z%bu-qcvnG?oY7IDozGUVKv*2!CC%qP_c_+{3yHTHUVz)%_G}GI<&UEN^@W0FO(fP_ zsK=0LVHgLktYEidS9=XIemYE>pt|iy6~LpkZ_?)?OFqb7jV*%xM!czy@)8r=TD!%S zU+FAvtLFJ<OCqCF8mR1W^-R=VAlg*T@s6^|I<SopDPoY$ew2g)qgWz^fQYq@attb% zo!eln)#Q{Ib(V#OQYC2<8J)4Bpl2vFtd4Pu#WbRJC<){?J~DM;Nun8O(YQOW|5=wP z0`gDN>9yAQ4tr~=40__TJu6$U$)zEA(s<K&^=wyX&-m<-1OzpqB0ps&dYsP$5LX)Z z=mfe>CCXZXGn(3!2#gLKw*%IR-5L_;`gTMJ70vVde83IL&*^|5u%A+IhgtD(N}!dM zXnuFnJ%EOFn4BDSko7Z+6JXe5<33Bm<K^z4Y9%mbY`;-*K~hA3bSIDPpouQvF+)-o zn~8#OQ;Oh~`@_xY^kV?^t{Pa5^x4ImV#8v<jO#E<K5_P!#CC8Fw<_@p_ZY4Y@I419 z4A{Aqvt5zHTVPGI2nVgGh{K`$O4WtSOxyDQ`Okmx&AX&e<Jmc;-TtJoTO4KT*ahy{ z>NE(XSrzJ9h@)`a@PxX)z(c5iP#C1qY$$0)l#^Yhz5I(zZMjNJsl#i-<ZoV>07l~5 zT6Mt^0UOLHtS9QuB+MBhTUn)Xe4ehMLH5W&MrrUEdl5SNU%w;RmX>CD4w-cn^&6c{ z8=5=H&Lkpy<$3#|h^#1+?Wr?u7cg#^q|6#BbcwkmkGejJA>89|SFgj&u3`**EULCB z>wx~z;*d#dPRm=gs)HsDWk17;Uy5S+>t1>t&Wx#i1khMggp7ddf>N@|#Lk)MO=?Et zKS~!y_ev2cHHM%A+R>k7v^y!Nr)Y(P1OSuLIS08dmbWRlGn*<U>;da^+09+XH8#2D zM)Q!P1dZ)Wep0uO&IKlo+$M*0nEYk>`XZ}@j){vF1{zL5k*r*ieGPOybt=^lIaG0M zFZu~w$LG_}fBy4tE)R>%Dpr9}d>>fVs;~jA!lDw7)@jB9>;zvg!Fm{QZN!HKRx%0O zs@;}_fk!Nz#pn_&LxaBXoBzX4oapqoo4_}UKnO7{Qzy>=qbq^VM`rE7AocH{%DHXZ zy>rG%UxKx~+#0^qGr+!Zv0al+XPWXV1nt+Po`#DL?#yP(7-T~i`<G$Gq~bj2JH|yI zT|mgvg^@5%4|FSUVU~EDN<SZf*)j_9>!YalsL3zWBDK?W8f0cf%yVNW=p^PomO({M zz|41mxA6nJyZ!F=P(usTX!$;e*UG;zk$AqqN^sBkj>gbrQ>vmQqG*ouAhY2?>CkDs z5gky7`N)z@a*6Sa7=5NF7+^y@P$#M)b-Jo*eh2&DutBc|B`r>3C&^+|nQYP>geOA5 z@Sn2kf}%?`bBHd%+9o?TpAJQZolel4TDAdk`|^dFzyOUyl|{a@vS4=AbMUz@YB;RT z=$+q2Q=J2*+rRYl|H=R3=a$u9-qs9*5v>+S;&*E&Qwgt|E8z<F9<D3E4*<w|m>Zy+ zEfa$|mg_=siL2%9oL=2p@(3UOST)Qf9)O`Bi|HFA@^=C@k<`k&;dJt=#!I6zGJL1_ zjyxfnNLQyyGXh$Mw{5nhQbf5dhLEM1dX3U#B44r=RQZurVL9WiX0+kV?a@iuX%cBI zCJqviC5vgY*wx68*=Opcg+7l7Sqjprm0$wX8&y;oHxCprp^dIl0T8X|3X_$zT2|Fu zhK;y(&+3Vl70g14u{jhM3Eq@D?0SdLdMovl%|dr@&9v(v+XN~U|4}raCIx^S|HgmK z0TWC<g>()8r6xE6ejJdQjM&wdBWl+9En!0Y!VE~2;YR;(EQ~sbr&T2e1ziD?-&onZ z#1zoec=|x0EQ_>;4^wp|gqZ4M;(=T0_VzZgqoPk|p?(UjM$i)r7!Nn1{8u~8I`a+U z#}=FQ)1Uq{8rwBp7_m-lTimT_P)q>$CcLfyKM1%s;sXG+s%b8~va?(a+3c5i?s;eM zrQiCUU!_}mYH@8iptDj&EsdZO${8iR2e&|jJlmw}gx_V6c&pg*W#cub%qsE<u!N~w zppSsHYO3EWHI__d!(%i(QWqQWvlf~5<z1Yd-QN2NCA}?dr&V!bV5iF&96OyBIF@w+ z<AJP{gxM}RU>4oeOvkw_G+7WBj)AP=g%jJYb{2gI%L;I0$`;Q-Fao;?spOeJ?(R;( zIowB})~C@Ol8tk_iE&QjYCKpH)A;i4f_aRX<27LiMGE+wtrpJcTKhP_ON^8be)o{3 zh+~uSAM0i~!r8vq-Q!&A&3D%o;IFn=?xSJ_cq@*LgDq5SVXrhwh4fZ{<-dkOW7o92 zas}9i$Iqm86coO{{-6Fo|KmT*$My_3DI#n`-W3VKrbufS%hhFBsw>=MxUK--bD;LA zqvk4#SuP>O>VbYU*eP&+*H`hU(!cZ0Z~pPS(5Lp2i_pF@zY0+&pG!DOqG#_Q=R|}Q zO<=_uX7n$uzbSdAZF_dzs<%x@0yhVW=ZHO=Aaw|=hc=Uz`swxOsK|uxW$w}q6i~r9 zY@01E0dmyPJXhqih67Mg)=ao?d0X<%`lL=6nK0Sb#QoL<gS{~9@{rdwk!7B07HMF$ z^adLVpA=&2=SZ1ij-|yXiNh4G5NBxNgS0?JMhda)8U9@m9t)}eMD&s2&%c2vurkv3 z&N&*<FvD7otUbFe6EkYEdj4%X>;%g`-_lVXua^aR7P!*oe*9eFSV^df0v%>Md?;fx zKKkRQ&rptIi$RmTIllz)4cS(f1zusTh-e$TPDUAKKmMxo>yt(EZjSdNo|GdD(o|X( zKA!yBKlzg%=UbnJBdjR%Jyv417rDF<h;!`HMn<N4h5HXz2l$>tx$p|hZ*_>5bG&lk zE@`ZjD1|^U3+7A-7A*AW=IxrF_}1x|zsP3plx8~E+X+&!>vF1mB1~<ykwVt_6|_%( zAGIjVs(iRruX5wf@EPZVf<Mi}AoDEHjx=1HZXU1nQ5eu1#=lwJO+n)1u9yN;;R2d? zuYG67U<mAh0EAhb?As${Or58+o&6{MrobBv>>iFX;gN%IbP)AHPvVo}+g4%kT|Gly z))A0qP7|n+sD4Jcrg%vT)21$T;V;%2))I%_`vJ5<utj(9Qt*@`6G5d)C>X=d0f{nO zFG_~zJmB66w@!(e)XsT;=QYeKZQN0i!=oR28FW4O*m12xS&Bj1IczchB%=_hnbhxv z3+J^XzYv4EFbg4iB7;OeOz4}JK&+#Au-lsDf{0vfCLs%NgMRh;qu1Wz1j{i!u@yQh zQ?-}3sLjdcv}`+<gd`T2i0y4SM_66qrGe)t{;u$XKsvf8w|77psB(q4oRf$K@0#T< z{#34lSKFyUh_qk-t*`ul?&AMU$&_w^=I52MYNL}A#A1=!Q>(udTcFGBRd!1^<8ul^ z;9=h67HB3fw?IcGOm`6J0`?)=j##%rHl}))V%Q5erpSV??ljQ|NiRufW;snSjTb=W z_zv@T-d+m8UQ}Mjalh*{hU<@*XYIA=tO>yA1;bI+AlZNbyFf(0SP-UWuxJo&^9NMz z@EcVt%#=lg+5+7j|In?!mZgoc-928?vr*v7w;%mz++y%#^79h>92ylwT}m^p)w1;Z z@H})zu<Ucg)H^65`Yv`M+%diKKmhx_`i8@AV6bC_|B1%=F{pkY&Ir4hX2^RF#S~vC z>=_^T?A>SZ<+263?#99T&o*Ch+G2Iy5*v*l<GK1(erWX4!G;cB6E|_3468O;K=&4I z|L)Tt_`W|2v5Dp&IvyBZf+fO@`AO1=zQR3)M{tFE4c1W=f{6z&CR>|p0N?t|XB^C+ zcQ;4hMZc|i@V1k6d^4wa+8>&6B#UBj^Zsl}lpl3A*x>;7x7l5;>8#SVc|$`&uC8G4 zITuqVl_shrtN3cgb9AJ6^i7n~OeiQF|E?^fcA99%z1xO@DULL4<S>#7r<(4i0ox$_ z4E?f>Yq67pBBKeyl`UsWW+Wni6WTbEVKQsf53M=1O?XW9o3IejDI6s48)tl~M9e*< zoCw<t<n<^TYYzh_lEQJz1>y$=7}7DOCeadM&2bT4%|g&tV>rk8UGuAY39@&XGQ&$` z@G(Om-NyT2+z+Omrk&87h;e-%1@Bk@9C3al+hGlN50#qvJrgQAF>d-2z=sB^nxKbn zrf<+(T<NFbBnR6!XxgjT3gS+g4d?8DkJwN0j^_F~T%rbyC(%!Eddu3WAk|Rm_}G?! zrPJ%aj1oA%wPaW4_u;^G3-rSP5`Qcp2%tH$dh0KtNW(WfuVMUMVAuxy`XFxCgMaqU zJ0HJ`e$q&5BXJEuukS|suaZ1qk8BKV|J47sZ7m|YII=`yI}B9b)l9WB+FRbruOY1@ zWL!8exC22RDmP{h6D?wGxyoS+jPBu#%s)!v4+EOtD2|_P8p}wvf2m~Aid!OS_t=s_ z+5Xc+UJzjLEXU4{j(?H%0SFd^wGpKN6GkjPW4Lk{iagRTvd`OJuXOuLj=eE7NrMLL zpfA8iQY5myt~X(J4s`L#i8bpK2fZpP)^sf<D@7Y#?Sw@lppRQT8>U9$27uC-j1la~ zvT5jh>Wao$bTZi0ddDbG)4#Is?;W$5BUB8V36$vaPx)|Zq7nZXrgMt|DLM?tKf<1l zCnkc?^H9kszM34c_rVawWoZ!GL?f271rjya07h&9+iI<zD;dNm|M*wG_^)$Xa}Jo( zAeXJYJJtjHi$oYZ#g`G%S9s6i>Hyz!kY|4Z+IDDuFUbgFsm>q#uDE#n^O9!~BFoG2 z%L3)mqu1V2j-WxCE?$!5JIY6~4k4H{48u#lybWKZZZ*miLuw<rq}7I6gwul3&9g>r zmM+i^sAd_^Td5E!(ijk6=xPjYjb3K?8xaj1c#blTi%91kq&Y5IRf)#F6pYYO@(gSY z5QN1VqQsr;#EuDoYGK|jkzpBBnG-Y7I5)nSq!_s+Sr^&^#1`MwSfrGC&wsAn8G~?| z;6JkX1A$|Gqv;-unbTEjKQmS#r#%GTX=D0zcH=uu@*F0nJSqoM&l!T*t}}!jNw0g( zOSQRp+})6KP<NmyLNO0}AajPd$S8-FVRD{$hF0jz`IiJd?I^{Va0#|Di0vFP*^7xp zK*`EEg0#@{WeJ3xt!Nyg2Ix#S`gywc#g9#_Z;tv0Ua#kX$=(PpZ9=mfas{@7iw(@r zV0Kt$cJvkQDO_9g0f3#Y6DzoDG(QJhL>vzDz6MAK*q;9t^!#E%%&khR)05^{IY{PO zBl6bIat62=p{UZeZ9H;TvpK<)#%<d$%Y426{jb5Rue{nd&SiMS{@LKBkp~u;+VU7C zD8B?f4l|?S;(}w=I>{=Qio#Me(*5@sz5Tq>bB3MeZo3lpkeDU1r8Wc4{C1MhV3*@B z%G-0U9XC6PhuA_U#n_7KKz~Pk7kbpu-}>ga61pO62YMMlgx-F`4xQ<d(J_SESS<C) z#w_drgTEFBAtB#kXfMrVDC|ZyS;1#Xqbf8E<9H@sFylFjmpoh;aH!+D5gok37fsu{ zX8}ymm=28Td0o~Ry?rLm0M{KDB^RRD@n%1R)a*HHKP_-VboP~UESV4mEMp6BVy7_} z$BTLiR&VP&-QNEE5B=c3^i$v!n9Q%v_S&t{mSgb_8O|%*U%0LSKLD_^Thi$(+nuSz z)xleCx>Ev0uk3C<v!!*H<Ku>UouT7J$tF}G27@)!pH_&1r5XjcnNYdadBcT9$fCkh zcT@@9o1cuKOpo*;nP2<d3xlLgjX{x%Xq>(pf~Bll6+ly_x*VD0k8>Y@JvIrNUstiU zkdR%N)sl}n)_L}Lb_e6x7{Nh$Qa?kqHnZ=SnB?Bsa|hkf<+gj;WLjxjP@mM6)P_XQ z8FV~Xit3=a+{KX7yGLjWeU-jElu1Sa%sRgbdgk88BgVMwjuIgcES;!{9MK+=!Z6mx z`(Y{K1h6)$QB0C>a^HjEhJrlI`;g@?8&5r?kdFU7B60|Nmba?HP7UlpojWAuL3I4f z0j~tsf`sFLKV8g*zr!u-6ikM=R^_G+vM5tK$I|0B3h1KWeIn%zD6_!qeDh_Im+6Ih zB8b^ik#Y_{>ifakhFJynOq9Ox7T^BNH#xJN%gF-g7uwF~YBxJ=Y>y3I;bFkl0e%=@ zKXJ4U;N|SDoXO)jap{%J!=S7LUj1GE{@c%g{wb92|E`h3qSLc<5Ho2WyrYad;ST*( z1-vxzg~ll&uBnr%8MKT>fv>S86_23{9xN_SC;z6656UcQh{L5&uS!p9K$i*Hnb^{Y zG6f!xlqv0R3N#sJkw!L7ow?9|_R~mPmXY>uq*{&4cEIED+8Gk*vkDi_8Crz4F)nUN zeG)pu0?sQfzjIaDN6pxz<AMgYDX$$jve!1mS>+8_D)J0FGk47fD!qd`H8?WtvWV&s zPoY)eTynGmxi?`(x+i4AGp*TPCkn=_?R7IdGg7={!VHak{FBZACMpQSPSQ+f#z-|? zH~z`!pCeEwHJmNKkq}+t2pxCKh(_%<N5zf*j4m~u?&%O5*&WhWM|+wgvjEWi1+KAB z!PrBoqA283yovCRjLGo##24F#f|sp+PKrbIB&#5>H8KZ1I#wIbZ2(AHR$yM?=}-RT z|KZK$fxmPjzj$)@e3Iod$K@)=!Y(GJhwbx66Mg*(_XVyF@WX(0W~&V71=c`uo|n_C zzcql`x6#DqS2d2$|1z!*zVFG$I1UP?)9F;w2TZYo4eYsCSO-WZ?O85bbv_ZBpcI7M zH{`@Dq~nv{C$9Xorj`7SfP#F}kO^Q>;ncHk0>u=Dxu^J@Q6{d^G3Z&F_F3B<E#5hc zBX`eR)$zB64;t%(I7IB1QHIMg5sf|Y4sQ1B30Oi=6m{ciG-jg#K-w^`V^X~Ls)V0N zgzRZ4Gl`g`3PYP{6@PmTCAE7)I<PRofeGJ3+x9!>pvKQ39-EOOekP>eC`mN_ZFrgq zr)kbi><-nFlVudrL^Xpk<hBphN$7bva2RHsfTm~X`y$V0Rvgfws}#1TL1FF@ZK_W7 z&XEh&RRqZIt`E7|L6E{FYHa)m3fnI>*ff4ZBdqH+?p7n0PqG0c6;1(J)FMx9dIK*G zBh-xc(W6IifpKJoJ$wsJOp-*0nm0swDJ<KRh<J5^9|)Ww0<ZA00JV>F<M!H)G!VIO z;@a<<MIcR=^?h-K|NQ^<-}%`)O8;)73(!;zPB^$*dKPG*18fa@)cHiAwLxDj=ZGYc zRuVR@@w4H$rDlvQso(#;*Wi^`UxgmH3IngxdSUYSg@AD^+%rZQ=26b&c#aTMc2!)s z^;dxAE`eA%=znfWR@HMVp|u-rCjscs_Lp>s{XU6V#%^z(Y30^|cCShpuh!)^{WBU< z5vqMq`hqibI`y+jUeJ|q22#N6x4!*t$elwLL^Is_u<1+~MPN7U5a;?XELjBTf7|-N z8Q_S1!V1$+0|;PFNZa^vP$#pg^ki%UB+au6jI=_jvvH<t%~6rtNhQS#5Xj^Qx`!|~ zOwj;S*R@Ts_T7Hx^ae{dCLNmba7(br5PhEh_StPc1I)di|7lJkv<X+_^S$Jp#&(R1 zMCE|OBW1n%K9~_@QHPTYu(qwE_i8^vf{)<mKJtTq<fqriav`h)E)QRHRaS_r&Ft^B z@t;DX>t~Q23|vSAUg5n4F;KAuk<mx4xkDW*o#V1ydVT)lZ~V?bxC{Q6P77|9+`h*o zA#sEQxw49$kpp~N9oDr#=sx|V;#D~F0#qGhssG-0=K#ODIKXyE`v63WQHJL_Rv44d z6DE{>RtAeAi`xx~C+ydO<-g-R^+}E#VPP=5tg3KlWoJg4j~(>@pL;h0(m#lNO@P{# zH4P5YC9!*9)Wh=;zR9H)`mJw$OXrJbEg<gBJ??e`x`#a3Pyoz&EqW>`9hxH2^#_OB zXKT^B1VFcp&38D`kCL{Q(f;uQfTPFDQk(2keH`{~5)mnN0!(%afk!!4Abhl;&KQk< z=+f=uk8%46+c?D%D=)!f$8w3o6V}~q>&89WB2W~b)2+0q$twhL@gIP5ls8J{-?TZ< zy*7JMJHXc5k&`!aC6;;M_uE_gNB^(?<p2IB<Y$nqQ#%5?I3yO1Hb!4wjemumaNPoZ z&p}@H#E19AwvMJE%z!SJ1FV1YQ%Ib)IKK4^@PGAR{mPTm2|uQZLtQzQ%7mY-Gpx3@ z%sRiaBptva$$3k+iz^Ih!L1c*<g2stsM_&Nhld8?RG6XitgGh&au-qmuFs`Ds(i1E zK*TA<+=&zy0tDUm+gxowk4hWFS$w<L5n~8=;-qah?rx8s)4h9`@j+<9$^5D8?ZUX| ztg!#~<etjPm=JtMAmv5L;<n6z36p8ap#y_XJRj|)zNS3YJP&2eLKB+K$WL-GX8YVN zSvdZ=2aG!@)qi@4h6#X?G{ZiCVEofafOdjthX9Cb0>zLZfpexOq0G#DOgO*0dg-Kr z&$#DWd_U;29?iRf-)br*kZOk?jSLSI$ciXj36YAoH~t5ljC2y@Um%D}X>FYxtTXA$ zT(nqJ3Bqm~I+9!_`)5kv+CcCZ#k2nzZ9it778~{7`nUc!Pbx|x$ur3#fsL-v<>k59 z#I=g9&hNv7M{tGv4s|<*5KJV`Hkd8Xb*psQ{=tJ<iF$c?z!LubANj){qre)~tE}Li zT4}(MWO`uCNKu1v63YvePZ&8RDvV2Zf{B-mD7jCu&{uN_H39;~=wVh`+H`8hTZG{# zql?E}%T#RxrD(<|RNI~)DX%c*Iu$Z9In!#qgsQPDN=Bmk!_BCO%-XqIq_=;a5p!v^ zNdSJA!#GcUR2RFkGa{>nRGb9twxX!yTEDsn^v=`|i$H^f#x|8AL^gjbYtjj(2xPG3 zZ|y@aPUF(_NLYfFZ%8m%Y@9zG|0WG#e+-`m9h7|QdPsS`s#6+rdnkqiAjTPuCF-y+ z0-~{;lnvTem~(Jj^t%E;({_F30-)~QP;}>k20~2UKhh^L*O%3*BcmM}Cq2TAu5~nL z!GFyFfP(Vat>+?B^jLX<D9nioa|DE%ZDm(THL_ZW;2Aw#lQye*>%8|SN)}u7?&lYm z=j9^UY7C3}ahRfTe$!7OVe_8H&i@te6<k+<?>We`2y%K0#cHUy#cqvS{wXtDax`0k zP{WrM;M2{`$6%VL_Do5<-F~DpIIdt$k77|`VpY6F;gDCy-+~X#9Dg-vi+9W#jv|L? z4y-X^r7)RilB__74oz^N^f~&x)q$yrd>W_i8kd84j7B1Oz6^*7iymPS)*Qk)WtY#` z+tuL~BQhU`k+G;}-@zD0p0G60H40Sk(gh}!n>@l0GqJRRkO>Qh)ztPvj8{(yLN|Vk z$~wku!{i++Zl6w=TAjs&?>;6iOFOxPnS@kEir?McRf>hqI5|8Fd@&Lhc1V^g`%xoF zy9G{$NkruheU2IDcV%-Z-`7I4a@1Wu2ivmphdcN=Pol4UqR~K6r2+TfNQ(w|SuI#$ z$AKdwrbc*a2?EU&xW*PZoCP4VWdx+N=(Dx>ibqfuE4{(ud*B3W4G^h;S?Kweb@N^I z$8#dqR*kkZ152c4C!@tFSAj*oD?A{$t^hwg2)}h^--|;mEmM_;XU@cB0B=VIQj3?f za~uchY@SRTD<PS|<3Jl+3@mw(gIXPfjTo8bX-fFq9BF=PWhKY7;DikS!f1*di$pJ_ zQWg!`fQ(3tJ2Y^RUJ+?!j_ZmYBF`NeW!}<yzN7N@&6o+;RR_>iBZ3?&rQLnvXtj8B zepn%To+_2{_h>hVOww+@ZccD><4L6@jUpfz^nN0kZe4>Wwfjtjk}(2Tna>Z=d!hlt z17KI{-0Iy*vUWUBLSx4usL7{!UFc9Kj~vbvMTb`FKw!s9y7D^<f@#&pioA8MBk37t zY<y<=0ea4LPieLDj?n^c?FMkJ{G;-}8QcfJ+7jdRXA&$R-44EtiHaVw==U6J$cj+$ zT3rY;ay@Uc(9WSAo*sC48d0vcnCw>o&G|3?$VE}N^6Tj4VJKf&k48B}-$!hDqRlBX zJhT@fko!a*XWNx`GD^o@a0$^_Vty`PQ9+Xzt}DS02d=I706<=Lg~`YitH5eIH26Ls zg+tvg{iWafo&Ww$0X$_~25;y9Z}9~ww)B;dGXgqBlvO<xy>G>FjtkQzs7`RBt;@0m z-kLJJ{`zb1>MO56>iC8rGy&!&SoRL!4f7E-0vOxOXBhEa92h%<`u(`Ld2WJgrZH@V ziuaxaY=1rJ7Jm+0qDfnM#^zU&bw_Fn!T_{4W1PTC0*<3&4ll!uluO_G*0;S}k;P`Y zI>HHqao>ms#=We6?9v!9;Ed<06rjWL_Pcu&$mZybM-kl(aX2lTo#dE?Qi5~<I6tm( zhb2I29(ULI4lusPj(o8Wukr3d2272D0ewiC%XYXqC((7&a17c!cA}`?zH&0@nYjdu zNn-IfQH+(^5A5z4iyw8}Hm9)Bkl_kyHgryH!vTudGIwL*9l{W9PB-uT%is5h{wShr zNw$C8B2mX4w(&sMTc95dT(>~qbCBDc?SMDu8>l$Sawdz<N03HI65nzG)*E*zp8E4W zV78aAptX)|{vPUWC$hkaB?_}NVHRwAsf6wJo;n)|I;{SNqHZMrD1IeMc+bO_1?CSs z>B;2r2`?bGqZ!aL!9YcGt;&_(p}dD&NoP3*3{xKi&o|7y6NKzX4y-*td&v3i7$X)g z(WG29)!!%awk()clSw@Y+oVr<HgPkZWCWc-f&tph)IAFE%5Qzy=!rqEjAzKlzjR|O zpd+5-&M+sCj3e?hp2eASjKJ9rOUbHMxgc?tGQK06(R-&;d!wI{U(b=sitTS#ccxMM z83no%|178@N7XT!8#!9{wpIJO+8faD7|tK1XdlvwqF(MWWsTk8{BHTB4voeV>yjL> z!w?pMV|S>il}{7br9lB5V{f6PEpk`e5wr*)AzwDxXvR6VBY(Ga`}9j+`qC3gwb-=$ zU0-Df+jGH<POJ^D&hNv4s{?$`!3<({a>;CEL2_sO8wxP;(ad&Hxm3V|S<PkPb$eUh z6;5zz?em6n;u#WEL(~z@g`sFhS@M7iU5!@(4tb(_Y(86_1YIUwBfTOU4+r_`bINZ| zg&LgHXTEM3re6BF)lc?^QX_u{%&nAc5cVa@0C}T(h&M2B<bNgb#X#11q<=Dze9J;A zuG7WC+~ao|4~`?`NT4Tgw^5jB2Ij|;VvXxQ_A&MNM=^p}7etvvyth8Ll1AKSqIo#$ zVrCShT@pP0gQ9vq+OkzhDnsC+dWjuP`2x;ytixkkrZgiz1ku^%#!fb9Ws+bJQ<(B> zXsfnNa-Pa)^a~>5MfRL&40905zYHfviCtew>A2>hG^vbV#|}2PIP4A}?U#~7IF>b? z*xoCDbqS(X;zUR#$<)FE{}SvlJ&I$VWZ*@b+tX`rt6XJqNM7!m*#f+%^yyE3`c(4P z#Ur@<u(`r}2v-OAfdJ{NRfSE2%Ao}za&bcH6v6Q}M#dFLfywEcY*IER>1X?{i9%CA zlj5dK=~V$JSF2BWf@piRGHr#zD}Hh<Pop6Jz$WluR(6zi<I=*k&JKJq^_#N8c_~q` zJDkIiFK&F<0c2Zpm?$g>?<1PUj^+>~T3f^Wna-m^1sM?}m~R9C$hNkfyA}EnjQAB5 zy*>)VrDw;>?Bju)SZ=E0#71VAeTGCQosyQ2b2x75nI4IQ_dEwXU&5jb5(~#Mv_2~) z(-+g)&iSh2U!d(crmH-L5z>-AnnX-!>>5XV#5efiKToMuiqw^vKQ|gNj4KWkV}<}C z$NLhJCbb_b3+Gd@bwrL()C&7rCZHNTCi*{p4%A*oYA37qo4{@SyM*qYf~br)vGup6 z8kz`Fa7>h|?8>gI!u;DyAMHeJ@muD{H}s|q=M`Z2E*6NCCg%lW;VjF=qat?c5<}<; z?=f5*;QJ57_j8{@T7ZPZS9~8maF@%j#CL$Hd>?py;co!noKE!<NJ{LW{G^a^Y$<Xg zRaTWglqQiKoPqL5wN@dzRdFa*J|epiR2WtFEHr!T{^>y5ba|ByG0kORlF4%fG{_U? zpP!EPwA}25LJZQX?i;E>e}mYd2wEkEs9e2_#yG+0dSSN@gBZ~-ojKPWk@00KmjOiG zCa$Ap;TRi3+4ekXtTnVzYg(|a8;pdR>WI={oQ{14GD9@#XP0XU(EYRHfbSXqU>!&6 z1#w|TXXoI=H_J%@wTfzi0*5YzY<+5pEK&`a64!i0fEXptK^7W)-^Ol6Xx4otr1b<n zx6VZ2udL%Eq^$gloRHNXU?LYNken>2zjeD=O(i*iS;$jTFbD{82{69J9MhLMKvAD+ z_Yn2RCMI&)rtx92pAz)9E$oY$DSpT|0c1z;?4rjl;M+A@+XY#JctyC_uNd{^f=@cl z$bZ*u&<_I+48<$FtRMy^cG9drsHgVat<fC4IK+ScfA{bFgS*g=^>G&C$;{$;xuS)) z%;OAN?aP}P`M`a+)nV=uENH@Vi@Sx@H<t8?stw0{z3+Xm!7IxpSg?1%95e!0x#K+c zqvpoN1i(nsGJ~~)^b%!pb2%z0H~<GKQuebhu3>x5U6$27JA4j|s=wz%CKYZkbJ>!T z$l5!<CR=jksg$P)gD*qDlVNFlmUNP{B)Y<=AFh{R^@wyp$!j<OSpS(z+GhqJ8w2XK zeV4bBY#J)r1Oe^{tx=OA2#1+6>6D<yJ*h(s(Cd|xYGpUr@q+rFGw?Q5A*DbMwY}eC z53LoXj_S~v5$;p1uL`vf>IF_!cx~bK60EifWScmUyV_8S8U(dK&}-A+{A`uyCIIZ@ z8>7*FHOeHq`dwPK;WR(yQmc19@-Khy4{u5J(YVE?m0O_&C|j862>f+*Sl+#Jh5HMa zmW5Y%kHMVvwW3wMXSd&#@KvP#%CG$T8y|Y()&H?WZ~e83NA0`=5L;Y~+p1oTJW={( z-~jUspvJKAb$hE!Zpi~*s!)036<>i!I=~TJ#z;|2Gjm2G;6+EQ<Rn$+))?seAt)O< z4qsrxP;SBFTcm9{0DM`VhvDZ4^ui{}r*Dl0$SRvx14z9egkC2w=~ljaj=nQ^V2Zp% zqRT`BrlU&U+0rv)qVOHiOWqt{!MifX;bOFW;=r;D@J+K(5-W!YTZEkev8~_3*`=vo z8x5SzG($6~h;hyJQ%VQ^K=17!v~(M0JV+p$7;27~A$dlLdXrG?_|o~~KXS4ws@;I& z*sO1b0R&?KwWX6fz&XGrDesJ{3+SZJ^w#slnDLIv=`2C@z5d%B%q^c55k8YjQ=_R) zQtGtYwmY3p@TD(&`49ga|Hl9FYY>2Sig}B)-9c#>r;_%%0{lSWx&``y0B`d!0~kAL z!CaEnG6@ay{trJ&SAH1>K<xZ3a7!Sz6T=j&*`+qhq_WL~jVC1#kt4|oz6ydj%O|GJ zOUs%T&1Gh52lMn6VaNGBq^AWZ(KEjnX`d%@2&o@V)JbFhYOwXJT;<eBdx^@TR?kN& zZEqem9?+Gq8tQT~rn<d(k3u~tpgGV7^>MEgm~_-@JIwQq$ZvlZi9L}TA(i$?W)#Di zfxU6Q3)XkbspN)+jF>Ur>2s|YOgNEU1pWHj)vKr<;kWirU?0jHP~(Z|#92}Oba9$= zkqYY9yj6&r8&*k?c<qm76bK@+T5+P#i9AdWN(vZU8dUkx$>w_{CbazhBct&@56W(V z^TCaO+vS+WE-~2yq!dK+ysd)bM8C!iy^6Pe6pgJ!V;iogswJjkmf@f-Y&W+@Z==;} ze*efv|D`{!gEsrG+yrg$V6ep>B|fOW`qlY;C~$Rv9|*J~zJ6?$fnT+QOuL)`=ItEv zEHH1CKH<$^>vI!ivop)1bWVS+f^=Tyu%O#$35i^FN?>&e{yl$k=F+QS`%an}2snfk zsQiO6KdN`+aH7M;48uqlca5^H5e9P|!d7}+B@Xa~+@eYn)rZu{oOXA;9dVSnD8cLy zNhT=Dit4wKqVN|$pS7JX;iSVg<upW&VHOvl&2K-ATznM29E+em(S)c(ft|Q0STpR( zOC~!7zeO@7<$+;6p~6Qlejcb)K|gmIn~ZNSdm}6}l!GiuxE~LZgG!uuH;^aUi8ZOD zQ!0b(SebIhNFW%b5e|!7ZOd^V>qQ%W-Z^DQzz!T8+#Fwr^<ezt#Q3dti=;hZ8wUcz zjej!u0jBz&KX2aT#dglR)XBh>NsxC~XrGbnO?bpPK_gB&o8HO{5IN&^^_S<)(dblN ze*Fo|JCpX~%TKXutL@vn30mUi^T8lAn6xdgaR1@z0N;OD2RDgt{K`Shj%-OM9b{x- zz~>qi(i*l35gDe^=<UQ(K<W1_{q}o%3kDD5AZ!O4tlo-<YTJCY5HFQe3D!k!X^;R| zI|aC$vXD})+h56_{PP7!)xD2L&0yKAqY3Q<X%Z@(<!0L<d?(9e1T%`lT4;9rUbE$( zYccACoEvN|NOGt&J-a;%%LurN6P9Q%Uww?fGmPTD7$%vV?K?B+a7R3;ACnAA)uF0F z?a)x4Ns9Uk`Q)R{5d{YVK&|vpY}jc$6k(3Kv3pHK;x6Ei57{-@OrC`>7~eCiz1^~e zLT8XBj7;h}$s*@WBi)2u47QVFOgf$qm~U6iH4yG++AwzvHk}L86X7|Y<X0u=kN?qT zBz|`DkjePd6ubbituP#~SwE=JdQ|F*ucS^ukB8#&hbk6KK2Ub!1Zb%omPa_UOrM?F zY%`v1C+Yb5mFbpG*`&{4v0c|sAEi70L{o7ZULm&5FaSVgD_`OM!nGkE0Prl8-To}R zT{Pz%pmSMP4PVmz`fq;a@8JpG8qWq|DBvnH_1#-`q(}=6B!?87`87yL@PooZT#Y;e zS@x2S)=RK79(x9u-~%6cKRkN$2r{rHj|`VW*%oOEqNz|-xhNcDy!eRj*-eK@Nu;); zgz2TWEN5hSYTY5lY0_EP(59ZX4UR(VIOXv;L4PLlj1Cf6cN2MP_w1w@ph(+nt~5@V z_?$u6x?NNCVG$H`r0jCD1-`wW0Zx!5B%}V?cO;X7OxSW$^*q@?azZ1T*qLG?s{oVK z1g9a>Alg!n$oc*^p9EdR(eWSDz&TYQcdw*r`t*;{g}8sksl$+7_hcPijR@@JjN&j% zEyQ?V>2#`TbVr1}0BZqx2AGfE;E4&zNeWc#;OSKKEP%TZwdz}JVd7WSLMmoOTGVC@ z^R;FR>_>@Vtph>d_D3G0w}AiX%^&#Qf1SevCz$xo9B~F%acyj6x}N`iSa4kdzUROL zQr=D{R)f);ZJ?H|UH#7IBIG#-o&~%6`&hvh(Khei>9s<QpKE%D6mpG~LLR9MPYQ0j zMhIuE5y!ZtoaaAHo5_-Tp9iA_Lc@ca^IK;DAZBQeqQ&mwvvNCfnYASo(gc%L`Id=} z(wUS2O=P$Nkc7~M#O(CK`Vj{}8og?l0soSj?cWc)En04&3k!jRcg{wGG*O-oRO2v7 zCk<8G_aMuPSudvGx%>sfsM|G}DbOff8Y(iVJ06WCJTYuCR^kLEXV>7K3v&$E3}lUC zd$AkNizo_yvB~c!saGL`jy4GddoQ2!oTw;+%cs7Kz&Xe9WgwQl6{m64yIbCmL3M<z z0PrbQ9tl19u5`2wgna@a8vZb1U{FnZnqMi-nt7-~(c5M|P5CMY==RkPW~LPEQztp6 zwIZopaw_e_!j{8nS7#-!EEAT{6T+K{gqgrGE4wIHcg;OHC~;i3KtCL~jFh^<dkNMi zjI2L9?d4{3h4R8O%?0oL=5K!d24DFHGF^@bCP4^H0yEP`p6gmFa{&VdpFyH_L!jjC z_VyOqs-fAoeJjnfO#<JNCjG$=ybo?VE5I3aOrMq}o$AC$OF*)$o^r4yp+gps%rP!U zOSCrKh_@l{6Ch@$<>yt}fUqVoI{$6Lc2Gd@f`z7K5;Y^e)x{j8o$Uc(Wgdi?%FObh zepO?Ck|pUrctMB(Qj1)KmsJy&eJ4x|Px$t?zat7=0>uw>*yxp}@emknXmiE{_w)vN zE|HzzxL<BG?e_K~AZfJKvF)ug;%GZo21E`;B?RV>?W>bsA$)mpHx82$2RA{V;c1V! zK$!@`*f^h6n~WkOh>=M}9d0qDJ6|9h<;Rb$`)mRx`V3MXb!AskTM=%!d4a$>nG7e~ z#_V##a$q->;^3&jf+mQz?9?H6vnNjLkGwtm_On0w^y&A#1AfLL#8Q`dseVp{#16}* zqOL2!4+5?$!1o;V8C+#aahO*XdKHw)Kqebc-^Qo??M~YHjRccjU9A#GIKL<rbK#`s znbfBwN+7p6*Jo(XZ=ETG@+~<*qbf$h&=Dz@sZ5uKw_L+Um{frVg%1r|ZPZuimue8q zI-aUijM9=%-_3t1=eH25Gx(&hf>I=_fh;FI67(t`4AXZJO!narD0ye+mtx}yQ&ZPp zmPKbeze7VW1Jx&uRYGi(LFIeEg>Z&!X{hr{<{h;#0XSAR47zw!1VL-B^DyIDh4S0& z)5aA4{P<4<K&7Icitz~SL!H>GBA{WU6gzcaH36N@4(DM@xn-<@^LwZ&66XnVXI~l< zw-e?*j^GU6w{oGYtxacOWJI`txEz!;yXZa|m0K>2wMon1p`w8i#11WKX=s!7f*c=U z`G{l_hg+vxOes-m<6C=)%Oo!=9@M{C9NO`RV0IKzg1;eIo==arub7C-tkzhAL)yO5 z`Q;!m&M#b@--iKL2l(LtmchHe*crNV#(|O*-{qz}?hC}o9=-DTV=W{GK1&-dPI8!Z zkg4F4&aYAw#a3`O+N5-4WvLzA%B*sXH>26`-I9XX5wjcmDigyZ$#cS6Be(<wL83*h z;cmmLPCagD+uSpTw{<giL1tAs=U=3?eojpQ%JIuM3;h%k*Rk{Cz~`YVsnjud1!Fu> z*RYc5T6}bq?i4F~%a?YVJS~q6TlpAdj#~9{O)!b6BLJ#DWQ5*m9zym(`MaxZ7-5`9 znkLGeXA0k?K|MtQ<M(J+roTBidYh=NfGs=zhoEO<r)XGO6GQ|)?o=T38?`7ns>z_@ zlpysg@4R|$z>^(pKsdR69`R86@2V_HLqaqNNgwO$p*n^}6DlfCC$7pPbcx%sEwL)h zGHQmP5yEyQx7vl;Jkxw}I+0#3YA|GzGt2u4Z=Z4+GM_b)Hn7ac&aZKh$wXh_0l?J( zzULrTZ`pBO!<Ww+*`(sYKX4xY^wH1!%+IWW@>57q&i|&LCsC`<(JY;Q2cg3j;5!%M zf`JyM11KV^2ulii)am;|jD>GQ1cxC~WK#B<$<FqiRZguJV*vH0S2<&KhGU0f2F@`z zc9YBMz^<^cmPC_JDASy{Hll2^r|o0n&#9M?D_cg(gz(1YYS=o?5~sIi<fq($$=A}) zgbqrwMwn<b=k!pk|4dZKHp=^6*1`b0gir?AJe3jvl%~%>RY%rWvP=-Sy)><D-yb5B zNaU|dO)!r;CntRXf6<#rm@?O=p(goIW1Z)_TM-i#jmdKWX7Ur2L%coC^x&Rev`%l% z$8m7uADUPv=^3?D(5>eQ(5sD8wG_Tbp%g{rg2*K6>3`BR<-kP|WS(mh<#<N*YWf2C zd=@ZzF^(@7J|yl8VPw`sHeR?5A5W_dTkf=>#zR^V66p(i<v3IMJ=WQ-@KV9G5g!Q1 zEgtqTzuDE%RlUo==kKI_>9@Y}_wFL!qJdK2)l|8v+u~emy&_DYx3$RhC^?)s1AJQ& zBP3366ObgP8*i)p-*6CWzCZAR_rar^NALM)!SF3|Zm3nRiZa@$rV(0F)Rmm9=<zgb z@?gSkoLF>@8KWdCZ?JMvFD0rpA`Ux-AoO)MncrQor$QA$Q`WAblAjw6&z@bP<L@n3 z4@V-sX3s;X!cP%_r0-o;2z>k7-`031(f7*$oxabxxV}0xX2xFDt{4T$_Q5Qf#%uB0 zf>)8B^;?tqXg|d8F-T|YY@$K;HT{0Nm%y(`Wk)Xn053Z}G;Z|<amP4_TfTJqR7NM_ zC{H~T*$2$}GL|#Izx`F!9`#?eXM#&MtReB(MLnA8_H?-t+Y)cTPB_IkJ)>@1kZ2<N zQSy{Qz5j*iAHDelf24O4v;%oO5Yk#cTbo_sC4lP+@B;wSpFvvwLA%vC+U{Xzv83}0 zoBa7$&1AL{W5ZDs3!hT?Sat?ahS~HR_kyWRvqXS?*3@l*HsP|cb+(ou*5kp<?HM|3 zH<0;NhPn-l3|Fpb>j-nfWM$yk_7&6=p!n_84>roaYAGm3rnnF$4E569YNb?kx@}$; zHq)ZZS+^^mZIbO(tFA02ygs9N9Xr3#w}<75@a~o2z2(YqC@ZX#s&?PjwzlqDpNwuF zPHxDqlS9Gy8WGwB$Ly(^BN`XMc%U-=<u`ycZfg2zCPe;fbVp~=vHpuQcx78l!&;z= zonOb5&l>@PH<0(VsZwMU1WnT)9ww1PDp;85VY6F1)kRFw!FrC)Zxzp00L<1i=ZKm% z+Fir)WHA0^mn7Ix1?N_ktp)(i2tOuiB(G{hBXNGW1&5h)-sm5#NEOcw-@Y^CSzp~8 z^%i$ReAC3+jzW!}jk{&{q}ei!<r&59$tyen*nhR{6<#VZx6##AUewcSSki(#6D$ui zh?U|M$rr!)^$!Dl=Se|Y)712Whe#N8Z88?XpdDwWr1>QgicX5DRcKP-)j&e8DXObO z+98wff-}5D0s`prd1+{@keta7EF=bjouP<eMT|yE!EVEb%r6A*nL#G2+EJy@+Rn>E zf#$Uxj^l(P_NFwMrzqBtHfcEQV%;PooH5Zca9VOMr*<f!^PH^@4hHHaK$0+HQQ5?5 ze8v^z%VOI{<Wqgi3V`xUhN(k4<4XR?s&pmWxkG|ffA@G*w}B2jNgrhVQNKA1?2tGI zrnl-pT@p`+@gszO#uTDiz`5b<GIet-JEoKt8}dIj;gM2%juJrb)Tv%mUz?<I*#tVi zmH(FYEz0pxfNFo^b^!r>*KU!z3`SNetB|v^U09vmVo3<Q51H<mIbW%co`2sQPB5#& zpiGbDdAWZJF&C7<3h$G5-g)Qg9lXP~ZNPECzuloD>}lUUierq|ORydUTvveaIq>#o z8%+AvJ1S{qKI{B~Omlns#>Yz}q(J^NNOEyeI=pBE;&T2M5S*{&EU*MH42d(g?{M;` zlA2trwz9;egs=2;71B8D1pp;1P#DUQ6DEo@j7242kBJWSsL>!DCTU$`xoywT2ixJe z0}$vxH<2LE!;(VL1J^6@LfvG5BwfvMMc`=@X)O1V+pV)Sk>@O+<X6TU`C`vR4_pP1 z=SXWdHD*TTGouo-cmr50*4(B`DeVHbDhs(nJjIKKJslWi03X-CiF^QwP>6OW$Seq> zlg*P*vUvHrr~W-%s|UHO>~GUv<@;Npcb2{jQ)huM2_){Ts1J@Sodx#ckNPxC3`n$@ zI6PHgaIi5@P$TG`51ybG4lj%y%7%LKva`wZMNY2WMJV6-^69;ouF=h_PaA%nv)O~p zOKc;HyLRB}{5~AGI>7fFgrlqUs5u9WCXf83;7kvlZf-uto@=V)&})ro$10g{PFHO* zYZO>ROVNsegyS74BX1Dc3%oWg(427aJcov0&p3YpVzM?q;sp5#hU_XaD+u)$<%7eJ zp$p40(tJA<G|JhU5D{u;Say!k3yZO+Ut#cuIdIl`=%;t9d|96@?P<?u_8?mwzL*n? zJHt2P>e+3V9d;WE(W!9k2>{TH*1kf6v?U$EZo^pnvNN8u5Of1#%Gc=0xG*Dj&`&tO z9U8r@nnkNk%RQXzPu7>&*G#5gkw+$jrqA1(32WQGvQ@N8K&)fe7`OzeRX<QhO_GDU zI9y!xoQgl|9H~)PV&lmMiUJRV))=*)gtk(Q!S-Xn8m`OA3nR!z8fAQmr-53O_8zGs zQH_^rZ60mQ*|zbpgg<`t_|5Xn-}qh2#ur^h6FT;n(ZLlS6kHwPdk$q#FON#KMzdN} zAll-xoO@7%{uZ8Y+Syzh)hGxd(S($BXd~Z3I=>-kS)U_nCEPV5h$D*t4S!bNjtoKO z{{rF?JMYRkAadjZE@hH1K~oVV)jv66BifPfw)wK>5YY&XQ`B9(p!CIrTL*_=RB{S1 z)LgS2xi;`*8El6zb%x4mivUY1)Op13mivrz!VSs3aAr?DM~>1SzdGuhM0*7QW9amW zfisGO_d_*2;jAD`;tnPkb5|6DryamD6<cov^*a!|CSuP}%VbrGd>9T%CC@Uoapn7D zdseGy19U^37^FkzgkJ_o&j`qvebr;YyG<qn`;kPEeD{Rdxx|R*&Z@HVR-NC^25BOu zRJF2CEA)swKWmQ5F#{!^wL-*`EN?OxrENt9kJ_MB(k&~${JhzYzB28dHy~|U!gV(z zf9jK+UUA<IWOwF>m0x3SU2lPY2yk_P?>WfB`C>bVI-?*D?%z4OCop1@g#qVT-XEP# zZ*rzkI20iwonVa<Qn11|Txm_U)f}|hT8$S?01BQ!<Up%<>#tCN0SQUVdpG-mI`7eQ zteSFsDMZt+kyEI)Baw@CXknNnOv~?4l}=B7j1sz~2WdG7E2%cW)%Fpm2`Td%vI`S{ zgLfO<TQTl3u$4#mxtzo2vL$-9tjQqB?AOSLNJhNLJ`w;1sl(9kBUx_wT&ef^wi|Rk zzT<2uklsSr&qQ&pjH*z+mnz$wx}tmPZ=d!qfuqdbEd5BDQ9mnrk+ToT>ACh!t(hkf z&u?WWl?Q$BA;|0ny^+N#@X5k4E=!Zc<ZyKDPHAogsRKOjFxz;@o8+XP`Tm9U9B|Ty zRZ;@K2oWrDsO`a|+uajR3t({ScQo}a%?_Jhn6ZH2#GBwx#NEQXPnX}t#-%ok(b7V7 zbisrx5z8!^bHZ1+$8fy_>z)H&)oyOBTcd)sEN+C|r0&9!a{K8PfZ%7&N#ZPFT3E4z z%d>*P0<uaIN|PNT#^NBQ*@`0BYARIrlAkelNd)7hlw_Amc8A3?WsgCu6Qyq4+9NHf zL5QY|<ykt1mO|YQ0AU$t%*3b)1$D3-4Pmyta@EkapD_g301wOAF?<1>3uJR*^qzG9 z8ob+R<<t-GMU`FjzPuo2))AiG-kBrI-(@F{*s&ePlyl97anl3Dm*KE6>Ir26AQA*~ zbrKb8x;9B?n2{yjggpeb>4fN$M1~EOC&WJ(9Fh(0k71pp+cyLJ5;2CaBK=e?8eTSJ zELLq7?z>Zw-lF8aA)hV&3{(+W^ytPj?dXhsyeX{sGXbDn<haXny+>#{0XGU}9nw<w zEhf7z+Q76UjUl?25Tgz%*i<%HiIxs$<UcCB5f9`;HG;nWm&po2J<dp@ap~(j`9vig zxx-hyC-pTGXihAM-IEHDydno;m3*lob%pm3t}DO~2e531UI(UJ5tiqH4UnD5TFymm zijAIv$km%6ZnJ1Ito&ByqI}RlTEh0>jM5N76z#Mkl^C~W%b00G_$r6qltsVEUy3!k zO*#sP9K|_lD!HsJZ39xops?OD3d)hBS~UQ3y5E~MIu1=b87Kc*#7<om8s5_KMjuB( zzQB?XjWh5XmLi@G7*38*^els8tEd@8<c+btj_q?fH{1|5=v1m*yrW?Fw$_V`UyYVJ zX~zNph9(tFhIOIH!O`cBbovZWhfE+JDDKr={8?WN9y?(;H~wv35x?W1hn?_oqat`2 z;1l+~Uutu+o@=6Mc7*oMQp#toL$LO(qfmF3X{`FxO{J07mg35)GZPo<h)95BJq_nV zv*Eu3ddCSe{L(+<jRCppE;d{kDcc_U5G24(GGkdpEY;uT;#AD^aG&TC8)J4zVteF8 z;w`OQRC3#_uW;|->Ht3sSk(h>e_sD7vs-2+OFfq}5!)148TiXKkzfAhFD(M&Np?Yi zA{;os400PwW`ndDWyni5A#bF^?F1FpLIU#~-gpS!*IC1H(<Ix<1{hOL8aat#wpzU_ z^<k(eM>l+i_n`7heL_yw+Z<5FT#2@gPW=D56v8Ts%$Bnun$f|;EtiuutwIYwHUhvp z#aTC(-DR&IAF-*P!$~RfghBTWyYeyX4BPX;_V(pVfOTx+M8*)b!&Wp?OOoF&Y~TIx z#!e0qI@xiZ>>9muo=pfs20gJf3w=7c3-A0H{nmfH8x_5G@QFU5bYB-Ab;5DjCnrSy zmaZ!R42P(lzS(-uXxMO^8ff#Nca;gOcAPpnYII>BvMn$gwBsMs)F98tj=+i5@$iRT zlZZI~Ugcb%dZbFLqsNJoCecWRd7$JaYKCC(R?v)p^$tUHeDYt=ho8Lj&X=EBGMXPM zXs{k1ESF@FxGZ*ci1*n^S9qD>>Ht3ss7|j0ebceu9(^~!Z-uj12mS}&c;(}q|MvD4 zvI_!IW`w|sChR!;bdtOV0+C!1^H=m5jO=z*m9`<_nQ}DpzlIUi)pXCERK(=}5VYiu zJT<GJ5V|%+%!hoZsXUgI0ogeSm4np6A}D$`JoUmNn?*T{0Mo{$MiOXT2I^R_LDaTw zOgh2<p2Hj{$#JM$8FCA<5?uvjbM9*w$7WPbIK#b5v*deHp<S4=O|nWgbmSaP*%cEw zUNw1$a;wU$v!kMALeqCXdx<T;CIATX<QR1*!myfC7&&RX@CJ$Xq-HiPL4)@WupY8H zV+xD!M2Ik+<UJFz-BpsMOOdWypKX7-5CIk~^1W*Z*!&YsO%`t|Oj|@9{|Tg~i|sg+ z@s!I=R3o#D|7`xj&{H;zMx$-B4KYMp>ZJ=z1mlS*Q(hFjXx#n2Yqvu)ZMlO_@)_~J z(Y;Im_}P=1E{K;lEnk-PGe7e)%ZHbgm4?@|zYhwo4)DVODl=0`oGdpx^Rv7Ont#ms z-!<7X>-Ea%@rP}`k~jRFRq|@ak@%zLKE7IxdXCN@GcRfe**fZFrAaAoDLla#yT%8S z+rJ<vSNYf291;P95M}^rId_%x9-9LPc`{P#FOG6Y1QU~>E=!R15)7}I!AS|vBZ%^) zc}G?h%~AzD2~*21q4iPjM-gO`0ks@<@+-?Uf|0?NIahY(0py5a)TqK|Rz0XY?k@;Q zcdfQPm(SZ?(W?umEY?nf!CVoeHt#}R=D|MBFfZ(&!#|N5KZ&R#0PIc#3VNBQ69||A zjK|KN@gF}!p~2i98LHYLay!1lN!@e7uLN`0n96A9l1;1XB^-nogrvW<NclXTa!Dg5 zSf`FOsZ&0^YA`lc)ptS#*Q6+HoM4sPZcX<hN7!8|Vf!V)i^PFJokt=~rf+sxWH?}u zceD8(onHNzd}qp$L(I2BvvC}(Ha{;dbcGiTR|oh30N+Yy2j<-jR%FVq5?pSL<~<&Z z^LzIPcWb^Mm$)O4PNo#B6N?cgU;OO6u&!dN7^?Gtf@kV_<qffN!lMTY;$buLDEVzX z$-;=gjHQTBqU>mZBCFOt!1c-XTl0^M@2KJ3%x$TQz?q-{Pd!Jzmrf3X8Co#|2Mn;R zZNU#woFpg9(%Ptn9ct`K6Q|NSX3Vc$?bTUg2btr@k(e*gR1>9bqQk4Xq-Gp)bXor- z81%P6JG-RaF=n25l47C`X&5l*9{^$NO^+HW`vZeITldwO0s4|+KtBi)t|c5sl%(j& zI~+;7HnD3bnU6xRebFdPoRo*7olCmAN?jv!*bXtlW14929%g9$E6ctaSa2~&?@ZXy zzLqz;$*HcO0=Y$x;td*1;NDexb$Fvr5hDB1{|Tqt@S24I-97=&IE87;vw5HId{?+P zaCLwm0LUAldC;2k3mi{k3ll$AXSmFKEtbj?i(mdS9Tf3uRuBBMh16;8S&v}S*;mp; zQAqi1`y#RT@3s+%opo)o#1M+l0BWP1&&=e;I`h<W)!&{%n=rruB6n&YxNc;AX-dX3 z1sSrS5vk*4aQvWrmM=%PlTJB|CeN<AI$~K;=bd_vA;r$EK@~alySWsZhuhpDM(peh z8!JJB#T!>CA*Z)V&%m&W_B49xf$B6{JK#(gZfOoTR))CaofALgNxFu+kqs)NiO4o4 z?;B?j)=#wV+t`><9y!#LG_Jqy#g{2E55v9^Egd@ycnJ4AO&`a1Vw8an=fWHc*&(ol ztB(w|k{?u5RR3t6jQMe?@tn}DuK?lrv(L<1tv%sTZVoXv(}dd>%B}*=P%vfZzfryh zO%rW_-UG2o(fVRPGkm<^sjI-MAoilS^3GC7N`>drx>tDdaCLwm2A~+!D->r|Nd+k^ z#1b%(*gCy9&UZf_xA~gW=#3yb^Sr%7xGh@Q$6^*Tm0c`yB3oi)6PTpD1zLp@dR*xF z&x~(*W>IW0cRGmG2`L-|u{`ZqUNPb@+YCfis%BTA8M2$PPJ(p1*Hs(CZPEc;xS4Tq zD^%XY#|ge|8DNlyI(ZcJky70Y&H{j>4Kaw6$#ghET&B^GiFq8nX9z75#70#xX+pjX zeU_~I5sk;41K_}Tarwm`8`SEYu#6w!I?&Zz5i$!?31BIaJie~4Wre)VScZ4IY)^L% zUbF2M6a6y=%0uEpgCOn`I9I<c^NF))UFSz#2hon;K~w;yZqZ8ss%1D2aAp>JOSmuZ z3~l|7Bn+|COK^nm)K56Xq(y*Kd(_LmQ|_SATwAHDVWO)6bDG)^6uz^nUoU5=>Sa-L zJ<qknPv7BX+thcZ%%sq`DST$QC6bFeBo~JQTx+uyTNukC5s6h{ciiv__Y<y-_&|UM zDTp@Zt<lhFXL-XNhyD6*e&xTp%ki-wU6i+OgN_81^>Kh=)3*wC%dL1PV}Kcz4|LnY zq(j=$Y9YQ<&2kR8IlTPYsO@|*!v{X_KDfELfe7rxga1Sfbjm9^ic)qADe{Qc$8KxS zLB<IU(s#ebSreo0Ad$0dXCVwFOJvR*%G3ACJXM`hIrczU4`D*Zm3*`IP)Z8kLr_ha zeJ_^6X8-_uS&V(pt-<F5b^I67wHc$%6LhBUeEZ#k2<B;~5vZMB`#kB8?5??5c2O5$ zq6@VOMnOGEn*?V9ppzxe93dD;4h$dnLup&7gUOWRD1NKkTzvgUJ?y}ri++A?)fjn@ zW15**?sQS{GVV`xXhCy?)ewmK*<sj_VLSk;{(pA+48Hu^U#$@c&>Y>eqKhZSr+ceh z3AU6W*a@hfB_j-K7{rCwPIwl-mF-jtvs}&^oXv#}yz_(K|2=<nW>Uu5#9|Bx^YVHQ z_#wb`1^8irI@2oxl}&7>yjFKqt_D-{Xx|J7WQ4(PCvI_|wmNfI1dVA(43i0YlOdO@ z)@>FqwiUrE%$e<A_1(GUNxsHhn6E_ut3Xu0k<VrAtP-XS?=yfV!(^OuW-$5WiS^K< z*%DKy@-nlOhn;1n!8?bIDIa41v(>sGhz19_H5ef3MVMe9gY5{U#zfD?Ao)m|8A!$f za7pvAhV^~5kburASpb>bB0VO_RxClk!V%IjiwPS9&>367b48ZsY)RlipD30;JHPUb zuD$uZi#rwH9phNYPu&|3x*c&w0Hl~k5|UgFg$VmYWEUu1Msss$)2KUrMJ?4GqY|Ol zb^_}I{%2J09eg5e?EGd4{OB{oe|^A=y`9zM9bM!68b^}=pzF6MYIhsHxgFA+V(x31 zj2;C*yt+$CV!<m<?%b{9uFh`{c+o@A0esTqPTGaWCg%6mAr@PsukZli>Hyz!;IqBk zBULdc&p7aQ4b&soh|ewli(mZuouHs6)vzE^!a>4lhPd%4d>e>`U{!dL0XZRW>{$@< z0uXqnyrn}Ycejevyj>Ea?VQblY^gS#U<;2u#9$CV7icDr-JB(i0w{_@yiYNgRJ`wF z)EbI^v5&e3*a@TH-FDIa1Uuu#ZW*ow<F?1t#kEg1pZC#H7&(6tPuR~}35$wFY4B3c zOm@C>`=y$SoHcp|TxdLDRPl+7vwaW5yGxFefPE&IaSCae!q9O?7@!Qz=*%{%>?s41 z4tED77i<;^qV|nY3}ojqankAZqOD~Y064E}RXqlQr*|QU4F0l9l;7aebf`1_b?e|1 z&T&c$fzFv5As48P=8WpY1C#ncP+rm}<WjWB2CPP!wvR-c2>D#&A{MGO3L(e|j=J!G z8e8ZjgWwf<eKG-rC%^p5Uy`3fs)MH7mm_UQvh+X??h9#yE4<h62(ECiL2SiPTcC?` zT4$|5=l~wz!Xd^Ij9>h%-+GGpD(LOa{@H?_xlQb_npg-wm0wr~(QgOX;MF*#BS3*u zMGh~^VhVWd(Vc~C3#VMkLm+R=*}ZL23|phxWOZo|fYobqQ@Ly=2*?ABnlQl<Ez!#? z(S*rF`DP5zQ9SG?D>Bi19B*;tDAb*kuvhE+9y^TIPLk-EbkCS^zz)#Fq*&Bn>-JeR z?;yuY?|QjrI7*zcxppC#HHT{5l=uFCP#{M}nyumu#!nS!kmVj1gFA+$Q!+l6?ax+z zNu5#x{rDR=N2rZ|fM7V{>?kssCKVR#X#0x2>R#PaZmgLK*-I+Y_v(lbw!1*;*t*cr zsyoSQF=c<U!pQenE6*4w*l?Q_vj`a$j}T|aKmz*|gm`Lg0VLWp)BloWS>9T=4xd1o z5}<fzT~0-{SUV|ZKkZxNA>i!A5DkkQvU*AOJv4Y@#7p=`KJuaE^PXQ{J`YOmV6U{H zxo_L96!n<2sjqN<;JO0*KtQhe^1EH}mCE2w2%NTLO)V_R-~IOKN$%uE3IN^At=!2f zpIfF*Tx3IJdPy?^eJz6_?<%_}19UM-_w=|N%(r{`Kj;}c%BmLO5=PZ?5CY2mwBgq1 z&>Qm6Dhma93Dl}^kB<&u@+{vY1NowmDRwz<1Yx^MfHE>d529}=IxU_Ju4$mjFvSR( zN=D6CZB}7~n^uV&U(15Lu&$TZ^EU`%IfaA#y}Fqgm%IB{xQx<q%FORHaJO8&;C`aB z`;w)XQlT#1P&5c#qsKq0=)8~=AWJ~#v%FQ3@n1SzbpCPs6S)rvrO{<V+8GAnjU5B; z013~Xe@O<2G`5a>Pz(_&M?*(ThR}?E+lC0)%W+VSsOUeTtyJ@9HAy1e+F(6sRWu>s z3A7DIIZn(_5U6=xOMoX}pgQv7LM&;%{x81y(FH;M+KI?3CVf=zSo~yTTg%$N!aaxU z3h+G#p2(7`zk|!K_;9}x0OcKDdFAFQ44}$3F;gs^+3xH*Q-ZM}BGWpt<Amld*y73= z?D}~U!80UA)N;|nZ7AZlJV%}0dPx+{Z5^+ClDXW=I)`O;SZlvZG_OMt;VI7=osH{- zhw;?RR7<v)b}d&eYf@LL?4pn>3e-eMB;5gf((f>VCy<FjQY#ew0ISJ`MNMEF5^pW# zt)O$r_p{3s5{j%J@C>M~tt0jJdm1{#QQA%-%|p~3X)b>=>h_I)?fgfHAmB-iAz<T~ zSJ5%e9{VFg=BUIN_QiG?9_}7*5HZ#nSUBn|G8CKfKih`!7V93+RBDz*d1^{BZMk%{ z%Ra&eJycP6NvKsf>pcy?4}Ss-J7lJ9`uIYa>M~Z>V<>(tn~q%)2}{BD>>A_C%?t|7 zfFo{kz!V*cLay?AiJ@}Fuhi#9I_B7k&$?N4f&n1fp<pvEVUHg@ev`Q}i$h>{NlLs} zZh$u1q0bU+S9m$#x&r)wKx}PZ9pe&aoIWq2N<Q3#9ldFA)@QwAdiz%zXqob{0*nQD zD3~dE9vKwHNb|x}TF&+(?=e>CYxtPsP>n)^xMzeDnGbu|_bm{-wk^L|eWD3Z4ZytA zqwvVa*g74C_QCcmtqW<y2hglB6DI0ISS&qXI^sWz%UUa{Qr(3oERhV^`m4sVkH;WC zxtHo5_IjRLNdj%pkwv=~M)`UjOI2#-yzdxa1z}qq&U!CQ^_?EHl?~HhyLrg5uuClQ zj)=thmDxj92q3ih88`Zja+RI?8p46@!cH9aMqFz(6k*W_q)yWUg36sl1B@(t$TQ1D zcv<Ju^^%Q$<D`|x!^1P8A<xpv-#L%d;_k;QU%nBNDPRu`>D=L5cJRuQx<w`EunUcF zcJqCTw<xVH@6-u5EbzjqD+@I_xTeL}PU*FsRmBkTVC*VP1^}XT#%&z>g@BrtSBE3P zbo<0|WOh6V|G(MN(7FzmIJm;YfU5(1|AB;qTOC?{^jnn4+B>W4X2Efylf5mk3Y_Zb zRs#o|^E)@&*wLF(izr+Jp;M&0w$Ivj89oE7g%?%(&IJ3J#|z24c<bJTLa*kXFhrD5 zQsr~|jaIp_%Ut^<6SfngtBM-Rz==2SMoU2m?9rM@jwCTCtdr$ReM*=&Fe~LfiZipq ztpk<iQ${4IFbZ12wUwzV>d}(?MbD#r5m@^rH1H^mYpc66t1SrnvKbyjmj@bl_85d; z(>M#aIY+-t2+wYohOeKA>yvxeVev_Mf0q{sstkpu??in%Ha9p7MgoKrQQ?e0{jo!2 zU%iz6oNb+wdi8LHm+Z#brrFu;Dct>dl>c<mQ<sMDSaj-;=lT8;WgkinCwpbo4grvb z_2Q*0?=e}sb<oGK-LaDO1(bN?05bHm#SgcOP>3;UU)Dt(^dl1!qiqR)b_-8ADaDgX z@_HPUeP3>k#_K1L9t>O^;Cl|%!39v?^i_ksq_?66OZb-P<UfHVSCJ*0u$?=?j;?af zB!Jis7&w|%um_fc<7V?PDo+;dEzoXuQ`(Bq(d!p*4v&GKJ$9FTSydWoyNLIo{?B#( zvyI}B37(rB9b+VOdb_Jd8)s^N6$$?!bfn_v2z$@AkX?9)Gb=;&_eW*a>1$lIEWH`t z*3tTnoplQe0|tPdXJ%z&tZ@SJ;bh8_ZH*@LA3M!*CG)ur_Pq0lNflU`Y`vc<cpH&; zOh$nnrpTm8CLp-p5Yl9Qkac5pfIOQ^K!KCGgG^A?Sj2afkeh6<G+;*s^p#IG{&AH3 z0#H{|H_sBzfoPSsMi9W*Tf^bzAlpQnoFa{;K4e12^a6@gbgO+=n*@oYs@_}uW+0kP zz~z5*&Y@jx&74fBY9LT2_23PGTX5j;NUhIwvpQZW8hcxr9zDAGut~m#FSkIKbQoO# zR@pxw!mjXg!}SdCJ%@4zczxVn>nD$D8hOr_)AOvB*!EG7&>PM!MRW6G`MnLC$nIht zb6I}E^wwHR#EuJI190U@3U0M(9fYGHbqh_Ig{w6XgkkVJfIa7c=216i1|efmq>ZeE zl8lZqFobvpJb~h{g=Zj#9c`8hZ*41;LDG=zL!iT9MBV;|WCj}F&(4D|7{OZ+Y<;h7 zSQ=6oeszb0<Cfi**7(_w(5WW73+;T4P_Q*B`|;Y0)P#(3WXE976c?12^(%IoQv_aC zd7MR{(g=%YA;cN=!8&URroTZ7yb658dUO*OvRebM@Mk@AzQxEoMA8@Q=afi5k1I<< z<Pb@5gg3-x^)9Mavm!QkK;AlT3%=Yy)`T$}868?&k&oDc!-bb$S+dA+?dP6PVdbBT zbU{7+AL+<q*X$TXRvcKnt}Q@dkV4QVeUm;Bg?ZAl*S?RAKbvv9(EtNXeW-W9(Ct%T ztstFy0DHz)#(_Ee3$S05UEw8#>k9D004l4r@<J>b$&cvI{wwEru^ZJEXbSMybHTg{ z9PFBbaJ?BBAE@1WVOsf{0vY{j&-%v7bu;{9_J%q*@&uF}F*2R@%g~uiecCf9;}*cO zOu`xi&n^bP<Pq;Td-@>p)h+DZ3<yImqBN0CQ;s7HI{_Yuv*A%2rBt)!4l?m<4M$Vx zTrN32%=p33s2TM=fj)SCE|8fcVjN-=54wywdY?wF3<FR;CP(NGWMdJNriuD%rw>z) zZq(P57q_KBF}C9RYQIymLK(x<CO85hQ6tzx6gePS*e)h*hR8Y8*`#wi(*resxr4IB zZ!GNa9~nbRC*5sAa&(`k1<3Nu+sU%QyN9OX->K&g8l0rT;zp?yxg#JNmPxrV9pU?& z-<1Znssu0&CpMd_UK*A0r22#6$g$|^)eL;C-{<>kQ)$Hp1<zx?GpbA=!09P3`0%Q) z%)ilzcRN-zJ4D$PUVgYb!1o;N4RvLJBM)T$$hR5PBpqMAG;2+Gf)5wG5v_Q;m{7pd zp=F_Evq+mp?MAg0*|hc4q<kvKis4Tn9eK^G!YIqq*ODFzt#bi)%GuZqEcGFb740UM zU+D}>h}u9IsQ{PsbZi%}_Jeh>l;XDA=oC`Jpxu&San)s-z>y@E6ME&C4IftF9*0~G zL?$2;xxv<$h*m&tOJGJf;OW9$q(M-G8eTdN$u<*z?d<c&XfhK8>KXI=2Me1OX$qv# zZNmma)U{8quZf8k5@ROHvAYbB008K8APN#=j+28rqHYwXWrXN#6Ug>;3*BZU6&66a z6?NW;?@$$$6K*NJ6d}+Knxfei7&{zOyINj}xDW^AlwMF5ksxIKA7|-;JZ_;JPdEl# zl?bNK3zgOumXlR!au2~9I2l_|3iVuS6anx+fwnvd(Ir^wzL&&_y<NW)vL!E{LJDXg zC60705naHxyTZ!>*DcTw0Qjal;rx+!H+D_?KCpZ)+3+|1hp#^6IDs2v*c!e?8f6I~ zSVvR-ZV8Nx^?H2>RFqCBI7DSI69p>2<pmYrsM+c{=Qhs54#Cd`_{?gtOy{<Ki!i&T zv$1bz$gOUTq4;-F(c5IwUa)0oJZ`xVG&!5Ubm$fnY5Qpq1w_=wgR~e9S|z>ek`Ciu z^x;kiJNQDwoIC@%a|oWdK;2Fzu|y3}jTLJbT?A~$$i`&?(b$sxuos^@(Pwmy0E_%h zF$;q*yJ@yJ3MPkeVa)Uw#W5%znhYBgb`!P4vR7}@M@KlSl>==MWI@ZMdXIP*)7@3q zE@f+Hv9SwqR2^r6Y8w`aN+I_1t|KWZw3~RA4=#PbkTdmKbJfI|l8%&}?+siHD3k1z zK`F1a?~{oQc!C6!AMPg_befDl<5YUEr2=U|AOwVv@v-d%;}X<7K0LBbCC@U>9NT-U zIqCzS7Zi4K6~P<@SGd=3T>*YrP*;PM6GZx4EQ5K*cfS7h4@axKc1!UZW^hP{Hk;j3 zPH%a)HhDOsIsxpEXET8E3~&Z@w$wW42-W8aC7x7xGa7h@*qq%et<ov`G;#QaQL0%I zZy1;q*kwZh$#95GNS%xVloXn_^3URuPX5_oR=FzTq#kCv>?~ilDis%5U+xaRnRMc} zEe(`9U{lYRV9%$#EV;AVsW<lIIB?rglDwq*p}l?GhBtKbzZTYoDF<Eurdfzw9zAzu z$G@k8GyFvv!-<a#V>*F{GJkmtEMq>uR~n{fk(X@w>4DAw?Ll6-@jEtdI6U4t6=OTr z@1=pS%SppdvJaHIDeMaE>5PeO`naFQZdBQnuEUgY=VM)Jwtr;gM0>Y<y2DO)l@8!! z-QkR~A<qOac-Ep?6;|yvbe+`gq!W|pIIyE;g?fZWI==CQN#g+ne(ke8uJ_Bo{G}%) zEbA@`ZL(-`Z0KI$rGu*je9u8Rdz&eORWre-KmBRsFf-__`M1KifA9DHka8Z)788NL zW|iBY<zkbBCTJ;5(=ZxHY;G^TsPdz?4hb(daExpIfk-1`^GwQk5R4dva2AZVZbr{G zjW^=;FOW1SWf*|drT}>vF`_>Yy}DNCRZ%<jX$_4O_%IJ?4PAddpCd}M-Ga<Bjka5? z$gzXO=U0Z19MH;wvYnsZ6KNQZTUT}s>AoC-iT2FvD}J^|2ke*{jWL~Xg7yTcQpz&B zb{6fH(6{3QXZZ^|c;0I_I@tGR22g7|WO7&vp951uGeIKKJ7m@gmBUDiQmjc1$Rd#a zne|>{=@>@uL{LDpPG%h*tT8D4+D{3V_>4H;9LWGx3fk$BlP#8muIwU>Pe=Lw1Htks zW$aOs#h{EP?`yv#s17a&n;=^BsC-kz_n_@cr(qSt^Ea93inqo~-pQylsefXgm%s1* z-d8>>*(K5=);i2`7bUi>mT+DDeHd_cfbTi*nB=p+%L@<U<(z|bTuI;fET7jz?|bD# zKa`#QWw2Y+ws@#3rb^+PbPIVo!xxuF<mreQ?_{5fKt;u~GRzUwmY7y1fk*sm9to_< z;!yeP5J8r}WZo%GN2^QNjnj3b@wQZ?LYe{4G?%fqdS#4IO+v3MYQ@d1`X|4`&S%1E zr$(QS!<Ey~en-U=Sf{{NH%UGn@_n6(BBx#u+dd@*T6$1+DHJ&&<LH^+-t&NQ*abLv zCu0Z=TBvvSzMw0=JNZ=j3@AA)1(@igD06#5^*A?z&Op+f4LGWQISNJ|K}nSk|9(5l z(3lU@uMw?%Uf3k<_9;RhqDNqO_7|BB8bzIOdZ76!cmg-cp%M3nKlTF09@~~|(AVc^ z%xD6OYtylqC+8&Hve-ojBAuVxGy2RTx|Lx7oM~8upb5oo<q6NKYat}_eEtk@v-cp^ z?|1O*=H>}Iue`Nc*vpvMx?yRqaR1?Y2KZqB3CB(i&R}au6+J@0twP{8zWmkV$d(mj zv-QKArvObSx5I#`f>%~{<#^VXb@sWK`nI!px3_IC5T7R#0g5((aOTT1*U6d=3Jz!j zSLT=cE|l?7lv=S0Fl)mNfx2<?XNz1Jm}lkqVZU5a_@I0;DRtB3XQVST)l(?tjOv4e zf@Cv1JTX8vKlTk2m<P(j<P3P}jA8$qgt`J`jpAsKCT&U`o56^M5Zx|Nf&{#|67|Ov z7bw4KJ3e9ZD_<x0Mz<lNcU;U3f@lnMbEs8&Q5S|`f(cn0$tDoGfrVZ9ZRM9c0(SO5 zVa(U>kp?I<YYC$^$|Q?cX5($*J9{X?uz!hS9)OsiHn$Cj98U|uw$ElSR7K~VQN`7$ z9wIx!r-B)X?1);=Lbuo9(8s0{wc{T;g+zs!jM>@HH0s$=U<ZG-V_>U;(+Nsn2jLKx zTO1NRO7v|?LEBJbq^Q1^bo5#T67^O-&qvu9RbkZh9LO@X`vO4NugY$HX1;Pl>hqq| zg4JC)Bv*o4&~+8~zQc6|_yIt4;GZFIaxgf{usP7T^wA^_*fYf?kYn{LDESjALK&B) z8`w4uA2nVZAM6<5n#j#wqE?tvrF(~-lwMP;kyeUM?puv%pQE^5+A|?r;mST`67&dA zTAno;K+Y>oA?~8^>8KOe+QGJmJV6K`OCwU@z_JL53akqGu?9r*8^t-k4$_jKR)f6- zr0J=Q5H=o(e*xl+!BKe#y4|E@B#Orvj55!qudClFip>DaRx9<zT66tdb|3khXP}^8 zVwf}9^%4@#z%V7;1&Aff1c*VZ94|34txpR*2el(VGhH)X*I_-=wBVYrmz*O+qp=V! z;`}Zkk3!jFPtEx~pN0fWrag2T62$PAHU&s;rKOwX%+nZ&Iqthrw>SvVF(pM5Vc6f~ zT$NQrQpEQ<4h`ZZJE6eNY`D-sYH^V>Oero@vO|%VPA=e6CT6xbuU>8Gljx2EY~$fV zqw5MU3tS!G`wy#ZV}&(ves#ujlg2WzV`VqMAspgt@yz+kIU2)U@|z+7!HZTL+iKRv zjCSJn&4yIy5NL(UvyO_8ko3}-%FMCDK1ucBo}cWER<5$`(QP(dG%WTs@xa41esq@Y zoYF_=ZG0=0D7ji93b^UE32BGyVEZv&mU>p>to&^+-38b&x@<fJ<-{l-CBHs}A|-y) za?k{V*>H}|<e(q^!rvn3ow=94_PGZX@RKJtR^tSXJ^iEY0w^Saoqju@aX0RoA;`p+ z_W2PxJvG#)S+dRXi@}%<Myi=h3x~xNb9{8D$(_w84^nrWgjwj>0L4Fm=K`{ED~Yio zP=_S76x<qI?|#0bUk1DFxoZZ=2bt~y)l^Yp5-ER!_^6nQMbv469fR#1Fu;f1*U|7K ziqnuWFIeozt<E|<DZVj_e`Z(_g~SaQJ=$bgJ~>+6&m3h}cp2d80N;P8BT{VHfD#7$ zF8};4>GEwgz&A&$za~PgK6~5C+Q|{vbiQPe8bvxOb>CT@$<^|zD6Ks&c#;ls258K4 z6dYKej{1ml;5}SZh@LN~)l*?{wSTP@kTpK&GDQ|5`REyw_lWI5X&6nUl*H>)bW2|y zDDyjk&Kmyw-t+AcE@FQr7F2f895jnYwk!XJ<%}aR$Zm7Y4FL=vhjqTki!far57vCI zJ$HLGRv;gsn}V1O@J>G+$89^U>{iewHQ5>Fm<#syNr-ey>jW6cvEhn)3L9Q3J4<+b z=cdO4UV8fU07(7bes}i889Hf5Bmw%MbCih_tLV4Ro8zEJF~xwH^4U9NlUf*7c}H+a zvjI>#i7lC46(;peMqh3A(L@Ie6qVie*Ru&D*dqe9lizH<yQQ9|K@wSR5-YtVR)s4% zcpd}b3hxPA9pHxnJV;lOBL!5s37VZ`<rGICg$4g|+SBQj&JI_{QN;xWsQFBx5VXD% z{|;m>3e6u2XfpgZ!;N{VBn6L7Z?;qdGX?Kb14NtzF*9OSdO{Z23lht`<|EHR6GVn7 ziK+_RmZX2UX9{0kwjKV>3f=jJZW;vWZEwglwGEg1)0Cw$2a%HJ@YW_iY}i%oJ~;qa z5pIiWX0`BYVc0m<d1;(QVnF5q6PA~0(BF<g#DILIV>D@Jc;g4vGb&;B93Y)xkpg?z z%RJaDBr*GMGkaOH(>6u(yDMWG|8~(R9sY0x$iJx-VB?^|`Cy$Ok9nR79*(D}R8u@) zGKtjfzxg0{F_u*;cqhT%nULRaQIkwWun1lb`69GoGO}x=y~zCO-EbZ9LAQ~17CHJJ zXSAro3pf~zb-B1>cS6?5g_GhEf}M|>Hg1Cp<vlrN<@XZ9><TXdTpi#C0%Bk)(YxFP z&5Of!n}~%w0r#{%3rCUDE|*DVE5uvcjk=yKwrQaWVbDSj9rr3H^gzm6EhM3B+r{>s zU=+k6RX4MGz2&v$IRzZG_e`yZ=3-=^G250@x9;X3oPmz}Ng*$<z0rngWsR({THY{u zN5@nRi}WS>pcIXTQ8i_4L*C<oSwOj;i#by(#o)V8z*EU7SQxs0DNJ#16R80LP#t*y z2pwqKSE=PgM_`N0y0c9w<%z4hgJWR@Ii}JywjRJU2Qqx#cB(xDao2<eQEwy!**i&b zw1*O;-0-q5<r@<^L3q8~rpjv}x7|33@uUJEsh&_Ct61^2XZ-JI|ClsEv;s_hhR=rB z5uV655%0FOst##A${4cwH=bBjd|;0o{$<UE-As1U-^)oj2z-k^#`=FtlIB%!<YQb` z-eCaEfg~qOU~UCC=_>pgOfz5S5=&LW@A^0IixJNoOU3@WrKfeZD4gg45SuAM*v(e5 zU*Q43)d7AWU@o>=w{a}jy2~^|aFK9uss5ZmIlKdk5p5-`tRSnoP^Xi#f;ADsE-@pG zf!Nu%?}jHy8e!nmi1JRUc=9=o-HcgQl?n1Xkz}lcd<KLQ9$@Q_l5lCh7(=33Y$cUk za<@nz&Qil7zBRSORS~fxaqh)yx0Hc(X|2si^SoJ*w$ca(kIQL@DxL<+B<b3Y32o`g zll7Qo<`k5oKRyhy23F&7&;cEec&ub7u+T7qyq^&PdID^wUsN7C6P`6qSf;J>4t)(v z#|($;egdJ%z|vHB&JY0D4avNc5zrA<0?;eK>l4CRxaal$5y{uVSPTU{2@)wW?BIYr z4#4exp5zR&yD(6`#96!0yDX3Uld|ZdXMm}0cQUHi;*kADE*#XOacKG&ubM{4BpnmY zJB#J+zqH-3(bK%*Tt78-th5QS9OkuU-Lj?fu6e~*crb8vfFBNQW>2}$Y8k7`>aR>- zZn={t!aBBZ==5RdJW2v+4AgAZsbh>bT;OK*D!ou(YfKI=ZOTL2rp6c|d!~g2BIs3U z(1Lfr)GI<&7)EFmI+0fHp^nQ8nx1l{1lferkCc730zA4ox~27u#H<*%(kfA9b!e3R z_Sqksg{3|X8iQp9LS0JQF(yZ;@-hQ)ZXGX&nw)=d-R4}~KkT!GTQOE8cYgGX@e6&_ zHPO)`>@7P6G>tt^(PWQ7A^V&H+SSv1cF_J|&zN`PzZ$^3@vqiskAcWarky?R>^b1T z7boC8<2;noJp4T%IAjC|YQ?kxCd%muZo5@<n65hAXUYQuRAoR7NodT=LsVE0+-?n* zJ8r~@O%OJV{)H%iUm$jCn3CsCa+GOBRoI1!)#WGsr*Kgl-J$fAf+dJXiN`s&nvS%| z>>^3#s8**IWBc?L>4{`TE)t0?&h?$hbxNS?ZO{(}t`6`60Uo%^;Q#ceKYdbXUB%3o z%(6twpj(6|PG$rOQqK^&WJ+M|btJ2=E3GsDC+H(zNUaP+iN!2mB)rjjIk1`DN6k%n z4HivmE#+iU9H(GvHWZ|Wn^KxJYc|ON@>|HdjF=b_(vQ_m>^fZ-lvN?gck+DpfDVQ! z|D0%lFHy5TX0X`Vm`>IRaPTg}WVJ<M(?mxw>ZXwwp;pOd@5wDp)h;5n-C#hyj24cT zU5>T6;qS7Jt1U@^;~+bvVm^|dPrdPf0WfmP4}S_W1ZV~Y%r-KNo2d0c@4N+wa0XWr zPC8B7{v4Cs1EXV6iW`JEeRBXdr^SZaL6eM##Ku@tTLIt_N}Uxeo%FsG=+yVYYLa7V z*p@hMvx3a`Y3p3_B(AaXWO5u$F4@3fAl2az*oU^7vqh2&q|KYfo$&Nw87~)!c%_%K z6lWSs{@VHQdIR)>fvW@j0HK`w4TYHzY&^K@OHZD<Z6ZY`_$@LJ&hR<)!a@*CT503% z^((+T>d}h!cD78DREsjz_Bf)+W|+1fX=<8>rd|zmS|fRm{D(8e_~?@_8w=>doHDh> z4{|E;XL$$lPN1z3Yd2j8>_t;54kE{Xh*2Z6+d1VplYaxC!TX*t#h#7WV+_+Ek1Sia z0Cudj4b+vbEGy*QBrN=qp`YP8h<ntRD6$$W32mawdWwck%77*)qI9Ic6t4rByaz~j zoox7dmk+9pLuwk4;bXe#d;4gUe$A7rxQi(p?t4L<BjbP2i^sh{UD-ls&w(v~-SH2d z0_3HWE0~*8sN)=(2uIKcm~fHBomKe`(ZnGM8nqdydBtb}T&=Vgs&*Hk%q#H?yF;f# zMvg5abXSF$YCWdsc+6|8#VLDLsRDV7P#zJC&J17SVZhY^zW-21w%nSrZ0!(d9J&Ko zY;Sr}g^K_?vzA?0vZaCDlf<c5LCA$@AQ;=MrgwZrswzB*18TVNy<mSi_Ce1D@otp7 zU<ypCAzBDBWwzCYWqh<Mj3&Hpx2l<Xbz_2LIjnO}ChM7H>nXsfEmT;x<#~+@qHLHo zzPrnrlS5__w)WBv{zkV`p*XO7_E2|iT1~ZvRwXgc0_4ye3YQ)Wj_?F@Y{(!n8->jg zwYj4%a|tomZfW*y5(3qXuHuP0<3eQ*2KfaF!z_8C9d9ZrEQw^8CLNDfZ`@P(*n^`- z82QHOJ^AzDKT&$JvHvrB|MqMDb=(PJRfnWV*>YQUw|tRgi*38(B;Dgqx`7#BUIys+ z56A_6cBX+KKprOOhdksVPz#vHV1fim9%c}u`)Pm}7)0})#F`jAX<tRT-EP^IO;Qpi z>SB?)kreqmHD~Ydx_s)k*81+f5BWO>yU6p~-|xCq)w<QHTD8{t4i*<6%dy==8+0+g zHNd+GY}*OYgbe!kWT;YX0nwy5BEd6+-Q0lAQ>xnT3aHM{ZF@AW8G=rj&NJ9;&$0Jc zt&}w$w{&0}TkIwL?!Ol?4?#0R7;cuVaqZY(p>qkbd4&%ct_JYKhbGp_06o6r){eX9 zV>@&Ikax?YR=vvk2z{wlQKQUOXuL&v69`n&Q8R+sXcEzcRMVw4kJ!u}N8^u)BF{G) zWw~b;jaRh7GNN}XjMjBoDfU+D*9Ig$r*q8;&pDZU1XPm6HbJD;1}_j`t1Bb-K9r4v zU#m1Z2)9ef_`MD;k^T!BL}cKsc46EdVfnY+MI28Fzo!Bk`nW}0Z95m5^qh{4Xc{hb zvElAv<fSlw=kc<))pw#bfNjAv8ESUGFGDx!jd=)tgT^$y{v1+S6BR-0u*Mw~l_NYn zp5QW1KN>Z&s$BJ8!NPgy4b1Z)E!qdzsG(Kq!HGy3zqd@w^8lx#s4kXEoNWPP99KQC zk<J1Mcf+xIS-&4ZK<6>X<w|^Lg#r%H6=?@QpeJS-V?T@M$DdQqIk}ZvOxJpym`r$= zjy*b9!tQN~xWfAfR|EKw0E}OTuw&q-KmF+*sn0p!1jkW#;Pf1#sNWvme{XMz!bNf> zx4Y95prH;IOCK~6wUH%-SoJt|<G2fAr}$VaVys&)fu!nHzxCFC4{*zQR4&;o>(TQl zY{K9q(+RUL5k<GT_V+9g{Bo%u2@IWP{4F4|*#kJOgq{>$%9bgx?O7&TfPEinn4Rb} zX_#Fk?dromHpu5-rII-k9+oio-!Op$&uehTFdra|6>wb0vZG%m9~jUbcO*Yf1l#>6 z)Jj!~+|VnqQn3MDl#Wh<taftokJk2@Z$7m-JkmC&6lOE?p*_!bXW4hPcXZq>_5vD0 z-5@%?P4dwcTCGJ4yM`So0E?itoxPBrfcIYJ9T>yU4VL-8UP6@ucDGgHRwx@CLTwKw zWB9iC9@mWHimap6d_waL*LO`Lx#>_XDsgjmG!B@3e@YxTm_o4&3GMF5fz#*;4;-!r z@B@ds6@xeTZVdyYmNFwY7{#~g_Gg6bOmR4;!9-zo{tR4PqA*5ukRYCIuElLziH)Z$ z(o0o}q2@p0j21I)CR4{DVcIH-+2FFOf&fO@!y+4&+;gROL5<6?!0i`Tq8&|!S$5c= zC{`LGB}UFsw=BsR)3I#?KJo*7(dEcI!DjoHE0|!vl^ov$P>-?UiY+2z{7*n@U`ZOu z-y=i7^j9|A#~0n?yjr8w<~+HdNE{T6exFdce*^8L$O+M!gbGtvnacV2M_GF^lnSV7 z_l8jjePRs%ZjWo@-<~9>c(kmX@o%MTV9-=0-V7isxBauBlz6wghn6lQuo9?-0H_le z0cBX@s;(8r8DBI9uSbkVdKAV(`jTatv`74DCH<Z2>GtP6O;M-FqV412jNZ~5Z@aEz zUhsVnX|6PTo2#9FFh`;BD?)B(VboD@!DdSvFFf1(Z>ksfVDO^ujJqenS;En7$SXW- zxEjC@9B^ARn`K&iHiER+RA+{Zf$^fd{D8<Ayw=dR7fMC2Df%WXk)u*Q$EaI~$7lIO z57f5msMRI?WWu@2;h}t!;8(~Phzl0{67oEa^@G?;rj{|vfCaPwOxmUMNhg9Ti&X%R z|Dy3D{@Gf#IA;dsRZeA4zGslCQ_Q<-C(xD0RACHu42p^J2hmL<50X>Pmn7jM5DJDy znix_H4ZA@eW$@P|5-xt(!JF}i;i?)b9_21^_CBFEt*>Ju8N5qK*qX>ww%FheA2pUG z-e;h?sRU8Mq!3Le!T7hHCF}u}tf<TxQfeNl7R)_-#Lnr!q_#eTkv;5>E0_m6y(H{g zr-3;9MB1HdduH5IRWn+Vfw);&Zb>C&5>C>TVSP)&&|=F}BY4>Vc2+<3#oJrYjjuZn zaP)yR)QxPMXtfBx16=?58aDLn0J<UE?+hUb%X!xM?%>4@pERP?;5{hPRfn#hM=JS_ zox$#&yu!nWYhyk_*v7G1A={>cz`Ki=0etzjZ#MB`&;Hc3(dwUwo(?hvprkH&C~)Eg z8dhh|=y*molDc{s@F+yM^;nhbw!{==uX^SV?{&iX$dCUx-8{oyBaX^w4fhjZX$5$i zU$bIa4>HXs*8!q)d0quer<ZZmAZHO=N^)+=5r=*5iOhf*541Rbw9;ex?J4ET`dpTF zH;f3_^0FO_5}@NGCMG+2KLy@<@?=Qsv^tvSI%`xgK2&vG*W+&dwp}?(#-#5JI78s_ zQV@A2b?V_T<nVC<@#s-oPo>kv-%Em>@9)d=#qJ@DUBcrGW7{=cSIK1q1-;D2But!K zRowZ`lMLa>olN=q>)+av7I}ZT?CMtPcXAD_in2N~Shv03<%jROj`|!$0l$5`<n5rr z_HCoH>a<lhBnELU&o6xZV@r-dv5IsFrYk%exO#ve0f@elj?D!IY7nFM)@}(gI4Pjx z-YuS)PQC<@B{0p>%eC<V=R(>XhjCjjSX3utUw42qZR>`-Zv0O8=WuoVlnR9NJI$j} ze=Yw0rvg1npAq8#$#y=Mc5!<e=&jH~K;J0gn#r)#E9CU=Ac=+565?6mijT=vaa*7v zc;66ADB(_s<^?IwLj5<ehv&Q_8CGaU$0J5+rzgUmDH)_`X|a5TGnK!eyUY3pwgZMm zV~S{Z?;7@z9pbMr$_3#(*Iqsqo%UengJulx!DCR#9089lnl;#M{8n0+y3RRq=5>2< zO~>w@FQB`d)`SziaNffczBtKi--pKY&||vxAwss<2<m4j_HCpsgP-oR>HietH?*&2 zgL8549@!~rZzZB_UnJzc_c;l4JJC<5yCwA?lItGGlM?%4_%X1}J>5y;YSlP<da#If z^gtS}VRE)odxfVFt_JV}hhqFTvE$A{=y(+ug{7-&!DMC(?ed%pF^v!OQWr_9I)Tn4 zNg0fQ+y27n_AU~$z%_w2nynJ2A}Qtne6J}3CatjGMPHU`&y}zl_L?B!VmtX;xKAs0 znTC_Nt@BkwOr}(9=?BSdg)L@Vf%r_Au3~9ygc=IPh^7BBG^hY})Ev<mo&Z({(o@4A z**=S}vu;-L4w<MJhu&}^v*)e^vrE>0C2VRT-|c6^KLZ(rMRXikEfJN;Q8t?JHziz+ zT@DP=1$;BvIFy%?Cmtx?8I7<nFJ%rEW+)GmA+8bFxtE(^=H{U@VXWv!GfAA6iKbhp z>l`IkX>bcGYapX;z~<LQ=rAtwGSpElyA{pSfHkP@(Xg_ZTc2sPDdi(OQ|r@m@Dwv( z?QIbsF{%y${Vp|v>*CNT4je|j0XmD2T`6glNSEz~=$$Qng{Kj&2Ji!i!{AgG1)1yF z%R8gdDv8upXL`*_aI{LMF0z2%I-fbOPoQap=?Ky#6PKMLs~&I9Cu_p>wO=>U%jEH9 zvbfp_L*>IFTF?>qL$1cw+a&d(XRIC96>Why*F!RKZ!I+&2K+?e4G>P#*;^>tDTYMW zOWJE_)BuB-8k1z%qPPj9`q(h_M(m{SGcuC5RUPV@os2aR@=XpHR6GUmQA?aumBC<5 zJxz5C8jaQ(>CsK>JV3XDwJGrA-DhAgxKM7>*dAo^c{*Mj#Cj#B(da((dg<6y9vV`P zP86;sKnrcZ1KFdJ2HAaIUK^Er2R(;xb6VbL0mDpoi=GKBj_LDioowL7znSy5hoZBz z1p8=2^wc)-QNqeVD5>fKx$bS4BV~8FF@kzl%Wi|DCsb1v@nJh4{eb_fN7(r{g*pa} z@X<!J7GEhI^8G*Coj6)dK)u#FZXh3*ORzR|5-yQ}yLM{8C5PP=J|K9OuJ9<J99IxL zs|y}r>%nD{_xSVGuYcQy)%1u@g=5;0SJmlifdFj!sg<wOxshAu$Wt8(%<^wHoExUD z7+Ky(D@)407L(A<tt;Zvm6InK$3|r}f+Hg3(lZjpY^^Viog+3-;UtP#@tS3jM27D+ zyne>2hPBT}h{TEtU?9Ttg9C;^`ANYO*aca&*{a^&CC!J;pjr_JS6dvQ5PLdst+wR5 z%C6#Lm8l_9c(p^QKJOtg^<d$^jaI!J;Kp7(Kr?=^e3=Nybmv{=l~7w%MnF_Fp5Y0E zw<rM_E9+<m4*@F7I+NPiHb`*%>rsHhdMIdOA?{hCwJYp)wUlC^zu|AhN#Q2*r1B|T zj3G8IXs`Vn0<NtoT|%v#9|I^JQFHuip`HL;#l_i(%)xdYw%Jb>SeB0Y(m^Cdh!(1Y z1KiY|4JALeYxnXB-LUqH;T<ovj;BWOq}i;~#ARc{e51WR-`w1UI%<8!!qqst4Z14K zc)3-*1Pk=t7JoH*A0J#jz>fs1O^ZgW6;@`o?3nh?Uw!qLY8>Ljv=S&vV}(;C?YvU_ zELmhAL}L-}d93GGjuT5@5DRHL!M<ZU``&5vc}gO^hRK&j%wGtnDPr9xgQ=LTxzsNW zvx=p`S0_v)8BO?{gbmBM4@L%aS5P?A8N@1<@Z2?}`X^&0BPb7BMouWR4Bjm}Xy`b@ z%NnvGW9&nPhJF6Uai35#<45v1I*~vaKR8dQ76~Z8B``)rCCnBmvf&V-pM<A??N+?B zQA^v=zY9=t6g|H1MrOMiI>$$6K&@FU5fQCW7D&oACp(NWPAkA6h7-k|D8M~q(!Ya4 z3jVzej0~D$6VSO(=gIB4=ovL)IO;D|QW^BnXwt%*UPP$K=sCd8lTj#+C=H9xb1W(t z*NLhzy!}e!uOAab{jTa)GzaXa(L6b*f?CgY%ECT_nQrS1r9{d>v+*cuAX=U9<(FT6 z5xG3rxYg?mIHmk@+43ws>S_o-7PuO~j|1A^<-UYP_^T4@$*wPX5v5*J+(O+X$IT7I z_h0o#fsh{QE!q6PQ{>ncW+~ENmz^E0L&yz$FHc2FJ{Ps}N0C}z9x%O-CPcoHsx#re zDBfW1apftpeY(Y|lcS<Z@NDyG5<}Q?X_odDSv--xBA|pxH-?31${;R^V7b7Kz7)8j zk?w5B$~i)wr7)OUo$%P8JOMIY536;YnWt&e1v{~2Bv*mx3DF7Ib#<F6K^e0`6UeNr zHW=f65e>^#aI%#8=I8DWUTmi<+$j9IPT3%k<QMV`>{nld;u8&JqDS7=nQAl`OqUP? zWrp6+Go7*qHNYJs<GLz*PXI+K4VFzBV~E<C6_NV5GV1I&FQL+P8i|Ny0u1oy^m}Hp z@>YVR3hR($&tkf@bTJ-~@VXILfJBRQhr%X_8~1B=38USKDQkCWo`3#%DbL5+J>>oL zr#~Ima^UU0$I)<w_ZzMT@Z$idW8ry+fe~B<0sZ9jKiQsxbe#}*YYwY$kuY?+WTp*9 zVAJl=){5<7Jlu{s>lLrYdS$JBFONeKF{=XcfJ;o61Dur3(NH0iznDg+nR|zwspX!q zTtl5ALd8ILv8?(`=DrH@%C5%e+Dg=$$!VT#hd{$uf;2n9s{Ix+5@OgmsY|7p`>){k z2clt_IeA9RGT|gmbBq||j{0e)$e9kqR_Rime@i5WGt1}c^&bGP#EGRKlhJ=xcXYY! zZi{I-as0b2Ht|^9o~<@-kVOUy1yQA8atY_(a?muJ2RP_!r?x*XJR@(HG=9e*G+kI) zgl*o1XCToZbgQq_+&1TvGEki@o#wRfJ|hRi-(^><b3lm`4)lb<m^LfJwC#KTNJlwF zaUhQc7Q#92dsFDe2|;;xqj`e;Gn>v*?<9yEHkpB5^}cuBd54Q(%iQ-jXF6lmr`g<t zbD2RwSNI^|Y5+ejIEqXhoQJI)kr4~&kAwfsci!ZY*El4`_DnF+$TCgz&`2{`m<Rj0 zP|cqchJnD`-eLOV9yX*|Q953L+#p|ji6&C}mjXLP(H7`XD{DC;B4|S86QEr^PFWSt zhV+N{H$^p0P!|BQ&p^$<+jEvNC`8tFBcw!A1JNdvL7E6pYdPjnAK6<c8)B!8fF>o= zj(-k)H^wO7YXp(dNf*h?YgDdQ=K2yF!#qID<~L6{NWgad^K|r|rMcO<F#>u?H?PCq z&K<QnWyB-aIZ-x{7z@16*-ow#YaHq7*oiAQ;)}DY%xB`_ml!-1E@W+Q3)32B&fQ2U z=qZW<qjS{0H0<!ve25(ejUAn<{fcG8;+aA8O>2WD8pupx4ptfUlj@S}=k30F<BiJk zmf}HQjH;MuD6Tolv(dG@!7;ypZ_5liMuKh35*f||WBM|K;tC%qTn*rd5A}?~;dxUH zz`J{A088c(MFIE1-G33ZEg+JAV7#ZbdE@XcUyn2L6%rvbgWDzLaMf~D?uJO*qs>7h zz*tufqo;*atR$01{WUmT=8%&Sml2^-hhZLn!4wbXYSCzOk~WjIx6_Ox)cxD8*%s)U z&fO|)7m8HIh-peXck)a|aWb$nqel8rlm->&NX;AQ8GxKAUDdJ!SYfAJw>%Lf2|NBl z8H)g<Il>(bMaL%G0G497#X?J~`=VlFb!`#E)^|LBtSu0heyW*P1e}g7WrXYiG2=hh z`|TJEh=3s-$zm)9$^zX!0dOK4M+&|K7)Ny+O@wI0F{^FRWy+ht=>w0e8+BzoseFSt z3b>l0j}zedugTOlaZH%bZFX$ee#I&jUpQmLr*7|~BSsSSK89bWR2Pys*Z~uThO=If z==vbuAHyT7G@>Dfe<hnbO`KlbIv(O>)Fqn%+v2PIclTbj{H*%q^V@Dm>+o^sfVZg4 znPj&@Up>H&1Fi<}1BWs&BW*y-Q)VYT;8)(Jw?q8x20aRe0QK`1HH;EGmTw&=nIw-U z0E(uwF3jR>F*mAAby}**7Ai)~C=Ym@LFNR@P(;O+C_*Skv^oPij%+5Tk!KZEd2!76 zd@?HVtTH5dUYLaat+Y12$6=qTze*iq?kpH13wjp0daw&Di4AGl8yUwL^w!&#9_@{k zq%&?O;g(2EyOT!?JbABSU6<>A$(_|118Qv109VZ|K-fxvi*ckuYx=`v!~QZ9baO$o zG*oBBXByx(gDH|f5F~-Dj73a#Gki91bG}s<VR9UMJYZ<KiO_(U{v(&~P3#uDWL|ay zxemb1fUHN3`a?@qv5+%lO$r-kjie=}7W*|D8k907K4=jn>BsHQ8kf6p1MdZgUEid# zu!TG4n)5`q*kh{UB2MtmfZud4+r?1#i8t?!kM%X)jh?FE?UtT^V|xzx&LF-)9ocNN zzVy($!Uq6X1NafZc2j%%<WU=#hZU{lY{XIQz={`}_z^9KuN&6EieAe{kS{QLTcjmO zOS61itq%Cyg!rv~4~a#*L^IKtDV)O5kdD$Z`6*Z{Oc0>9o|-r@zX8>8Y3ItbN-gEA zA@_;V;y@c<u^D5QRE4f(9iO?1!;fPK$w#{fTKcN6*osF@h2}~Nbf=wqCh#6t%X~b; zcp+20b}-v*&-R%EV^6J$RYj`)(K5(N2~1fnH@hLKI=96oN`t&an~^K>x%}`EvwHV9 zI0`%g+Ijt^sMfQ_+8cZZi6QMS-O(JuKa+<uTsf6^^2yS1nACQWg&DO!EeQZU2aNE~ z#(#W&hx9nr$Ifrrx&^w;i=h%A?s=3V8~<agc{C%(DZ;5oChtTf!*OoMPVxaRRzLfJ zO^;>rYnad$cmuR@c#xE2VGH#6o=r5`^%6`gO3yNCjh#kFhT|mL?Wo}eMXDOJpZUyZ zP+vai$5L<#)CFI?zmEs54f*h)iI{$ov-kGG07m)J(tYujS6=+_5B>OGS>%z|cf)(Q zEDCSm<Dt<Dp~|6Bg8Eb!89m2$G2SyXwMbPqgKriagI8cFbS7L6uOIoyk3k)5)vZ?{ z_YWg8FHGZk6$#cGM_5*rEQ?ZmhqDz}pGQ;Vj9*ES<mJ0Z!19h(o7-3*G<YJ#4y@ol zT4`7q)sD1-_w^R{X`$StP5Fydd)qc$5gQ6T;%(k@S9|v*$`bYq=OKo&HO&uYhR~BI zw;newGeLfZO)K$P9qy_FL&wSk?5sTN)7khBI+~L^@b4}#bgR=buMda`jkMbS2B*!! z5$;m~<{cAyDbRWYDP!dll&S}Bo1bYi!JROta{a!&K@&Fes5836E=6d(?~>CfYx^e& zrzjR^JbChjzW(~RnhsE^o$ynT-J42;mt3Kq)5Nv(bGBWSX*^gi(m^Tnx{t97v*W3U z^*M?Li#*wpz4zYv{x7}w;)^ervZ?O?AK>5^D#ou==MvQlst;TE%5-yurx>mt;D--V z&H&dN?Wz?_!R1%Z_&uaKtbAq2+ZJfEvWDA@x{<B_tm8=I?dejXj&ZBnuf%97gKir* zdA^KgUCOE%(aNuw-!Yrhxu3?$zeI^JY?xp_*i~$A5W)n=`2|#M^}pezF^jYE38ihm z2dvtmwoymQZ_;9|yNYE=g2!xNK)UsAl@5~?<F_g|di!|)Wm;jSDn8~{F;fKtk=~Do zztP)T6KAR`o8O&PTQWOY>eDz6aqaMSH0u#<`CEo2ge@jbjRNXB38_r}7Ww+iW8^Xj z3+48T09b%FFt=ZuJHPvYh{A<FcCXobpqoynFm9c;4k4$sV?vSrwo<)bvrefE{~&G~ z{*tXJP@Z!@&l0eK#RzQHn~KOVMTQfgLt2<++R%N+M08DEu7sK2RREqTLI(z}l_k#8 z3(q{-b%NqermVS5E!rW`pV0{B(HukMbYJhlc>&{^NUY_pp5GcR)dhToM+cXZp;!3e zpow0yDrF7bqwGfSs1;;ie(jsi9WmQ(Vm-k5s$I(k`E^=nC@3vmj8Ke?GFv_Y!7ha% zyFI$|vP}e{@DlyRPy9H|K`|Sr7*70aP$wC!pad+qOr#aTlW4~iw^HVfXWX+SfUB1Q zpA*zNj1{^b_W{D@6$lK3u;GLLl9iWCQXyXtG;aRA-Hrp27#GLX;9A}i9|?w#sMRua zo>ustrK#<5=CCM8C*_j(Ta{04Pw)VTZjwHxrrBvHwC>3ieL@XukXJif>l%8ulJ)qC zp|yb(036~Tz6a6sdKste1_ilsxdf@4IAWy;>Dm1@Wd$dh{dw(CDb>bp=M0$w4BC`v zY5rs@ABoaR>f>dS(B)eVjOa-kd*Ea01Lkqm0ekZRH>#yximg}c-Rgg6T!y<Zpuy}t zGCi6H_0M{Y09}*NO&L88>UY?NrDRN@Zj1fy7e4+mMq<*HPmXp>mgjcSET1qYuJCli z)dT!EfX(?|4kjQx#jj1$$jilE&}BjeJ-|BN3$aeK3S5&fn*Z5{v*Wj?L7tiiJ2FZP zFO__>3OS$Qlo+m<S}vyf<h=rxKe3TW5PxmDlW0pA+8fCzJ}poG^Scr{JL<XplQQGu zB?-T0Xe}<una_})pwnm7I~pGgQKwYLh-7C8JKO-vwBrYYASm~_&5G*v##Vlv+iqH5 zh&s1M`CV}$EU8vjK!NOXauNQB7V$fJ^+$rJ{@r1Qv>61uk`%6hY!c$MYZX=J7MJa0 z<Ckb;m>pxq8^60iRs=wyNvD%pV@1v&ARgBgLW{}Z$#XjD3nV3}+X!#y*-i!k<Ukw0 zl|9#6e`m(;6ejH<hPI7EJYIk5b68D-;S}KJ5ud0QARmE_xG~4eYb{;BtBdGC<0K9e z*zPPwM-Gn;0#-53rTZLyS9qV`Y5+fcXlg(AC9BX_WjNrGZ4qfmBLO1uM2zQ#@K>xN z5^)|OY>0#K3{{!18Q;m20|Z=j*0++;{Gv*{BJ<D)vMbCQ*gW^fp=o**1`%S}wMJoN z&71`hk%~G{VQc+Q>Lk)#cR|e3E?78`RY;ZoKgbs~!#3};4M7IR?-Ak)!rGFLHzJ1y zZxn~CLxKfrme(?%hC=3f(OeJBtX&M)6}^FH82fwI1$XFHtaY)-gIfQlSb0Pv%fh?r z2zTTdMDB4s{&+&iR6C!5iAMuY)57GoO@}b5+rUF-Ik_+BJ45$V84rKy^#aCEAQ{)` znV0VEtdKnqF=;s<K~qVXjb>jWXq<3eIuh+*u#?~paS$(3*@r+(HBwqH6zJUZ1*(9s zY0l6o!i96>FL-WC35_qU%hh9gJXAW77p>@_MSOUym&Bqm40Up!!|w|36I>182M)#a zYgeqK-T;l?Hj517mAJM#7)J)Uv>|4dk+yq}29qTka3NjtJi;uMtme_E2)&{VUJ4?H zOnK$OdP27lQJ7nmC1fNCvpS`l@Me14>AFXfA=RXVIL(NyB}`STRAyvsT!wT4;~PAq z^gds-@?X1lT|ANyOMQgde}#9eaM0<nO3tQ@!iL<~amsc@r~IWIBj+o6j(Xt?$1ZRR zI8ivLCHb_LEK+U@2PiDj81BjNJ;#+rT1@2L<@DNeWb8QV?X@}xC>Aq8)DT<f&Mn+< zl6)0+mI>(iU0k#qPT8*6=FYJErvvV?Y7g8)c&EiTTv$h|NlujjK#PK=8ZN5nvSf?F zf}P$9PW;``^*t}J;85^2?y9X=+nPIXTm0(cLC39<4#c1+p@)VyDQAl9H@JwFp7#yv zN*VM(5OxbP?i@6qMZ)wK5O!C18sJ&F!h?qGXaYKa+j#{sVd?g>5+`4N?VIgAIwu=} zy*Q)uMShE}i5nNp{Mz)H-IaKF9fOF+%1jRC%!Z!^^MIYX?6YOoFff4W{AUs<tfd{= z?w{FSGBt^5#Q9b(%VE@TqehfK$=gcNCq9jtWWd5qX-KPmP16{qz_Y-aVIV`gK|KmI z3id<%4XRoI#R`l{k8#l%F`-$_O=6W7c*H;{w0-6^{^zZ$d#@yMDKx%liI}d}ED;Ya ztPKa}>`*wI<3vi1qZdd_yKj}=jngxrD6`Q8TYadmv>YL8VU}@S+f30wJN%5xi+yd; zoTG36*Ech_)*Lff+kT9=;U?u~oSxaXjh8~B5hFAITKUII_!MON0-?+r)d}`#Kb<rh zLPNbE*caotsd4E}hj2d5k`A_5SMi8Ea#xq?xZB>vZ-=Iuuuxjvq6W00Zj_-x4{_+F zt}=-!+^M*EfP2~+KG9>3IyBq>UGp~1L8m6U-U9t7;4+f!3LiLt;9?tI!EX7mY4H*) zwF=Ds{F*nCYdCceZzvu_PkPSaF`PBM!(L7$4)3<22pf>ymS=A9Tih){5jPySWr_s! zKk<>|60BTXB^p|1J!}gVlWrX%tW&COLP{H{XTBgX&(A^XiF{pkJb>%arJO^$kukXl z@uw_;bP4@oo`^ZsUIQgWg7>tNE(2LVWZ-#Ut1eOvtjF1ym|$GadqS5n2$*i4JUL_Z zlhGnQH$n9P<CF2PXpE)I3g6RlNV()pGYkom9{-#s8DI-*aC>7t?-5bbmM8YeMqta2 z3xs?RW7v~FyN45ASQHw-WMB5ti}6N*NJoO_8WL~m4{IXt8cTqeHlf5HWLSdi5-cgk zD{dBKV<;X{-Q4Jnp|~JY`(XE!mI(Ye6-n{<v1+RdmoBO*FPh)Zf7O9IzwF`<@CzUR z*bQ=5w>}rgQG~xamgw}U<qA(BT(>|!a445s5rYJ?MsNKy%7+zGhme<R9(DFZB=sI= zD{E@S+QyOByWCD2F&PY!a4txUWP1+ShDFLmT}0G;nS?@#I2<dBIN57sZ@+vEjax&G zg9bR}bB#d0SJ*P9?9FFqoal8<2K3fiLk6JD5HE%?xvFe+9I<$Y^|5-^i;}Sr-KdLM zdhZacEl}F|BzR{?e!>*KQZ2R`TN8-(xp3GaPX#G;;)Bk>m;&!eyGHEX(T|*LjT_Z0 zN68EQal*>ftX9^zPK{93{eHc7NX$+&{yE3XyJ*0ehbR$kbMX)dt#Kk<?sdasOLlhO zvy=maVsC4x{N=aL!GM>ONhy%?Gf-WMO<=4fB+nayVNcHlz)}@)`|a0cN}Cf?cG>(+ zspJW9>hLn5*ME4Xw&3=nAW_UrHAf;}Omo+6A;Fy79Thjjg|vn6mvI|3*uKSP-gZNp z><r%Eqs~oNcoc9ofFC%R?JD(qz%4%V0Lw&*Mc!Wg#dOuU*6CyHoXzhRP*INrY6k3i zEWtyFc3y(RxSL_os<P7mMwC$6N9KaHQ0(6tSQgvFQK^}kR$(8JvT+h6SmLm90wK0O z(9n%%)MHIGr54T(mj{XZj@Nf6wY4t@_N@0xx*)R5z7<CuR3)&2?VI*l$Qg_?SXbY< zrN`b(io6)3c&9EADbK3WMGqkhXSA>HxjCuzI?J1En(;_Tb7gt7?J$I_zIevOj%p1m zadf%P@RF@itL}ext!TyGPY3~`d9u^Rh@^<cBx5?OE2j(EJ#M+zgg9+8_p_NoYPCR( z046^o42>X6BBImE8Des&B#z$E5PcG|cSLYR&}Lf%HJ0q7^yfN%9!VCNdi>9LO}Q#T zb(=JgXeR-z$6lwahcNEO!|sB4wq1Kd))}h|bwGgnX{5(850@Rn+UM)m=SKrq1Nh;C z1glo*03CUA58WY(!#@N}S$EBdcwuJ^Oe^?!-#i;YwF(kMAWfa|Z+NrM7ELv>+@wo3 zqD<tm2&IGq(a-`VOK=&BAd3>@-lK&Jjg5>YkO}horj>>Idn7NLGGSM}B|sIjnpp>8 zGDKB>L6~hI-B^iRRB#!6s}$-Qze3;*UkRRxPA;cC6O6`-4D#&iMrw>rzz&2`2d9dg zcqvAcYVUQik=9@-9S0fOik7bX-Ay=JI7wyLR$`v^-~eRA3MUDTfh2Ph+1%o5Y=&ty z?VeOM@j~i=g>$CO(NUCbuBWqb9$Sg={su5sYJ&D=1<`;vqO~|~{}{02#TwrpCy&rc z96s>r>i!+gJ(mJIOrYOry-eC%>gd<RtK@98Vi=}P<c;$HR}>Nj7)cTCMATmF8&)Qd zkk5~uk$co78|Dg63tSE0#|29KSYtObevgUk%9zL-;aNpaE<ON{^6f2+x4DqAL$yG| z_elKkY+m4|{HJB4&FW?=dD-(FIhiWoH6B@YFU?ApWDb<%eN@Usn_s{lVRCsy8_Cnm zsDOv;uT7dUND^92K?%dH^3<APhB=({A&zNO-DksSD|D2)|7&`M^Q!3jSg=NW_9%P- zu-Zl*?M#=96DJI1GD(d)0f8g+e<Io6oLTi?Tz#%y?mc)<OX#`U(Ofa^Xgst>Jup%a z?P}#(u|~Sz=wau__z-YjskE|$jwz#+j}Vmk!sOb~u9`{a`2akrjTfMv5#<wCrPcT^ z<!T;3m4*ix*zlC3WS_J5r}E$`s`sDu&)jvH(Fq05DvwYmF)}aheZh)e*4wS0qm43b z9@?FKgEb%M5J|`kJjNXEH0Wu0Xb9gaxo_0>%30msTz5fZTuIBgt@64B`tiWk0Dj<5 z2P2$iXae9fpZQFS%a*XvvwKUoZ*HM|5~}z{D_|(tB4e`C>R~9<oZW=_I|PpaxBf;q z1D2<8ISj5WshIgo;8`PNud{^{vYzz)#LN`Wlqu37Wcn?`i>y)*(@3qnau1VxRh?EY z%F2mP*{Wq=lR@ZWWg018vdFvZR?X{JVop(FZGYXEjULnNt7K;6Tbh-Dm}pm_F;Uu9 zh$dq*=Wzw}VnCeNkA7NjHyp5|Bzu5OV-E|fPwbnhHJGGh_ZCbJE5J)Zz!a2BCbWe5 z&R*bdRQI_N(a(i;F5_Cb4`|+B*;&6eKRol8&;WxhC5?tZ2n`cqA-WM-f>iofC7X6b z$5b58Nw)gD(Ac~f-})wdky!yRldA7F9^NSA73-+w^SUCKm734OsNW)84Ov!XE$<oJ zMZdA(cP)x~bPX%K9Pi1xdVwDyTt9>Kz#%%105{?Z+-k>WJBXBE$af>wfV8*bDdAWI zQ6$(RW4PmtpSJ*tH3&1=7?E6;@`_TcW8M4$Wg)9;NHwBsIbxy59hvg>)XAkP5e#^9 zu%(e<yq~m@z<joB{26S5FE+fOR?an!63syyuzS*%3E5bu9$&AM9><Pd&I!gwU{qF~ zA&X&8`6CGHu#VN^KiJ5%Giwf%0wy7oE?!P7FQUP_&u2p;U?DNM0&O^5xRYQ=omQ}j zf7^Xl%UIJc8y`n@YabsZv4K_qs0@;3_Mg7ulX|hfWU>EbU69iOxk9XGTOa>TfEz@E zq(r;co94=N&gp1wJq55mE{V65pbZ3jp=Krl_A{a9rIm?kt><Ryh_lqlMoJo9$5G2E z<`_?=6D2T`FO|K6c;os@S)c8g+?m?KNO6*q{kKGu3JQ3(x*scLBGGIVuUZeac@pFX ztAqC0(1SvJ_!N?*ftSo)&j3FjxO#veI2dEK+bU&{+DianvP0>x$>H1ES4MQ~il8|9 zHV+MTIlTf{0}WTvJVNBw#2YUWK`x4$__B~O)+@Pg#Ir@ESqtceMt%KdQ?A++qRSIQ z7A^^~xbm|$nJGWbxkk0aboN8`B0c1oXP?63wg_{t#LSpx@(R1vBP97tn4k%hYw1pa zXhl0JGxD!5nyT+rOBA0GNigN{CzOxLb_F@1y0p3_N&FTW$N}Zq94JQE$x|*|u3^|{ z_-{CkDmmKo>Bia#M(C;lFt71tRr@=HGJd6wQ%f4_BpUxjkiY|b+XTDuP~ymPpi9x_ z4>}Xn!nCGwj*-fN=gePbdD>u)_+rv}N3kp@7MOX#W<^%C!~Q)IaFq`|4%x++z&Z(r zxF`(AIjMa@Z#3=}I@73?B&yyBUl}ac=+(RbxOrhaT`OlPo@h<lRKyYLUgVrBm8a|| zU)!;mV84~yHv`Xh<@kuyd<U3Fi*34Yfqp!2HGm&DRL?F>V8+1hqkI!)Vz##&2Y(<G zkj7BpZ23$ajd-S(Cv(s=ab&gU5V}GoM1JK`I$>Lut^|-;MMeRvC{1*NNY54^CRKy6 zdwXg^p#c%EChA`sH?260eWzaB<~a%2))r3>3_Hebme<M)ZV}v`VgnJs(W~o0(i%I) z&Z;b&+=)V+?gB90wjY(<$JGS^g1T#sR~wK-BZ!dN_r<b~lC5YH0_s*wdcufxJsb&x zoR}%0SWN@q<hi~pO{<|d{c+@-g{W++ABxRg;DjAD16AYi5@65uSB+m3AXLk*`>L)J zERFdTOC~x*iT$0B8Bo<=ft2E+F9X5C@;QcY$E7-u3U522!d|+9TfgI`lTAmlwoq?V zgNbMwvKJyjjd}vBSRAV<nn{~S<EEamRWvi%N;GT&9<BZaud-5!N=%No6Nj`gNb<BP zFN}t+*TJe&Vsy^eI(;Ao-3Y${aa}}keAEwpN_2%s2Ui35;e(i!sx7b^v^^5`kk~xO z_Ztd4p53T+hOiPiq*v+&;$p8LrU|~|RKT5IXUua~{<V<opVJ{jA~Jqg07xGHl`N6? z6G%DIS;WXXVH(e{R5;D6xK2bAU~_YIWOt)w*$T~ujm)^G0mbco&vip+NRep)OU2f% zQr;rnZN%~keQ5<o7id+(qLVlM0y}@&mjYmo##I)KflNots%iz;;0~*I#aci)p|mU_ zwJ6mFhfJAW6>VpC2dQoEvCT$*2!llcZJ_oe1<N{Nn-_YWT4UJn)Zq3^>Pb{SlSo4# zHZCy?)fy6vg=ii*4N$n?c)mQ?`Cb(Lv$1#2FV;=#Ymv;E_bU!kd7Xn7Dh$Sd5EF@b z#Y7r8%0NX2>GY={S@257pK(*0LKIF3x3QJpu_Rj)Vuo(r3=laEqVz`&4R6s7N8=2F zIJTEyiA`hkQ7H|C-N#V8!Uq6X1Ne~voMkw^XTmBP%y+q7HUr<~LE*#Y+ecNP?_H@* zcOqKNInd%H;O(fKN&IbMMAcXOs<88V{J9{cCy}aH@L0NQ<DwZUv;Z7%P=B-1)wZ6O zz1Go;QtJnqf?Bt6TCcZFH*E>*C>vMVinuzr=nTHdjFQeKk=ueuneIk_(vq0u+2ctY zf%T?Ipj=7`-;M>0HdCjXmxoqaJ<X_3?HOm$XRd_&&`|UuVKfs=wr^DJ%y#Ng+Z%oy ziN!F*j~#fma}KodX!Pe~Kohm-j1j!`AXdqyZ7GHplQM>L1bz>L!wFTuN#*KI4|^sj zJBM<Q!Y<OI9D5-{AvxQVFCz~|bRv&ek6s(0Z1QFJMGsEev%1Vd-L~<ML&VM>YK+)t za^caumU20atVx6{KS$k!@PmGe1<&qcS4c}X82s8{;W#RBqt9j@-~5xA2TZa;2cB<8 zd3{G4V4^XO4i9xljY+dzp0!<qh2)LVdu-Wyf$SD6?Tl~<xSzp!h4&q<2Jj;THqxpd z=&!$ZMJqVpK(~i)85J;Ri<?ntC%EeU?euG$55sr#urewy(F72c)4g|u%1F0M^nnDe zx=z(A_e!_X<kJ;{E`;seDTU`Iep`f55|hb92l9kduNs5grx7g7`8_SL?jmHu)|3bb zi8D{|X!4Fa*j6v?%xtS4#F3zn$VZLMK78GaodXBB7?gP1^K7-pAf^h%MTfsUh?_uL zyldI^)s5;EcK@8FMB1nVfs|pcnzrC?4xI2s3*l}Mi3wMlrl*JRBdH+P+pXw<yeHij z{fNOjv~9M^a2?b)P;MELB$485Z6Lh^WXNbsH5&h5CsQUCOzwo7gz0!s<pvO)=}gnM zf7i#G?UI>6T^Ct>hx7u}tp&@NficIDJXZ=`7)L$KRX>}oL(ryfpZ^1iCJXEiAmkl& zER%TCImq#gTeS7K<c4#~NMyKIxe3YIb5c&LSF#<<D(%3z5OW#g*!U5y=YT6g)T^%^ z;Ku`Jiq|VV4S=g&WuU6Lc;M9)jDPvHum3Nf<!67(;%<nThZCq(4C17s^h{9`nCQt& zOg=+Q9Nuoc#AOKLZo5LnB+3x2DL?X&AE);N^rC>dnKPQ<i2Oven<k#A&4^5JV9uc3 zQ_M46E1F1m@rBzptzyQiUu+<ba9JXNJcyq>uQrS*F5~IdeKz!Zfv}>X;@L~A0mX3B zW_J<27-;@-R-)=J+RQ|&#?&%MZ>YC)yxe!|qN7)|jrNKIEa;~L?qmE79aqnYsVET6 zL+rdZ4kV&IAO0S}dPk~@J~2x(;j^XMl1=(Odk%HY>=-OjAA+b$Ks1l*oiUdeNE|+7 z0&{|^WED!fDbMoTId43EIO{4Gs3tXfqE1wwcfgY;Pw4Bfe@ju|{*Uw4w>os;aB<m& zs{W($wy=hbbeYTxI!Tb`Oe9w)0@9Du@hI#+{^Za9oqw@8beW_+7%<zYyYwwzRtfa% zD?C8BdVn7RFx;pBXB)U~)v#XM`bbS?ZL4R`-2Io}Z+Y`A)znt$tiBj|fLor*Eie@d z(8(mA>9OM<J;W-WV@0}6eD4E9b*4S=q*vPUkLV0BjEaz*d6B>vRK3Y0{z#(U+D#+Y z&Mu$5Yd9GPR2N?Goto)ew|+8s%6lptO?Bj{5r)u4DS5qXy}F0MgB9{l$`h)d34La` zr&f8wPUslP;moo|UEh-9GN>fVyJGyJev_sL!zfC(s3I}qXsEHiO}G=`l5&S#&J$+s z{k8P1+%^H>p#w=6QDp0ULMhaKs1fWF$j-<^MLisx_FeSEw$RnJN#zPoQw%7NaRG$S z6A!uUYoTBio)7F9=rKl)?gcj=#sn!V%St&J^a7d;|2=>n;Wm0It4;x-%QOd9xz}+s zQMj0EJ*kXJ9YtLj=M{^L!Z}=^YvZpWrGB}kVH!DNMo0eeLMt%x+qXhX8o@j@jWKw0 zp?ie~1y=+3aX=fGPI#GT5FTEX-SA(l_dwWK!vVvpV5`Ec=b<U%nh}#A5I0VJQS^Lb zwRJDrrgfQle;KM!-}s^7HlUW4Cu}OiB2wr$$lz1yr-`9s^H1t=o5;Ko>9B{EOPqN1 zT;Fi_LP)U3_3gu2iDs8NMWcC7lmiuZ!W5fr7fuz10K*o}@HWed%o@!m>qgj@PbjAa zF`S{ogZfze1%*8Be+x`yhHo`q1}JRpEeU|85h4bms1=v&fq*6}8Ya2X%A<PYg;m3q z1qj@UfT0oC1x@_Z!%PO4^6?+FC7Vt)k}L|(EKL%<CgBDs1_r~5_iZ=5hQBeOe^o=B z4sC99!@vq#qG)!DzcEc~GU)`?TOZ8CC&uk)6W$YV5^w7PT*Q`8wu26j(=0ROtG*`* z_>gS4FpAq;Z;ANdXjPddFPo^=bIMp~A_G0Zc+QwIp?ie~2Ui35@qoZ$mi6>fbS~DW zeg2te--uR<(Rjw^nSjRCy!sw8KEks{%t($yU8ll+hPku?kg%cXDf!N<R$(bf+kR<c zForTZR|Yg1A&*d}7(w7TYB1_Du0=RWfNWHqYLBL{3pjX|LUF6#`gSyiQQNMMSve#i zK|$P!MO$7JNZwOJnh46A4DOX~SCyTdfs<i|avMwjH0T=1Y9R80&?p70gSQ4zpzn?Z zr5GFyLvBFW(NCF@ZSzUMpu^lzaF#!U*_c*%7ZY2WMnFc~xVlLpmz7RYmn^k;<Mndk zV#GSnChsJTS}1Ck<bKeL?LFM>@?tGV$AU1UrSZ?f3l+Vu#rNbCtt-bm=<~ov##$D3 zq90X5b$Bx*wz@}o@L@!4fn+w%hTX@=otaK(<I*+8fK25z>ifA9r<K)Ii7G!=yxkdm z&J1;hrv<JC@Z$nDgTKw2cyPZ?ddir+gCG9zoi`%|1`TEPOk@n}yAE|z^N?E6i}Xb+ z49|hOJ%+^J0xiZHWzT*_!qxM8s$!rq4Ai(jO)Fuo@hHzRx%tK6R0-4)YnE#?3rq5= zpEJy}odDWEp@Ah`|3Kx8S=k9$dF?ZXZH%@{PE2ZC=m^=81@b49XQZq|TUqscoJYn4 zsaqYucx|g$S%k*j>jdb%gM+Zn7L(RL$7F@Z#;?}k*lzVOM6hZ)3GvTLNu3MLX<1VC zyV12mXBRBCXE#kI^h;Hwa|qP2&6Xn!5YR+$6&@r^sY86X!TFQpw5N>!iN_byG`eSu zw`k7Va1-g3PdU3=O&#eip3Scfi{%1_h0V2W{}iLC>KRn-YU!~acl}Me|K6&@?Za3t zT1$+}Vs*Q&FAd6W1&=MFR9!75JJJ`s^R<Nle+#_b!L#(<%N?H}hg`$zR%p8=y2PI` zO0Mv<!PNkMT+jw*xyGIA?au_F$Zl<}zu*1tJ8w9IqHhJXD}&vL-UQU)PM1g_iF7*q z>`GB*pkOlKB%2U<10QJB=NoX>;Vwhui*d<R{o3aoGUIwBT@<e-GQ&;%tM#VRstIW{ zjoLCs3b+2yj&Gnu`KrHziQTpV8j_A=wUW_m6*SSRH+0;l@yc?)CM)V2;zK0vO<{no z(&#VeR{d%+GI{s;;*TYv!EfSGsjiC4NO9!FupJ<Sr`~HhsZ!3X*esxBRH?`zXT;WY z0wZUS0HASN6q|7Zp3|v3y78}N>J)rdy(rM4dVlQ{?L^=WhN|4Bpmf|BL<11#JD;OY zBbL*38W7_=Q##wEhnT#qevwAB#kEfhXAZhXzv3p{|A&RxQ$i$`y=OCJ{q;v!T035Z z)qd;q##Yyr9D=CpNrZ792n-v$7~g5J8$^-QBOYr(IdG`TfG>jr`wZ$|xlzoH-=^2b zUS9g<H-Gfz$b(yS+ExN{Mwn4=zQV(Y%SgK`JT)NtQoG|oMq{uHW{xJt1AOIc-?|;( zraArXH+7N}D>M>tWASc2M<dCt&=UK;q*@+EfE{juuF?*_i;A>9@{u14Fyah#|HCM) z&mf&u$l61c|76x}`Ek}8r#=UGGO;#dG-c`H5KoS5(!}kUvKdt~KEJ=+u(OpY0`-RJ zZYBwhnO$t8c^6a3GQLiQMe<4JeDL0itl@OpVEacWBVGQ}_$5<VU#sb&(n!us#KpKP zueU%mUT}^{vCJgXV&5bpUXgOEf*gz`y%@V6R+V<%L1d*EiuW@2o?6$-ax<Y3kN<Ib z`Q*qMZH`gcxs7$yTCZVx@5y`Z7U*_Vjj1~<q>d48i~mR*9VGSl=BD4AeeCDlEJVel z>!?PKV4u+If=o8M?mIQC8@jIS;03l$o*MtjpZ_~I9e*pIy9v75yxf^n6Bz2$S9rK^ z^#DJ7VEDxmc^t3@53msob`|URz<s;k%R^!?=&c9YuH=RC!3e-~5*7HBJR0#96PB!} zx_JQ-*W>Esl5-$I*kxgL(Xrb3Dy-&jJp~#lsow=kNf;s&6=Q3EHh*yNTl>tA?U;p* z<)Y10m6^==71&+iy)RbhajeP0b0-yWcR!P~fZ?WOLSaJ6bALmo3bRbm7ikA^O6$U_ znVPRt;iM7nR``kx8Vbk(2a=UerCMNXfxcD;U1U1`2J)QE4CQwj)NnFS>|#dHoa7+h zI%)QdwebC81-ozF$Bb6L1I*OA8`6a;Q&b$mD}X37LqJ9{xc#oR?RvG@G14UOB&~)^ z7{6?2bNg=#4cSRpS}nfY%~N$U%JnUA;+e@Fk&~)J!A~gLqj_mai$Z=Rkm-l8gCWjl zH6+{q9K63QK|bX%+7bv{h=nt&*t}PG*l;y~A2`67ggS5q&o;mZy_Gb8iBXMY77n*T zJ7ZVj=pr3uQ#NUZcCobtCK+51OdfWdSMx~Wb{^vzz*jxFi^Cstuy2Bm;66m^)+T-y z+RBNuBb}~gku~b9Qq!l(p<bO}P1Q=~v8`KKP{z{9g`~KJYS|=6*ZYouqOA=2;8`gc zvrZx7-*XMW8R<yDj*aeW^x~&?#0v`^5X0a4EP0-pD48t|%vc#cZvo<SnlfwQ%Q+)a z_nH7F>18CKEiH$D!_bA~W%Ca&kNcSf;MK8V0`sMVvG&eExwbO(ZYU}437{uUJ#UCl zof~q`uc5J}roEKH@vjy+2<%W>OG2}n8`7qk2|I4nkrA^bdnXVbH4&=%$Uv!KI-7Pw z33Ca`10f0*L87B^eM|97qLQ2XEFbkbGlaG7<@5Hn#NPT=r^^<7Zi(Iu+I%?Z%~o&* zyccSrD}0b}HGm&Dz!r_;03}$^@)J`JFWWwFfEOu3$^g!A)VS@E2T)l+x8fa&DLP5o z?+)d5o3J?Kbu*MYLyXood)<;j;W$>Q0F62i3|-fuSu=(GDnOyad3ZJa;ipw=a{vp_ z4lA}{G`}%OuO#DHh)>E|o>O2u8P+cA;{v9}WjnR<6JiYi#TWW`<)}T4+M@yw!Ugi; z^F4rC5KB|_@z=JUMQj~;A2iAy<9L#Ed(LH>O&j4ESF_Rh)N`QO9WzT#%nBxe>8RY( zhoY`Zb)0dUEl3_mRf~~*{Z|?sghr1}S!SON_3@akm4Ot1_(xrJ5knY9lodu2+?N9D z;Zqg06J)ZW2ojoVonC5J$_nKUY{IMV10&W}!)S`1fWCOI_XRHRn><YL?rikYxC}Rq z2$?O&MK2^7$O>*hGLq4~dgE}74*1jyQ=E)*i3W#>(|x<cGtA$yVMS-|R&CLzBcr<f za!maS4-u{g@B@c>R^jju7_?&I>p(v~qR|X+e80WDeMPN66NN@E(yK;P-Q9<)c|22E zvp5;2b<7*(*{)>bH|)e%+Z+jN?k}OTt2C}ap=l`@p6^Fyrh0QBuZmOK#^meq9J8x3 ztZUTq_jUW<str)%!Yy1TZfl?Ni%o5t2ic+I-BBW<1;tk2KTEK047L@G{iUM}Ykk(0 zqS1Xn-LC<b(9&*7H-Y9w+!v>g8M8*An12r9A{2||o+<N|bR*BK!Zy-^LKuk<YM_eZ zXa&a(SQCZ6%MfK4dc~w=8*pkf4a4-d&`4gO{G_yyg5s874gxHkTKtrRv!_86dV<NP zrZH}s$8$WhoC47t?u_6IK{&6pagXO=am4JW-wf7Bt~(CIgbCS6K`lJ);bSoG^#xFY zxY8aYdA0+RgC-s?^s7iW!?Vin3~iC!QxO^IQUv3W`&^Ai_|`8d)CWRiJy9-)yIbyb zTN`8?NDWQmMB1cq*QKxUz~O2DKOQ(rby&fw=NPs~wkD9tT=x1Nwm^$nT2Iebi2meI z6>O*|guCqYyyNAViQkaZ5H!nna)(Jm@OPW>tYL+^W~L9eZ9$k=CfZ*3J_p_@Zk0X& z6HwM3NT_*eEF#oZR3L&R;W_A4_;KARc4juHnRuN(x@;isRhpw5>-E7_Suy1hqM>RX zR;2_8C`fk(*juO7J>ddJC`jKN-NQ-!Y6fN8ajpKGDV7&1Yem&~hBAzMM&(DD1&|1o zI<*bfhNYb~6rCz^5ZBMvv5DdZ1dDVG*kvM45wZ_TQpR+MWGDdQT#=lauaoQ)*q9R? zOqcAh+2V=F*rT@yy^CsnLpCDY6Sokc<@?)iKolHB>WCRNo~5xy+Mv#&ZO}uffSq$m z%hDNe#C@xJvno`hrQcR<b_vpMm~<tpSJ}-mN|h3wr=*(lg*%K4?Kiakr^f}9owuLj zO+qVuOLsMb9|>Fy;0F%H*uy2w1Gro5;B!bVUrE=3j_)_}azulJ?Zss|j8IXqUf>8; zjO6j8mg~6aX~JzR=y}Rky;~&$|CyY_^QW7XG|Y+O$~@=legu2xAt53TS4TSsQ66fO zf=;gsiog39<Iw6v4zO+#9s|;u!EX~thRlv0j6XpMkP!J|UZad^^-V$+?Q;mxT7?YW zcY^k6+dA-Uq<s)sX#<gMjLu-6Go+lS-K)*;Vwxgxv{GhQ+z^7rG<D5`*2R4G8at}s zB(81C6tA@F(wqj}kWb=?lLe3f>=0}6dKf)GKoqTt&4xcyg#Yw`WOpa&r_;f0?{|v- zsB_GrcUx^(_)<i5oydxT9ueBoLs1Lk$s}UZbcUjESM`*|00KwEQ4gW9yb>F<r#}S< zIMA1vlvkD6^Hsxnq|D70rr6>vT#6Tik|=drr?fhp$>JS8J?>e0InaAU9C)0t=+eyk z^GK%;@+&+wa5aD*KGcC3t!hby!(~{9@Pi=?t9wc%JPi7Gh2Er|J6tK--fuBkVWhv~ zHkZz*e@+#QDma(KOz|NwD^HUuM~28ueE6XFHQAz7NFk$uDG#w|<e~OHE->$yd`GLK zG6~l!C6mPUS+dBEDBcb|%QuI#3t@kRwD_kGWb8yuwSzlORPYhtrqFFD)PC&}t`3ow z9`mZWC4SBWaqQ%HyPWD93VUv^<b`0zu*6yRHmmGNQ$5`%(uDTY+&(|T)0{$+Bs&BE zyAHFUjt2?!(UUA&D1qjXR3_fH+ceh{0nsV)Xss>xlxLF_JTT}_0db4Jq`l3JcEZ(; zBE)I4`7f7^qje%r)cm>#YZO5p6PX=k0g4^6vP0KJr0lGS<hS~@&nkGo46fqB&goV+ z>xnxkFL0S>c-9fHd4saqO)j|O$u2}_Uh1DveDNB4o(<eSxp|oqQGj}GyW3{dtHq>~ zlRV>Bcq-v)06%=F0}`FSTs*#9SFcI}`t+wiZCAep<L{)z%Pq#N{wW#FH)@3t9T&J_ z7p?FyB?7o|gBnXRv9Wn$ON>A$n(}mI06*mdyiv?n1~!k_$YBCIV`LocPzKHfl={tv z$MCGOWQH}>QW6fVva}CmVk2=xAya;^PpS+VbVThI@)pAs*MZIxJrjf;{}r7R%W;aK zl4<k%ybw9qEz%=T@pR~5KT+E(V^GdDdH=>!qd!ZaHA0_XmIvE@$P`aU=d`5|JX*n1 zHpGOSP*yp$&wB2R-K3t^7EvTHJUvqM#A06!HTEgYb9AM@k{y&_M^%o~+Bsky@vyG@ z<mB=+S<}4IWg(|5O4*u{sQaPpI0Fi0AO^qV>HmBgY^q#&?af5uJ->_X6;1JGPLc4r z?kJ?xIkJV%M;z*cYTVt(8)Vl4jK{coh>KEva27G#tAo?h6&?Xx4d6!r%-$^kpFav$ zeZde^gZZ5&@4Rd;%xLK$onJ8{Wduha;LZfa<-oXs0F7W1SGt^T)!VHOvNH5=WpWp! z%41h9nh15;%&4FX1>XsK%NDLt6lE4Yt9m)T=7iiz!J3uH)``_Zh@!ed`{DQu*do0` zf?ri8nvfk9$C_$lo+FJas~0v;p0H&LJx40_oJ7pdpvm@_M0SfbZVyC!m2V02Qt-<< zum<6no3Sb8@BIL^_fjae9vIW+g_)|UI4}?-!!*U1(4oMxP(LB4wrnA5{c9WleSVvb z{}BgRfR%NJS@#mRr5)+ixzyk+Q9DI;r9v}4Ds}Gv&?%5Ek}EE3KkDUQrD}(^W}*h# z`MvJ`g7(A=b%B9TA-Wg3%nNa%tQr9Ch?N8%ijz(6>WczfKC}BzGNCB`RU%?UxNA78 zZ@o1e#sF)2yx3o{zdyPC(VITnd5n+82T`Yn9hPl&xSj!i9B?&&9|tJi7mYu&9h#Cu z|Lylj-_@63F;TkRMB|__XRC#X(sPp5CXx91dzCIU?&~|?2O&Jem+GwGfo8_J0Y5A+ zX40_g8b0r+%mid73R%D-Hh^iY%r99YtM9#Tkfh}=QgVh0D=mU$CAU1xn^g#NZki&` z_6Ai;*fW4sn$Ex`)yN=PDBn4r3A_kvV}+OSA$uH-5y^R9X)~s!PQWL`Dbq5tdN@;% zhaGH7LPSH=u&(e}ONDGEZ>YE=Ge#n2mJlG#^+8)S)AB3<D>n0TX?&JCXDsJ4<KJvQ z4%V<!<K<Kc&vc$)_*SS3;KyfzqQWAC-hP3<JL(W=;tS7G)w=bRB$5fVUL!n|+iaeL z&mRTDe+HSjDkiMQS5*v&arALh#yBn_!HRNx3p8hp1Xb>h^I3T-Tb8arl857n8e;70 z|Kh*+FJ3bF7|Iw{D|feZI}Z%oqp$G5;ez7z3LgZ>@v>*OlD=)*VA#{acJH${7?1hC z{MtAF=I-~Sm@XmSrx-AVty9Bf3e!0{Vz?>>4kmE#w;Cy)7m=p;;rS6!p6X-x9gbTh zdl&IzKlWkT3w9-wNG~>Y{5@`CL}4MTfNHp~hD1cn^Rs$kzVeSNLXFI3?KENb9Hr+p zMN1h>qBc*%#uVD_%QfBEnlw?&^{Np#PHVL+_OV$7WbZKp?+dKdi8d*M65IBWBvX{; z%%R4idP+20ky1jW{j)F{PG+*zv;KZ{ubi`Jn9RPrMPq)AQmZPCyK!7=k$e@6Y)Dk+ z+y~s}oG`q--pdfv2KfCAVs;PHlxeKc0QXXJVc*s`x*kL1y8TW%I&taOZHhPFK^}|g z1amA)YWRCkp3v7{|JK%(Z@6{otut)|ZZ?yy={{B0IV6sp2*m<aa)^im?>`U9RZ^6y zQFV@SL~bi|9~03hykao%Z~Vf?KlankP^M51R*s`Bc{h0B$l=-~eTAnMt{&hA4)y{p zYO<`|UU!7geC9JZL0-bV?JzO%%O!x|LI8?ak0~^MM|vH4>F_TuAO$Ol$vdmEs9zeO zS3EJ4f##6OVCzjr?>nwi*0|09{P}fSo8T;nct6GXJ?0}_1Y+dSXmM8SP*`TqQTp68 z!uB0)yFz^@a>_MooDi`Se*I<ht{~=mZv65jEjuRqBDb_qR6;0upDJXR>55Yr)d{L# zzSpqBMA3MwZHU!o+mYzxvf?#-+<qsOE0K_s>1bF5C(ET{kEra{|B+6R*;BBsw?rw- zSy|}Q#|WQkTx0y&YPx{abmJ(IwX(11OOPq}TF<{Q&5dwS7KY!o%9J4I4lW2~gBUru zSvaH@9%d6t9^eqvT`r;)vq<YUGr9_MwhzciJQ#C0ca@=@&WUXFx|+#;N^%(t4e&+u z1&08}YlEDIIX#sQehqo0ehJ0sy)wa%Uf}wBHGUrnTv*Ir;R66Qdl!S1&8pT>-e6cg z<R49puYK*?|J5zY{}k}KH2ADn)5v*0GtX^}!_~dcE$LZLv`Q9kfdPqbd8~L%E@OO) zqjM<Rhd;dE102DMceN=EZRQePQL1vH-}?jKmb#gI`YqPZ`(b8Y#!B8IvFUw%M7*z3 zoTb@i5Hz+{D4q_n$8@cq?CM2PF<e<M2dmz3JJy<a(RGBK44yIc!WIv=8t8G~%EEJE z%cZgWtIRsGdd&7pnW|`0Qr+qBAH+C3k|)=}v+=f2x=75d<@Bi1xqw6b`(Z9$RCAw7 zB`HVq(rqsk%jx}e+t6?kQGlNl`jI6wKhUJdomM>>MH>*KL{ShA7o=>~CwCs;uN^$V zKy&-4PK?e^^8j=AE88P(UB|1xI$qJYhN-G%CQPCYaDDT6>oKfVpZXo;nuc#~Xmmsm z%J4gP9^ikH>9ZwGxJ#1i`T_HNP+j3c!PNu&@S)vUN81>+BDAaAU>w%73?|(%&3p3X zO+!HaHe3UX0)<%?kDg%7MNLGhc40)An>TP3&<b>nb3ApFp0^VK$wU{BxHKhQ^BN-) zZh1P=#P3f&N1jocWY{JzZj+-+k8Nx#KSm0_lBD<bF>A*}M^|C8z)`9wVdU1x6j#Qn zU`Iq%`faFA9Z?io>`7Ur$RIpKvtI7it>NydL4CrG;PjcK<ZO}<#T{lx9~&ps<6WA@ z?*$?6V?i^M4q#nKD{YoZl&Y*AU~2%>KFTq36XX=P1%zvZW>zy3nmm4Asu#6T?3MOx z>*;AQ-XdDt<Xm_5=y+7KtKGb%d+pvnwU$2OixauvyO7DYV_?~=d7Hbzn-naQd1A7* zT4vul>u^VrrwmZp{L0a2Y<kpcOU>k<7!jw%okC&5s?mOPXZVs`<b*MVyX_9ox3}_A zeIEdK9yiSk&iz`$`1C<@g{KCt2Jiz17>LR;*qp$jN-hBomF^kl&zA^iNOoiRR!<s2 z%2|nCUJG?jYyuhMZYWkZhC;PZ=5?!)+H&OVqyAk!*1`Rk_e{1qj0`Un@>maUh0?yD z@~4cwDA90gKMxiZ{;fYqGwfTox}sZNRB<BK2f(Qr7d_8GCSj_rARcu+HKI7cQWekv z<voUB(8+1ESyoaDqSDr73sVV=l{echcPe=2fKogg4Jb9Pz_HK0s{@X!at*WqFmYt~ z(xfqT%@8BqS<8FY-zNI`lvcfe!F%Luiv$Z}J1UZ+0hwZoCKpVZ2p<TVkc$}XI9d>n zusUy@fO`O=-A0w3W9&o-4U6V#RDtjd^T7^SGf*?NryFwuZ1N!IIWUxMC^Nz`tl-yW z*#gBqvX63jR6>QWwvz<;C1R+<pfWRC)QZCHvGzQ%;S&vCrmnBvFu#HM0+5k$Tn*wv z<C0zE3LhX`4d4e32SeAadT|+`Y*)h|4+;x)YxDu$6?&6F@<blsqu5oR)sVd<53ovK zZ=kYq6Op3?A9Fe(i_tQwk%nY&i_Q6}0g~r5T&;9Q?L~oFh6;?bxKa+H%)7xFMlIax z?WSCM0)zR#cnc&WGEr`1sk01}Tgq!L#Dr}{{#hVhs#w%W2{M<z`!Ea<^hHOcOh#K% z>8}mw$O+K-YQNv2g>_ez#p5%|0TERXWS_O}+#xgY<1UtuPAd#0t4s;8WbCDov_+RY zXr%CZQw8JS8GX$b1SOp$@;gylA`|T8B@I9_W<%OMn|ElnE9=f8VsplG^?gF$(Yf4n zQi#2qQCY0jw;woLYzyhcVL0zsQ5@RoEis)0>LzHO^yd?4w6njd5>`q+==xia4?Z2) za1`mulRkP%85Y%&NJk1=xp-i(UhX8!=P5~hi2vvR{GTgZsGj@9Ezl5t)Vt{l4<4=t z@FRe_B2@;ZFkFlkoRw{9@o+yH%g+h@F&e%497x7Q#jjWGa-K(#@Vlg89C*8->U#D9 zx-+M@Mb|RIWC-t<mT+zhIfOgiI$G_lZB!DV{o6b`A=8mLbGp)#)r+lm-}eUn0?MYR z93YC3GUL!HwDq_CiTWFDGb7qpTb5cwlvTT!Um|kG)e^;hAOT@Cf{){>hGT!E0p*Di z7^b@?D64?wnaQ4|Yex(yx>r@m6~<coQ6G&AfAYzdw>8>oVpoewE^<#PxiP3t%I#U7 zmF*apdf0UQ%XkrBglsXYM%&S^v)D2cWfM}glL=cxjq#Krp|K<h;+aTxH|9F*&9R!E z?f91r6Q52?7Q@scJ<9!(MS4s{q2%=mVwID{*<*MnI3xKV;)drY*B~zSHUtQeyqF$n z#v((bZgY5yNZf;YZU!lZ4v?yINz%T|h$G{%8oZG8Aa`!$jZwZk16VM9eMB9Zx~{xD zGOzG-!_@$O1OVHekFTVSTCu_b(na1~`J2Ca>lI9oMlj;QyvO;X8j+%fSftt{4q6jn zG7UkLQK${}uBPbna?}5+4qD&u8|;FDFCK?^jxmho&;}zu=f*IP66{xwk_@4$m$YNF zsvPQ0sl`Q<b8Z#-6;0&yInGfNuN=%N@M=OjhgbX_as4mC9Gzdc-Arr({6&OOGYtD| z#`74qx-a9T{HHH%VTjZ0MO1qVj-y6dOqtz+iwtnEPb33!Q&6jWS`)={fc<yUEVJ?> zsU)eSUhgqpPM!x@C?EgPdk#CgY>;aVyeswo@h^_jYWf+}`yT4+NC2EjD^wob18oMI zZY5m!9*pP&_dJ29njK_}h)(DTBpZ1^6-o|tF?bhaprRMJrx{V<;3)v<DXM;G9VNKf zgt}zSZuQEH$7rGL_D4T_DcZ>xg@Jxssv7n`_wXw`0=OE$j|13lV=mxswZpg!(Xaj5 zr|wqE;xiN05cVr-`Z@BXswpZG#&-5!nSg{8GHqOT$*Su~hO6xNZ3xfKXytK17-^kW zE4Vg+n1otMm?|I({A74$RoWIL0Ec4Rva9z}1D2UZ!7iQu%IVnP$grpHOcdFDA#T~* z3bcbOO@EY*gH&5c?<>j}uFavl)R;9)8#G<!RXGJ@Qm?FbBG?b6bPiO@&Gy7A0<_kd zl;($-2U%#cK4fv*=Y~hxFP<-y5#bTQaI$Ub*Gc@i9MQuej~+c4GLwvd&U3oCi6Y)- zu*0~n1_GTAde;*X-{ZvAcU80i+5-`1*4sH;U7vJD0YeP)wy~q_=l(lHoAeo&XS)tU z{Wl!2bC}mC=sw2K6di5)n7?hhE!1;-U0uqYor;63nL*nOWD{P?G4lSZ#2w!F)Tci6 zM%Dd3^O?`E&0DrXbAWeKNnpohaX8)IAiBc)2G7zJ9s_K0t$2K;+~zKDt9uDNCOf<y z&OChj)1U6DRo`E7JooU`uYLRFyO;kFo)@;pBbn7gCv0(^;#gU65DCncITV#F<DqV6 zQSIb>$i$*_O@vyW4+=P_CtJ1%RFqm2AgEhcTJwBQ1rKygYXiZ0Mc6jzv2UQeB~2)V zAYmFsnPwmpYC-YGfNK<-AY9_gW@BaE#p$d<1jivtoc`6Ay0oD=YgkT&p!D^7=#J<S zu3iJ{39#p4`<BLzMgM{zveuH&yc=SDsgAxybgy-uH5?Zs;4GMDNyacAa)sZu@j0cH zGPyYZt#xn?$%u>5yk{2%F4*6#m&@)x+5^c#yDys%>HW~hROH8r;WY}IdOJCxF$SF9 zCF&k?b{C<4eu*ueOnfB3z;K==vMNoJP}c{9$t{kA9@UjTW1GBWv-5YyZL$yIdYJw6 zW+1bnaSz`Brds^2=c?gb#)L$>9bwD!1xMu-o(8yjfFC#n+c_A|D8R?R8CI?MVEmd% zu<NXM;kR=8QpM?3-0)xS-<I1HNOD_T#uI-4R#{}4iyncjAiOZH!tn}yB*#X!3#sim z9~5kL$R<ou<F_@g+VZaBbUls=C$y%q?*yC}eUMHHb`RTd9&n_*!tI|Oz=N<ku2Ffs ziP`hC+QzcU1o5<aGDUNxPJ9~NQXKud+>#W*j_Fa^?r99x?S7ep?Y06!3Q_4Z22m){ zS~*l@S=q~m?wK&@(zqr5WUo7$KNS_7y^cowB8d747Aa`J<Rq<`BTng(vEk?|X7_wK zfXw?VClbi=#ZFn<TTi2@MgW@#C*Pxi#wp&atAub8yBvgU0-Z<G3Wr(A?S3ipDz4Q! z*&9R>la*3c++N7-?rXdJ*c;GOFypb8frj4S`Wrb?jy1wO@4vw44fD%^$5v}XMQ1kS zq;7vk-C3o(!o!BE2l#=*=zK4%cBN_IjIWwn?t<Rv0thaT0)%emtv$yAu1)NsCwVpD z*ZIrpBr|z)h`-gmF<O5`q8^jo>Z_(Duu7ONr-YmXBSDXCK@_)(K%;DRLNJrbf|0RD zd!NG|btv-yV?Zw+tlDB4E+J@5@8U8FvkLoK{n+-(;;_uqW+C(IGTc`u?)rfH3<oe` zS!}r^P-e*_w$C-)g}P&QUN1K0C2hYN7q{?XjG-nsU_7vV`t8&{FKT3L!aQzLtZni- zFvtkQ@le2Gg^xNp5zTLZh8{Cq<uYV_)$QmeGS4BVTb|Va^2$-NuCQ^5ZXS7mE4@pB zn#;-X?Fvy-=m-?k79@HZ%7I`E24hD_aUNt}uB&P1Ukg*wqxql7j;Ld}-StH<<(HRP z|Bdc^*mlcpG=~PDt?r<mLY)u7L;X;Ezt!`8+JV9wpbfBfoD`k78o?c%Nq2>Z3s(>D zBLmTUl-<NvlUU;w(rgDDnA(TKixenZ5w#Iry}vz-ymH$J>*sVu)GEL$awbUUyw_sA zr&Z9!__`tQ>hP(6J>2xIJw^Qx(fat-^yILr?u37*aIp`D)g88V5Ers)S6EgjvQeIS zJ&g39rq{8LZ#B-4NCre~Gwo`k)w<{e;%^E|t7SC=feI@6j^~+iERKz{K;XYTO$7DQ z9~?VT--sATG)8%ATW4z8*i>9@VuM1eAb_C|EoAKW{95q}O!6f8u1GijdlT?1adUe` z@dJaSb!aa^*1)%;6wMx${fH~W3GD^H_^ky0SzwJ{pbC}NQd3lWLZ<tZe`cFu3YM-l z6(Kg7+ANA8rEL5Uc5Q?OTL=5`wjN&4!uV_QwglnMJP}M>^Ro7amUi48<ME=VR}3^A z!y31kyN=_qN|^j27cTY(7IN9;^D^>$*cF-W#(>?Ey&5+t9Jq8>c))NqfFB7+|GZHR zYVT+W)^ox33<X>Oa7=I`^v5lpx<CxJTz4T#<P6(Lm{oae^}QB}0785Sh6wVzong6& zk{$7Sq3S2(vJ<9lKYE&MVYfv+nNTC4-^vQ_&Ds(~7AZ1f-tQL_^?)4qK`eqQx3adV zH+0RgY~<oRiJf;}Jva)Z>@rBigFM;T3K3w28E}wSlRheGB4HdpxD>Ol#q@r3xhb@Z zvILd^SgDdGM-_-c0nB0@Y~P>}EbGrQ4j1?rZ-U;fpWE)h`qd`o#ZZd%?iS}X*EBJi zG1Rs3==eyK<@AwmOvGj&E*JocIt6$JIo!Ox*0)x`N{+y^4N{LGleFE)TEP=^67mwB zExM%pjVYn=7~m(z#y(M-KvD8cVAb`^RE~MX4uLH(Izz;IEMTF=aA2OOHx`pCXY1ot z2V|Z55OymRI#xPz{6*Yi#Dvh3cb~jc;*J^WCyz`SrRc#orZ|F*p{LCWa)tBYY5+eT zIEoTH>kw_#z#H%?lpFArBxs*P0`DgZ7rR1O1sbj@wr2{MHL^9-_4aES&akgxa@Zfu zxJ|qAzWw2`;CxO33yXxF7GdZwfuNH>orQGPWQhrJTXp4xhFgFYj5x{TMC&w=R0ovg z*(OA!V!~`4SUeIutwDrwGr$%yRz)Lh0MtM$zn)RKiQ-WqgY-I_6LTaR_Dc}SidiwH zC{Hr^O3QcUk(=iy_^?zpK&q@#t{8`O3WCY@uwJ{W!c?ESEZAL*iM?ZMmZQaiRlHFg zR;f$Q;iFCAbbgEv44ZWbg$)>^@%UKAz9{swdoj*|)FzUoBb*4j&SijdomT7Lws}sJ z9mlMKm(@uwYR|8df)6NI&qAT6Y)oTV;!!cHOGJz7B0GhwAB>^6%OEPAU&_F8Xh+Qt ze(>#=w&*Rv!P&#*R%dkT9CTyUgMoXJ;yIcvG+p6g!PNkM;9xwzf?G49!Fm|rb~U&e zw_wozd;i`q9zKKghMK}ye`l8<uN6{}9NseaG~<F*WVA3*NSn#50FRMcWAAV-I3Vrx zGj_PEAQv$>?-`;hu^##@EXnV-3TY7YN4U=|rXIY%A2p%Dnq;bdDqF{2R(5?$jPEJ- z`Yb_w6xNMmJ8|<|FAp(g)Eqb?(JM!5Ff)odh(&c(OezUtZEa218L=efmDz=|&bC2! zGRBZ0B744dOJ~ziZ**K_YKWsn776GFH6Cq^&pK62JCv`yD|iH3DeUDvyEj;Cg!Y{g zHw7(J5*{OcA!bIT5`nZwy5)nsZ!e`_q3(Q$E>XM`9qXYx;&1<$1VM|O1*w1-%{#pT zd4`vLHc!W9jmCe#4;xx1Ks%a-NK>VY+&Whq0x~vwqoZ$zlb9IKleMldzAxe0ASWbT z7&vR73~&5{fA9~!W3!;6sBUkrUqvx)UIDN8g*)*TK4`c$<|6_T|Jh#<25#^gLD7P1 zx>vsPjX%D*;eS}u9ssvgqrf?edeH0aZazeh-eE`DDz2>aAyOmJwn;~D{xv+hxLcB2 z47<Z{+qXCuxkw-W@Cy!~g&xOq<Ng5wPO=<DuuVlKb#KIxYVv*n_BmWhcEyPFw%t=- zUfO=v^78X3XHAh+ye-@NIK|g`sKya~;wSBQrxSbMV6~q+<v8o03Uh|*1mKk<ONqt> z=8g+Lodr>Jb^|Th>b6%&o*Ku4NwUW2VEn^2Q=OjfW$p+s2=ou9<EOzKk>(iVvb7hA z;N9{##!EC1dnd?#dyyQ`0QZFeQN8!%34Q(bZ*^{(G0D_MH1{|*WsHuyRf8M;0i4JK z`$`QLL=69n9lv^@(OGjOCF#Xnzw-+p|JXkn#1En5i@M|$9syiEz>f>UHN|>{!G<LQ z0VJAy9?waz$!|T!TR160II<T93zeG44tXW*mlcnmHYy)>v7rAp{gXY7oUx+H3n`EA z(+YZG#BiuX2*+MjJ*p!3f*E{QlqCF8Fq_|;J#owgzoi&d`)%)3fCPU>1Z79exIUtC zWt44G)bcDbvs2Mqh1iJdN@BgrWxK>=pit}V<M%9F=6s&E1v(xxBXIstyZ@H4bDqK# zWX~c5G28O<T3KX`JhnH7NSqK^LtL`Y>qiDiIA$kEy2jyn{P($m7jm69DAiG@tt$~c zoCVEx8jeTZk7o#RBLn8pn<MrK07hQ3Y)pnAEz8907WrX`qxof#Mh~MT6vEq@T1-g7 z1|+|Gpy@Wzgb1YT0128s+BI+kan|!2rSE)+bIhQ=dJNyb0gO(d2)1cb#0_mWmtu*W zcK`boo=&(Lzz-Y_1F{;p_5y=))*)PRPCUN~o?-sHy$R57vDLzMb&-vEkX|P5DZWkm zhO2{=7<qx9Riwqdgf2GAXqTgQi}(j=6FXa=@nj6uHmP_V)xfIwI810Y39J`XMJ`(z zD|IV_w3{BlvCe~9SxayV|F%w$`anSmQqL%GW;sVnpYOW;{Vd3gC|j9*ywq^)CHS|c zBWD0j$;dcd8|3?7Pab#97=<Tu!sH0wlsUkUnQVFW`^lOf>pyQt^1#qrr|RU{AkIU= zL6XsipISG~leP=*X@fA@4dw^@c`%Zvg$t8<Ecej_u_Bl3TpV%|akwq6Nx)K_&p2Yw z%9sJ<)C0+2r$+X{Gb$@=HM_P9d%0zm+4prVmm(+0CZg;F(&?!wz6AnLqMub83pqW> zZisOOG&JlM?mIp{PtCSXXN;yp!zEZ919ii<8pKya_;JAXJHU?v+90im`wO%|9vL}C zxE)^(M)Td@QDVIO@;6?2=0kmT%@KvYGgbJZ=QI>rC0!NHOY_*ud|enQ*WR10IpA$l z=R~M&fo@)Fn$gLOl!=ncz0T45%<rQZos~`Rz?^?<9y-^Sry@a0O1p4@=3NHL@p(|$ zLR;WS*-g0B2+-Y*(S0nms2s7u6m{h29n;4cLuyQFfdb3Y@`}OgtrH)vSXmj276RGP z#-zrl#;P-Ebe&-L95#h5Q>5T7wdd*3xBuF5ZLz&^ILwVKo;*IH1w8gV_UDp~c2rHo zpvl~~y9a$AHR1^bJBSBlvxe54BGYTt&L-LmFi#q$m0r&0bwew&-C{NMdGAyz*__Tc zQWeBERMw9biU<|a4!MgVcz=nerv)UPILIX7gvYo|^o)YuUR`m3(&Yrarxj(b`3{da zcmIXPZ|kq3ys+4&fta?*6z!1BtdCjT;KZ=~zV^p=pFBBUfOWXws$68%i=%MII&(F6 z>o(|GFMRzB(xZS=W$hK7QUJll=6z{yMZx!lFMjdwe)J<h^`#n@O|bRmVH9Y&?IgoE z_t=Eq<P0$N^SkLe<t<WqIB%ceX`SM&?Ieyk>KWkkAkz$c9ez--V(iXw9RKZgTf%F5 zH0#q9GcpnhbJHsQJw+HP9Ch?q1FMy#trAeIJf+k|8dl6vbe`;zux!`bvMync4cjcu z8fe99H(MD>3DMs>^!g7v96U_>>x_u_=WVwGE;>ot-%e=q9?VhO_bjuJln(sH=ZaU5 z;JbO87%Ka_M<xfjH$UHBx9eJgdN><rSc@FRoL6&eff2oNV$KHF1*&NI-~!L1=PYii z>KWjs2ErI2W^hih*<!rq$1}iMx2t^><N|c6_HQ(WOG~WsYG;X$Z)m{2pXp2({<i$+ zAN{>geB$#RProP!bzO7TS3xzL(TjXFfFB23w?IDv0ON(rK!tf|JmbNc2{GyE*M9X^ z|N1WEjerhW{LTB+lq;LAA|bVam)d<ykdP*NG8iPlr(VU}h`|aT*{!~HAr!Y^t;1Lt z+pR-5*-#V0bZ;;+u;l`Tw|avKh0uoRiw`Ygq-Co2HQx3XA()SWEIWLCQAGN?1PP){ zsnJUb0)|kWlTT|W9=zjX&oV5H4>4~tNt5@_mZFUri$N4yQM0Uw5B1Cm!kv(vD^{MN zBV8FXch(3M82^B%_hkV((IU(`ov5>+SGfmspu8_q5>F3}-{rch`$JV@7nBmyjEcBO ztm9`yx`oS9M?DQtCU;(T;z+`AxZqTqR^S=S2HoSgf<q?n5F-J>T^*@rvLUQ>7!Hyz zcKgiu6_+YUsKlI5VEh{VsI<wpIOdaa%#@XzNg4Z2ES~`NNeFHFo8=Xa*#d9;%Ev$c zd2{ry8Nc{RP;?p{c0n5449*_;Ae|LgxGY=^;D-+k10NT-8q@<2qM-=^9Q>HRJiihU zY`@*utZ|qQd8mP25Ql&Yf#lH*>4d*Z>?og`(H{u1g#S6j1wmsx-JT}(T}&Rj7@T9| z`W4?ijoWHZWg^=mp_at7t!?lN7QXSQ-$RER&FiYGt(t4~fQc-zMsc-+VPAC=9oA89 zo6{PT_HSFc36Q9=1&EiymJ7o)sNEcjV-9nMDzGg>29mJ1vy9of;?%3Jtq2-18P!~t zaR2z<r{r<Qj1qIAo+V4Tr;^3e7}+kScL?-!?&DDwtc`uOQ|KW&rNqzW>ncRbd0X_Q z{eZ?Zhw=4+24e&l8hp%h819Wu3loi-PFsb}#{aa!M$*Ovn|`{6e?~r9L_!?{^fKzA zoJ#fC9d$?Ja>7(y=!OvgG%<Evw8UxS_VIc~)$`nzf2PmlI6D}&xN9-^=C71=Mg<lz zM)zJ}dWEMHt_JYKhicr`Nmay1g1Umm8ji+q{q`B5{Nk<++;x!OF}M;>aKM=4apTgE zUm*<^8l${!+cTzT_DWZVm+7JgXhNkKzTJTA;nu7EK}lV0xchisP_V1>_lTq7aSC8K z9}U9y!HC6GjN2H4Zpwj<V{JKC3?UjWk;@>=K5LLcI1Zz#5Vge#N{nYoyi>CHJB1PT z9N5*3w5RR2DmsRhwQ8(HVx{$x1JMdesBE4PvuzqehGJ6PxyceIPRACHvRNU207)}( z#842HV~`+o`5hWnJ=tkyq~SvRZMv6oDrIt5M3M?z$0uRD{yhTQhe+P_7?s7nnDADF zERhyKqxM4M@HB|)dU_+go$ivc!;{4?-`4Y<pOS0~9f9ry)+i6hbMOLzsK-<T+!n!! zL9+R~0o%j<#iz&cC-M^J4-DRxAGj5Z$E3Z`NWH?-09OO};lrlOb`PAJ<xoH%+zEtR z+#($qj(mGVFK5CgGBhKhraWyNhpW;=Aj8)%ui~2m#>|R;omZ=HZY!o2hd>c%E0bjE z7bYTlIw3ZS%Y+n!^?XuSZ%P2gzinQse@t{yD`Xv%K}drMe0!UBRIv}4(HrG=rngH$ z2Aj$;8B<K-c$d)HFp?#tgu5-xN<WvOsSjqbkv%PTWDAVCm?ZD#c1Q3`R7OWPOE1fU zQ8jUdm#0}*Xjof|DQelM@<OJzRKA-BNqHEX)90lE%hIYzdE(5F#{pC4P`a2AtZ5*i z480^RY75Lp^ROvX90It8i5mNB%7gtR5z^sVS2?ko@Uw0lC-Ah|qtRJ>k|3q+PZFdi zHN|X7Bd{di`&+%LQk1&-8KeL+HS{ZEludgZoe+)Sx=35osyjFuj>H(g(_N7@OzRAM zKxe$kTpdDqRPYLq1Fi<}!-u-184Y2v=U`)FwS7YA2=Vr*cR%O0wW6}7e)}H^GEM}X zCD(-X!aVIbb%ux`8iM#Y0kuf(Q`&L(Y`5|>kE8J#2$3_!&f?~R%GUv^2iw|ez3p}1 zX*wwWLOz3?w1#p&id_Uec^B1x#B<dw&!Pori<#ESAd~01!E~fRc_k>L64i8=PzFfS z1jx;n#^3(D7otT3Q43vlp>EjCMvyhZDPR=QBSNkwBZqzNWWG^XRw{H+45`bPlSG0Z z&Ox*p_bbaRvw1);sX&$t_iPkT=nX;5uW<?yCkMCi^Sct#K+yGlX<=XIPAtGa8ff%n z3+9w{8ILVYsN`9p!z*YO6X^5)lkLQ{8BBxQ1(qmT#Sc9#$Wh+Ps}Q-lSk-gEh~pFg zw(ZuOF6xBj4ZX&##LtZnqbs<)#t6=imz5i!D_XKTaRQQ@CziH#@(Pazt_JV}2i*E> z-jDIt_{D);jb+4jfO0v&@#VEwzViw*hr-+%)lI1c0o#n>kauGo9~mYsL=&AQRusU3 zBCLxW>Ng<z88s4V(-q<qAU{hRmBtBRr6klem)kl=7YEfBNE__fccjJld`DpH1Z<Qm z%dl1K&MOes>j>*!DlpjkZ||~avYnp^%WP9L3Y$`1bAvI1;VrKX^kjVoA<7pu_Johp z${^e;j<xzF$}&>AXJvHC9f!|Oe+^LDFqeE)4m1U_y|^T2ZS$4zvDLiaVi}F&F@$qQ zh#~5^Hk_w4IBBYLz{<Ky%s0%jfzot<OEIr-m){mp|A~5O&OkQ*i0wr6cPK+FZJ(H@ z0V^QpO~PMCV+XBRG>Cbp(hy0-h&C*1W*!*e==~L#$m4C-4drqlvvZ8aW<9^8!p#zC zVkv*`J3sn7l8espCXOL@5mpH=YRu7bbmnNi!qWiPMttBPaI5>>U;Wk@Pgc1G=r(-y z%<v)b)z`l9r912|(oT@UBqhTMi~^%T3q2=@tDt8838a=@s{W@J1-hZW3Hn>5lrX*U z!X-X~G=e@8S-y8;dVmX*eaC=ryIM1PvUeCLR-}dQL&U`@l}W=Ctgw4LL*&b>V_79Y zgy~KPT+EUQH^WFfwnwXEXF&Yvr4q;bd)&6KT!batEF34n&T`~ymMOwvX^!|wGxxxY zHU-CQaF*aq{Be+7zJc(i0j+)(nUcYK4THA}R(dp#a5GL%#Yt*WTg9a>^N5jLaeZZd zSkUMba?|mBc9&d4kc^F;*&u@H$$L-eYp;K^bHX)!_2$;3DDS!)tP3f2r(Z!&T27i# zJX$p!w13t<KAkjOLC00PTL--rdFfN1_?iDPb)A^3PF&v)#x9%>7KtyCJ^pZKcBPrF z@RY;V1N^|Dczy+h)p2mL`A(TJ29GbW$|Yr`kImN9iu-ehX3f=bTkr1yZf+>w#)9}L zDp*Y%C$f1qPe8oY+tY`YVlh0i=JO0&bO&_e(bhH7CN4gDen`?8y~6d3Pb*5@u|T+N zi!YJIc&7F;ft9*->oX?4PNS_TPH|vU#ubjNLFXtER^A?k`&i4;F{n5&4y<M%HG&L_ z*oG@s^)5~;DFGfsg@$_XG9ac2=mhp`vxo`r%v2^JYRgpXlql{6oY4%^j)iF7a4mFl zQ*iulyMPAh3`zc!9Q&kk79k@zs2T@*jNkQok;%LL2J2<If3S74;Xikfxg9!&=GIxW zUYgTR<w}^CCJ>E(zf&rj?=J(ve3d1ObR(M#cHeQfRZSt)Q%Fcxv^?kbqI5)^PkfxF zhH1$U_|1Ooa|QfHY}&;MRx2P;dgA~gdAUY`{v<VRd2hzAIrCeRsX$y5xWrJs!czcO z1Nf1E+0KmOH5#m3ws|z;*{=Fw+B*^Qc?@WVidh-70{8Y-PnMDJ%NT4C<GIs8x($pr z25o%h8x}x)*u^139H@pOL!%y7HPu%4mN&!v!NJ%|UA9DnQS9=tS*6&rL1(k-M-=}4 z)JR%Xqw$7Y%NU-Q*^NX%rZm*_bL68GstL$H8=E6Wri{dM241FQ8-t*!ZxZGg$Rla0 z0I<qA$zT@%Tz_VjE$gw%wPcMVrbPMP{)-R1tk5A}&W0PRh6fa~iuQUw5&Kc@yH{of zAo{p9?HnMqzh`<`SC#P~Eu9Z2FZIIdSQeZ~wEVVzY=T|1YrVVSu~dY3ltkV{j*|B* zCqXv+RRTNy2e57T&FBB-lHXnw4-yEDDqfC1jA5LPdohTbzCj6Cxz{R#-6Bfam=}WO zapaId{q^|E@;kv+X0B-~RL^gqli+#ZY78@YfUocf;A#Lrd<a#ox_Si@qC}G;>48r0 z+`?{UyG#HtL5R-(Zuv>QBglflZzZt8dm?hmnw<^<Uhx)af#qMZyp_pm=D|A;_F~h8 z&%9a0(e`h+#ZiPrE?bgQVC<bA=c$H?*0o?lb_P_S1thBSeZZ_d3P9;=3-XdBnyFfm zIVwp!hV6rqeUFJ6%aMMn^*0JF>I*}>H8K-AopD=(t^#b8QxI>_Tdhz<dJ?-A<`&01 z=W6>RomqlDImoJDk8oRK#zb-0rsPu1CYO=Iy$U}6M%#}6OLud(aC&AzM&rDV12w*R zA$P}tfb1$czq<%I-C=dC_G7Yrt;-cz!M)h^{rER38Y*9hx?@ZWI@thcACq3!NcD{f z6SmbroQxa{HV)qpPTbJ~dewby-;tLN&-F8(X1q0BxERQBq{)Xm_4N$!<A7@;J`w;= zAlvX`Aa0M9`T1Zx1N^W4)xY`ZFTD7(-^RSk+o*7BBlswjwRky(9lXO8dK#GZyoA<x z#Cm1wgwM*rMV!@e>MMnJg7V3htkSP%g=^R$?T0^n-)De5#NK!(t53i|)3$%VU{7g$ zKf*Xx{edGQeu0-x(njtPY8jE`B@WSmoR%|+i+;}sY_q8SII=;+MDAi|SC68&mVFxS zE#@@$+i$;3@4okh-g@gTdhgvQ^xl*A=-qeUqxass`+M@FVSVc^U8lf@o_j?4p=Y0y zXP<lafRUej=2<#CKX>={?A`MVAAbHw>xDa6^kKM@U|2QDpy}s~Hw8Yrb$eG2NUD<A zFC1`~(Z{4TY#5z8k~yT)s*dktbg&z<_aS}kVl^yt(<MP^9jb!X+qdHA@?y)2`ouW* zE{WN5Wc_N|&|Nk}2L{p|4vSS19YsJ|tPm0*!v|UObvy%HlC@oM^_{uZFNPf-UEe9? zZFzLM&Iwb_8YgA#{JEw8U9!Gs`YZDM#<$=4>0kS`PrYH1MCW^lEghU24$l)`;bFqF zbcF{GMM$;7{)bhqyOpn7X6BiofH0}6T4mMm_<V<p{=@(9AH4DESHJP{UC@h|uM2_0 zM8)CG)Q-Q09gJUmpRUG6lax(X4ObE{a0_lRGOp1*NL_J;I;O_e({PTzCy2eId8Kw^ z7nIJVVoke$V8UGXq?J*eT?*;YPr_S+D$_z16)2wc+ezA}ORN58@;JT8cGwiVEW|~> zxv8=O$MldP?apl8F#`wTL*-N^JQca8YEr_KTetvbxie%B#_ikmz3+XW-g@VqqrrQ4 zf9tJxlu=8H#i}S4>EyqT($+mnoxv3g!MH512P62y#TfqZ3(wQv`iYOw3+1;nF&O`0 z{qbosF6n9l212iC+y54OmQ4!%V6A)PbfS3+HqbPWn#Mb_oGkt#n^9f^jbWEQ0V+Lp zR<r-J4_D<aTTCTu^I}LQW0BYLAXZ*TyiGZ*tW4I$v~Xb~#9g0<Q07=elX1nw;v`ze z@9~m1e%%Tq^>RTH2OPvVJx-iXpuSBE#&6}6np{oAN+Gf7i7{{5_>B$U`aG_@yJRmF z<98co;2es!I@fK|2XC>BFLhzVQA}Rp0mG$a?iD^jFp3gGn4c<wC9nvWxfzdN`RePx zbwfA5=|ywRr!_fiR6@#@KETp{oQxGWLE60A)+sH(yJ1{ZTG3}_>p9uFvS_z-Kl98D zedzh;sd)wH{WXL;*qL-O7msh1t}D9RGd*=M<A0W3DSuY+ua;(iG0*n*JlJD2`@B^_ z>9|tcjcC$QZP_S6G$ODD&Z}+eAk#UQYn&~X9lTL~OZ35O`@Qe~;Lh0n0e$z*;QgEL zym>Tu2gr_g9`eoQGJcheyEQ0b5w(R}MH$ecqcE&ynUYIe_)mOfGlu{6Pk)qt;?5xc zTOavxdiL38d;Wo@dUkK;QB>r?8fQ$$4CgdxxTs;`i$^TlG(^<vwnm);k*r;nFni^o z%ij^LrC*d)oW8_?dq*m}hbT=nj(JLNDnn0{D}*CBLcz1#QI@`t6z3qSz39o4!7b1? z-RoQ98V2z4Zm(TWV%EL1r|I-N4oU`%H7?`0aKX5u4GeV4>n+J=U;M<+{?CjKtDx$^ z))`=;ZJw%AQ_W6Sc+hb506zjKBUKIBA|%)fF*~ZQkic&MQ<uf^4D;u2MSe4)-#w4H z@Uq^Zbb_^tJ904sSRF(Ub(CKVbi*r>HGC+C8|Q4_51b}ztykD8Qu>*;v}M9nE9D;$ zC{O-kdi74lT%dl#bZ_4_tCF(RdQQ4z%SNl&M0uFbD=DsGOttdqgcPukX?XCS4Lq&g zjE1KgGo+1S3MkpQSf^%#2*&viK&AQM!Trv6zI$irzH#^art;_xdw_9kv~sZ0v9?{u zMAVE~K&pG5Rk{qV!=<Lw$L1kS^r=5N8t!+0-~86MTlnAliJy><eB{UYZ~xR!-5JF{ ze*BAT<jlUVyG9tvOMR^5kZF<zy<#)kzOR>wv*mWi@5#fT4edULn;~4s?t+Y6F@94o zt?HeNuvp(p?hIuOFQHAF8qipSR|Yal8rA{Ml=zO$*HG}eD3a31LXNnc&EN$=<JLg} zeF$_$lN8?*MTpJ2=^NUkODaJ$Pj;g{2N++!V+~|TBMe(35BhG^f3stRo#!nM4dE+1 zY`7Z0j{`Q-#dv(nfNh2`3~;I2reQ_v7*{S0s6wIQ;&-1sdFh#(XFTD7Vm|T)YvD(^ z^3U)qI#_JF+hm#$duft43>{e>8!4>OZ<7o8xc39*-T_b+#3+DV!dl_Vwngd6YK^ao zH^0vXjEZL4VmKRB!&fPweY;mHn9fAr6cZDF8bsw8m1R^`F@3s^Hzt}Y&7(ml!Mmd# z^u2k#$RJFDaA#dwt9lVoaenXJ_vrO+ew)7Y#+&qwyWe;3Jic3+ggK7Y`)2$~*L_*K z8>AY%f|ex=BG5@a#lm(K-OZprm`p8)a37=FJHhARsTjxK{oeQZ?vGyk+UrN7`Gx17 z=Yxm%r$73W^wU4}(c^aNa{oFlonIWm)ZUOFR8}%-R!WxEEhyDon{3-&YoDzKKj&E( z=+T~0AB~?914ZsV<@|Xg-2K$(uR&G+XEOIlkBpq*4CDGh9ZHfus%Q@Es1J7&$eg46 zyTaJB>q2W7-QO3R#7o?uWU7C&Dldu6*R$$$LXi>d_;Gxj!dSz1VEpR#;E)dLhi!p= z0=Mrxd5OECTkvrG<#I%@9vAE!z}Nvt(2;vkm_x(*3J(*mE%^u_*#ceWCqE%V*f9+X zgao);g!QGnd>;kEZ4$HwZHW#h9T^zE;`MCy`D&R>B{V~=mzNr%YVh_ts6thr6}~Mi z*%kY73-pJcCs!f1T!m-8H$!-zB5@Lh$dE=2tu#(GnjiW^(B@_{M%Yf`YF4)x&g230 z$4o(+<jdj|cj1__kt=;HGmfL@b-+3w>8Na*V#Ko1_^NmJZ|;oVJ8!R4&nfrb%`U5f zO~JjXN|CMO#D&UO&Mh0rH5G5kSrt<0nk={Fcv^|9>Mm2+4h^=pVM%+g4@U6Me(dki zPyN(S9=A=O)U!3GNs?$R4Kswpj@K~^5LZ5ol^f79DNmqfJ8V_R>EaL{1Gx+#D|eiX ziF45k-U_Kb9m?WN0H`rXmggo*##t%nH#-x}^L}zdQ?$8h0qK+5C-k+ie{&OPH{A4+ z>ISZl0)4PnEn|lV+KmEp7}q%%4H(WjcX$g5A)_Zs$d^Fa|KmUZzddufy9T&$fZHW! zx(w(Bf^@I&@Zs8$j|BR5yMB8!#MwbRl+o6pJ_wV;->YBw#{cIo*MH=;Ac>yPt><@3 zgQSs`qaLY!WDQ^vvkqJgU>TID&U)RuNygxnf~Rp(4B!vds-P(V-*$d|dIp;|Vr9YV zvWpz2D}$%Q9s^P5GYTOOZpT*IS82htu(@LUe#5M8j4e1w5Jkw~9W#r1UuiF`yeyO< z<3E9ehxcIke)YB2j~7=}u~bmGbpnb=K))wkBdJDY`R(f^T!qR}RJO~vV2$M{9}=CG z8_`yeJzcZa7!CN7pf3K9@f02|*7})`{cZZh$A4B|s<i@U7}&Xjr<n(_p4Fw?u{Sgr zt7bTldioq#*M(Vph6=if#K;XYXy<#P!^sGWZuN~*c08%^+X7bw0FP-6vqf@!4erYT z9%jP{S@bQ?3~^iy;M(<ET<@bDHCm#b3-G8KRyfh$dVIVnhcqcnqZf+B8NkIm`#Ycf z`M>i|0HJ_`XL*9Qo@1(uq~NmV>o({I50{aOSNOm{;4nT6TJF*DombW<4vb`cISP(1 zf90G1*`1pAzlBUhFrjC2tn~mZ!6-Pr7~|J)qR*>}D-S8}a`)=p-rn}f7_4)ldT~}4 zsugdQ_cu3(ORzrFSph?^hiTz#O8XR<NprA$0>iWI)A^+Kbi&N&k3A?v-XlyjR+Q!y z;<`Fh=&gwPq|+7zmIFr^RtYyFj#fO@D`m~nRUPhde)nr%|Arim-n(ZQ-lN^U&d6*4 zM$Db}cMGWA-u4SdZ-AZc8DK*PbiP8(ONnj!^ASr`VdeNNC9dD%FD?yUoK+RK=v$VR zgY8jXc>V=G7{Z_U_|F}0n_dQXH9*=uZlxlvcPoyAmgQ>eOgxSz&Dxx)IrG_WsZ(Hi z@lyYDHaKr&TKREndwjj~YkdGP@Jjs#eTq()e|Z$87j$eGM}0YFiz5DJbX}=}&gu-{ z7IU<8H;*q9;g>s(#^VvAz61+*%#ksET{!ZF6)h^UFI&<#BLkR07mW2<`agf_lRxv% zXaIxr!G$hI=}(wxukf_P4PD_uL-qPr&u?PXN{|ndX@PK9F_UUhmgI+j-sAUPGDwV3 z8vjLNuf-#Q`hYW3XH%1=80;AhXDCxH02_JfX`ABE+&_qE`$ZDA>;%8oY`Qmzx~f^R ztK_x_AVxv-lS8~1Aujgm0qF7Td78FB{Z}>akP^*m!p2(GM!A<fz6nj&|H8l(Y_s$m z(vhOB#@i%~O;;%$Zf$<$)vwa;|IthI|NB?JFMs)0uh0+Qew*vCtLrq7PaMxoaZzhj zQNp*T=gp98ms$x^H=tz`6~$1dYHyO&tQ;wcO|D`*ABcis3kK}L8+@1xl)g)W(pJ6J z#`u*Mr`Y4S-+B93m!JFHe@(ylhcD4r4`+xQDpOfroB)2;)1yRdPz^{QGy&d|c-SRU zrX~or7i*U&@)ReFctDo+k72}RLj?Xs8urD{3nA3;ABj_5!a(`$-#Rp$pRnIfswvuI zroXA(0x^N6<MPL#K0l=D9Lg$z!OsZ+Xck!*ej`1pqhlW$HAQ6jv*%TfY3vuq*3bC5 z75QBGtkLlgof@5PZv5J?11|0sdYMavC0abZ!h?frBR(QP5AfmnaF8F*_TstU394g! z-TF*L{Xd)o{^X~A=G#E9*aa0og|?UT0FxJJ7?+ezrxiUF2}(%=2M=&X?}YsArgCms zwFmg{r?)^KAd~K<S|OP)C&d#2JzQw3#jG#O+REL-p9aWPr4o-G4%2q6rFjKYP4mIP z$U}r)7xcdRO(5dBwu)P-gDl@TH^yb@zW4p_(`$F0-q*hV`tc$w2BWVX3yB(G^X7_d zmq?Xg^uiuJE@7z=3sHB@B-I3t8>OV?9%l+74#q8QhOQHHg)sL|!PiVe%KPiRz{m88 z-$G|_-0;Uf{DS<{M}Lxk<(EEnygX~mh8J;-p&2U^Pi#pXH~h)+bDj!20#VZaPX?Yn zUXBt6^U|*TM5A3B<%z~4cpnXpvMv{a(@-m^LiR7v2%L4y6KL3)oww!|gC5``M^*Zi zMf~HxH>5Dt>8zds_Pd}M)`3xuX>P^_Gl%lL&!ssa+L2*?`|j;8z4+qKy;9QE?T>=_ zCc7V7R}sH^QfBn8@UY<8ijNC88O+<uVC#p?17Xb=KEOZyU;S^sbocXOKs#8a>*0_p zF@6i_NT)6unHXZ)0KPpYL?NfjM;xwj%B}gJLRp5cVTUcy&p-bmilI+Qb&utANCmSo z?0dW@j0~XrqJtAmnJow>;inO{UY>tK1XrE${J1h0ZGR1^*y(@2f_N^3+YE!Ur$uNF znN@=2s&(bJ4H|^I;c&M1OMm?e{mtLJvF(B>hAcJ8`r|UyrlFqTWb#@!hkey(?827k z8}7F<hlVBl*Os~O;0bhVwFR2G=oS>+rA~5>MXQQ-F;=ya!J%dE`zpiyr+?}v>BV3C z<nhcfmL=*TyDz}XfJZ@D-y9&~HpRH;^^v*`b{q5v|G6^UFK7j6XuZa$@YEN-BTU%N zyez}4gq%l=F!`(zhYsHfjor@p)8LFnPkeHR8h+y%s(g9|m<WvAgO1bZ>@GG)>xxZ! zvWip2@D@O$64WGW@wMQMbVr2lq`)+c=wJS=|NQ^{%LiT68oyh9FzAgT965(TmqdYj z!P)o<A2eK2u3zElfs@)51w#2g@G%(iz4F!9f9p<E{btGFRs=P^NMdLs*Tp%CJ#ORy zCh3=8MFwzJff>Sz5!{0Bo}U~(q}~Pa@eJ^XW(KecWxG{6Rs!7WH<PuEpUMGxic*FK z@zc6`S|@Nk_vG3qD7Ko&Q{^T$2`;Z*#}v|dTgJ)}D!Ccrv#CevE5wu!pYi$H*I$=! zf9DO>7eU$Y;cA>r#sH3~_cX;rd@vk?R&&fLBeEE!C2>8SLYtx5hXFQ!qYav&Ics-V zt7~f5QE{#3ez}#h>1rDqWF5CllQDRqWK2^JaODTrxelJ-U;ewFI-VB}(>tj)kZ>#A zhQr4l;B%=3TfXe*>@rie>B;z)&;On%YiIa*X_DGUJ2Z@zCPLd`IK`hPOXv)D(NKII z_&!BFFN9hHxU;hz4`U{8Jkl1%C5^tgu3&&XkpbM^(>CL9PQ`flX8J@ciJ5FmJN?UF z`1r^EV>DK+(M#kUJPKysU9-jJ3J)BvXMi6M97ZJ@!|(87?8I1@2j_spbhje?956HC zBHPh<YS3@Wv=1we)}RPfw&&OkKFDR|c*4>=##9^cW&R>8%T9skt6hSypsobyN<2T` zC&ZH)y9q%eOMU_pbq<RA%zePhq_y=+96u&L;j@L;K8;PS7D6J5_X{%$l8mdmm=wh| zjmrKxjVIIiMq$444&UtktCwGu|L=eE-^#!FvoF%Y_}yZ=*LRQc%Sp9tdKOm=>xgr+ zQ(5IXqyx1|mwY=54E0#_?(O0D(+o#6hzI;J7JwnlRb+Eilp9a+%y7Ufb;THeEZ)Q$ zqt>*3_`|pP-~8Jz%IALf_l`GiyYzvn(5U&uIaE16wIl+?Jc{G~sux(p$CE(<IdBf% zXpZBgp-!PRG=7f>vY5b#iSiF=*9Q!YFbw)ohBwMu!z0FIrLT3q1P8ytvlpu5Y4fs* zWIZrhM^&0t&*C6lqw6vtl>D4kP{?=+`J5UUqwOCe^b~LJ(cJRnb9I|d(O<V5+`j9p z!a~-4xSHjz#_!{TYim9(VBCsIq&3ju)$LPpyxP@P&e$%q-Ti*?l~+FX;b%YmC7q>y z4W!})WPrY|;Ncb)EfA&uu>G}{O?e?*y}6w>D^Krnf(j(?tyEt08Q?>h_5eo{ZZ-)s z<+Gku&P+XUH_8<n&M-XPpcf^!0yQsrDc=V%udH}c>YTe`q+5K}&}j3w8kIIx6n+`V z%4@q=R8*`7?C~L&Jc=Aq(ea0itzP}|Ysbs24(EGMs}gR5*|2}4!NnfE^RJRU6TIav z&s_r}R^QugbT)$%ysFiIj@99|L96E110j^mg$|p~AXSg=*g?_GI-~D|qQ+vj3#VWn zN98biUwGkp{*_;P@%SmFc<bhA{kzFZJ_Va8c{Z+jp$iY0oAIEtoC;3fus(|7NA-C! zB`RL)fN>5wiB3k8SLDV{{54>qdipUcfe>mTOVrP4Zx_&I8#eXP1N`;L8DQR|Uqyq{ zQMi~=Bxjws`(nA~%z4071&#XtL?@!IqeTMl5cc+ue(;a~-it4O9=9x`Kn$EbN*~t6 zbqh>N8x#2Y$`u|ioF@^l@H7A#y;9#{pog+~WGEx<AdFu9>NmfAm*t}s4+@ngkA)I_ zpc|MQ{a|%GoVO=ips9Y+$O}lk1dBM@9t}8d(IBpuU_DRciFXW{S2|wBtnt1M%{+Gj zl?E~0FXYB1&^I0CF|4*$oo(xS-ULf>(R~}kmw-*h$h6{9uys6#t<GQit5=VoF;b}* zwmO#q;Jm=nWMO+9)u+7#tE7lT8S05e5rS@7K7}N0t1?R$I>$_Ydode)$5h9I!&LRX zRt(-_Y6KTwHJ*-4FyVaBmEoabTjSWA4@Pe=#=r2w3&+c{KKb#VBi{yV5{#j8tbR=f z;~co-oQXYFKW9T*^eag3b5ysn=`4{8;&(K{6l?f!o*NQe!sgz@&^p30+gTZX{G~3z zVi;@!VI&g`;O_OwodNtcG=NJu8o>QsH{n6<M7%UX*90Q>IN)fkqyW7Fea%mg%Up-- zdMksZz9o6(Q=j<RUpj=8%UiwXDf);XUJz^J1F%k^D?9?YPZ@lL_ZRA?i#XV_8hs2{ ziKb}qgORKv)H&dm4s|SYUSMnF=E{cz+>tkUWqby>m5H`(N%e9og1Bm#RD-wSfTTC9 zzXQAmBc(tl&)d75BrKW{g?(^od5*JbG-1=w7>*~$hXX5$b$7w}cE41so(ofz&nm1V zrLtxi8bDjzcfRu`{kuQ^tK;p?Iy+n>g$8gzWxckRe0Ww^H1k#Gs&NdLYl+-))EU{z zQ3_hC8J*oY6u4g{#JkiLinp07za`9V2XA#<H0sUxZPUWMzdED1@g6AP94sV!_=Okf zSAO}<5dQg}rIY)!Q>c6Jenjgu_Ti5jP9sI-{!$PxvU=K=q~`^I9pC!R8lkNY1cxF7 z;QJa^d5opAFME)%>lRxG+vqskG6gWqNFtd6G@w*`_#~XU1-c|B@a)#UQQM$3ArVFA zddm@xW<+CL=Nb4?x*KT%K~bW(aP?7Lg4Off((Pwo{KU`w&ke<}<DjnFClx`Q0v=vl z5@dF@V_xAYh3gsM2M*FNF*y##Xj_IgV9Q`P3JqJlWt9zF$!&iye;)9_YTWvy9;X-e zvj@~FDLgmh*ApY004ff&<z+V?Gr4FL{@}R@=KdEgT}aI)nw)^{AZPJ<Di~&>@X7(( ziL`%%SRl{)HOuVKPqy?yXV3bK-6gU0wK|!bwh+q^w&+^xo(s7u+e48%G5s(_Dwv@M zzWvtQ^!tDG1^WFz{u5EgFMh74UiwsUs5+${?#Xt8SEBDXN;Qm0X>&E7kT4~N;vr9w zFGc<ywAFf!xIE)Gg14e`|1~6gn$|}Ux^d5K|1(#^mTLKM4&bb1HU+OXoZ0exC`bL% zUR`NrsB;abZEIg$L>==UJo$g}r(Zn&ZC?Gg{@a?E_m5A5iDojd8cA$ynH*&lD`6Nq zjzsd5r-I1JoO2qab2?UONJn&9jFJAUBtct!E`NhbxJ#gx*wY18Bu6xBXo~D0{rw2K z$duYq^#4MyvY;?!#hU8Bh4n2}?|6Pu-5b5fKf=|o4Vg?=cu6<Kpl(<7#fpmBB9hK{ z^F%(IaA0*`Bj@xAOVy2G3pJ&zT;ajP)c}6@&_oRDC10t=gh~v`T1iuZ%H;vuS|KdU z2}p(C_>JG-H-GS*{~8dsA6yi!pjPi73r>KpH1;{3&kP-=s-)_3zt;GWwwhVhGvsGY z9-pI7$lzJ8`*!{oDnKY+bY0?OFPx`P+4e~im6hl1xf;dyIrHqrJyisPv~I;5-)cWp zN@Y!HpD&<o1rQqbD!%Hay2CXNIpIic389wvaKY6V|KdyZ-~6lJKYD+uou6&_z;Ki* z=cE|JjX^FKKUJ^oA?<dFRlg|fXs}`NKz~-3Xf;{DY4sjr054#xR#eelMUsPJ;_wMn zKQlGl>c|G3`_<ntCg>9kJ8r7RDCI13Sq!L!<SJy0qPQK7Zu~Vpm{l5^wx+}0u~qLz z?<-$>oj&)w|C;{Y7r&$p;Yg(5d;()*&Fl<}u~u`vsqBsu{LOJwoG=A$3th{`^@+fy zC+wv%Thwcd-C}1LE0>5&UzyV;>g!B_ZRhyXrZYUprRNCU$T(9nR)TQH&;`KF3M50s zzC-n)kHegbIP&uRnAAix-I2R))#QExTf50}Jw(QDHXfULC%`Yj_ix{M$*^K4NIB@X z#-XDO-twoEGV~OaSFx_}z~O2DKX9-sSml}P_O_xZ3Z$nJU$a*@#vRT@7!qpx^l$(6 zZ_9u6U;dXb-#xxj5FSZdVa8UuFmciI7GVB}!bvJt)60sfMQSvgzKzFEHq;eRAE;=l zTtWDpV;|RVi)M67w^dIXf&^m!ex&r}u|^YXtqTZf#xMqbkidJEu!)Q@17RXcanU+g zWC+XP`E-~W^~z&|O=H3&;>zfg-}vUY>A(H`&&w;Xz7{M6Q8CU69F5oR4Hjpx6{A-+ zqmbEt6S)62gSlU3MVorKU7Oq$Noj_tRmQ7<ZH4dA;5}-Z#N}UMyDO)JF{>7?x__nD zMNqSfv5qz)SM>LfrHc1XvwoIId{0%L>9`+nhOM;qD1tgc{uyq#wy1=_TU^3k{_<<` zdw=i}ef4Xvw?v+}c?Xebr8iGA6OofAWQ@CxY%={op4IVR<|i1+dq?UDt+u#WiR=U% z|D42&lS}x#E{EK%v+|Fca;Io`_#R0}mmr}LZf}NgjGNZ<VpCX}O6>5s$JfLRNvhE( zrmr89+c2e<HN&qbrmEM)IuEx5F;2&>1Vd8tw4Q$B>E-|DzxWr&U5R-6b9ryW*q#ec z#uIvdxq63;6UEIxS9q9kHGm&D;CALRD2p7bLDBKwd@`;14*yhPVn2ygJ~aMW28}_y zoe~P&8jsH*CxeNJ#!<MkSGBe<&87j7+5%m9s;iD7Q);vZGaP1;bxH;r$1XYHoS>!$ zYzvxJ>peoWiZSeiWYye$eyLB+Y6bfPfEnFo1z8z4My<e(Nfb2TqQ>z)LAG2}``}w| zze9iU$6uh&f8pQKTW`J9^j)#}rFk#=b4|nG)rH^9YdBU=nwMCeC9a=6LO&sFi&i?H zG<s#^LUYxNuV^!+ix-#zF;tC32Hjt(SCzUYoR_1Lsb$4WuX@<FFxEcr1ixFY3yp+u zFMRa?i`v2sWua~qH>=s$HGrGjw&;KR=b|n<i-$i%2gboAL3T*>rSV@a6En#7vX#(6 zx!9lSY_QaLmO!OkVL<Yb*7at%yfNC}2e8=3HVQJJzM~;`B^94lS%Jrgo&d^$Ih*&C zOp&erK!(1U%S{VUn=TPs%}P~5flic`{m9!*Pmp<qyDnCE1KM}5pQ~w$u3DWw;VsX& zAZd38+A!{lbSqKaX+&3e@Nh5l#}(dpI1bLl*cII7fr2f1hA^19H5`P@Z~oK&^>5zX z-27HS48#gU?B6&0O^bFEY-CpFd&#IOwpc1HQ`?rE<kJvUa2tUqx2T%+Tc9g%d?%fs zFPC85o5HnGqxlS3KP0ae)5WYIH8hs*Ul?SJa_zyijLED}@Abq!ZNQwLt*WCjTr6@! z)wZPRD<3et`jxL9Z+AX?;^+wQ*`Nj`OqXQb$+?~nR)N)s)t?R87QOtXSyC^QI==8G zN}`HW1E<TBf~?xDtjp64TjsvsTF_%!3~Q-YCUf(w7K~{laxr{6J8&5m)-l`yy%nSE z)dn8-00%ciqhSvV3e^g1e4#jg?%8MQ@Y$qK{o*Gk1l3QHKqhfxxygJV@=zNqm&A?p zHa5lv=Z*h?#5NC6E~Z&*Y)S<gmfCfUX;=f(>dCmSu{_RJpHBcK1JyjqUexp8Ge~6- zrd4M(BbnMl4F{c*S&w9GAUY1ojW4EX4O4f~&`ASD16kqb{3lQT=`a4`&;Lu(R0%w{ zsxwNJvqfLVv7_*MS~btQqH=|&8m=DT2M%>*3Vx5lJ-VHnqxuUT(&0d^+eab~@YlZb z?awOND}nu@?bQvcY-~c2=AeYWL#@L>V4?9l!fkn1y6uGCdBEXg3vyeYBsP*vQ@XjN zP6<JK$nJujIE!!8^6(W#?BWIF!T0;{2H&@R-B-0cy=LUMe_&t}CH@mmV)xexgC27( zy!F=G^ap?R1^VKj|J7#v;^%le!Me>^hiy#2#<bv;XY>}gK+i|r9xe3-<D+;e-e9hV zWV7CM(E~;H@a<qgE~K_UZ{-p20JGWl-0`$Xr9%P_?UJv!dsjK%-=)t2wQf*I2pGT0 zU}qlq_DpAx_=4KnWveZz_$=$OYESmN?>&(}`}4n~fBgq9xldn3wB!CyX{g#&k_h!W zC&idf83jO7c`6rkFA5!$dws`K&{=mv#bx=>oi@###)$c~;oZX-#s)O7Tkj|@?}?CM zmedoxD0U+QI-37OMWxcQhAYG=I~Dr5H7cVcWKE|k2r>__5<skZl3=W9oiLcqB!5R9 z-+Jr2pDUj}s)#HywoZ}l$MkE|8GD#OST%l6A5>R(s^Hp?j{qdNvb`-;dC#tjPw-Xg zAmwA>1Ony&hs&_&|M-9Uzy9G}vVUlCYg`n1d7Wpt##!;w-bD*U@tcI|_8hKi7lW`C z!c_r9uiMDmi~0`m%?&*__zcoz2ar~jdN9+_Kx}HJpP16DOyRmYR{y<A`j9#6<(`Ev z;AYl~8V^+J+3IQw^Qt^nDa2NNUt71q;hVl+{ENRjcqYncd&=tjk-gjl4DU{0gdSgo zBJ%3$czuZ!TwyFdUe%kFUmnm*dEz9G5|OSYwNsDVCYB<vSb4bNsG3Nv1MsAy0Suoo z%6fwJ?h2fa2Ki#wZj=EGWkGLn<&PqHS3jBbiJ$+umN{s`8npxL7$7YKO)$}Dl*GKJ zl(C`d{zjfYA9+8slW(`EF6OkIWJ=n?H<C=Su7+ZQ4DVVyU*h|}N(L#`IG@A=I;jVE zTV;d!0=>iAKW6*y@fY>GEuBw;WysjXO0Xh*Uth(Yi}cc`KKV2M$R)rRX-8HV;u+&N zKC~CO=)SiUh@Yz`_;J9VUU!A35R!q&XyBp%D1%yz(W>GQ55+U-@%^t~dF?;DdFGk_ z1cZ@O%C(S#l}4@4b~db-YFq?cp6z>J-3YjMtD)NkohVP}p^9#wh$4M+vwa8HNkCIU z_<XrRHKwXpD=~~{sOZ%o);hfelpiA4RooI-3>$io;8vz7S-fByo2I1uf=c0V!}FJ3 zeuZBB@@qs^M!7A{h`?;wP0~h2Fh`$F!nDV}zM+#MZ>%w_%hK~%4yvdt1@g*Y^$53L zeG!!Cqint!hz1c{4*UxA>sn1)@kHO<;_I?Z543yhvo(ObF|CZ>B9FN*&nf#4jdWnL z^^;G0{Ac-p@ZbAodiL38ch*rL>}<c!<lz+e3Jjzv`;?c4ZlLbN9?DHhN;5>glP(1Y zFh(w8Sx9Ax$!hlcxot_~l5D%1qGy?C9oS)^Tfb`!;1aQ703UyXNfP9RF_L@6KK1zi zzUdl9eq!+&?yi@(DV*BEU*qA)?d|{N@BYHi{WFR|GUtpjid_o@`Gl_U=-^qp!h?ov z6)G6?41*p)DTyWE=mCaHuuwpBfpNqCue;y>qzVgmh#`YSJW}KUESX7*q-b(PTARv6 zeya=jaAs48GNmaan3M;&@*?C)zlC!TI!!{33YHl$)u5k;b%Qv-Zpw#?7ZNB2O!ozo z#+_!@jE7!g=^aWh(B!)pK4{PiY5$g}h_9`dYO_2*rx42BE0Ol+bb;M)!0^5A{eV9I zC;yh-e*5iej-l2hrF_a`+RB7C7EAx^4;sda&}+u84hBQGpZ5iR%`MTYEXrsm7#<B@ z^%Sd`YrC0`_0PQy>bBDIja`*RzZXWyZ%I62VL@S5cr9wAh~5=cB$Y~DT(`FK7u6fj z^R{{{S(NchYNL@tRToB$B(F@B{>gg$cRs)R+SloCzVoL1`~UbK@`peCJgtKyVbBFB z9z%)~+A|WyG7LKnE;{ak%s};Unk+@{S6yKCTS8AppVMvhO`W6_G-|y`4kU(=Q^>Eo znr3I3^EIHz$^0K>3~Qkpp;XqoYX5_2vo>tI)!KT0+g6YSxn;l%rf@`7{g8E-Y8vkE zsH0TI-+AY~&ypFo2S?7~YbLm*8GjG(na_Mi$t25Lq7(FPboBr~3b>vDemubNcYH7B zBI|$^<M9<Z*Wd--CP)xB<~?qK{?Zp;{leYj8?2TQOCll4><TnEHwFxLl;ZV$0@csZ z3J+f1j;DN2R-~;YM!2;=zNIHm-qZXkx=;=xWel&ezEg&>(Rv*>`dMscuW*EICvj6; zR`Q>T&6QCDZVT+5e{tELHn2QyeK$^v{k~iGUD@tdbJR02?0gOP)vvsEyyf}rci!oS zE<*nnEte(#mJY`da;Jb9tU3JTt-k%aKHIQr)GBF7-N=ogep`4m44M(nc#)Peex(Vd z?NdmFSK_WfZAqz=z3Tr>McuMHCCfXbHzVAPey%i*?b_?R@<CRpOT$(lWN^MWdYAGU zB$=qmUUD6|k0h}iZVCU~@BaVkl~=w>Bb-A(Vb*!o^G;xpF5@@2DOd+k3yb>@cdRlt zu(v<csZSWoeSVB08^t8SKKa3_A7`|p2;W*vIae-6F#b;gcfC6Yga_3jD`9qESL<~Z zr_@&IdRm<l*q~~fk>q!3j2B_pGjKv3qbJzMb%g)@U-{(cD9}|gO*M9lPI$x^eD3oI z@Y$pY1Qv<Tn<TIBRKV2$e&7JgUDIMKlmq<Lz^%$)UA<~ShyboYQNNFIe+>Bxuxj|< z|NDPme*M?~gYVoKh%aq;D?esZEAo(6g`l037AL8u(XqeCfFN$;sebgF+FZiir*69n z`R=<vx?5>{>u3lc3}Oal360;ZIOiLUFnudSmJ>>pJSV@t8>sRN*hfs4GLzmv$R=#* z)?pnuLnHHPhSs8}xIkpJvU)!vqnx4Xd74&u*z)|vzxdMOysx-hp6zFNDrw!(nt@g{ zmc|+39y;@@6<cnXPg(xB8GhS0fVu1-9(Cku6d!-JXav5G|F8{`_MP3z?)E)ig1fH7 zd{U@wxu#5JI_<KFK1gHoo4RjvM$dJ_EOr62<u2Z8<g=B>gjwLijHpDB@@T#9{Z{J( z94^TEvoC&$P6D-^MSL*4=kk2-nBbU=(}va*D(`*Kci&h}4M+6;wui_vK{bTKnCM-h zar6F25%6?IL)n$@q)EBTqwT+*UB=bC*yd?6y=94-K<7Cgw;n>I%IrL@uI;$#OVU{3 z5Se7mBy~K~3CoHg*`3IBf#&x1_H$H>Uvml85q<5uWd~!K0vU~AryE3{P1<<Tm&sn? zalq98e&ApYR_ZHY%^Px9)dF{~IT)rT9tZ`Aj9(Nc$3#q@?JI>|sG(t8iB+M7GCh<l zNNF-r6|qJX2sKgy-tY$eiQ!M7xE1=*kKUoT-+JrL7=Gu@7``Q|Fe1B=X_^&r4P+9g zDe%x!Z1NV(tTeky<yMGId+yR7o+4oD73wRy)q7Tgr#8}40d`_$_AhO0OOR0PVB1&X z!&c{m*Y}mfd0#Y8tMMCLbOn|ale?ga$gjfa{H08+L`0=2=p@FQpG%(N3C4O;TcDi? z+0F=eBf71*iCb@LpXzRP3ul-&L!OhHmZgYp-~y_t7D(k_A;IgNo1_(#(gTl0-5p5A z=momY8_dOsm+t8%Yol=2VI@`^k*A~MSh_;qjrf}A<yXH#pZnc^eY{cpG=S>lI0_d+ zeS$TpM-{3!He8FP%L2E>-AVy}=P)Z>L(9;rJqDh6id#lZs0qi;Z_Ahz<k}AHG-%M+ zgYCk^xt?;O@#|VpOl;gqT~aaCW^1-rwIsOuuDPC6O(6Qoc7aUsNx*r2S;zG?(!;oV z@-Hc<x@rs?M+nGKoa;SvMPJs7KR8dM7ad;Vp~1Bw9~abBFSXir3=n<jU*L``3XI^o zP*xNE#&7%v|MqYHwh~K+ZP5RR|MWlo)KC8SN590d?UFc_r<=^~#<B;Ah5E*^j*|Em z=*oX7zcOStWkknSk6$%<^n1m9+wCOk_@23WhMsx$S$gid=VB*Ac}68Jn%Ykrgo7FI zWPBzBZ6j{Y5N9*xL=K-8ArtNl$Wuf4dx!X-SAd)TxmXtFRJYmUHBzFX4@D?y)$e`( z2lUdP{Fxj-Uy~WU8=W|OT!4OYlQEJN7uwTYFJKbI570-0SQ~BTLM$n1)lJdHmT%$8 zE-3amu?lnE(!1O@JuTVd6BwwvUI^PNu2lHuF15A>!*(kZpcL7CAr|E0BKrOLIMr$T zBt#SsC;X;y#nb!EhkxwD@{fM)f5?C9Cq6=Z8C|pVE+Mn>@p6s`v1b`m5AB5|FWb)H ztje_+4MmOiJVuFWmAmr0l^JnQQSd0LkL%+*baZvQ-K<}o*$nL7#*=Nm1-crHMTQVA z%khoIT;~Dy1R=ghGV5Q6!57mFYaY|~3DIcby)G;r+TraVy#33+`m3LMxyDq7&EZ$j z@`bUI&EHBP7I$VCqc<k5@F?Kw0e%DkMqWMm&#YZs$^$|mZSI7H>jOB_>-mYpmS@sp zjqVI$`n6yE)mQF9U+$S<@?kUCTh)&PWq_04DQq)9W)v`SU<sf;-Lc@iLSG+B+>^VB z=HLzf!4G~w@4fdf9kxf?MQbbUBkqJwk*Fre$yyZ$ob*MC#=B5#NY&(=uU$MXVEaZi z8KNfzSAn_2xgK;+Q(;zbc9Cb4f1AVyX_`_5Z6_tSG%N-ybcnmZ!zYdo-}im%?YAmY zb%V2bqS&Q~?3QTGw(FK>^z8OLeO11k(?xm>cV>L+ZeP~nym73JUl=D^69u8tO_6e2 zGuSBIn|wG`aro<TBv|u_VJxIQsGdHRi=qp?f{bwy0C8r<Z_w?17-QUKyGp7CSDqAt zh(;-chPQtB7XRKKenGza+Uv9nQkmZ0na-72YKkN@%EI|>ibsRmnG&ut@0&PzXaE`m zXUhD%_UsO#84n(R5W4k~7QbVSa|mW!cf-hz`wJPrePeZh<_v*mO&P9o*quh?7MSMs zB7Grm(C*n5=ny95H|uzwqoAJ@XU0o+#_ubb7Pmq7V{ROy6+7){<F|x0(vWAhcU|ED zz|{bL1OTg5YP8o~&(!9!?GgZ7;i_AjYk19yc<lL#gEtt@N<4Y*$$!1k>q1v~56M4Q z!%#A-N#J)u<kYR5R(Op)Wmd4q&l>?snK>A~@7#I64u<gI_h<-1`K^$bfI1fSBng{r z*ICF&Ay;a#Gv-L?TH^mkW%)p75!Q;5+1{jn5o#ZkTDH<BPHwXSoQtmv>h|te>Vbb$ zs%t*338I0xVffNtze@k+&;Fd+dEa7Oi7}EpQ($=2EzsuNuh?_G<a?-??aj(^0|Ody zIb)AJFnlUWk5^G<@J6rNcW`MHrmYSl-frCT#wK3a)lfBWs_3+i*Nsj$aG`d1Q`V0q z5+Zfsm;lmpK6wt2VGPcZ%Dqa<U1A>R9`MH;dD4cEcIFdFX6dxHefQmW`3ryg@8~bS z^h%Aygfs-UXnhj#v}p~DWdcUoJ~@%6OpO!Xv%`fNUn34sS7<yrBOBxlt;432^tzdY znEWWmc_GIs2{0i$nW_v_Hh(*zo1ge>807Yk$xFw@_-}se+w}T3zum(@I@}n$Rkb~9 zrm>u2ENNU6c3^1OPG8$w@wZS{m3%d7Z)H3Gn^0y6Iz`ogiL|PWTb`}%1V%5jK1M@V zc=&L_FulT42sjg|ZvX?J_FB_z0o{OZ;s^|CvG^;V!xrd+7x*t<{>p#!+_NA0e>Y}$ zG_lGs&QZZwBRR$5y_Il2>-pH>IpnEP(k%ExI7-*s##iy=z;BCa8sFjfnP;A%=RWit zJ@@Q$llsuQ6`C7d8H?3*+A(`i^LB6H3eKoIATDZ#zo~lSG}luINy9~pD*F~4K6r?> zq1mEx)^T|=e*fyPU&Us|_44D+z_LA1?G~f~6fL7}S1y63BQ>il-%73em-%!OoA**2 zV*AbDZpijT2^3?P-8N|3)q^eITs|Qb;ZI32e(x7~Xk_bXllE@D0lfVpYf~9j>W9^H zjVpz1eF57I=M_SuJf}ujwj-*WGOb}9l)C(tUwV=L-Y<V@fMZ3&_Br>BXnl78L#03x z{5csi`LoU0hS*tjjEry(E(h(Yxt1EI6C~aOdt3Ulv!g5loxR;*ONK`qI5bGvPHY~@ zGK4IK1Cv|gJ45hz1m%Z6_#xa&g5!D<6NfF&hv9N_!+oGq7qghnF0e>h)jEbp_!ZAQ z=^shxVE#ms)kyu(yFdD${O|vF|Lk)I{gX=5SEtP3_h8gkrwxwD4AA%u3}M#*pf6wH z0mIb;{J^0oZFQZkDsb%+NZ{IKF`osgt7*kxj%KdN_^pD4HsSLd^eZoZ@^|j?zp>%e zx@shI(r`;r7nG*J@s^h()0>4GuiTkA=Jqz8%bIze$wr7iY>$5Xt+(m>-~T@S=tpIH zbOIGavAtmxnAEDUPJfQ<^?B<G|C%AEx?6xt|JE$FY-dBl>t16t-QtxPxtVu(`=bW| zmd}Xq<`E`nue&<<(?9zQIT*mAhpg288XCIAASSbQ7Vrv#kw$efsyqua8W_LWufo<h z9_MNdb1!Q*emC!^mwt#2Zif~s#y%;Vrw->{=6VA(M+1;reu_!@48R99kFfGq_jhw+ zwiEQ5QY_=4Q&EAITl8t@3#H6Wo9<!9cx#;di?B+?ON--;|I$FxI4Ly#@~>W|FZ}5j zI~Kd;W>lilT(k?sd(D)$u+Bs0LneO;CAt*Il0i2xYG(M6j%D9Y9xd1#zX}(5K5$U( znS}7j1Mc&|jmljv(b-_dO_PHSYG)OC=k0gsJ8!;8U;EnY^xf}%?|AMv#95IF=w_U; z8;I>{4Dz-ZuyyM}Vc8T&d^Cs#G8-6r%`(JupAI&C_4bv6@%znhep69{Gr$Zx8=IbM zi&nWiq)&HM7}jgvtMU6d;A#Lra0s^6NeM4M{S!#w>2+vCe=D=)hpo?T@Yk?|2l&nm zK5mJ=6H1?r<VLJmC*enm_!2yiAQQ}U;pUVe6vmYY(Bd#<4+_gK^wwK%-5J6^pts+C z>&~-$8)%>8SK7@a?F^BN0xN!1OsWyH=SVT`L7)(rTRHY=2ZW0mCu{?BXp5r5tbQ}R zIvrfbHehoVE~n0(Mi1Nn-S^(3-~Xd8&{x0qx{?)Ctd-5$>Su11Y~rFch%$!YMW5|0 z#3cx`3<jeSz;3BV11d74?fKZK?W7xW-BT>o>!7h(aiFH&wjMX{Z(#^U4B)XUr1Bz* zjWd5)-?N3QQv)nsmU)C~@vsS`{Yqh7$?L4cvuJ~T`|Zi=w(#mDwqE$UMZKM8ZkS*D z+UxR1pZ`;O@4Y9bPg+ephVj@uee`kB+;J`K6#2bpF^|#0xe(0hTY9?5R`4>W*V>HF z=az8hwaS(d{?bbMH2u1zMGtJ1=qzaSi3vY=dw=-Dx9Ih6e2cz*_xHW;eV?A(CIX7U z*c3m{vcaD&0u#B#mFXE^W3$_Lw?J;j2!p|^d8*0zcMcb_e(Yl(Ybok6y+8faKdr_u z>bzD*u2hd{vTp*{MQt*IR7B2f;VV2XaBav(0BEpMks)Rq^ucJox%;~%Yu6cr7|uvE zTyO@s!ZAbH0)0$Vw?Q+{lnSl8==1|^jg5Cr@-5JID~lA#Dp2N1`}Vfq`dmH4eoiTq ztaMGU<1DgPyx~KJUX6J6x##FZA9{|SefC*b2dFS%OW7$$&EX2{jI#p4EHzUqm`%HJ z{yalx3WxJ+T*mho?81>fI$+b4H)@JV3$F?UoeX?}fqzOqJB|<MeE;B&|Kzyc&VX*B zpuw>Di<D}%Z&xNWr0u3v)Ihp1o82~D(iM5odup<cmdqAmtOQqgYFwIIqfKe_XsG3Y z(F<FNvGbSe=YVAA4F{Exr@D{9wqsk5uqeTOx8o6^GSEBOHWWs-78`+LdFt<aOSI=* zLq@WC?hiLZ|NH;=AJTKrJxe1gS<2#+@bS>BvdoY1!b33ry%0Zj_|F&O&cW_+g<W2$ z87>!{OmFxyn>+?>yc`%LW7d-`<??Esc%00bn1qXi2OZ_RcgF7FZ`(=MZ);|lU;7s2 zj_L5*&i=xpjO{Dj;`Jp^ZLX{I3XYbK101$Fg2e`uQ`NH@){X6lckl1M{m%d5mw)*e zJ`3291tG&h(S_@CrR6$JpbO)>m|a4&XL0HZPbXYGz>fgfk3^{}U)7*3t6X*^E5yZh zgi|+u4_@BG9~B`3mtY-fzx<b9ed+G;jVjdapQjUtH}O^f8ig@fqr{d?bQufEZU|c; zi@(Zxw#bUimHIe>694YI@6r!`@WZ<m-0#tke)OZ`1lP+!#?XgwA8e|spIO=mlDuaH z!b?#sCw@AgvSg+(p<ovK0HO9J+poqR;W*v7bLJ_=@7{d4xN&$s7{7mLj9<<=Nf}t! zjM#N$`=`2L#d?X!A+46O`M&QqXc>DT6xQE#TrQnrd&_jovKfO6ad6H{^Qr7k;|Z?l zTsexedh`I73#im(UPl!cNuaq%#?UHN3SMfCmB@{eV8LKJ0BD#N)vN-Bapwc^LJ;=x zqSMwtl@Yf#H<~?eHa@y8A8$dt>!b2}fB4d!jC~Js1ib_la87I5LL!_kk7oQ=dfIf@ z57E5lh@2$<4HlRWw;g0;D$4fm^Mo3wFO?S3sU~7mMWRe&j%1CS?FfkUU#i1xah6?d z3frS9_P5@Chragux9HU`zeaDo@!dN;;kKm`e5zI8jNe)g@-%H2W4+ciuzi^Og<mon z0}}kQBcm3&yuRi6?D>TL`mewExo!7hki0Wj)!%;GKFD(dT^M!8;JxNO&K(uk)%blJ za5aD*2h?$oGgI~ARz;A?ZynI}s(2^O>PN&04Bf+LknlUehpi^az_0)MfAGegp7fGt zO8-W2AuwryKGsTVxk$MuJjLT*RU$UcoL!1BkCMJEi9>_$FroeMhj)hXcfWVM#G+4d z8Yf36#M8uSS!k)+XpLcG<1A?xYt-4carv{V*82^oOmKEW4N~}p8L5gbeV~w)_OMv< z2Y>V@^xZq-cY(*&VQxiz$;Z~FHa@$3#UsSnqm*ZY8Wqi9v^`pXE{ScNKpNiYsN*5U z(A<<D_vxN$TN=q#&;4$fYc)e36{>1%Mjf6b)2SJ@{YGuv*#ZWPfI$!6M5gVcGF9h# zKH%+4aN9^zJ;L#VCbvV#BFzs3(TaJF6-nV)AA|N!`^v#nb})jEx0AP)RK@HKBwmi6 zs@l%S|9(&&Huh&3b+rne%Dve!04R%Wax1fnFwJoHMdwjMn&9seK$7_d2VS}yurz;V zELKBN&$lfwdfov?Z|`@%PhWlQ8}#+Be~aF}GlG}#MY5xGXu)@>vJLZ^iC0C<lr=-X z4kED;nlIa>&?wfJL6>Cu?63d&ufI_)zj9DM+u8JAcqiB;$!2krYB{TbJDdwfHqfym z*DcVG2CfbHNI-cvHsB=POu4V3>%U{~-=j7?j{7jM>KgzgKrrHMC{h;?BuGFKM3E9H zlZtF}V$-o=JHE*yE1T6Nkq(_b@lldh_Uzd`N8v{?|KzNW?6o#~*4pEhNbPPMO%$!P zv6EP`HIx<0GDV6MIiLs<m%*JJU}k_B%wRAxU*+wmyQ+Rw-OuyB@615NjK2cDd7r1R z)%|o=*RQKDVHtI?{sI8bd92(I^8*k6-5<H>rknr4(o7!Vj3wnURl-l0;FUDoNZxiP zp?p2is0pFsEGZoqa8Ze@JnOtK`?J7sEU|br;H~#>fC${m(&$&b;uW?$dg7HS^2Di* zh(euadiiy7PD(n>>sCCT0Klg4Qqrg`fiJC7n6^om7bkH3cnH6RE_*J3V$Bk=@G0=q zW<PPWqMqKzOdH6hxGE4C){YP0Zf0q8j+ge*uB&zSg8~IDzPS9EQi8rj+RGt&z`iSC z6o4pO9WsGDv-)Z2?zNSD?4nxdH8mk=+;&UBX}Ih;mlx*S277>|tp-*7T16C8foYtO zs;RP9)qmmpX}O~}OIr@jC`;$ln-ir=eSFT3hrwRTZp}DIT!m!pRzqoOn(l1USD4>M zjzJMfZsSzO-*PFBB_824XvXa<X*qOm4ol)J$^Qa$&z*Z=T4hsLguzl|NROdMHIx_9 z%smd5ajQK9g;57Mnb26`p5nc^%M;@-4cO#Mw{siYv~yg#bn(aTy7L=9hTHE-E`x1) zk}bR7#^A2HE{#{v3{Ql{=Cx1PF<qI|+NYNlf%4NdEAONU5O&uiZP4*YZ6vwX!?1qy zH-GOncYo_!pY}9bU`}8%`9rQTND!oBz#HG=aMvwY6;0aZmjmaPaRb0Hb-V@%;!Xc! zd<-+g>ly&8FFQLs^vYXbIe}rNZam^x$3)`+e_l=4l%ldx^OX(5Z<^i}BtciDKoiN= za{TfFMx|<FUEn3B-~HqtOoz821$ki#cM1Z)P2DK<X2k?V<4+Ael)8z%s*yYJ4G{<6 zcO4+kS0&BGjmlmHy$SjQ;FVlH*77ukdWUx!aARD&V(~&=aHK=kY2)5mP?dvwR|b2h z?rJJd*BhxD5e3UE&V@kc0SJ2?5vbsks{>%!u&vKbY|H^)0bu;<+h4`+d+)p3p5U1= zDT9EkB5%1lVP1?Ad%*I<TlDuKU(>p_#Ir9$hwanP#pfkn@^wU<`d1D=Ok~v2+pi1) zDxauZ&^%7hNiI+UzNbz-S1r9=Z}twN9V!6e_UyQq2N}D+H1KNkXzaI@X?)LzgYL-4 z1kn&A8>hqijeMj2GN)#a=5$V<J$2W2+;h+I;$K!LmX(NTm;pg4$bYj0PX}J9g%`H* zZ9;QRY@e=Uy7tm?pT3qf&_<(@t+QT5P86X~gg~1X<182eQ0F`*|2FG3`IjvjWmU?< zk3IEISBl*SMv6uTPO|_QAGt4!MpkXBa-{opD3rI0mjE(ad`WzHbjzaAUYAY;uJ9~0 z4}jxO^V^H*m`D97K=`Jc4$!T)-MV@{u!!4K(<H1H+Cnk7YT9;um>nr&s5D@9QQPnJ zD9o~=%goTEz2m$TWm{6RKmUdM>B*<Q8a~dz`fK_|`835Mxx;FiG<67d#rbB~J}__6 zAi9Dy%(cnVwBaF8aI$c7--robc3`{G2N7kM>*5?Q0ANW9Fd>{&0F3*1<9^y2V{TjR zP~mL4u9qJ5V9O=#4Q@-TG35aM=}Nw-GbMB1BZFN@;8=P4rf+<+yz|@c@roP|2cy@k zBNWKpm%fJCkTwZ)*&rT|R-w?qI@ew-6ItSdwjsu-!Er8qS{HDfJ`s&{icJZv!1ayh zSxVzlrn1%P*=Nttv(G(0JqI4iUlahNe-D6-n{ronh+o5acg_~zFrg-76Db+ossPZe zJ#6B~66=aGdWkM`QVPcY%X{>Rw|?^*|15Z8O;4njU^DfO)9qvhPB6}-kAb#Pa`x$E zOfQ8z-lwk-Y5z>?;YJFqzK?sobXH-`&us~cMN#*M9y#$72M);3)^unLfMrgC$Wq~= zuf(Ox2trdC{kIL^xP(bhj;;kOCqPGlUPJA9o-Jwyz{<j?B%51+2MC#+ky~!LWn~e5 z<?QLvINr*FE|SOS8lO|7nQyUaxUDH^41-~22!yF0JJ;$`FCne7+>FBJUkE|@OU(@E z*Oc!6@`G~xk;he2vX2t2zl4>WTbng2i&H;b*DABDsUfFRm94vy5HILd-O}hL1FCpK z=H{%%L<H!MXtX?f_QYvwxKsgWtQ7=~<a)Gfk5ihQPg`acF+=eTVR({P+@2TvVz8nH zy;FSL==)Zm%)sBfta!002?=`~6sUrE!27{{SdKO1fVc*|^Nw$#Z@uTPLBQ}s3u1F4 z(s~T3@wJmf2ugx`^`vV}Nh(7gG8ba=v`0<Wk_)2~&A094e0f912yn;lLlC@_eyW!9 z=P#^)?{oD0x$`wP$~_(@!yFr^0?zhBZ0!ph8K)Ag{@tP0{n^s#t+y@B#7s<9<8$CA z=E|E_d`cs`qfEGXaa#WTi`0)b(|a-8z_p!2LSxTBKbFy|$29S)diJ$aeD>*UNc)Fi zUFRflNDIe<MYOY8SXHoLb}S1L3)d{W`ZrOVU7MgD9zw9f!d#X?7c1}s_dodY3DYT- z0|6GScZ-D@xUGv*8K+GwzhM%Obua*^kwB%!6@9$2v3QdL^iGghIWhXondj)aXP>1D z7cTUQXsdT~m-wfxLi(grT`kD=F7b85>z{+N)6yMi;n=3KyTEVoqbs8;1)7_JUkp1J zhdJ{DZJS;idf=f)==h^g#EoK&b}INtuKvj6qJ>N+Z>>%h3sH>J;v~>7O?$G|AT-i6 zgt)H)>G|>BaN0DS1Pyn}YAY1H8i`aUfR#9(2tCOOvAd8xA4}HdXac_kRKc=%Jv8)e zcwkTupuUw*4!tCnRp9V1aoN{^H&YKj$0P~V>vQ||3}Plp%BdtAc!XlKv@DOtUnH0? zh|YZz@iDPx^Y9~&(U%@LPJMw=7M>_A)654!`N(|DFew7xk-WIpQlSG!2I{ih7rK&x zubW6==&g+DE~U+D^BB@lpvX*689XQOn*|QE-(ulCefkVN{=`?NzvrJn-{mm_3yDTT zE@cq}(I9Zwr>L)0&iv2h<>7fg98QpqBG2%b-MUHbRXUe0oIP5+i-8wYSDh6007sb{ z(uRS}mqXgSKEokcI+=!PT)U38PhV5IM&fy&UJe8^Rh%qJ*_5F70_#4BJc_CEg1<(3 zAXX7LM~@!eS^WuGgdcwNseih&<IA8EmyOqXzs{)*h!LadNzM`j%FIwEEi6YJyjXy7 za4%u@BoENKOc{ooY`N9v!8kO(1bTiCaL4?>r7Vvwhi1L<m9Jd8Ji1WuXa5me^TEfd z(b~~%W6GMtI4`rVteJ$cNsIwVyEb$!%RWe*c>xs1CDN`KZ=kcUp+_Ejg1-2r2ZLL0 zp{D6xNodNO<Qke*YlcA{HBTl-N%PHdkgLIK8C1jQpe#%#E`w&XR(JbmJ8LAx2?5qe z6$R0VF|=OxMdY*(*u_)(-c7_)I*3c(hizfB)Vne{_<qh0r+vZD6h^Wnl$#R!w6?7b zEWWV}%L2{=8t|2L*w?q-eHYz%=Qjl=b8lw&cNSGF@-b+(yje%tlu$;1roL(P#Uf-s z9zNvHyIFpt&L0Ej^hfU@@Q@>!ORA5WoTHVuc93NG&4cBDE?&B{nyh}lUSA}8ka~@$ z6Pkp4W=_0cc^`v9)n&<SeE1S*g0$Jk#MQq$JD6vzKhFbYQQQMuJ3bG?j?#_IB*?hx zEgomoCe>~A_lY0<p&$6*(W3{YoHvsw#437eyY{o=564V=&+ZC<Ass6T=*;_cofFeO zUGHS#7-q6IiU|9CL8lg*2}96aKySGUsm-!ko^9Dl3pX8xB@aDz;y>9T`PuOxE8#I~ zW3y_K%pZcKT5p}4cI_{Q!8CLLA-jXuKyd@Wk?;^K@w6p@*}YJbA+Nd2!#%)Db=JAm zr*c?U0m26k#M7f|9u(XHIE3fXcs@|&dfHeqy$S-x=dxR5BkH1?Xybn@G!J$+Ic!Yh z(>A*AkWQX@mOk~F&)FcqPEUpU%T+nkx?m~`<W$I~FUag?LZr)@>|p6M`I$MWeMK<1 z2IvY=LVOn1xMvzHfhKh~@v7Qq;|;DHA_r@v{I~Qtl$k4!K2N}qPpT{L(V)H)0XUp* zHbLQ+3?v!$3+tqeN3C2lCK9~-AS?(@v~J0>JsSWJS+g9vTVB4R_r3RB^t#u+rfXT( zR34-$fR{?vFe1yX<E|Im*dRya(AAWTyNB!>#YewPnZbP_{k4uc2nr9ERX*Xsy;N%q zoPXhkNtT{J_X72K=B3M=y%Qg#{RjXjq{Z+ngp*^jH0){h?;VRhs6{zv;|;rC4x7n7 zqsD2@f@R`vk_5w+<<GzLi~rAG+}%CK^}LxQA!UkRB7K#_jwyRV#mz<`8l;P9>@S19 z0qCWY%lq`Tp?=f=r4yD>b$f%S$jn_D>3De)1kDOe?V0N1k!cz9-}+nSH0ZZ|d6n*K zEFuHQq@{sZXfVbRWiTM~dw}~SYXZJ})WJocW(BfMi8h{wfLG8etxUFbv1_do48g+V zp3ZQ_0KMv%BPP|h(#<#Dys`?vBAgyQM|q&J!H1&6A3eWxf@3gl1=QYEjJ-Axv6%Gi zs5nk_Yg)42UhDWdY*5m+P>74t_NhPk-0Js2p9gh7Si$2kOnKgO<sinJZ$6z{P(lDu zVLoEn#|KHtwg}x`;Sg#L45QoZ$<x#+c{ziod%6I^$lNU8gHx4dF4eyI_ds$4^wS<- z2a?2__v}`$>0m78_<hEl8poB#+4uD{2Y{nuI`xSV=H{DjqVN5l_t34Y3BwiyLT|-D zCvdzEy0ZUL$;)h=qiZ0YeH>_Mg<iWPJ-5%ZOKxrYSuvOoHOtLae+cf_oR&F1`<z>Q zrG|qj9=E-t1=xacjIhZeSZLw(2k!W-ELRJ#uj29j!T5bgV~4c|Vu}`G<QI8JWa)c6 z6yUtWi(~hf{^+4MeDH(sJB@Cz>M-cM;#>S^&f*(bi@Gtv7D8_65iFOMZN}DpdU@0S z9^e~<bdXPjy}FrFFcJWhB__^z>96Fw)${@P0M}#akF=AZ57XcO`#*DfPcDBJvkAhj zDQfzM9-aJlF+@W~u&5l%1TX&E1UU*{1)!({a>#^jb`^&#CeA~c<q?X-9<ncU8-%zo z&g@{#voB?)l%9Y7>}oJRMK8X1VKq2krgicf2P2rH7yybi($KXg9b}cSmQx3QHTU{w z1N=JOtbJ#TN)*bPbGQ<^8t|*}mj+nut8?JDDgCqwmAigF_31JACF;O$l`pAdd#*M7 z4lX4g6d@)za)agWWPm2{B7@$6pH+kOt)`bFO-OPCy6kTG<Y+8R1(XC<O_d_{YY%nj zauT#v@Mw{njFC{rJUga}ukt{8_JgwM`+W@r&sa)F7Sh7UvdpmdH&v8S2Y&Sjg>a~N zN&A6gIQCvS+PiIh*NK+dJ&9Aj#`7@>UAlZpe((1`JGK28W;dfj`<Br-wXI0lvj4{} zv~?*0**MT9d_7|tly`kzxhTAp++syZN+C@=Y>>ic0W`fly5k^HpU$6ufu4TmBt3lm zF*<qj^aO-A{?>wdQI@jkGsE8o!R=c{H7dwNjzDytU$HufZG7;7)7To628!yK^C0Gy zRkxMjuYK@?KXbYOUZrBGRq$JkF_@!Xc{D{&eFea+x#uO{`sg^?9Hou3EVA8X-9EiM zX&(UJAf!qn4)nS-87#Z1IQZZ>qol%N0G%K8vT}M?Ok93f^5Op)`HK+@bS@1TDAux^ z9jd>BBpNWtOQ*u@DGFVjaUB57kZ+D_VPKgN1Y`_s{_ckV4ocF!a)=ZC%V2!=YyrZj z>CBn46A%v3If35hhJz-k@F52U8e!DABAOYoTW$#GhK)dDiOjYmUWm#ejh>6I70pdj zsUKRHFph^s_fh)(eC!Kfl5;P-(4|pd1&(Eke5A~{_OXT~^@BB;WI_9?9by+>Ue_3D z&I4IBY!LCgs+`kqtp{0EIBHEkFK1KhCS1caqB<d<fR37eY<rBSZpOW~uDweigc<R$ z17CKfOQS$AeUALO6__Z1db0?l0;uDHf41hf1_V=RXaIh5S5k?>M7ZP|mvLABwnC^? znU)f7d5Tva=`Sd^;uF0IBUHnU<zK+dA0GQ+VD#!KY4$3k*VSXD4f=mj+N%#;3&L>= z8W_mX(7OT$Bg$PCg+UrNX(^qY0%!RL&x`fF;kRgO!NU9WyC?MAnKSg*6HiTllhwBX z-)+Bf$cxhF>%Ktuc|#l?r9oYDr2HGg`m*o(n%kGx!R&<7^iM|iAq&DF0s{t!yeL3c z&zCP>`gPy;dst6<w(C0EJ;0)?6^nba;&#B-dGd2|THg{JXW(T@3ntyJO^4g3uPN;V z;2Vsv^Og<#u-~D13kn1Wh^_N$xKY||rcK&Rob=%iw{S!ceDUOOud+Jrd;yO{GZx^K z;L`Yta#oiUNmLZ{m%#!Xgd0hxpeRU<09M)X1Bk$Jp0Uo`N2Hi9dwsNg#zV|njdbW* zEWrf`Klj{o)9KL@mtw3W&<iC2gp30d4$ngKFm^r3g1ZdD&5ZC1@eoynm^>&?7?8(Y z&F6h>sk0<WRy<@OE>(p_bZ>mT-@1Vudf=hs^pz7&vrV2+oE&RfY7!vhJO@e<!{78S z2;l6)08<_>6o*aq&X`7(;W(p@pSAXV(9L2MvVu>W(Vz6d-eOwYMZY)L9;`oweZA9X zlh)iS2sI5}FuXJ?u*GcxLaZD)V*rm>v1UO{77Dal0O$p!G*vD!$cW9mw3Q6rJyqu! z+#0q|fZO&|=Ls0W)lOL7lJ558erq!8Z^`Q`UwwKy8Cn~uEEK788Cs1b{FvON?P)YI zotJV3_Chb6r*%?mmS4t<wwHaJo`-T|M!1YdL!nXqcrw@tH>LSemnYzR^3-X1==h^k zyD1YWiJ`4X)<n?$4@``KJvLmP%`Cn)c@bqw9&dtzHSd>LiL<Zhp<~z}(tvN!4^Q89 z=Qn<=xD|_U(Jj@m(?GCA!NafOIA(nNSQI9Vb*SKCJ>Eh0Hp^y7z@*#uonW6{cC`Ny zZvcWB;X1Y~+#l)73%k7$qexSFNzhExX4+c#!)^KV5h+(9m1WR{9(wfWe)ho5&QH|z z$&_)=G|OgCAO^rP$TNw1fL#ZW2C&m<&w_Cn2Ft3Y=%DGqNJ1W-2rAiPibp*-i+g^P zP87?D2W|nM;6EN}q<fVO!YJ|14&8R!ZFJMkH_?He16@o6heO&xYFwFM8L6RJ>B@~` z8_gqfH7aKS#@y=`!>0K)qh+;y3Xvv+lukT-l0Ngf`yi!)LnO`cz-hW(H6~~Vgr_<C zyDyubQg5;#ocwGVULkQ4Va_G&K^8yhKDQ)&GUXQyA<(aQd<t|rDLQh5b;`VkdrQ*m zco-t+#GEia9*kA<4((R=|F$yn;Bc$<404E#ugL|&n@IO%@eGmT7_+?R*C%+k>Ccfk z?Fq)^-8|Z_+*Yf<@4fG)*T3#Hn`DrLLsX)1Wrlh4OD8Y-`r16FwK6`Z$aB6|CJ}k9 z<Gj50v3-m5w`5T}NddYA_;!Go82$yP5%NZP+TLx_p87h5K0{SDHTjX!;o#AP7GsK@ zK896r8Rd>MkNH>U+S4_P_til<E=R+stL-hwxrrhu?myDr-sO+K^^TwT56d$geuevg ziN-=>)=l~|DncU@952M{MBTIQyieCJ?OT9v0Ai4)gPAFTUr8NV1wv3-bh(|L_&iz$ z4YP1kmZvmf)WGkwCs;0DzVvGiUseVraRkCKrk=tD$K+)IQ(|E|^x1?s`ym!4e4FVt zDh2L_@>$%=d9wF`%nbt<I_4*QhjiJK7z~*qe_l-4$(Bd22KMr6%cEgXN@Hk!)PYk{ zUNWECSWnp|v<&<-!wodJg=}S@JBIlgZ9<aVY3rP?n4&Tie5g}c27~fwCj5mLF3|m7 zdQfcdD6!!8#yzD1`zUouG*Kvjs6_y@V(+Nos8yPxMVM%?#JLk36mmtYcFRXA#Msw& z<%_GPn3_2IH*I>PO^A^RMimHP50G?{Gkebf`NJ+8#A{&++OiZZvehw&n^10$c}(Gt zS`lkenfg7mqn3-{xA9;lLVvMCs2!xI?~7cjlHWeHrprTV;dM0F^Bccw;4Net#y+N0 zCPpi}1LGa}^k<LJx%0z4@HvC=bIqHuDmDR^n-H$l>fE)Fjt7}Vn&S^e39qT|ZHea` z^{?Ye2ESJUem4}{<y$^;>J&Zt*c0^l6Hg7mZ_gpHM@w}z`=vPiSc1#Rp+=zMi49zH z8oNWvov0m;y(VL&EeaQ!1%Dl{JfEMsW$>GMzVPDZkJSZ-N9e?f6AascD}(J53=A|p z!y<#R$aGyukJ6UG4)i9g@IGC~boEkgpT4Ffz85NVTns`!yi9(B>yPHhz_0$|>CZ@I zM(*Bw%iX~BKmrw1Kl69~?@zC?c@0_>qToZ}I8dwE1I586-UD2L{az5XJ}d7Eispxg zqG%m%?u}2o#e|~5?ct?8M+<<K6U)<!Ogvp$2H{j+j@7Z(%_PLv9Dm;5>E@emrdQtj zO1kBiTj;6?26Ak8)orNd%p{UyZyJX-j2Ff{T2xxJ?P3sZLtCYEwG_)WXWd;#pZd(_ zrmH&4LfPdqa<6$?pK^;IQmCa;J$t^eq_4pSAX}-}b7|mNhSyQd(a7IENl9y`f>+Mr zbwUu#rG9wS6nkL(g#^N$RJ<f}5Ev>44YUoThu|)vYDL0C2ZmgC6;kG(Ti$5Yz<Qz% z5G#KocmXIW%n#pNl4x%s8(-so=^w7M5^GHu|6?ofsIB&O8uF|MyXuI<<yxfozxQ3V z9gWMAEtGtX1Okp{`hG>}&{#S$cD^~!PR?$hFOL}D9BPx)#xZz(lpz(M`~36g=(*|4 zj6K>U|BmhHchnrK+fJHMudkzi-JBT4O>R?l-K2=7-6EufSQCOgEq+PPPJyPBF7gpa z@8yXZnrS9EEDDT1&y~zOe&-!ue^=ygclEqGJy)HxyP7j3G4niyA6R#3!MdwDHml)i z-wJ&F)4m1x2BD-V4#xvE__n>lL3eMIlkH~L;Mn;<Wp+-%Z?XQCVC8S`@}<95GeBPJ zyZ+4=isr{c5Y{NTR8WtV1!<ZOfpICSYvvAl;QOo=OsX+Lp0tJ(oUaL;rTEp#-BI*% zdi0s+&d{mV%y-!*JUTRM^xRQvePf6&1Gl+EHVfIu8O0k6(p@(Za-8PTu&r1WYdiiM zkibhusWu1J-Arx~sPy2&k4gr=<$3x8K+tC`_%p`?%9C<?HZu=3+lq#o=98<Aop*tZ zvK*t9o|-jP^%4kU+910XIA`M%hj>c!;P9n6LJN5Vp~Ud9)WUB3=`!oekzg9FP^KHU z&LnN+%IIr@%4;BZ*eI;`#l5g*-6gBLz`hq_ps44796J_|IGAA!_@@ebDGBKT*cBPw z$0>y6l3@82Rtbg{@l&Utm4}Z%PCcy?b~!A3B&KUB6vp6p8yUGALnKPxI0mkfskB+X zCSsX~k;m!qX6cTiZNOLozK=it)MV`~*BPw`zk__{e%aaJB;^<bb52lC0#W}R8U(a- z=D@EFVh~sLqbcrAlj$5!9_hhdJQNJwhcx?95_dE0s|xeIPqg!9tg#<HT<!s`)|H}* z!Zn>?Fh^xp#{yW{xKs1sF5^6@jAI+S;t&S5eY$>W|0CXjB;!56ol;UdcR4b?0AdWU zGhGm`ODtM~r)AIRYfoSL(*NaMx7>Q$r_chdDWWAdvIw~v*U6&V(%AzoF8fh(7tl;_ zrmvbid_QiqR7>Zk=?m~ILf{tp5Dymp^?u;0;|A6%m+p=qBcz}5kS^?CfD)Qlo0><d zn_FIS3*C0xt+WICgz<Z2Q_pOo96u#EZ$Y6k&_W5eNN3Jpsc-r`Xt#>ImQs2-P`U5- zcYgQx>q}oWqhM7Vh3nknw+W)BRaU8@bU(1F!OL?8+OU@N4H^4m+V~88UqWkWds%CQ zX!TWQn;@EJ#!99yEpObS=V2QV);c%ip#`f8TU?$`mh7FKFnQ59WQxy??P_JO;2atB zJe{HVVWVs&bhodPiaxLabK|Ggot}`r=95x?2eUEL%X^H*W~m++cA&gaR`z&*^8N3j zf8*7+(*k2O7@TO>QTXa)z*0Fi*S;Tao5##I9%dxTaY2Zz$um^p)=BUduH$?P$USws z-rXw-csJsMV^E&)?;1CU@5K$6^1}BsV=<^=`otCSTG$Z)R!-fSAzdb)Q4<5jx-_IK z6%-i#!?XT7sz(Wl4ASn)e*V(=yY6|*e}25Y>;7K^zm&eJo(c^H8^PRZp|veofL#N1 z#ahM_Z~Jt;(Y^)vIw$FsG1hy~bQTP(yQToP9!#(l8lzaW5=ZY@8(4yyKq}9N34yQD zJKphs`0Of`PoP$3vyRBL<q8feu7)DZMu%YituAwd7QzG}$4~(n-g#orHKorvg~a2S z7c4@6xG;XmMj$T^I6U&te~h!sz0x-2y{d?^SG3%3SWb^F7UJse;er)^0E$C;M3jqz zH74nOnKm1D@)EHecRYzJ@Y%d>nJKLtfEYr9HWJJ9$4PUO)1Uf-&#Qm9#sT*N=Y69M z91w@SnISKU9W`CC)|9Lf_$^`fTz=)M(rzKkNQuZy_i5ICFIiQAXARG}*%~uy)onc3 z%iKxO7QfZ4Hh5{feR&k#`XdP4)FG4N*p##&fFxWYggNOX1|G2N-%8@C(*g>zWMIUw z`+Ksen)HSFgTDJSQMTAtmTOyZ<G;Ea=Wr5t*D%uH!RaJucn_dAmbcy?yaEzBMoxa8 z`pmI<KX6AX6h=}?fjQalx+c2`b>rHgc4uC;$fI`~k0B#Tb`^QfB{@qo;}v;b566!b z{M^dg``F`Op$8s(lun&|cG_CtA8hWA!ZQ!k2LH9y!hQ5%h;g8t{thP{qEVAw1F_Z4 zJdl{EY{2spNe+esVC%_R)k}S(IIlj-Co1?Yx@Fz}Tl|XNi9ooJ>ac1JZhEW0KH&UI z>aQ!9u#c%5#9`2%rG?w7_3qQlllB4dbxvRzu)}Ir9ec0&;Xa3~0ETzp*1$T;rAt1h zeHJZUy$T6u;+h~RLP<gK^bShN-mgu+_OAH?pfF}=tP0Cq`KxvrEWKXFpfs#3ClCj~ zn`J!6H$5(}V!Vvp$Kyx!$Qt!1eOYwz!@Y1|SvO?y;0f3=*B4)Wk)D0_Svqy<Bwe`h zf@MD%z+~>*jg%fq<KrM&bXhJ%&x<U^oi(o504RpsW#+pibC+TsaOjG>o!+-G0mK;; z?16_KvBO-X-Cf&HNWfuN@JqEu#uW|lC+JXic8VCd5<lR{(w$i%jbZYEBZ_jfTR=VR zX-gMZTO-K9CjGjJ81_@4B_~!Vk|MP_<EV0pBEfu+0ksChxEz<^Uf{l)Nd$Zrhat_F z1Mu553{Iyz=jYySroYMPX9_O}Zrg;3LKdr%Iu?k1kf5%!FaODtHyFm2@LOG`$(&T4 zdZ<rq*JYJNxf*F$z%>FOk8j)3XyOW$@!YRrPW##t4j?*Ex+ii#S4`en2kFj5STDzG z$Bxk^Ywxqqt$^=S^!N(=7C9KC&J5-8F|<p@a5(nzAkk?3?Gqd1#+Yj#Cc9)wR24YL zpZjpAE6AwR6SPTznjMH^%1#<Ql@WEWrG9ex(#4P0r+Ve)(W3_i?f@1&bQR;MfkyRK zy%MSB)%77;`I!4%es2Ids4B8%Tg*OPAG8mEuYYQIk8Om&&fYqB*ICi2?1>mCq9Z6{ z1P5WUyOn<rx8Lf1=+FuN>XXM;!mPg&SeL=gN|Lo>V-@VfWjmm{>!7r^2SS{Q=Aw82 z|7FXMZJ>*?T`%^OR3;gu?e4@xn+(GGQMmKTp_~5A(Pb{^a(ZzPzI=I)&YU^BvI?JE z{hnF9U#4xyHSG9IGYZURBaCbuavXPkn6~PvkH<-m!*Zn0E7TA8SD`-Ah|f7Hmiz}F zek4?rfnajro1ZZ(&+RLXdvgcRoW5_9O_+o~qwGQO;!&inTIR4Pf-PKc{jK43f{$oy zR#f%~l%zWA!Oe#)BjlV}f+h)Nw7u1BzqJtIq6Az1ObxslfZJPz-P1Bb<>*Aha54e` zAIFMuezCh7@NIyba?x`B2+&*Fu&`&Y{ox!(GDG1h<Sj2>Vbbsa=9xP<)y=KHwb#wH zO-&0JF+Pg>!;d^R9TFE<9T7uJ=B`n1E0qS8?ZxnM$i8yQ%UER=QRaNs=Q|vw(9vcV z*Gt3UtX=Sr`Mt23xP7MF-TUxk^z_pwZ31vzwP89;Lmbyfm>+3Jfm1Pf@H8r^Htm>~ zq$l2hC*5m-I@o9=l^_UUP@Cgj#@XWPh?*|ZsCjEQx^&^vQFT+JOEIb(J9doAAI3@V zl7Vo04!>yit*;U$n+B7o!EIgN+^6e<_5tt>NTuVK<sGA$tW2fn<K^KPwk;(gIAw1l z7f9yPmZ9KY;KR)le2CunzMolv-)aSpe73yoc}A~Wpt@~ObzI!n+wy4ZgIoY=K0M5d zlW-pc^f8}|3B`v&Y#a!q^>)Oajw|cc1OncZWq2HHX8842PJU%Zy&RNv^5iKxd-jYi zk6t&KpDq8vda4DJSl0YU9&Gk)dy0(D_8W07YLgSodTut`X1vn}gyME(yEf!y`29cl z!{)+Wwao!rJQS-270&7A@X4WB<;W~@Yyh*R*$yY#iB(`KUJYaMLI<7z4=6L9FJ}d% z#%<RZwLj*5#h-OM&f1#S0d-V?m*x}dqJrM~*D}!TDMSDO*YbxWsi154Qr^UP-Uplj zvLRNzPKfLjXh?V14rHLHi=HDW4gt*?9?X)_`s+Me>Ge4`9-kZtyg>a7em#t_WQMK$ zy}{ayAfDTRLZ7?ui*nJHLQDE3m~5$k-UJ*ZTy4J|jn`R`zfy{_SDOX3eybii7Ix7M zOEzLtXm*T<9^?KuTlD5$mpMO0k3Rauw1vkHwc<ta%e25&3lPR>W}93eC&`{CN7oS} zW7R}bYDC?XVH&@>3`bFj;sgrY*$2%pSw@p?I7>4XII{YVKydAh^0B}5w|?P~^6q#4 z>NT4lR+m2ODnz)pGmW-nx~#G3V@Fl{*!3k?8Xd=j8l2bG!9HC#v=4x<b7~zGJEjT) z8-FFvYFQYmfRU3mc#^YaAMt3AEyAY!>45{f6nb~}*h=smkqU;ZKvH2<tiTs-NeeYz zlz;pk2$dw;J8v7X2g<OfYx?Z+5T}^N^<Qy4Elyiogkg$2qxxtvm|PeL!IOQsp4CUF zXK74r&oA?=^1!qS^`VM&QI|)*@PaRo4zW^MM}uLAC+pR#P$yd}gFK%xVH=9d81@H| zY#A0>tMaZ1x+ZoaUh`g4dSGSwec^={4UpB44id99(PYE~267J8AsloVoN+5Lx4oSr zZEq^3N!GkYEsxDw%XP9qlzRg^LSa5+@-BQTaOSwYHMa)uVXo*;X<{T9D|p6|V3}(! z(q-WBx&N5#<w5`&K%AZQ%vwJ(*a02ihgVj`;)yBF;d&>q{%Uj9o(Y&al>$LC!*^;C zqvgb`zf*CjBQwlPuat{}_HOxdw?v<NFf33$KVU3;!@2&q3VrU}c{=_Go(etJ|EpgF zhe4WO6Veq&aeQL{;oDJdWC<i`njzyZ=FIbaw4r#GnZO%>>=E`TAorPPPSXPqJ~Ex? zeEx+O7C5>BVr=M4qc1G9`8VHW$U?ow9HzgWVOp5?>=xCwKmx75mdniK3YHtahDFF@ z+yc$j!DZR|*wLfMTI{&r7Y<vsJ-%p=X}Ya7o~9pH0Z}RRp^=WeG6?Op6*(bIf%64; ze-H2tLDxz?@6*eGWPJKF`V%N93~u&bNCk@?D8LKIQ4hg7azup`o(zrQh<@g0|LZTW z#K@gB-%)DoWQyqjoqN?%89<gP>P-j^Qj?UPE`uR5E9ImNQX4Q5LUUyu(-91kS<ehK zDGhN$I2lHi!P6!>5SDYIHcUvDMW3OJ+y`{vzyZ4X=9~TWXx=Cq)Hj*3p+gxycku`s zb8wk^pG)Cd5iceg$~p3jDb44x0ng`GlM}!5yPt&g^)z6(0;wI?6aa6VD7m6pZuo|a z)G9)GGX6-7>-DP|c7_xq_(<7Dc{b!m0q`KLnO5fUTB<x#rf@=ZlC|FH>gw&FPczM& z0!<D$IcT@ip_h5fn4hT3a7wa!I{-$DsSL`=a33(I)1bFgCa?^H@*wYN2{aE5y+Uh^ ziMLiy{+`OTz;N-p`KFubd*A;ay7ksq(uQTye69)U2eFhnol+}u?J`UGdiv%{*Mdx5 z&-P9XHFA%1{`~pr-rlok&)d~~{c-E&x|EbV^C-v&`OS|ynxk}SHa^lR&RyPv?;4}H zW!aYBGe@DK;gI!#Dz~!}{d-}6>7?$%xjRAKchZ#O_itgCU8L5#fB*Jf9%nMDaMLTZ zT&MirZYL2n@)Sc(G1g=w&=pWr=k`y5z9DGe0(^sz8g=#Az*+lkOQKZ}a0-JWOYc^j z&{t9pMGqk$69`8pOK$<V?GP-{<<G?utdn;~j-24t0A*HSx3X?ChR<qvCR%OAj~IkF z4`XJ)fm5ieTXbPk0x07d{v};flafzt*Su(n*coA-uYzsJDm@QgS5IYMaIplJ<<VuI z@WmG|cHemP%|S^uP+mPE5H?6bapdz~SqAeRt@GcsW_&4rw8|uIWHx#ituGsOPfK+F zmmc)wTSMk}|8Gdjmfki*+`^<T;`>_7e~<>JyM;%^)uPyvVKERcnvTjVEcucW!<@9g z@&~d}v*e1n@<CaQABaafZOkldMVT>|$JTtCWs*{%kT-6;Y5dBjYH(fi=626;3n0`j zb#F_1Yw?2OHn8xvC}tfdwGsml0sJ;zQ%NjE8NcgtZG8?!^52=0ysKAd39gC3-OAYC zwgA6Vtc#Z}$>;9-0Ng+$zaniyb@`;_Lsv3)lqpO=F&^~T1jQE0{HV_?f&p8mV-D$W zJF@o9QHFPLCT5yasDAYdqi5-{$DgFf9(#(Od+sdUTfae_@OozsT=QbwC~TZYfVc+Y zVH!BhQ%aKuK(fhMG96)<YR?SvyJKlkm~hc|{l$qT!3p$Hmbr<*yR~3=$7X(cZ||pL zf@<A8Oot8~n(zu7#A>Za_x=9zFaPqM&XTp|%z|ZDN4lc2J&#V3rk36{=;8bHwWfUl ze4Uf%siRY$v?+4)*XMRJw1Hp{2;n5w*7>I&T@Ib|EQb!L@X=+?^?3T}DkQG&CC@q= zM|6S@9U^+*OQ-)Hrh^JYbD_1wBQR^r<p`E=Mhk6Drh0UkQi1cPx&_0CB{6m5cQHO~ zRB8)bfmY1zs)*Mdn3dqqHdOWrm*vp~48NcUknli3#Bmz*Iv!{fqp{cd=79pTO%0C- zHMJ3G`qC+^7;pBQxn9?2DZSIC^u&{2rLR8y3??993AAHeQtK}+V}@u6^fkAs*)%ZC zeR$jZIw~?)qBShr;YFn2zXGdvxStH_B+<Nf&Zc^H>im>P3JYN@4rAJ3sc^0@SB@qC zW@VH96GQC?>|L#MC}Q^naRaU`U}Tx~yY(%!P8_8r#Oy#&=Lba`m?MYHPt%&h35ZU7 z_SA!_y@X_lW~{!AIW(oWtEB|W7WV_U=LULhseJ?R+@9ActrCv9o@(!zlc(t`UwxWp z`#*q#VfVjEf@PTQD9GYwBm+b)b0{5WBj<~~F$GMNvuvHvL(U~!fp7U94?X;-A8NG) zAJRQU9`%8v%jW4)KU&zY6)lcXLuX9M0?c$J4sXHFCh%n@j)~j)5hTqPnG^=UXi(se zo!RF>b&i_fsWWFkQS?P$^?amlsXHPE4;~a)4n3s^`+g^#v=CeaN}$IQ8h!LVQ`3vB z|D*MowrXwrbUn~M0KU#iw>D4(t-2m851cs6urCXi(EzK8#pq)325yhoG4yGFMv^GH zeC41VJ$h6=_`(0(v#Wf54Z)0L^>OntJ=Oz0!{}VEK4PLY11K1Y`!r%eS}Xb%bcHrM z;m@N0{Z_Z7iogS|cq6GSiym#HY=sypH@uw6A{DFfnX_l<)X9@{?)kb@jb{gLf|=&A zyFTj}ZORpeMe6n>SK6pz?%~bblF+b`NW^1f1ShlY0h0+TlZ;a7>A{DOLvn8QHDJmK zJnYN^-)TRTf*JcZ0>IVtiN$F73i?%$;wK}c6%R0Gorn*ILs6?RtOAg4){S`pTK7ao z>KZH1B*M~l;WVLm0&$hPjIV5E@%oiyAZ-XXT(4vRt;%J_?}3v-q>Wq>gJ$`4fLztM zmbdO*Be&*C*!Rl{h(oF^e+QJYZsBu`>P~ryN<VNeF|T|UmM`57sSXaqVqe|V-kYvo z$HfNVQ#@dX+iBk3ygkn^eDMK0=nukc$X01_v-Y)+IE@kNELX0d)0N~jJ5CKj*cjE! zVQ20_Ch5pLj$k4Cg!NFX2Od104z=oYpDSAm7GHIMW`%YerPA@5%c<$+Wycmyl?Gmy zzIe%GJ$F?vkT8#tKS*donul6^iJ~y|ew7lKV}SamGvpJ(PZJ!MKmOi#{+}QA5PG=P zVJ<3YQ91P<;6mkk&Ze7A4acwKtV}i_OA2D$l5M)LjUfo|m3y>+Q)-+dvS}mPr<XD9 z1K=BkaES+kT890-L0PQfqX+~c082lRRNye)16-FoyU6qVfDf-MzxQ&P(bGM_&!2nY z=O)cVA~5uV&<2IwAPD0UXbK}XgXHz4Jrc0sI9nY_c+B|hc*Zdp&xJt`?tB+joppl^ zZ9|NBcp_8XuYxYG6qo0pf1XZ0bBdmO?hIXOr>tgWinq;X2ngah4A6?M1&ysIb6;qn z4Y>a7PBU#IVd*eIFapHo;H$F#m*EPYnmz#87D>A0r{ld%2%wWkD-K5sbA2Ff(+C22 zcyLq9D*$jke9QDfvsQ-HD|<rW&S3HGsB4I=Ih!oZCkP8->_9agYWq!bv2>fg8r2(9 zoFHf@)dh%)rwY*2;<6X5n2C?jewx%)m9_tNzDmd~xsb1=AoHEWt;OAPWyW8M!cIYX zPEA{_wF!R*&<o&Q(w;j`S0YKc@+g;&5G-38Z)&_){4hl97*pjyrE)b=DEH8!>R{ta zqzq1KF6Fh!a)>2biq#K4vSG{^!a<(P^H$O02#MU<`&d2H>ii3|Ok32rcnn?_m&b8u zk__N+(<HYdZLo7~tZO^yr6R}EBG757PR8DdDeR~B$(XqU$ad}`m=x267x`npWv={t zxap1M(AC4NdgbJE_^_=|Y+Lrs51)h4qv^GvALlVd!{a!jV?`%t_UZbkeE@s|5YHe6 z?ab{p$Y|`;)P#U8|Hw<CRiMCiNGQ_y#EC;?hK}_F=&}^L9$!zSr}?R1yZ4?S{lv-| z^I6qA<ch{{Uh^JF2vwcrXS4UUSb3QYB(lNq?}xu~bSBh!-7RI%oDB%ErnnCL)|qRJ zcXgwzaY7U<%~z&yb;+*i!U~|BI(3>(pFZuUM}tzom;_UANYIH4(7?vYY+451(tRCa ztB_Pk10b#aQJNj!AnEo~l=Vj*eWJbN6+8_v4DS3jP^a$ILQ5k*rEJ{{X?0dz53gaF z*6*RhJSt!j-Nf1~d{u#IfXA$;5^GH>UQ*gbMA%crtbo#o*J3pAN*dWaXtcCek5PTM zt<7=9rhzkpWxj|Ska5dc;|$1nK+UZW#o9|axbfiRX9LPT8XtW}aLd4)yFjU;H|k(r zd-ciR(DT8lODf+nzPNN2v%1&z#W+T;`jlL{ba^n=jseG&NJ<@hhF0H>wh<6BDS#ZU z9f`1g&Bf~cmN*D9c`iAi0(4J2eR2Z6#oBwxuA*8;vev(jtvXIJ4F{5S$@2Jx&Ekvh zyit-g$Re@^=My%+xkM09S{gE!$ACZf1<rwIaUE&)i;tWa3X3XPIsEEB`tcw9?Q&L3 zSuuzU3mwlMwqLaZw=-#`yMYrB4kd4^M8ck62-k|}{ZE%slk3Z&;Jm*F_=cc;0DPU3 z^vlBpe=*!(rpsP&#;d$H!7>42J#;{qo0Q)sfTleeWqGqkE;DuI7w>B;0xi4?eQcmh z(X|-VXG!8xSYPhrmSS{AmULWOH(qi}uMSuiEBI4(XLKJW8tl$pYVnl=7Z~K4NNe73 ziP@&ft^Uf=!g5&F$&)9ieZpaR^h{=G`E<AOqy?Z4{GoMv+1At98&Q~!4{pB7s<~z~ zKS*lS79V{0F}ZZHD2?n(Wrf_rHK>4K^>sJ%qp?CX1hI3L-EQgdl&UXb4SobX6Ab}+ z56UIWLNi`a{Dov9&ZF2BgEbk9C#lTt5v-PqEsY7azO#Kgkhn~3=Ss^<k(XMGV{SDw z(BROb>Pw*KNP(~Dab*UC$*iXw_9v4Y(8c*`tneU1c77}sXz<n2tJTa1*x5m-M~x>v z$Fle`#`YW9tB6CqC8bpetlRBw=bat10@I5ZFY=cjcsR<P&;fZ=0UOht)pt3atCPl~ z6(oW!Z<vpC9L!ZJT7H=Z*byAgK7Vdn=3M?xpMGv(nezt3BPSfZd3!M)#dUazSZb!O zBqo*R{W!zHXm3U6r=w?68-UtLG@*P#ODXjeFu1yK1e{TDMm`C2lfY7#=)Jsm>8I-+ z--A+D3_4Zgify|ixC+TwZdY?s2El42Zes?>v{=R>VD#!w1<I%sHsx8?PfYF8^+Y$( zK3&(8mw14n;?#ks<sTpZ@Q1?;*Z}x3HRVv<aBl^iyeG|XT8`4fu<!fr>CmA=E3mvP zpZm;Xzx1x}y5qlCCGi?B2MoT1zuS&f>j`HwZDy5yZ-~BEC2`W#oR_vrF|0zXrdm@A z(FS1(LVG}kfm=d?aWFfAL`;pK2IiSM^&?anf?(7o2Wf*QzLpFGSAK@T^9pF%C%gi} zg<ko}SJJCq^(xvqu(OU8w_2dCk)9E2x;ku5_Abf&>W8|-7}D&r#uk%d6QimZ+?UN? zXtJa~@#I(3Q#XR)DBnT~W5Wb%s<+b}1RPNr4&mKZ)Us<JI8|b8?-RVRI~7@2C+Bo& zaYI{(iPaz{9Ca-A#T{bx=sYlVoX`+xq|D?`E<5bYrUm?&wER;}Q$1G?SiTEa6?vWL z*W|>Fon1I}><r=%N7VN2`EXbsEOk$defJSybVzOm1t2VG8FXlK&Pc8}j=Zvg+*U3E zsivtw8sct_#GrZ>fNN-n73BKL11(c=+~c_(t-APf+B7YLzVj{LNVl%!6Hc18&^0B# zGPyC=|M3GbBd4i4H=v&9-i>t}v$ThUk@HRSBrx8!b{QP^WRFgtdX7##dzFAUbEcny zJD)2jkPbecgiMw=3c-*s9>w6r>}kFor=!`020&I*qXCbj?>!2+t>+|weH^1a{PF42 z&z$;gH<CnyNwWrXG^*4pDPUI(G-Xe4`GtMK<xbxzF0A;W<`B{nnZMR3>Bx&=_v!kg zYaki+>1#;<RC(YwjM9F26m}4In2-t`1-`y_0}sXW<t!?^4jnqdM~@zqhaUa8pIs@K zKcSM{%r#6sNE--c=}myMqFZ#jGlBjtEnNab$ctF^(txMC2b(gPn%uH$T52c<2fya8 z=}hiIAzB#Ku|T|1AO?OpZc47Jr|ds7Yu%S+CcRBa)}+~}+$UV_;4FX`KiRmAtfy>| z&}Z`}8UW&DrQphFF3k~FBhJQj-yhvSo&MYb-;fko3l&U>17crl4A0a+8~{*GcM8v0 z=;jFG#r|l@>x{*ZmiG@QO)<uGr3Dda?RvUGCPLF;YAPdxeyw$>X`vtRKIL7VwRuSs zfG}av6vg(1a(iU}*Hn)S>lXAhK{F^w1iEZj2BC6jMGW<oYXWMkmsVDd4u<3J=7fqT zxCKSj{W$oK(voE*KU6nNBv0<&^o?(pcYfR5eN7Brw<_cobS;40k_?U7#7I{0Mrm^# z5-nyq)ase(W`GNuCb<!D2Ane%`dGeE2%7ceF7i6Y+X}9o7@ie7W3yGj%H!0nldF-# z{@Dp(%ekLb<zeGjc~CdTbU-g+iadnXaq*wXBX9BnqwzqatR_D`{?<GGy&v;%2d&At zUU?))pk{Q@CD4-_Sbx=kV~tnKP^`Sg2*fDlWcDujlJ*W>`?*H9-lyw~_Lo3k|1`-g zX=^57DVV=hLPY@;i78x~<+3zJ%Sy^WMfjXJaiXQQD`g*W1;02=R|J_ZT{$udvjTpL z&xH$@eywV{Ng!TptWgVMTAi#xPLiTIWA#_TFSn9|QrW`zZ!ac!0Atw0=E0>`y{V0o z)7wsq$0G%7t}eMh;A)r^I4;&0$Gykba%?Eeqsw7g&pdN-vTj~(cRg+ben)(?Ig2n! zLHS+7(k67Jg_Q;OzJ-j#SKOrKtk&PJHm`a}6NO`abiSc2(^Vg{R;Ck+K}xXR4-70R zV1)g=Gfl|v4d%2DxTWJ^@gOOviagsM6y0>FmxGU*7Q;!w;s-#rGGNwRbL3D+4rw>8 z>WZ2)X9SZDj7Pd-`%(+7!+Z((D4=5%R~BCDX=RnB1R#Y6azZs*@p|%i@jHI;9g6LG zVH+=e<_>cq$2ye0Kj@R(|Kj(Ydq#e3Y>Mq5fn5CF(Vg7AAu@IlfpsJ^lOOi{*yB%f z*=Mh-sz&m<tBh+%*Gj&QWN6@fD57G?!uS!}kNs*g#ll;bHa}YK?p^(ze<{H4U|a*P zS~!}`uY>uJo{h5`&fPG?9}UknLk<q>fR%LbJRJM?62P2GrSb=-B10M$T4WG2(T3o+ zrsu&m=_gM-^U-om=1MyZS;Pae$oB67P5XZb2Vm({NLgM?Y3ORm41x(J*_uLZ{U7Qf z-%PMi*D>vX#2bKMCLB8~F9}rW_<}QKEsbgBtGqO!V+rL0vHUdX>E9N%9)_j+fzbk7 zpUb_#hv*mo-~Z8XGVOd|QcGr~E73^wW^BI{UoF6cR3hk+>8j+Yl#?q>(#6FpQ{gTS zv}!Q;k?i2^A$=LR(I~;_KPuxAs8f~D74$W67eCT6A6J`Zqhbxd?NztYft>?Gf1F|7 z#4Y$Sxt_1j?sbg_b!v25QxBs;==96#=kxd7PftGeRdx3DX6s5|7GT^*+N^X!!3tc1 zbL$QRYg{@BT4=myvxS{93t<Lj%;|KXht^s2G9Q^G(K1#2cEcHd4r}`I(q}R-tFk#- z)yX#kJ6mGq(dE^!a9d=cXL2mRhZ|X0t*r#Z2dyci<aLW`@AZ+!%G4*;x9i?AY+(mH zXMUhQ^Adb>%jNVX(dA_4X(=>-UvW%i&+Q#}j&0%_zu`^v9ru2V`i9V2Jvoi5rC^C0 za(NB%(0^i)Qi!qVoCLdY;YB)g<}5wCn#hdHoEiS5t13$6+aPN4*e*YH?k&B`={g_z z>ocTB&SL|gIggxet=H<X6N0z$s<eeTJM3{Rw1wmF9>cKq=Y`>7Cf-KG-MG7wU7vXC zH~-)VEBHOc1qfFoNx2I+FNHp$dZbmdZokVXL2DSa1Y<uIm0PYS&$fEX5^sMA^bJG% z7T_CzVAfj^)-3ofGhb=e%aS3G+A!PJ&9Ldg0=f*Pf!_jd3$Wz^gpVHG-6>Zfg=>OI z!yc4_2an067cTuY3h=9$-R5<E%$=alOQzTcD-SFB4`WyzY?~X-l8O&ZI99RcxZ@5f z01p@+s~YjgI1Td{8LrO}lygRb*jm!J`pYxunC6vIv2>nXS%k~!(HAaU==^0cjEyEo zI`BI=`a33pDvoxr7CgK!6Q@{#n?bk~cXozHrX__F_+^_l;i!ghQ0dt+OnM@+ghC6P zBps}69&ZAj)XohFR#-gDO3#VIV)>eWVz5Y~l{W()Q2?v)INn*D<M(ynPJOnMn0YRs z<Y!=t1AqO&gq+nY1WIIkfBpKN8qdUr?Cd~xM5b*!_^k(Q@#qk#K@lWPkf23a-<3~| zU@x^#TSO?1_MWj2!t`v9FnJxtfL&a$&V=?iiZ87X;L_--xbA>8xbkh25-Ck*#m9vb z@bM>}noe8Kvi6Sy{6cnDnASLb!(yRGGqPwvlF~mv-QD{nJ@V+|bn5i8%X@scs4T`m zZr=t9HD5L2|MGmg?#=TI4AQNwDW^0~yrGAHF40M@6qbctH{q0&r0_yP9}2qBHs52* zhK|j+#Jza_;?LE$q9`6*>5XNZ+`Y5lw;5cfgISA?dL(TO&MOrG+_wA$X8?7A%)-lf zoDF{a;P=L%eE@s|5GVxG&#vF$+bMA?zdan#ZThS4_}osy3$ttRJ4Gl0sR*Y6eCxGG z2c-ll*B=#-+b%D+uu8@K?Qj3jKC$w6xMk;KNM?k1txT3hKR@0+$C(rSy3E<ew2`@l zD{m1TCw~}-g3?R8z%=_v&7&p8u84*>L=kvSW1%!Y$JuxsHf4gx!Dy?I(ZUDD-I=ye z4XG}Vey*M#{lbN2y>Fyy_)yuKPm{y<Z-ccU&>bE<hFLDqremgT99Q{$@Zm>Vux0_% zHo_@lUKVX}a&`)aWdKCr#9rfL^}JJ;Lz|+xCk=ndXx%^QGBN<i(SPQ;ro5CIA{f99 z%eYfoIZ^|DF>BzKXE2S5gN71^A4rA=g=MfvP0NiZhjBWEd9*@N#-}XDXVw+pHC;)2 ze>Jrc_!d|$&grCX!Nfcv9+f*%6G+YC%We66_e}>@mi#`KPcB=CL$TfIB#$@TFri}K zNh?wN+?O7B2#Snf?&{>)h~hQ@@|HP6OEPY#-%DDx<X<ueq@_Fy$bI^mQ}n=t$J;XJ z<-2>YsGgW`a2tBZ2X~nJHrgQw#=y;4sf#|w1_u{I46IZ7hK!-5=eeJhHNj@Ay6r=n zzT^6hTRmIsR>rWrSsTDrHeQS#<tle>dwX*HLm&E~Un|yMzvH)n;HozkbrH{&!Igw< z|F5Nv&x&Z(P~-eC=}FHC1P5@d&tOoZ_A9c#^!bLOeE@u&(_lG<eE7p3Ry4p#$g#SK z<VCuHRL9r76jbh6gI_7X)%sf`(sUKl-bx0EURqx711_iXl|R24sm$)RrP7l?+q)zm z$6UKHm{g>PQg`ewNhJl)2>dN&6LuPwAWRz+K{=1J@!+m03i-@5C`J|ol^5=zJxJ@3 z>)<U@7-8!G*tp=i;FQv2pF!r4{}mEigU2P>K9_oW^mEgl!sQg{y|z!dv+g#Mpfo`F z(l7FiA5dtdkbqx$zbfM8dMWL&fd7^CH*=(zhf@SrutjX9!x?mKC3ejv#^7L)t7cT` z4#lcCm~puo6Ig@^EW)Aa5penA3c&0|KrDDTm+t*VfDZZ9-(V4#V(zv5wrQSgBqJ5) zfJ<DWefz6kMQ{50H_+Sfx?}pg_gmji-}xQiLhpX(xA3=r>s|8px81>aeAAox&2M}I z-TtcEtXeg`>SuG^L7T-+6YpNusRSH&5>XrN^v$ECce#aT5bhpcR<Ph&f^j_3{pI?n zlO(XzzP2JrzwV)y@gY{T?Ic>XjGa&pEBRh)o7#p!2uWMYZb-e#30VQWibqxsk3aDh zsdv;ak4#rX{dlFaM}^XuWLqY9B$L4tetmrO5a-XIFZDqWJ^bi&ckl9v&QKQGh&6xa z>@pLQ7kptna~#cm7#<|hxoNx<KfQ%X3(@eg9ysI?{f$M=W4ot6S2Z^A&zl+%=0ov( zq(K^OAq=Nw*C0JtWA#rLgGmLpZX8kITa72`dW7!1mn5zzv@E&C^V>(7(IyYcly5;% z{T7x+BR~#&ebJh{4}@<F+W&|*07*Ix6ZbigO$6c~Dq(}L&W0sIan&6*P$=%ZD8i@S z4P2b+{@((Ak97&-Ox|z(*8lOfZ+pibUs^rBhLT=}V3-mJmTv9p!hkAmAi%=0Msta* z6MkW}S+fLd`Y==Iv##bx0bJpOL{`am?g^Akq}SB&l?B9oEU?HLRV>wMrzA;^C7qx0 zx1f3vtx?WGUa~Z?u|YaBbjvNb(5<)LO0RguEkk8c!SNhOo~1N^hv%7~qiENXj(y=v zzW29h0zRkjkEF0i*aA@Rzf?fn_ZpL7*z-D8M#Em=n#zoomS^_>*IMN@dyU6DwC%oN zS*{N4h}0GZ<l+eQ(koW&>~*jEI(q%;?@ez!I6c351!%8?PM&&}&YnF-Pk#03>G`Rz zKBIh0O?5{>v9c2OY?IYH!2wtz!gES_S0hYNujm%Fd+a)xsJP`6k%;qSK~YAi6_$t` zh&E*&Ggp2b6sPgd#p}YpW}k#<{XTLgwj{D@?+O|c8{Vbfao3%zzqh75=q06?{`Q%n z%uANAnBt;3P_4aXU+?qJpId9`o#A95FXwgBGQtd4=cE53*d2zN&8p2t&D1@QxQPun z<->jat}@u7G6cf0i(M8}9wFVN16o}&g8eXI6#D%v_3_L#hnjV19ryT`??3*Y4}S1{ zr|VX_7`_-viY2(dRU=D1SH{4uoeYg9L8olA(N>4n)|)P?I<24|^|C$)tQs_)FuhOL zFKsVD_vvLvgIOwdH>CtYZw9<G0GKphnI#(>H4n6FzZLwJ=ffzdEMygIyQ?YULp$}9 z=o9?V@&D$h4%~F$znGRyDjSjkL<GDUxX2QcX#kkgpg<k?^^8ZUAwWj?SNKL?*@NH+ zENhrnhQ@-3#AoAgra(j?lgYd@hicQS#Hb5lG6=>4vuFtNx`b$hJiwwZ>*8)f2M!#d zSFHfaD_-%+nmW^VfLFPii8piyJuHu;S5JK{|IY9J{<I&FT^#}tLEbpRp-nUZz_VFO zYm@`61`g25z$93X1>@9<dnlf;tiXfY%uqf|i{bFCInayY0}#)CM1UjHp<d8=d2mQd zvDm)lo8P?p`v!XR%F6pv(Tf)^(o;`8O^-bG<OGJ#tbj%+XDU4hQ0X9;U=M7LpFRs> zAx>c{C@ciPkj5f_X?Va@d(a8RIf8?(XmHR~Wx?B8|GasRi)9`h>c)}p%*#y&4)DMA zr{7OE-E=c}ymU$xBl@}4Y2(9Ca8-{2d{3QzZaUF<v%7nHnN?jm2Ej)jcns5}IZWE+ zV(D%PfRm8wTzS9*=hzU4;U8#l9;0<ObshuG%8vqG{A9d?-ITGv4)_>}bY2F)sleSk z^-GG>(q5X2rma^W`Jq?&)aL?j)u^Jki|n@Tcr`->zIl6IEq^$LP~Ebgi~XEOalKk> z3?LbtL9kEPC+#nRzRoFiMxi!Cl{<Uu(A|u0^Rwh~`np6!2@c1S_TB)mE|D(FpUYFd zl>Eq%`vjLfSMXZ|o8R^Jz?V+{Ju&d7Oo1+%nd(NWWo=$+Aw9M&$=RU_>crf+jXIpd zdd>{>7iZ2fsL#^&ymLP;+8{xe&Ze>zwph0O^iTcsqaXIAe;eebgLbQ<9gg|YQoc(` z21d4vzmCfC=yHux*(Y3<N0)ca4uA7=cAEpuBVANqCH?BN4BR#&RC6kGPpmAz^)Mb% zM2j}{3S`7yeCe|S;+*?vIdq*_;Vujwwj^=CZb(EFl(py?{MIxTWh<XFT25_OC#^p% zIDp>(a#6mdJ;PI;x`B>dw%&5{&2;a#+{J(4&;2R-n}6-k)BE519WN>P)jaQ50qsBe zJ>Nxt<FEWV`gi{9_tHDw`pr`%?XWH<rdDyNtBr~MP^+fI^={2wb>p^FTBu=GJxW={ zv<^7A$(P5rcQ{$8Nx`o#i4JVre(;GA<_-4zaykHQROZpUgZkR$w9VxF+8;6JE473# zUb;k&J@HiJhpv#;fZ7OtH<uclWYuNO`Gu!t&W}C*6g}|ZBO5GpMv{$O>-edIU>r$$ z0uUFSVkpKjol`+Ijrv~(nH?(${Gzk}y8aLcd3a=WteG(IiuvdGvAC53EgM55pP;Al zVAtN=3;ou#Em?j?Lj{hXHiOo9JNxX@KV1&GQt;c;1b(H0U!`3>cC03&=gG_gV7&$@ z>A<ENmxprG39CR7L7iCpyb@&ryAOVE3}V`+8;OSB6U`U|S~T?OY#lajy9kxEZ(^87 z*?&>?{Hj1YeE1mGJ-`(h@9q}AV@-JB-i~sY@IiU#k-zu<+S%Fp;b4^@3YODUCVX4A z>?Kuy6c;B2s;=RhG6Ljj;8*QYHAAr~rA`rryrH_mPkD!uruPsh#UJ^)Rd|L%^qlX! z|2WZc-7j)r=`VaVne&gWVp}TLD82HPub`W6zGbU;sDI)NeRk_uY|l8Eqvlu)dL@GR zcmBmE>4ggy+&YJ;1y|oE+rXetd83tB-@7|BLN^?<YFYP|J2KF-2DlEdEb_+4yn*Ex z-lu4JiS~$E+O49j3Sa-a*U;T>yMx|w*IVe8TW+S81D#!2f}i^8)AX6oeUZ+bJ-3>O zGLt#kY9G?8opN27f-MMiW$t(Y2g|s^wB_ON*-GAg+V{>NSi`{{;FxJ^kG++*z30hW zkwH0m#*$r=_9gVo>8vBB*S+@Z=zIRecZTl1HWrUo>#Pss!|#<!jD`HdL(N02z0W;& zmg;`zYnh*l8*((cahcXFpVoHHGs$v{iV|l77C48kP-`J_DyxCl<PREJ1>eaXLo0w) zam8v0#;bnFK{a7|-iCtS)BfRwO5ns$|K9S}_d(t7?Ok43e}CdXtS39?O}$4*mqhz& zLEYP14_iHY^r&?VSYc>xu>V(C)DE+!`Yq~ojfR~HS5cxf?b8iGH_<*_*94Yc5TAMA zhhFZ3ynrBJ-46kZOo-oR*8&RD)27RTSohvr!EQYW%T9haz+1p?f3QKJIs<s&#mgVN z^_4q6oC{(+(6ZE7=RY5she8@T&_Tki=gGYW9m6%lva0?u1uJ*e{}LF2y}lW21^$-` z4XP*QU?HBD6~@J;J=TFblq`Q7=D_bXARB8l44U&o0XV2RP`_6<_LOUs%3od{O<tTa zpkHv4rG^S&90Y^HafNj9^s_7L?}gNM%?ix;o$y_ie+4pR*5Hr?1@3YfYBAlfmpTZ* zDrAbq#qiqZI&cdBWk*lzZC2sYGU%30I$Vop!g#yZyxZ&RU;i3;|9jubZ~pp&^m3!J z1pDo8y<__O@<Wf%XFh+wJb(6F!~6Pe`=#kfvS#_a>Cd|L5tazUOsOe`^We9}5Ci9; zZOi<q?Z0jrmH{cY=)uxtT1zF59U}j}tsWTC>%lKC9J~c9tpJz`oji4#o>^H$U-#PA zY}}zo;5P%_9{g@M!Y$Eo;ttY3x3cz@y}bqaUd=M+`TQB;T^VI@Q`2o}3N3)R2%fDj zXftARplA-7&}@wS$N@y>=78Y05RM(wOIqg4gFHbmghaia@qpz9iD{8|&3j4(^%teH z&tClLLx)bR3?zrUL#+@Hmp#CGuvG!MRewA>t7a(`T@?&DA&lz0*x$0z$0A6-HE`s% zPuDN)FM+;sNC-MGT6YQI4%;$ThIfG(vk<ol6M_4GEvfQPao3B;@4fd397a%n>nYIH z60E@Y-j;X)$i@0wX7x_+PyL_%vrnwD`2=$+2o!>H=J>`7qMNgBj`h%n?>Xf|*YAY* zy!IKgCf@O9bkDrBkuNaJHb_@@#xOZiET9g`t$>{BK(pY?5k~E}O$ErB1SyZS5w*}1 zwTZ};2hM&o;Wi{(9)0%gSvx&?m~H1s^CT%QgcXVY_`0oX`{a{fAw<{QaJ7M(mN+wo z`&~&Pa=i}5m4I%#i7If=-|j?diW-`_!s){_BJ136GIP)o2TNMT(3rpD0agI=H4Jn7 z&3T2TdM!>_cKrVD{to(UfAP<}EWvN40)qd>zxzRc*E{b9R|Ue<eFGjWad%*+3SzI2 zi*{=Erqv>VvWU|eX!)&6ha<2IGek_IJ$3CQXbuNl_2Fc&RJuuYEF@$6xjM+{^I(}{ z1g6#hq2rIz)lych=auYjB}Jq<)@h#ZwzrapWpzPW=KT2TZ}UCAoA3l<!)R2w0x_PW zFbdlM{MM&YcNENr#j$#B%v+)gQd9Z8JDCm;>k0hH#}3}v3F%^I74mk|wI7jGE!<Qa zL7kA+e#;HK@lVU4Z0_yJ$KUzRA3k1}KA)Jb&OCAAUM{+$rcvC=ib35vSM|opDlFw! zmp|)4Sflf4bO|&rUDp1cPktt>7K-}sNRQrZ5^kTa2iga~*Exap*A$R6d)!Ir0%TG7 zE&lipf+3s&llNNa)kvPM9)J~}E9pL9T@qdXJva%pg9i`Fi4!OI!nqed8ZBi?8=lz1 z%YMAzu}S(kbIst!pd3=?uJ07|vY<w#@tS7_*8GOEzr65=37{JeupM#LVcGs@i*JDY zgqfn+gW-^OrmO;FaBO&<vl`Xc)rO2tK)CF0d*+$CPx!?bUkstb>^t?~V2Lu|jh@a0 zgVQKVntqv1U7fBz0$?Gr0t`5a*u|@s8YoGA`Y}~dC<qP1;aM{3hNz-N|H-zD0D@&y zux61)1kGXjvhvydG&@#c1qWnd8hTZd)id{}Nn7|;KHvVWZ>PWc*T0Xx{afBn*Bib2 z+rNdr|1bYJx@!f9tuD3W>N7PR7_LG>466VZz)=lL{x>BBzYNWlLx+qOU?K#muzy+K z)3WFKSZDk)z?}i59R1o}a_mi5AIR`1y_D{}!aJ$>QY^q_Kk&8^s7ozP!g42gu2j}R zGNfZueJ>#QnUxj$q2rIOCe^-rg(o_Xs7Y}~xlKfCCvay(43vF`9auTIoFSpakv_;E zk8!Tl^0KrxsQwPTYH#p|VPeXkU^+}a_%{D>eRY#53=<x6Aem^fE;ns;VIZP7hF;#g z__4!>k2X#YN;%p2&>@;;T5x4xT`~B}Tmf#;9VgFry=K)V>#9Q<-Ur-%*%z$XiWNOP zOWlQg-Oa0?xm$%o`*g$5rfqtkt}hzxaiF~P1N;o<s$eMlegRxhVTkIU;NAHn=j-}Q z-nE1eAO5!K`A9nFzAk5}`+xn&`xE@|qyO+XS3>v$ny4}`(w@g)MD+hL&G@AWfuVnw z5aBYKJ#gj_$Cg`41og&G)uS9RvGZxCMMGql&VxEwD#OrG>_<kSWKj1aBpWIn5~A%b zhFwRXN3`^i<4qIdwPA0%>89x#rLtc*#AMnE0O#<t@s%a+l?Uv68uW>k_4o5%xF4f= z__oKFxGk;^gZGY(_tM&KvzoT|3O+SW(f5`yijSx=T*(R3xIDM3DC$2pRnVJHhfe;K zExQ1y)l>|+H_NMDbt`}1d*Az#A8Pf-MPGifEQ|i)w1m}xWz(y}X~$OehP71Apw8&+ zqcsw;_wE~e10mws7Qij3>Bk2kTCa?ZmnygYzRpC~Y9!6fP+JmhdFG|!{nGJJM=stS zcz@eHZ|Aq(`OS2#Xe2B2BW_k(%T$1FS-yR30WV4^Yy&f}YAyKfX$Mu3g*FCRyDP*U z`P=K9XLjkrVH48t$DOdW$>cUUP<Jb|w$+kZ&mUTBxdXLv0tLcgCJ=sHuKB#NoZ;Qa z56D@c<r6>pL;sHt9z3`!MIF?=zVS>LrF*5GBU9fh2v%UbtC>zqq!kD^oi+4Zyy^(* z1@zVU4sP~Lbp|i2HW{xx*{AD`)=QjydRde7d!*W9uUmAp%JXSzdPGSlSAd+BowPiP z+b%3c*-a@|>u<c{?L<qz0O1q-U;q7I{J^VjyY)A{Ol0bp^o-6x8CeD@(nFvTz!fnR z3Uy*x&%~i|mS$SflCS}Lx4O(AM@I1LJ8OMLcLrQX)&@S&QDh9zHD7B=!?gNjdnb&T zzMZyG{M~?ra=l(VD*J@%p;@n_ot?N?W(f>$3zTal%KBqh4cZZZ|I>d+r%pdxT)+Zq zU@|E0++7v3POGcHkfyvH5Vv63_`otuJ;s=GTSrh}xB5>1Zk$d4$!Zz4J{$KA-~G0? z(EGmoJLnZJlLM}<6_ur||LmXtD>`-R+0Y(vRRD%p5IjuG+oFSDu%=LIJuZ`miHU#9 zq&!aFejbD}j}N=5EP30n-#8R5g580i@gBk$uZHU_T$?Ob<+;4S;q|YT_kZ_yUQ>OF z@xydO@%B`#y=7nTnX_l<!i5*<T2g?x12i>oT1sJ@$EXf?IVBG3Uw9BArqR1Eh|4bU z-1Z-a#-+=f8|YPjG60^b47c8M=a%OX)lU*gHg{eAoLF6=KJQT^|K`}qFJHd!V?Xwz zKm75dN6XvM$xD|r*X?t9*i`|vyX5-gF>ZGNV+IC(^U6dp(8x&V1-Dt<IER70P8kgE z)AdXHOQ5fF;<isp!KyC3#pTWApVYyJ9T%*iVOa<W7PA1u-rz|<pi%h4AC4E3`{NO* zS0Np1haa41fLQ$x(Y^Ql=(HEuc_M>egTl{hZHqvk=R~&V*^eY%ujH1J=8l1PlqV4y zS(Sa+mIF2per-^}KV_Kh{EHACZ+FRgp$3b2`I~3z%a%b!;1rg`^iD<|tnz3`9P*?7 z+wtIc?vDn1Z7{L3EtTcb&p-b>J@d>n^%^DEC%go3M}Exlw~qw=5|sxmcDeTGq=8?{ z&^xv-i4N}+fH2NP_#+c6A@wVVRDGL*NWC`5L2$TM$r2ia-)>p-xDJ%>wv1J4&gVCT zhzI*VIfJS?DZ-wXQ@P6MPk--wUQ+OTcGY%Hu0ZHhUpcY*d)j`B<?X`7i}X@aIVkHd zf8QZ`*E{b?ZDVRQ4b0hu-VhsB&#Jm7-CTlcFGs0MtI?(VPGsN`{`Al;{hMpYmS*T7 zHowM{mRgH9UaJRceY6R38}rCzzsO#|5aLV3Z9GN3o_^*OpWDQmx<*c+B~QX^!j;Ll z6069Jr=LDa4<CPQ#plVF2K;9E9Q@~A791JIO4jk5*G7wRB@Lz?$yyHMpN~zO)p;DO zG^*(c;$bjpZ3Eab1X$IumdgOZML(guyjjQdpkWA(D9W)ce!GrjeGrDAZiJTOcinl% z$I4^5{-~Vh-1hZOf5(pfGV8wIsxR(>-dI7d9*9+R&U)*}5h+$*&`<F!8w9J)etgE2 zl7eU4K%H}3`m_&zZzQ@hsk%=u8ya**)eLwhya!|*%k3y)v>Z2mK<v<f!LsNnegwuP z(yr)0@B=^a%R5Jo{D7!H)2onrI$`d|zW9qDxP4^>j)j`H@5#K`bx~f6EQhU2b~)tX z0#$~7J{a|u-Ch_IQLtc|&kTqX$_kyGjofetaV!^ycfss>YD%H)-jmFm6{sbgqT48* z(q!rsQ2SSWh`yo`CDmK5xNAL1-F)-SbnC6J>`srq8e*nJ&@8PE%j=gPJWdZi{HQE0 z1<qH;L{F{$hGk%UNA0kIpVsr3(>`5Kdth9P^D){fD!|#+Dx7IHHa8&#hhwGp@>~G# z2M>MEHC^&t!0f4$r|F3a+&(8KPoCy8EAU%^LARWiaPsE$ul+i@{r21FO>ca|^!%o4 zycGMs`yZfBe)^a-BF3wYlnYxL-Ifz~D~6$MkiRQnj1#Mq>j0@t`3nULaM=G{&*f1I zZm2g^)CYAL(lRD27QVMkrm&*rkO**liNPtwfk10?_uJn({cTHmTp0QF!|r;z_RE}s zukgYP;dmy}AQWS;6mRrd0tuv3BUn1zM`UE(wIAAqG!NyuExH4+=NVMlzT@B+0I{dX zvFto<Up_fPUXB6Jp)Q%jstlY+xPm4{+gO0{>C)v(KX%uh-}teWk%P->KVSB&XTzv9 zw}#ghgyqMt)GTg?xn8NcYk7>e<qh1L+>>zSXD!4066h44A&G0PTI|!;fVOP@`}A@o z=&)h5Uel5DGZGKNP3~E+#8aQCd#>Jo1yWCL1ujct-t(Tj`BR^|UmkkoAO7Zw_YXKD z3t)B|pgR{YrQr%m4|J7O0VJ3mL;$SdY%~)&>2o{fPP_`H%OJSd6rDL`2*F}wIRan+ zOgI?Vu|4wDo<^A@ztz)TD+fkoipb0&`DiPWnpc-^=0N7Z)f|O1`^Z(Z^<`kaGJ9oI zmPg-q+ii673Q!%`IZ#t%+MfSGJbUkYU%C7DUrpB^S$k_sv-Sk<VjY1HQ?6#0OGi-v z-&U7@RkaTQw<%Hrhf!@XrVPZ6^0M?<`Vx5@YKn}thX~Tk`>R)$(ZBF-|0#O)?XRM% zr2=}t{N>|x{IMseYj9q?c&TNZx1lLNpx3hV<prtED}XLv|MhR+JHF}7^p3aPLDz!H zy}?KS`6uPY70<G;{F!H#LK|qNp!4Gt7`7q(0!#_yR>jf7Nq7EC4`g}ZPBU%1GBtBe z76?V<-<}7P0X*1mJZQB+)|QE}Kl_1yleVQiHuRu(P|Y(`mN}n(_PH%jao&zL2jlCP z*WyYeZG@YX1n`(M;`mx0wbd$sCFwin8d5$j*3^jV>Zx8ssK3lTZ)I1FfPZVhR<^)1 zc|$FF1M`lLx2ev!#R(HX*7h0X4{ciH6rQ_u2O+)XvK+tjo8EL+vG`Vf@1R|Oq&i`F zFUz2h9Xrf=Ylu=YsC?ujyNpYl)###xs}hwb-T#XQh~icZIr=`Z?&@z40tDDumqXJ& zUH7z&wArVZA%XRlvgQQ<7$?3a%7+6C;!H_u+9+^v-)}$Dwo7sU22!;C;vI11DEt)! zo}LR3{?Y^gpC7*YmYe<oa7MFqg#fq%n!|J)$ZDJjbYog*PLM&G0ayzM;AQ}o2tXT| zb+?0V5l;h<!t^jiF4mx8IzZ{=mn%T0ox!F{zmKE3$i~@8e(Y+BI_wTl>uEV$*&}@0 z3S21=-j-bXX*|wkb@uG@^t+$@^we-v+0RK0v1PJ`63waA+!|UsU`S7C$?2&=5LK;| zep6D%jN$TWUi=gWkP*NWjpj8t-4$GZZ@>Lk{tJKZ>cQ`mUpYaa{_Gd%)amEs!iyKD ztoNd9ZKhPii_KM%Rt`m*nC1qaT?f1Q=37=k_)YYk-|;QevgWIyvK0G&{-^&-Ijva5 z5{Rn7w^7~__;sE)Aq2zvKKG2_hLoGDF>S!N+v_a0vVoxkS8*y7XP!ol35(Lw7k$kD zxq5uh`@W0b@VeL1HiRF&@eO_<<ZK#cnR5ZX)8S{=jJ!_f*~tBUG1wpnZhe+$5&RCt z2W<y_r+@1G(ES#l7*29((CU~63@E5pS)TnN^=gUj-7ww=lxb@9PV^Qt0bA5ha^5vx zxJF4GHy8uw%EJTjZMECVba}G={`()V`+imFE67)`GpZ*#*VTa${MJ>2yXCQ1hjFXj zR6tz{t?wl)09;N$wjc5qNc&+~0l7+Z4~<OwR^S_hHfjj_^zx?M84>KJndKlAM}uyd zZRF7~(o?$fXqC`z3%@%(*Q<}pevkVEt-)v&E(c&8Jz50hA<OIdqyO!fRt|Ssvhx*i zMF6;uH)nx#5LlxDh$W7|6#;Ovrs^Q){$vQC&|W$v*)0PR(85@p9&{X5jDV=m3m^et z%1m)3q+K`DNtgNNBY<WazlUs?!Yuff#n(<-)-NJ57vsvQERWVhvt9~%<gv%;i}yb$ z(w}}Dtg<}6uQRwiKqR8s<)!3NhA9eVa4fD{1$_+LdJEhv#*Hm|UqeF>%n8YOSqgak zi&ts+ee$Uj^ar2&BYE;GPir0%l>+XVb-YJu0c3Gprd`8X-OlWru1+g!u)O=7_wdyK zVFkg(TFnD%@2nd+fW&7Ewv?|=*5uU&c05n>3qaVavM~S_n9$^G`Sv0~TjPA7RyZgN zc@Y)UY(f+31(r=KPh|=8J@0rMT}zq+!Fs6G^XJZ8<I|jDZDx?O)yE$Mh?ec07-UHT zd9RxdsQoE|RP<etWu0^5kx@iJ?tv-K*V`utfuI)RsiEy)TVk>S8GA^OtNwuDv!&PL zwbsn(uqzI2*vq&;eOb{xyG4Fhc^`l49Y6SXUEx;=Z~kyS(19?S)whP9mO^(QeYZdK zDw8xG@<c+`gK-8ERfX^?`=>zPaI}92)^$!IQCXP&@zbEE=SlcE__a=(!7eTxf%FOD zNOh8KmafG!9-7PaT$Z#{@LQ<}yCMK_NpuyChgk23D+2Sy7cYI3X@ddwni11@5}IxB z>)c5Oaipqt{Zwy_)dn!u!Hjz#$T}dBe<w>0$8i0sjKdh76zPmRl&%kKVR8Rb2o;kE zna|ZpUl+h_8^GO%H~hN1<iY)GZZ}CyQTFNTT33vF@#4klu&k3OPtpr3i_9Jzn$^X; zf^467;wyw!sQ8)u04x9L`flj|0Gg-4T~c7D=2K^HthurtMpUH&q*=p@9~`99L&z{u zwm!Nwm`D$5viBKf!x(M{Db@CCb#%4hw=8e|NB`uX(?9x+e@;(4bwUs3GP#HfXe)^@ z@SG=ZBuz4irj<4aHn}a-()`kckMNOS`zQ1}|MCx}Q=YGcUiaFsqd)&=zqj!LI(0p` z3YS6ye<o%apQ-O+K=`e=&9I2I1uZwVecK+V9*C9dOuS0!!Ee4&0>`*o=dA6f<<jJH zn=lcL7nN82CQ|(beYC$RsHi|ZO_XXG>z%-x5MPM^Xw`k`(xqu{uO4c3ZTI;0Gaw@_ z)--?^xO+uuobr>7oq-1rIa&vP#~DzcRvT#RaL0qR)P09+{DdI2sc=rt$IlM@(lYpE z7;}kX(SonO>D!YJvJ*QZwCQAXmx}*0@LUsr@A6NVUkAU1POu+@I$e<|WnXX62i2HT zs<a%YTKwC7;4pUS%0oB=3&JKIT!5&|;A9vYsR|Yrf{BP+Nypu%mnrQ7;On2NCZYS3 z+R1i<&d#Yr8)e~HmN#di(e_uU+a!#tn+u*}$BLzQcM4PP|3z6;t-!@WPlDc^W&w*| z`K>2GAC(6m{Ls`US3rW_ao0C~e3kgaYwWvg1o1|j5;q|32B?vhT?7%SPzJHcmp~i^ z!<Md%sM0i37!YSlq|qQ-AAHjaOdX3E*j!gnJa{7In@}Oj;|WtxK)B+WomM{HM3rI( z>O<XeX8fNYw_VAx+3|74G*9DpSx%2GK)4)?RDMT5SZ12^oL*d(I6img>>z9IlM)41 zq<|R~CG-QhkT5bd+uPa+y^et$|CKw2a~tJ`g58bksnH>u(3ac^IyDR1;~TBh0A?Cr zl*?b@-g3*$R}6m39^bOm`B(qZKbw|4<2=rweu9Ox{!W!2ITIN)w6>qm!;BK1eoEwW z&+q^APydD7_r(Y3N~nO~?|uKf2?3*o)1gT%SkiN9vl}=uI>0a3#`*)=TI<kN3!;-I z62c^uL}5Ba?6up!+t;vzZVQS1AWr#lD4&%|bf6P5Yjg#|<!_H`U)$pXNH1Pmf5NxS z2moFXZUyK*{=`!g@IASbE!T37FB6Pu1_0MgPx9b5{nd2IWH-$Lwe(uYGO^#W9Il!0 zfRzk>dDaivWg8Q_5sbZ)Yibq_*wZO1pD!V+he6h)vxBv+Ip`H0UP8Tf%Z{1Qx*1z^ zV_wrA6VJQyy#L4@m$4M<@ArTIU;d>S;%GSm+P1$PK77PZcdpBykFg$rRf^M2gqD<{ zch?m)5NvWHgWv>qv%WSv<&xs+R~Ff~{@yUev`^PHrR5!Ja$xM}<$18@7dv#>=diQ# z-)o)Qgb9QT>6IUyfz$VTl3zW>zCV?({98b<pZd3SC|05Oyyp!6@~`~*4;?sA_5#aN zCCvMp9}oSsfXPGuUz1nA4_F8Ls+{0Ho*Lc;E2@WH(M($8)(Ug+0ZtWcs#@us2<HLM z@E}Ca7rB<%rzx~pCn2bq%BsqO&>$_#q-qs=!G9Clke`{T{^QMDUcw=*o*sQGz2X(G zut^6ceCN^kT+tIxK1H9u@BXS_*vZYX9BYb94lJYriIU!)xJG7qavsR107-8n3d=*= zd(D&!=!JG#-bt727eC#9OEFDfINE^~AznM-ux7{t{>n8+ci;6E+Lq3&EUdqI^j{KM z^EmJMWI|qJy_v=i`<6AB`rv)VRqHm8kII#32hj<ImO)9Y9F+AZzU$ksXn*i$KL1Db z+0T8EM)eth<Xm-2*dhaCgzD<puB5%giUYEX0<2vK!9;?Dx`etQlN$;|op0|Cnh#O1 z=mz}NI*~1*ZcFq{C>cX0yM6LU^V7Hlyu9<<?xwfhIe&mzR>JdG9TfC(sMT|4UeZIY zYQEFI^?8I4uO!X*&r+xWPEAxrkwqEQV)6kp@+Q2D_Ura>nlj~XQ=E{Sx2cqn7lWaJ zS69>72qp%+^R&FMA|fAijAvdmKg4tI(v^Mb+wmxGOQp7;7cXD>u^;^YkNi?O)HE)E zJ}PBPTs#={h`@ec@-t+18>l4%#!9<0Cp|Ym)px^bdlKc==v{?8r8ttq?$h;8`(N|M zp>4h;YLZJ@WdOeljNy5rB7@55edW0V;N9YC_p0gDNA)uE!|6omdMaQ&6yeYm4uxeo z75Z0x^{0PhmD>kop*V}+WfmyO_I?>`%jl4+wwAN`ML|k#B~D<P3@{U^bzwwNFNoTL zSvz1X^)y4#2*69HYh>kbuA&e<X<Cs-PGM!3K$u9NrH?s^Or~IL8;xf3O8cm<5tY-U zU$p`(x7_lIfnr6JbsVKX_`}cBS5G`cTC@Gc!sY^i8Nin*^+cwad0K#b6PQcD!!`n# zA`f_l6!-f6;GQRIra%aZHYu2WQvR-YeJho}ZR!38j??e`{vT33;Hv3PI~iCJB`YO9 z*Ro5enZ|v~#xi>Xtn(YH8(Z+uH1PY~e%o#IXFl*J=yk98I@*@Xe&DCR`b_6O2Y~fU z<YwyLrsM<IZGj}Ejbba4O%hN5oJ+)Ed19DckR}(iwhrGTUmJ$+gFVB6&3O1$d4AKI z4$}MH^Df$kU=n+JFV^0&)cwqvvo8tojdR>swDj3G6e>L~*jO4>5Q$MTYpI<WaPxLD z%LsQbo(Wa~Hzst!Nlw_uQucT8cv_NCOT~$6hE9$kRxQ5~WR1QLg}BCTipzr!*a2eh z)7E_F{h<D5Y2szt`&*0{uYUEbC4=7)=^o(ntVWc)&j2bx)xI~oD<wBmh?3E!dNx2y zQMc`Wfn33gt#hBQbJ|}5edAC=DfL-9KJMoQ>PEb|aJtm32?iU91<+ZMJ7wms?&TmU z%bkm_TY`@?p;kdMT7K)EU%v{eP~0!_DLQxl`TufpJiQ8WBwM&n#Ql4$%(|qpZIV<e z3}7}7ZXOS_*8!0S%a<gCN13ck#$cO~1XdHzz65x3<EVo~7GZfD4x*IGuLC)A9E=A8 zGQL_EmgTXvi`?_HQ8e;8m<yyzz-CLwHp{;(kA7}t(K&VM)U-VMa#|iet%wuq!2GGx z&)OQyW~H*_sN7~JL`A@~c97Eg0%ue3s+qheH6jJADYbMt5J-paQ4tNRKW4(CftY|5 z$=A{t@1)A4v;ql5UwswVSO=Z7F0kg;z3%I-2>g~M&%gaIK2^>haDKU#Z%|LD2(AD4 zYxa)ug3yuF9R&`II(zOM{rdlSl)iBPgIi0%f9p^E33~PIw}t()L+~qOUi>3vaiRRx zzc9I_V3EjX-8eVT<}PWeJHx(cC!d_~$v@u%E^YOK_m3uz_k0O7iSKK-KE}S6dvDLn z<9#!pG_6UM=aVN-UD1fN;%VCE@c83TO-r4hefC;deNk4|PsPDx$@4L`5UHLPZxvCO zITM@gipjO-kTUzA!8iuY4IE5qj4%OJ4~2#TPs!}ym{R}rh=E~}_Vtym$VVOjsjC_v z-)UjY>pesqc`NwEe0eVJuvJ1&CIpK-&kfJ}sYQEl+WUKyBKSQhdKD7h08$Ji<+ttu z-pyyq*mKb>(LaY76pXz*L<tNtE}KRxvBp;&S7p7pHGpJ)FYpaP`ycT-CttB)vsS3w zPQQ66hlZKE6K$|uS_MSCL!gpff#d?K2CeDunp<AFq8FOSk|-)Z#0Z4-`4@lbAO7Yl z!Ux7Oe2vXeXc_1Re_0bx`tS?stF<=*U>$VO-QV3xOw=!XmN4T>_N-|@?ydyV(6ZS0 z)(K_h7xiAZ+!$b?J%NNc6gMaYsVZ8jW#~uQPhbQiKuL=tOY-Mi4C;^T(xq6|?t2Se z4e80zWtsGd%7HhZ{PbrV7Hdl`8-=C0b=ra8U=;iGt__e|C-GacJFJ-n@AB4Xl6Y@w z3#6ZpH3?isY{6iuG<SIpzK^X~h2It3a`Vmn*Z$I<*?Qk^0l(!B>!BloaueRWY!S>Z zg|Rs;Z$|5+elsi+cei)6rR>2lWBa46?%wt7_wc*lc@J$v<&NND3C{JKfp8NM9DbW6 zw=1*N6Lk|gnEn(ru09wmmzL1nHA=NhwpBNbZ9Q3bL1toKGWNL}3BrdY_}UWsp7O21 z|K$7MOK*7nX4fGVko)YjXQummueG(8JFpVr(dhGVA9NT7>Y3Kc&p~_&fK6u8>76<J zj-p|Qtnb>0IS9lc0-00#nIwWtlwX#1znopiXPaye`MCfNau+PTlmVQkP5t*>`W{I= zT%0dh`lift->C7qC&%yXPJUK8*b1!r9$tl1fN%u3)$dri>ZrKw_9sBA4jg(ZrjzvA zFsNuprg`$7FZ+9dZxq_M0AJ^n6i&no()?}eDg)%Q=NH^f02d)qgayucCBZ@tes?Kd zgA@c$JH#Lzisj%}X95o$+GPd5MQAGcJ=!Gbg%@A=C^2t2%pzSYc{NZdcy_3;K~4uP z3bU-eI>KNE)9)b&zHl&X;cA4we5#-CSRB`0F^mt+D}kUh;;aL$51b|3URDS-FjfLn z(4r>pGziRk4{9r<<&*GCxwgi{&hShg<5)3u9{mN204Qx;jP2=#=?>4+c6xNC>F}%C z4z#g3))<^BTy@E?Ur`k1r|?4YG~5;s+hG+SqZ#j!@-Jb}D^;yfffBdnsN|>aPT;L| ziQ3AmrA|ebh7$dOWzLij&7!*Wd0X)NyPy0+`t%=u0Xl{%nqCeCp^ZcKP@&mOTn@pn z_ggD_0Kcsawc7na!-f<G4XatF;r+9p|0DX$w6Aw_dea-<K;L%HU1srgU>cWe3zW}( z+t(?fOay@}@yWAZI7Q&wKCbi!X0`ew<tYMcurLeRp;Vf%2!(c57cfakfBFjI5yA=# z>6s><$(indE^WR17AtWb9P8(Q_POV19i4yS!gR9xLk~YXO>(`o;Fp7(^H0~yI&+*$ zw<b=b6+wMS?;b9inJABcDIFVof?p0J!<>VqTUxnwoP!K>_=>=k!%(Yy?C?DJoe0`c z2D#c0JMbGO#VLYcE8%!6)Mz4^<3G`F;d_pWw{VRa?Co9rXxX|}RJZc0H+xhntNqH~ zVL~ggT7QwsRY+wkUA-D<*RpSVXK^ztEv#S^^5$&~M)g`xTf!0jbJ!Pykaro8eGBjn zLHi%^`lql=nY_bG2E5I^MoJw%TZh$|T<CBUI2O0LwQvP6@5&GSz~P;8?U5(33%|!& z+GRHHF#BC_Cjv7#bEp>JLX#Dk`2*d6u+9QZFs20gnEi9QG){MzpODNlA(mD@m{oqn zwXk8@BVrgJ(el?v8`lrAf|g!Y6e4u;XERE>f}85Mf9zi&pD^H$zK%1g&}24~KGK+v z#f%nHBZB(SG-MF!N~!D<F4o}NUUeHC*f~JI_o>g&sZ-<YRhn`KN80)lWwnSwU{irJ zhdj5pSFMb0orw63)H+$0i8fUeL(HU0<9(n)!Ah#{_87PpZLm|ex8Hsn{or5!KH7%N z@;j;vGLR|)2Uvx2xO#3p5}AoNMi}e?ZeK9h0tGWw2#pVRO_C;2S|We<cfE53YB#@& z_Qe-3(y#pbZ_vd{mjY<DZ!{po6SV>~bNlpaVf6_TiUu*AD8YAvHaE_-rIjar8b9HX zG8a-Dtj#8C#J;WNtx=$3gZ17UVb3Groax~WuYVo=sekjmT?xuE=VIwCclTbn@FHDn zvL+`)2r7B&MEX~uWssF)xOf$swHkI0s-Fx)F2vV7+2Tv~7IkOB58l@qawDE9bV-e$ z^{FZl;tCr3cT}$?TgQGFsR!V^7=AIWanP1e2sKD+;O-NApZL)q`oRxY!^I&g%b-_4 zSB@M}<HkYpdw-9tehUh&mR~<4b(ebDZOPX`2Ru|JP+rA2#j2n;GzHL?oBH9#-@N*9 zpf6)uS2xh_)7PB#Ex^|~A^0sFSuMA=K2PEdVw+VTra>U_)B=+Q$wxl&5gk=+33Pqm zU8TF*@^k@m`0y`t6<+1f4>%~o@8CfPzvXEBLk;a#@OzZd8hrQNck^Tgo*|~iS|Z(R z<n!R$#NRA1^TJTw{LtENRz;jO?!v_kr+5VWjD;xA?1yX_^YS!|U&{~k0)WJtKHFf8 zyH6|lWe<#hi<PQ6s*qZQ>r6Y3Qc}i4SZ1R2YXUGZw=^Kp%sM6a^vvi0aog}u*J4a8 z`-F=n_~bJur+va_>-9%4C>u95L$S#f?7uuSA>x)WSPohzBqX3)1-~_@T8HbEIiwah zD%P((4aEw?06}uIfSOxtIub0bR+&P2La^1UNY}J$xcC9el}Fpq2>fbtLcZ@;XmEIy zf*`d{5-{w|!8Z@$vN;QE_u%rF1v2o~nr@BBy1!PeGwLu<+&}s0&(Tv~d73t*a$VGS zzvtWYgjnCPY9n)h@vv$!Mcg@k<Z89$1Q7MZwmF*7p7glHP|dvMsv&*1u}w0Q<!6t` z;;h=JU_JT$%3^zX)%t4_3DYm~!x4b%blenWWxQn^YqJHo9BTFSGpFd`M;@E3y)Oy) zH6d=ooCY0-f(H-Wl9S6#NPmt8VjpX{o<*?^{Nfl@|90jX$}Wi?fdDohGus#@;g?jr zk<ED!Oz`U1q<muL0Jd@!(!d=)NsI0dH62QYY~wujG#p_9bIEyI!b%)@B@XcWUb=AM zC(G|4vs@e^2fxMrgx&s8-0S||vLdj6-+QI%i-mSAP1s_`MaLZM`(*^EYVFnSeXHlN z(_7;Z;S{#!v1?Xk6%IN>Cq6UQSHeDBm$VOnuX93hQxvS-dWWxozsxM}P~pIshIW3K z5yN$3x@Xvg1jea*HSV3Pz%A}d$o+uSeI2`0fA5`6f-W<ERS+H&UFux!26pxi*)r&| zjOOQm{^$4p){p(@C&~=t#)AU-RHW9PX)v^GC(mYw8eWbx4Zi`5ws%QMNmz#JT!N+8 z!lGWnFz}P=+7k2~5gD--lTF1zbxIEjL2!=1v@0-;YFDVwVg4I%_>-tWZ9UBQ%1M{e z=y^Fw%1f!Q1r=ra#fz6*>6X}(6{tyDg4sGR%y_Ayo|Kkmxt-G3b07yvE45{)s`xiE z8qSe$-u|iAGO^A)iG@>(+60XDSR;v<=gg^XoU{H?L5i24DJk{g9dCQfR!g7D6-S@` z!!HaQT&)i;&;(SO17HV>Weern6uu+JGFnEC{@~`zpiQTymi*vAuJAVb{nqdNtLYTs zP3i4#y@THL#@F{A0)LGKwq{1%0a}zAnlCdJuNqD(nW^0`jqfzI=ZbHe$DU8nq%lpf zf3Vi7kgu-Cb}j8tGcf>e9~J?wx$L#Jzvl;^84jpn!_w+$IJ|iA;<T@~0N=9A`H3gL za*YnPinLBVNe;|3h5|g}w3RS}vA}YdB)cieZjVO+UyMgs^Ht{JFj$u=>-QH6Si|g4 z7^8I9jp?%ag=d-}0J}Q2Blz`pDloQkHwJe@GU_UvCa`HUvhTNM(qc?9pXLm$+V;nP z{KtRfv*=dzH(bS6EWo<|x475aLym|qhdyGuq8d`t88cxiGq7ZaA2c$w@S%f3eQJO9 zk5v8D@WT*?b$JO5Wbi&+pR^BvuYVc}14^<TX0<|C6(*?A?Zy+KJ3)ZIyLDP_3Zr+p z6%ZT`zdGFZ{~qRJ$Br!s4nF{^fZlp!KGCaRUG9-PG{t-7t55&<Z~&hrU_Xp>LTiba z{dgt<FZjhLNGK0<{gkjzQlM%_?l#H}XR~!6WEc=xnbkqu;;|_R#$R9y%A>8#_(Vm6 zjZ2Rq9iIe#W)UD5#6x(FQK#_I{%A7_7KiO1G%tAQ%>Fj%Ezy}X&r?=L(7Y-lb3jW} z$!{H2u+>!SB_+*EeS<pB84v{Ps0aWGPemvK4H2198jx=?i*svh4M?h0*!B=>YqrSW z^{#KBO{v`T`x{69<y1C=ogLNhIW3i~6AZpAyL!7KJJqw;S75a)hL(V*7;}r$#B=qo z+B>>ccdH+bN`%+^#LhKQS=RhJ|MCxL8+z9}@1Y*hcA7bYa?7<^fpM8TiHAY`vK^L2 zacR6;RofS~wv>l0Ygd$blaPl#3Yir;2e&p#0_j?Lq^xXE1P;H9VAw6j*6bVTXZgbY zU!H*P`N6*a?WiA)ZLDCl%=YoNl4~5(-2^yc&^|Z}92!<#cLw3nAI6LjOa~!74uNA< zHeM;oxCA<hm}_>55{4)4Bm^#J@Vd$cBp(>Vm>Rb`sXO``gNu~L-%%-fqv+fDEzrs5 zp84p?kTDes55GEdrtSx>x?KUk)3WCVhKu3kFzX&*)g31`CO&p)WbtjktqYrVc21ag zEfe)%_$C%+W$4+9lWf+%+i<#x0=Z8wciIQQHvpyCM3d8?oEc!H8S#cfAkDCabVYC? zU8Fy<ewX@_{B%$7y%O*Lt%RpNtKcl4w*X=ls7gQilYjf+%a<?z97XOo1U|gA*LGup zgr8w*Q71s38db;vnMfEM^DJ>)yQlheUFCyngAR<WcRfhVgA7Qvfto<S5VABZB#h@a z_*;S4(xzrmjMijMf2r`MK!8HA14$1w6@X5V$Q6!DTMqiYdX~y&z}o*?tb>+nrZZ=s zS5z=rCfN~)n5D8JN7Lh{f52iq1p%w3PoVf809tk}LU3L~wKa>%6s@8L$W88$Go&GK zxhsXDBllJ;Ml2oxs9H&d?!N1et*pPF{>&GObyT1;j@4v|{2HsaCt1)9%OmXjoOMZ! zbdw2eUqH>-wzz>?!{<)C10T45)h*&iUpeuNY;!19IS}jX-}rhHJtElC#B&9Z94xyn zp0_89*NUinyZzVV)}XD;Hc;xIm94r^&t+Yz?2|pDby7t_OCeSuT82pgb?c)86Dy~e z!~2d%JoP+G_N@HNAy?ZG!!O8jt#=x&vKhtS&TI1CQvOxKcCnDJif4V_AsUr6P8LCs zFvi3s$(A$<D%k-bPpRxWo?`MG#u%LB%@fNbu<GB3?8zm*em4%X(aHenO~sJ7?0QH; zcj<%3jNjU3(pB1;@YVYJlYjefKdgodrJ~POUG8XO;!wK+>2TWvT(8h9E@fq)9-3O; zce(wN7i2f&Z}rubj09w*x3pW|Zt0P}3+l_7mfDSoax(iC;2VMV0q_k(Ivt(eQMlqS z#Ita-+Lp>}Ku&e3NcF6z@@dfWu$vM(#^ogF!?xB%XaCCIL8-HW_@{KJE6?!<@BitQ z$UB|cyE=(96Q37`g5V*+U1&`t9%o|JtF<hWzRPkcg<w#HuwlT45inSlnpVIejB2~; z9?Qn5evExilM+F>FfAw%&pKhXkj#cAB90UCy!lWbEW$ht(!GxU!W)44oi1HYiT17L z;>C+L0++u%Jdg)tMyqe~Bm0I!0IJJRt4Sn+3~DOB0^_{TxPcAMODcpq&B2r<iFvm? zxuNO^geMTpVHLLlljgq7oxk@#aGbvM;BnkQOe70U#P-|9GUnybrOtQYz%S9Js*4g} zVu3hM91sPayTxm;D|fk`#lWueT=Og^L!UhTENx2f`u1{-l70t)bSv28WJeuXLae^P zsT9F1=t9BjOA;)})jDizlR+`v3;Tl=WOsXo!*|totCK!DBh-+tTXuC-gD4W-YfJQ{ z<;&i;pe>^HxcypxIeYeb+Mc+71Gz-hPo{B@Bj`R%vN~~;cN<Gdkg211U0Z}W@Q^~s zEiK`NsTY$F9rI8bzOxhaM{ukZhg0b@0qLbyU>rAb!b@6bk0M3asgTXA^x(NKTm-+% z_1lxgC(eGd7+>4kdcty6D%Rifs|E`-X!wDqhq(S86yF1Un94z@dMilL1@%S|y)`5n zR;c@;(@X2e!GhixP47XM%7Aw`xsiaiPl|2UU-s$cP5S`&I;S=ZjRU{T09uIy9tHOn zag&a%!#^H^)!wUr*$Z4wg^tmVtOVbEQuhQWpCj?T9F$N5sqP=qr80%eUg3{?<Rhmq z?_K)2j<Y%7vMKSrdoS{l7WLEFjF?BR{+7R0G~#m*`nV)oO;4^ILFy?z9mt#U#q$BJ z)R$$E>m)D~iI=G3ais4!2XN=ou=10lrvRNn@oA;ZVTt2&R}X7xenMn@%<-Sn4$YSs zsT_v2vQ$QMI#EU-5<#Y)eKlEqTMQ=C^{b01@qWrJHEWic#q5tvi&F*PKvG+K9xag| zk33V^)BJ$kVy0Qxfl~l5_gJlPth4V;L4C_Nf5UdxUp(}R2OT%Ng$V-(a6-}Y$`m$5 zx4vl|s+*bgi31PQGSTvDUqkg>%#ZvU9!iHbQJUoVSD*SkZA!%oe9JAjgfxs_V*6ff zKz-g4BKEy~Niw6=wU)u=O4_W1rrXkJ-=0ZaLMiBAu>4vjS<6PSs#adZt<I(W7-$iJ zW?LsKpnf5FL7*g_SS@2&hJN|-HhX>ris1)H4Mb=sS7znS;OkuJ7|C<;6>^l62giSA z(xntQ14IJQ?djWuz)l?N6p$JpEh1aI_P2w15sfDQbuu*TMb<v`9m+AaV;x(C2$w!1 zz#ZvYYwIid^`V3oV$Tv|<<5n%f1=yv%a=Y{tiS4ptM=-%zvI<M)&H2Nd({JX+fwNJ zCikLKmc77uuqu8hu0(AqM)U5!qk5!CHEwAP!-Lfxb!5&w?9=s2`vCYlr#2&HGgAtP z+iB2vSP0L}eCac<+1H@)aA}I40!`w6Mau0q!S-#9f!&r$J@lYFmD#@{^y(~N{jK1) z9E`PVj2E}^TS4)m$?cDheRc(ad2lxjZ!P>cipz6@ip&LHn^z1slYtHVst62*yasr2 zv7EqvJQy%hv5FSs8rKfGA_~d~8$-b2q)g!W$=x$r4hWueEvzLU20cB>YS@5SfCpX< z3k5@qumSJ6KN=+3DGXJU*L0S2j&tW;$Vr(-Z=ew@!oIZA_&1eb>||xv*ohQ?(gN}D zvEgC0npOEDh}P^RUCT#*Ia?9aZxdu}Z+^9nNU}iR{r0!erc}W1*|X=At!M?-<+9mG zV%BM7&Pjo6tNB*Psyq?5NrN=yXy+}MuC4$R%CA7oPEmHh##-ou05pT8x-Ny@=2Yl! zz2~j06B{jYLy4+q)<1zy=1ZKbHMM50R#V3dwWhe)TEmzl8h(!vPih-O&};4*QEPV3 z`h}%X<zvmS*6AL%b6vG;+I_sq!v6C;J$c&x^Ez++N6J0GdtoVbt)l{hHzi-<yq#5c zCNcX7@^_1LbxbjScrmLup6CqQLViL1r}0Ff1@ln0vL$b7Ov*+=FHlEH;IxHfwi^hP z2Q5E#`8fV+y|9hBn0IThHuH$!cT^|q{5Ee5Lfa6-zsq4L4<Ds$$A5pNi@D{uoa1tc z>+|$4Bz#m(oH)UC)n9eN=ekvHm+~^_k9=g8^@fq6ZZeNsgt`I1MLwZlxxP#dFk=MO zom)V=VWosseVewe<b8Ts(p5;<eR`P?0$n``Pdl`BT2mIvHAZuLd`py-|BfC7&r#aD zHrw)5H@%qL-FIy%OCkL&2Vm7Zg8d*YpZQbLLlREdy>SYFk<Oes!@vA1zy3o94jlLg zG$f(5lXM~jDJB#Y`7VlVkOnQLu^7KgPloB~;N8Gbmn@q$-v(wOo6)QR444d90!?s+ zA0|*RO0Ye$))5p7h!dD615q~S2iE55b)jO@*gQ)i<xRg+NI<T9^pnBks`5tZJ@wV6 z>CwlY>^h$IJobBN#Q>D*f!r^#tspY;&?*~&h^o%Q<lvg~ovl@wYX%Nn4oqzMYkpLL zOKm3t8m-O7H+56_76<`?hGL1zy}$q7_y0Sz37uI1-+%N^e!Ctj#<3cB1bkyw#sK5} zv3OVUPOU2aG|0ZCpYKGr^ul}*@M0g@SlPh^9(om0O29y7E!>pe*T3=g^nHK!dubCY zpzXi;m47@_3HB~TVM#I*+1}{5A-Z*Jv!YbT)_#qDpWM)W=Cm+56DB5f<w6r9X>TrY zV*f^~E)j+|U@ksstdlQ3(c`NSFm6nT=*~O7QC|0&uUo5Uv3FeZe~C8I&}2TGr@KA* z#OOv@wf3AsFwrd7tC^Tf);5HQcqubX0>=*S!`Z4Pj;p0837Vd-ncUUCi8GsMW^L~r zz;djHL46E(-X!i!^+p~S+;}O09L|M`xnI0^@yFlswr~E}d*1UNe)X$gZM_u_!77x` zcq!Z7%CG8vRS)!QGW8diLD$2w>OH|CA2ywrl4?YALk0$txY}{>u0llJlbR-B+}o$? zlWwAYx~{2pP#nnh*N%lxog2_iCB6K+r6W1b42A(@Q?)j$ChT{#={}Bo@4c_>4X&WK zJ|CH`LYkhM04&zuqepiEMil`Wfp4<_a{<5Q{Rh7PFaOf7{Qv%kA6`ZI0CmI!2Cz}h z&A3-Rj%R=oFT}*8H<pY{F|RHISE(_ajlZIUJ7ynkfo>6oB#G2A5)yNzqk-k7>JuUK z)pTUgn#jN}&d$49PUsQF(>R=UbL##xQ%9}=(+oAmgkYm-t5;2Pqwm%fB?a$Wje@AG z=_A|XJquLo{>2wxR4609<hCjA)U2;T(XR!lwqEhiz~vC*7QcRA2^LmjGNryMqEjkm z$?{H%rB+OBG9+kIRzOIoL3p9crzv=Pj|^x}acpAFlwU!R;&rBA+W9CUzTr&=X;b?0 zgU98}+2<MaAL>WmG_Zb5JvMN|umpO?6e6sP$!$l)Z%s>Eo7MvxnDuYsb61TauhRyH z%_8nVT0x!Fn8m4ie&wsraIpfv>FeJ>>!{odT&_fV>Z{LC$b3L;)uGiDVB7#+M}Smp z-*>~Ac-@wZ3bEX6&u=-E+v}mVM8zJgX|qojv~S7=TwD8-$=ck0RXP|CYN2msoYLRh zYam!BjZ8{S(c7Ka#{9W+=XnKyX+(42V+QNY6VC+a%@P=68-{-+y$`aGfp1VbxOd*P zd<J4$YPl&&2-d>#IBfG1l{9UfQkfnmX-G#d%|=3e<q5}CwfYhd$~$<|G-mzcKQn$b z_Dl6X4ztdmQUh@+*54mI{8vBTR^^H6XBqtV<okdN@V)omYWZFL(#)yPMTcy61{Y3t zS#?b`yhz<I!2_-ZEVxbOVFbO|*h2&GtLg27-y4Yb0q~7M*cr9sVrLCATsT`@ewq;B zW&tkY0f>e)i9iq((iu8jqN2;6j~ppNtvD1xRcG#YcMA~qjUW~H9xF?p_l_Pt9E1?= z{jFgSP5wI5Sb*@kbLalc+irW+2WUtcL`6TEg)R$zOVJ?A9Dv>=!C99<y3FoZ2q!0$ z#76nXn`+n$IVspBii3MXd6qUZ34oT8lLnJqvILndIw~`Qz*+g16o&j|hg_k7S{g2e z!vtW+-0ZtWg$%C0*^Fk}5GqY8<@x*t?aFRgNfxG9B2?im#d=ya1`L+A3PPGq*A)JW zM+lLFxdkBFEOCMuz8-8<L8NO@dOom~MJ**Qp4&BP+Ar)t4-QRY;QQ{o-a?zw7r%U* zoe@Qn6~?28tP=;?E?80x*V3_1NJMLAt0%6O%N<VET>y&;loiBE?2Zf(ND&-!<GD>P zD9~o|bcxIo>I^sF{h7~yk-u*P09@#szwym00DMxXIjHei`C$W?&4JWfI&lT#j~87K zB-aU<1{7-hq1N}r!$@2H9an5fO4BUS31AED?OB@)?gpG~Sv6dLgeFXBO}3S{VjDON zD=ODkW>k(ZT)3Eo&NA$nbKi*A{@FU-Vk|&;bC$q$*>aQTb8>QLr>rCAD2pSD6l73N zKRtxW7j@t^mWYm<(BTaD`sdH!H(KdO<7Vq^G^mc5`dRz6uCzg1RYS`4i66r&_Wb#C zKVE*zxh%y3d<ZZ6rK9cY%0rWX4VNvy#lUe;Tqit6et7CG!EGW8nAkW$pgd!w;ZO=i zvl5m=hcr=7hNMmRZTW09-0#!Nm-hDnU+08Cm%M}8dkZE!o(<Luzb&n{{MiJ>Kv?+t zGG@k;pM6j8F8e;=!|ivsS%u46nei)sN2DHt;1=QPuNS4CU_B5EnJ&P${1qVlZTH-D zbj9Q+Xh>`1)a<~&g?!^})7~J#VO$PRJm=>t0El3~#@G`e70_M*z)1kIwhOEd@(EbG zLZJI=+a5OMQCZMGO1!Y|bz>-09JVw@Qnolfckj!!uj<aoW9#q69N5?>KI6|I_A1Rw zmoDjxE~;x5FT(HT7Ot9<Dfhr$TMA+808nOt3%TYf8bkuW&9un@L^KaZupoYwjgY%} zKD9g=ubni69MpVT`N^YA?zi9mDthyV7T|L7bGc3mw*#c+6x3yLSGK>FZ&RXCGp7ET zE6DQC+ch*>LLIPOWWg+q?E{I1VO7B$^yW0MjcAya6?o$lq2K<tJ3MA(%B!VK9++1H zgzWoi%>wHH!=Jqg2*KwFqQ|VmSQv;d2$mtBwjr|mqxLN%q>W|T+cWnm(fU(Qe=Y&` zU}<!*0E-n{NIF1Xf6Kn%Vhuib{yfFKv`sd1mK02!W!wg2Vvo0o<Sl$rOa{!u5OxOw zbbmY+f;kO_;9R}|`&h+H;Xg=U1r{e3rf2qg?#h7W!Z8QKON=4#pL%QCV74tAmXqp9 zJX@*Uzwx{uuk+(|xukfTHV?~0AF@Zi_UMQHH$U)+@|>4H>)zj@x9K5Q2M@+2&kBC; zz4wSToiEAA-Ra+YhRkld3du-RM@=MPxyAQdf;1&L<<|7orUUD92GYV?RpLIq+-d)7 z-T;)XejG<bQ}^;L*(i<C`(Rd#J>6Z3dw!>P=}&>K<jbOUA8@_+yzCDyZ}~*%LVhar zAxpE&Dt_ogAL37a>QnUdKmW0}y#9>`Ke=M*HK|Zm0W>c3yq{u*P288#k?^x&ULHvn z5?oFb!m7GlL5B_K6tQjuw{6y66ga6ZOJJEaV2O|>BU(z_lw@|w04fXo_OCXQ1yk_` z;!AQkgn+11$1vE$^Q6EgHNV`pAe;Wta`>0O{~1&6Rp(;|AVh@w62S^p!%R`R?PY8U zdqJ&f)ZBdCEd&}=i87I8g3XCl#nLRvQNc4S3M}z;o@;xO?xR{9(&}I;*55;a^1Eph z`X|5jFX;FqPX<0wg0(!FJHr<q^BZsqF74Itf(kY0S{dMQ+E2`5bsczwRMWS?_JES# z=PIlJyT1J%e)l`?p-t%5|EHsJ^3=1r^R%&~l?mE{k3R-dTeGT`+Gx3!*bX5J(q+!> z-+=6Ng%&6C9>U^gau3U`8!uWf)o;hcxIYnqap_S<=%lvC-9;Z_aZPI#?!E7R=Wsxt zm0%l)we0|Jj+Zmb(kBD3#RLW<gFKjm_1OA~hhc`L#mE{DN~(fTpTk%OAjgEISROPi zR;~x4IN>{vx5FHUyiqug|IE6L<Md(HPFl>Qo7>D>8{$5(j-Gn_$-DpK|M<rrF3$!0 zszIW><AGT9`4HEWpzF%NdjD^6i!1#6Jeay#P^p{%{gIDUMsRgBE`bK1Dipg`_<%NG zMwzwlyqhaf0Gv*pJ^SvPWak62bKu>p{N7#k)KwyPQq17tmD|HB|Ie<}qlYf>-X~sr z`|Y2heR@f0-vWFCP@dgVp{+C2YQ_Npp(ou1&<u+Hx|uHVupgFY^=&%;?&RgCKP%NR z<#_ul#O}4sjvf0pt{0-`Y>wCo(D{P(GV55tZ=nx;=tqw4T^e1Bv_?|R7Ev5=Y!ZnV zk^<$GH)e$w(p~Z!g=Ks0zG<6&pGFMn;|h))8kb#BK`81;`dZj(>2O6yf18p@W*N33 zG4Pyt73C4EC`7cjW?3sr$3-Gs*vjxPmOc1_MIz?8kT<(Ee4aPz+J}ZeckVnjYm{no zgk7{*BH}0Yt8^%Q6*D5b!mkz2ZAQSY9C|nrS(PzdV^iCTEm1W;1L6Um2&6&H$lGL+ zCqIGS>GWQ;5T|@68;s~O*IM9B_y3jyosK{91leRjV}>gt1x_6}3g}RSZh=jS0#K?7 zBQ&%cvX#AsVQs|{mQmLZA~~}vvHi13RP1y%O6=4Ewm`Pz92?1(AAE#1rLRBudKV7% z-NYuvTKO9maqz3(mvp(d0{nD<)Ko8A|H#5q8?z|Xami*{(p>Xv&2UQ0+Kz+YJymvV z+p<*(P5-50$lbHPP`8L^dhLw|@~4HZb+D(WTWj9>fxY*YI4j;Ry!c{}1Dt*XEeZ^j zmumthi4rZNS=x+cS(t0YF<=dEHJ_a(FYBdmA!{K3zn-s8>``Ei3Bp@&v1bd){b%Ey zofeEcJ*g{f5Sh`Spaw-PpZ*E0{}S`WLzhwA^lvk%aUaUk9E_>k@>l56rHda`@LQ+{ zzlWxX)#`h=Eqgx1dfM}e6UF}^SbnSZw;ph%CqV-j9Io6{&ZW7vVr!SLja7A9iL0ST z;5WymZt{z?kLQ7Po=%-PbLiPK=l<?<XU?5EKnMO{mGR$Q34<S9<@)Yb;&<lo&F#>N zm;a=MEpeVZd;X!--!GK3XrEpZ+6TZl1~GzOYLct%=QVfrgF~+{j#7~6Sy(8Qv|H9D zoE#(VHi@!pkrX7W3@dj9w?hr+-h2ISV7&^dJ|E(|5BTo8@1Fc{$xWd@`od>_ZpGtq zN+sDuO_*~XOF9`3TTB!IlK%4gk&8zDj7e|dw@hf4Y#%8o5EwFM5S51=j-o?BVpwWO zuDI6}#x^dIe%zj3C*6rn_i`-DWakBCg=bhH9j=IJw!hJ>#8`X}EA@^}T1PbkDoi{R zEI(hmd`ZhA3JmkW%%+c<dauZ!sXOdog1~Qj*egmrq2->tJ5QTemv7Y}8lv$1lVZz9 zn++J2F1KZ&3W5xuQBo@417>Tm0{)Wp>s}WZd(6?3UwK-{wu$T+I;l7+0#3F4A_qic zCw<mBgG4GQ(>cdh4yXtQYk6##?ck;8q=}NtvswoZx~BTxt0>r4R=5m@Z-4gOxpKEO zZ9=bq?Q87gcppxn)p%?<O+2-Iy|5&>*7+WY2v<%UKn+VKRN2(Y7UQC{u|3}xPI0oq z+MuyzBFJEFTiPtvCbe&|pVDoyt!YC)f#J3lgN#=P?_O)?%VZYPoRAp^hYDU?e#D3) zs#3PdC;f}EwU<FCTeD0wCPFKiAxZr4EQ^7UJnV3OW-k|64xCD(UBO3hmA4ZJZka@# zXWXspyIA_(9G2>RbMi9Hx%c0A#(8a;Da2Z*LQ7w{=vZ%m>o@=O%J?t^D|%R5{(Oja z|L>6_bqkvsHp*`Sy+x;UYj4^5c6ibS`@^qxr*!dP)%I&OF}TsB30~X&;HmBI?x36Z zDXWbTM_dSLdMeLoj!r%I{9j#x*55k7H~m%tv#W@k4OC;gbM^P5C9PGO51u`H{zqt^ zt|{#U;2VRc(YtkM1HElOFNT?Z%|U#BZvn+9ETj?&i_q&;C}{@eT_@Dk(u)UUMcFo; z_}BLR9%Db|zRVgP69m2a3Z$R^`JbQs^dx8%#6R^@KXv-Th4cS8hP_7P)rK@4ki#?2 zvBX`BoW`slZ&%EyOhxiRp54kL8c+R5Ei1Is6bn_%q@_O^t(kj%)#A&bp{e54&Lbj^ z1pB){StHQ*Ej>ya)wm`IRjGJnkB7jJ)Jn<3Dcvo;z})wWnM@}@Puz>2^xG6dA+%Jr zFhY6}tKNe;?OoK8)nD;`Z2G(4Ny5JG(mny1Rv;Ws>6HjBVD{X+8qlceXy9tWa|<Yw zS?EaHmcFFlmcT8y+(d8K5CA{)$m1M<rR|xnRy@;g#dC@+MjV+948k}$z_v%*E##8E zxIi46j3CI>_@h_><}HN!S4)q)&uTadf!KSpJo4C+v<bcG>tAo{=h4!yR!;}Q;<?zT zSLUkI6wVJd(^e)}^@8gT80%@zEjm_ai(`1l%g@ujyriGj>)AMJ?byDVw(HOi;XAc- zrhZTWc<o1cARV+5fKTQ3^5s1gH<3oe1v+gkT0oYCI1;kXGA;a>h)$Wx+>6U@PJ*pg zipz8jgJVzLRe<<Dypw;pYIXG`1KO||`0+e+eh~WwZry09=)@$)@yc``(s60yj}a+< z$iau@8TSR}tB)(RCefZQUApkmvih#Az_S#}mb7A=(B;qNz$?ARvW3|5`+gk^7plLz zc20~NN_K$@v;gm73G}>~_6bb}ah~*8h1;Xtn&ZqyD0N8y^kP;+kp3bSEA0e)cXoc2 z%E@2Xp5D4*{uc`ne*XCje}(qxn$Q*Y=zV%QQ5%Hu8lzzOjkBJV?>C!GmY{uzFBcg^ z+J(R92D5fC#%^{iK=|HiZ*UQa<-&Bm132&hMN%NF^xysJ|L_|t7C&G`NUCI4M49mu znTaRpO$*76J!a#s_Zz3%`|*4Vy?axhOPoDx6IgG(ay{k27{9*n?LmAfi(2gh7oww7 zEHge=KX+j8ms}z&ys^JG4r7VWd6KpM#qUg@O;3UMNH!L!V$6>6c=Yin>9NP3niOsW za2d#1Q5X=2pP<`{>Ce?csGSPT;l$vmpfT>#>_bFiC=R)DIVWGLvh4eoE9czuq&^nz z!R502`Hl4Ne%}XZ6Z)0^|8LUClc!rco~M_)CF)zCDHkj7jWK;6sQO!-jpVPzZt>Vp ziN?>+_(<O!xZ$wR+p1mbD1K5G4_350zUfW$Xa4m2XcPMX{&)XaE?jsKYQ;KrvtnEA z=(r;aj>Yy1i-8~svc>9x#JW4QiL@GlZFzH(M<#=yZM*rmEr8f#{Whc`MB+Yatve7Q zqF~sq^<ExgFA}!{wlIuM7PtEUhBv>Fzv&y^M4Ql+fGpP9qXb=Z0|w`r2Oyb=q%R9H z0qWMjJBSDABjN;W&dU1|h9z@jaO9LgZHV}s$1w*r1Z@gB^+Ew@kY^vED;p2eSc*S( z20vc#TbCwpobIZ6e(i7kwZAyQ)dGIwsn10hyL$zSe|}H*{+8de3_4zQc?_(-y6?9f zgmsv!QKY)J+eO4d@a`lgIQCrN4fF)NVlIq9!Oah8-4z0z8T4FB7eO_IodTXZC9gSf z^Mwzuoc~k$<E3A?eDRh4``5mfPt!hKG3{G`ZvX=8EY5sY6E3MS*Q~v$pb7Ouq~NR= z3IvFg;_iwcfQ3s|c1PA<!NUvO&%v)!w*D5<6QK1k`=31V%#ZuqG<woJhT++PWq$k{ zC>k3lyP!0vA1^b*OMaZjG$vXc$ElVC6m!Ci3=x0=p_B)TDJ71}^z>Z@@%23eUi>2{ zgyB_I_TWD)Bc4t=(T?$9mB)knVd^u^C!LO-i6YY2N_kBQC3^A2i`4?#KoDA|3>a~@ zgmy}AvQQD3scm|;s<tJX?G7H_XWQ6mGNW2YnE+H!?EJ)jIyHAon;S>SVU5%bIHJrM zViCJpcv1VN*S~Ijuj-%<>6vFv*E}mTx-KrS>DH#63#v^H>WCqZSs&Y^iyuS=la2M) zzRtvm0Y$G{QE<pHZQUPC*1psVTk~qUOQ)5abrmXea(m{~bF?Yl{;FG{LIOl&wnYaa z19l#9Wq?)@S$U^a_V!ro!P^!rrPmy_FSHsYa+a*UN!ydFo}zn=?fWBt&7xeFREw^v z*c0WoCb4JtY1cY+uuJ+Zd$>iRt}LkTd(-=B0)aN6E5N?X5wREX;7>g|w~>2{Y|W8- zxm}lFum0WfL^-kBi`*8@6R~`yYsAhE$HBtNt*e3R43qU6>MMi{{0565^tVXdzwy{_ z>=IpL4b8+KCqiqR%hd!Jc%3})__V_AZEt(qWC1SvmtS#olwSSn`$hNvmc75lfPv?_ z96dT&V9okl3?B9QFnhRq7%EzT>vp;FId-{(ZTh7(#`0a;mOQ)x1;4vwx1xW-^6Ac6 zOzuG-$5g*=;P>pi58V91AAAkKZ=wHSmG`GlojQLf?b8+0J^;SXNjoQYd=UXntrCJ{ z8~oe;t6jJXiJCCbL$YvIEX|&x#17XX`Ki#m<okekr9SWSv14WF^KKJ#HDVERn0OJM zdUU>@CK&geeCkua_oSSMRsPC>SeGtd{Aeosf~aQ)j>&ydBVnEyvLO0`$I`&K4g}Bo z;Ugz+UWmGe*GVh40RopjQ)nA`hP@wDIA$nud0tayTly_c8W+iuQH5&<;^UuI8>6Dd zv@k2;njOUN>a&mJ`M__brOdp%sQaCN;R1sN&5{xXMhcGAT~+lAm<fRiRnS!HpV5+T z3cdKDOlAcZ+w_a*cJkX3IB28+!DKlrrBvWM@g0Cttpw4y?N8ZlWuqE@<#5Z*H`6Bc zbhG@5Lf5v8TN?NeffaN@`)yXf{^KRU%=!yJ8-Huzt%(zSFAwiPErM~||4OR)qbygz z#{f~={?@*`C>A(-_W5aYU=w=nYrc-H2#i^^ZM#rbvxe5%7Uk9Oi)e8h8iwV=)U37A zCS5p8?to!e#IGfC7;Lk>lRCWTOQz96t5KwVE7{Xo3Ejr-?V|-UwngIAVg{I{t*VT3 zdE}T}`0}O8G$QZwIB~e1vW!#L?t>G`y%ZjW&0OLGezV7dD1<mIt0tqRi^x7k1KQ=3 z&<LD#&m%w#VYHq#NS>U<30&oEu2N!k^nU(HIYmnG=lJcD?E~<<*ZMJTfl}N{mo9(w zLm&Fk@nZRX@WBVA{1*MI0O8_aticTn+wX`9=q<km@ajz<M~)QZ$GvtqY6HJg4pJ?8 zVf8N@eOT)AuCv*?{f9sN;VN__t~>(64+ak<L>)$-n@(&)9ed-S+@3po{znhowDVi5 z$2;k3M{hlFGkv=3JEncQBH9PQ*FWLx73dn?(*Yc-Qlfv-z^;!vjo^?hO^?!Y6537c znsJXt5m@C_kFVEki(o544EA||75In=M_ndUfN)(3T|jUZt_2KN@OyLu!R;_;de3|6 z@27wNbLB+nhbh+5g3M?Af8ezck9qw7wQYV0NNwjg_vijR=bzHVnR6RWn{rYIiWnw? z-;TQkhVy<f<AL3D<umcl;7(HJY=o+j?a!2tb}&ojmoX!vB@Lo7OQxLh{O9KI1cBJ= zo7d%q-y<l4R=QBR9k_+%pDk|*{w+OjUAY~WG=Z%>1*niEf(B~fvo0qU2qYahqW?(D z+bn&K9Z>nyrNq+EVdJw|gbgrF)hKUx{bu`rpIHH5v#QdxM4zX<p_Q{}QHRNd_6f8o zc-R!yi=}H573p4ITxBDz?=*e4v)(g@Q=z@F`ZDMKdnU5Fs<o$qwJr^Smb^AS2<w)c zZ?b3-t-I~$X;dEfl;;Xk)e_#?1A<5~Inv@cD=NeN(jKnH-P87H<*03>o#;GSTxBoT zje%KvuJus)n|h|0mA41E+`c&Xbxc}R`!ELD4NzCQaPi`dU|c5?Vi=W~)XlP?Bm~A# zwDLgaZ<H^rvJsA1<Acdv9w*g!Dj=9S=D|L32T}Y?i41hRcPx*DpZW{{r^fNIOG^j^ zqD{!Eov4e$OL4+S8HeV1uh~?GF1*Hn!(><WcKrS?d^X&&QTG9#;i7-(O1!cn8dpUZ z9j;t?1TL(gw*uh`eCzhN8Un7<<Z_No)fMY|?O400d*azQ<SWi%UugY$Diz1ZhiyYJ zjiwVbM6#tW1^ljleu1v;fU9douRXA{^WQ&r{>2}mecGD#0q}KBJW_PY1`2Mb7+tnu zvUM;M)(HepDhL)%vtvfp;ww^r>fOEya^un!eb?nJyLKWVo)}oDEQ9u?(A6Tm627h7 z9$NkRGU)T?-!?t}SO3*doxX7Hg&(KBwrCv)p7Y~1ezSw#tRF9AximyEM&FQl^fSj& zeY65|2ZT*=NZ@yAAj(RMAR`<V8P!7&|LO#+v}XV+UM@~$;iT*^{?eAjrc`p{ghBlU zHsTwL0r}{^Ow+Q-sh4HN))wNrb<}?Kz-QC=O`#9gN%0jU(BJEZRF5w1j=+G855_&0 z?LSt)XQrN(Ad`WODO^;r*vsPl*so6DRlvlz+;R(TLKj}NrKf6^Yyc}LiEeXp`6=Ra z4qh8*S@0yaS$bH@N5Qi18B=_3^~uR<Y}?$_;;Qwr2eO@f2C7zyF{|H%narFmzWmSL zpE>y~Z9=!-ep}0*8i=hYIkzrc4>Pki)GDUoV!PUEa)Q?26I`}*p7jbXOGIoUObCnW zW1L=P#J=R*K7#cCvi4<GUecxi;%#ovmM=rzL=JeZDgl`5_aN*iM1lu!t^U7s=~BXq zGe8ljN)VTaF6U$rQp47gv;9FB2?;Of4SbrU!)@ps^Umy`Om-9j@_Y_xTE`5Hg~mMk z(p3CjmMLNVWeYopv1<cy9P?iH#@#~~l$X-p;2Y7^#NVLpVKZB`-;b6<M$5BWe9J1l zdI;9huoADX)T?@0z1mXm{w4UmS5!BwI$^c?mcI{wc((!E%+;>4o|%{2MzWzMTZ9Qj z1n4WA(?LB~;~DsUc@fj)%fGM>g14uA0DJ=yfDcKtpQ@DQ0oXdZ#{I}gKC*)X0Zzjc z+~bS!%e!8W^pTI08N4HQ3emmy9<ed40^agombaAO!&4mJ|9b=kYPA6CfmmgRu`a!- zz_(a^)$)7aeKo&g5x(c1@Bi&R+52tkYiBK(y%N8Ez+wNJ9b*{))s}v9*{&m=b6iRj zfNk=1-B8~p#{~C2u7Y2)Bn1VJVX)@FE6?ap5W?aI>j!AY*%Gl<bLbFu8$bcj^(k2m zBmlnr<u31Ct{Qn8g3$`qK*6X6^j|M%I`tU<mjNOT%uPP9!9AZ`n@TAmci98LSe@9h zrBKLLt#~zm?k3>c+?oVybU@H#CBEgB&6Yr)IeV@G(VAcrZF|gKJCyZnCNj%kt0(S3 z2N6y@lI`2|vinKFRvxBMpAMSbEu7^*_1dOBZ$WGW&o#YjrLQ2{+ksnFD}a6R;$};r zZ@KvvD0Aa$53VnY)@Z5u?zK5CgraR(GW8Z#A_@~NAX91r(1JC51HTGx$wN>Ct8Iz~ z_vzXn!8C^WGI?wq*l%=_i70$mEofkYU{~{{vILqpkS|DFllK)bE=@T6;`ME4As*!; z6uwDL5oD#wQXPZXEx~yr(PUrBG6HuGj1y33{dF)x2ux^1qX}1^SY_{!oK_TBJvv+4 z5HCbteB-%<M(!K(0fFl`LZ@+C<HhtadVRXIcj=e@%3u2PzjXfm`Eu&>wEx$wzK5D6 zxL!@EcK}y|#gUM{@9{l6fm>Yy?dQb!KHm~b0dc-P#GYUuFmqp-VDSwg7{W4yGe6aj zTONY)?eyu>Z(YUsJM{9T6$sw@JEzXR_-@*#jcFeM-vBgFM6kmPSbtS<izA@>S=_WN zTJTDx_P}sI8{|E?aXVyy-EDW8-P^5q5Kn?l<VZNCw}Rn%B4AxUQ%??5U|fN4eO3^x zdw&b*(fkUEPn|gVV=Gn$r{wYCIKvA*i+;084(tEJc=L&}B{w^i@y26jOm>58JI8?^ zT8c+Au~C8Vl@_fxy;s=PI>%N7?UDl^_CKt9-l4!GDsfdgiUU3>a;8}HxPxfM`jUP| zA;=Zj-fu(~FJ986w;ifg3m}vIb{tFF<QlB2>?idSAqWgsWO5K92288j6s?$gI1u8% z$_L6KG52QCR137Sw})2fdQY&BpTJ9)dQ)Uyu^|9{ab-mpt+$fuo*#hZ#UNX++IX!c zZqBYise4Nc!T$`^rM0%Cx47UZ59v0(7$!Ty1VrF4O>S6RONs?+-u<-|32(XwxLi3! zhI{dvpebpsL-IBzC<+vb!sHY~o3U@A&CP(Xwj&40+$ylP#n6UTX@&M`%|+n8We25# zD-<|%g|^I}gu4DC_-?uD`0Ie)d+kJ*FOT;C&yh+Bwd!(kpN+5?d5Z~h(EQq;%Ec*p zI1td}Z1WR|a(GrIH{4+pk45J1>{z;*DRakFM>+-|Skbn_CYAD`R)aKWvf(wq8%195 z<i)61hg%Ti18)$n4;{UxK6m=*Cr?c0soZ+&t!2M2mHofE^trg#y}<V?Af5~q2M-=C zIviCH91k+R_ul&?9(<}`){P#z2N<61OqpzSq0o1Oerm!nhZVO55g3amr#$JR{$DwL z`pyG4zw)20TwV^#o@Yp2dw?$g_vK`2+NX_Z%U-rmHxg;b&ogK$7}gL97L3~zJLV*? zEJzLSLakVU^*DUB20KMJT@LN{%(*34fpDcyO$Rjmw?}^UCvLj=mY*S-FF%bv7c|=? zzd4Oq7W`#>TnQm({dn*@jz?F=E19wi?TAdlK?{P1^#R9!J?wlrp_xJ5$GAP8u5?F! zO>re?#L~xCPoWquKUPLY9`pQ-(!{X;%kO=fH1~!OLcj28WC<LbhN-pX+(}ZCC|EJW z_6Y~Es0;)Krhjx(CbQ21Xyu|7L8G)eTqDH#bveqOdR-G{{qO(4U!qsv{wi8Wzy3cS zr6->{5gl{Kh)QYlVK^+TamWqC30(EV%}>iexz)0@rM=pYSo;8G#Zv(RsD?b+-e6Vk zHC{_!Vm*ojKH#~L14rR^zw=w@JHO*wX&pWFl@s)jf8%!~O|VW$=l*0oh5pT5T!FpP zA&J(|^&^Qsn>#WfWGfCt*=hCNTDwl@v~NP~n?V+{!b8)mPXyAy_kEMjGfbx)3zRE; zzY_j?{=|3A4ybYT^%oul^nrF1Q3eTvv-eWM_MD@t!05PO@VEAuvIKBCqApGw1Jr7( zLJPyAo`T~`{S|Y^^m$O9;cez?%zmWKb1BU^KjdvWOr`nunbY8<LamDj!>eVx^0;{U z(og=CzwmGW-|oBbz6ty)RpUds^637+pzi;ztM&RTk17>?ZWrEnDOz?%%bzi<(THo5 zIRpcVy*C5QQpfiQWbKcid;Z)ntfp*!gsul-{?&iuRj>T(v`=ek-va!vH!+RISq@5* z;9#b5q5PvKMUx93J(K`9W#!-IhXDA9L?KD!0E|F$zcYe|n+5pDD(n%dhhWt`CI$Se zTz2rQm$ScTvJU^v!+-7Xt+M+>PMy3MW8wv0=Gj@?s+-Pu%%;oc!P_$v6cbGie`zTy zukjx_!c)~<z?z%FL_H`f<LIvgvsr05TYDiD^%LZw{SES(@`(vFUV&%MY?kzqmlTL8 z_MX7Vz<n(_Vx0E>x>?c=VKOTu-194Fy{&LSITuO5G3I7*m}GEpkh5<eDs*Ila8i+h z0x$(*kf5bg4k}`o7Yfn@%4?P#wcxpBkY%mr0>pR%u`Tyzw5w}P5cP6u0``I+voc4z zAJ@K1Ls&v!8J2FTFEhK623a*LbUH~p?g>_Nf2|X;3TZe_=OH3KYVnmXT0f^brrK8Y zuUR^+X2BZUPG6>2xQ0)3za|-TSPhK3APANtLs@mXvRZH5@=C2Pd|$7A^J*C;(q-Ak zw@|Pm3k4Y=+G<K#diWOfHS%kPsa>6vwkSZqEPpQyu0k@=u<pBzWXKLh8I)yDkZ1i; zVumn5ewv$)NqL+A6~N-wG<CVLo)f{*3QH88eeBq=ymANENsy?ML_Vt6<B%?tw11na zZxnjNzu-BSCeI{{yv@buQN(d_S3o&$9)_rYt2TYSfM4}d{mOsu??f@`W(N-*n|`Za zmzBG65SAW>wL7`M;Z~5YKet;#n%=mZiy%5?q=L9Zn?1zzgJO$vUuVi%`e)8O|0Ao` z^&@n>kjP)%KN)&6+6Tb@8q;7oG-_t5Y_kq*Fta~V5kxr4)*eNl@gzN6`mAX-H?sia z5}3B+nd1q9C42$HN2M;SIl6MugBX;`^LrXUuNJimpLzcIpQQO(n0H@;4kO@7zPvEN z@WRlxfgjKK5oD47mWnbz5Yh}k9D;Q`fpQM7i=-9>Nolcqis}gL+BkF1GgvtkxRx|` zI4OOD`auxQsZjk=KhJl*ej0ct3d&^+1s{$BU(y3pt&VxX+TeqKAdwExa_aK|j!^`R z3alCT4o|4Z0S+-ECUbBdFtFezVm4kFfCXhnAijgk4O$cAskHzW(uS@S#Q=X^$CykD zz$52c8MdU`c=c#vXQkP*QNz})q<{cJHkd~A5(C2xtb3lAivnn&E2u;2S_p?jzr+rs zit$=~lV4jj0n$C3&=4=Vh;qoyAq`AZRU!VZ?-J`G)B!#-<DT{AY)iVW>V?9D1UXnw zOWs4hkhiCHm{)ZRcpri$`4d98R0#5js7(%%_nv{|83}*4^g?_)n+ysCnerfc_vX&R ziZa(dy+cVqiEeofy1S><Qg)HggD@0^BtmJI`0xFq6pnQ}`itqsdYbV^_d%U56VEvD zQizSn8mAUQJi)I#`P82)kN4eot9_NCOI3rz(dKg0(()6ai*9y;^(K!>`k*>q`MtLR z-j*fnmbzUoz_(d~S+B<|s{>2Baid9XR$2mhR%<T-sX@jZ)mVcD9CF>Yb+;xSb`E^_ z%4_*+LVRFn=V$kqLa(QN0K89(N|AuVjI(M*CX@rNl5mkMSXz1(SC6Z2VAq6Hajf?N z7diq%U$F*H%bs=iQ0fd~-BWVp$e|YJ(CY7~)Zeln<<$ZF*3${=+kf!C{hNPS?y;j> zaO#G?zH)et=vyNfdBJtokC*+%o;aZM;C(sj*pC<dXF`JoH(PS6B1D}vAX<BgOo3{H z^K|#{&JN@OtTEQ5^jZ{^y=K0FQ}r`}Y?`ftGD>CTK_Y9Mn8-Oo?EcZK6ygn(th$VL zoSr8(&Kj^84^A2GQX#7k>9dIO^|>A@G-=QVBs`4nxy*Yn^>ktbIKIad(xG$^k(H>Q zA6cYV-+tRv2ht8i&UsZ(%Mt;qS)NT6x|I<u&}f}(0JKLsBv_ATeQtH6lLY!r)NIZP zK(%Kl<8_J?PEuyQZ`s-{JLpI3Mw^izmgPEPv;;TTeu=cy{k_~ivxi|jAj^=av4nL` zTK8J!+UCHlU(2kMBklWYW;O|f?ONMct#fE+P-p(VDXP|uUmo>4ffKLAPRH`EO-;@) z%4PjUb8ddpV7)wFB9v40V=z`glw&qg*UKz*5ls|%WR<@Xgr!PFm+kTHczw1BhT4w1 zGUyy9#zTE1TbCIb9*tI=pT<MkznOUHQ|AT$v0EHQt|Z?riFtkEQt$kI|NFo5;j-_y z`854XEx?DG^C64scmEa(@KLF{nqGxeeahJ`zMXBiS#@`*SbysY&?LpJd}1|@R9&z> zH=|19Cy1~rHl4Jc)K+Q2+r@xdgu%Ge%dfKZxt{ubCtZK^)}5Qq{in1~i?k1b|1~5@ z`~9-OARF)8>Qe~r1}2^trlT;EuxW>4naI~YzpCTt;aJsQK`(JVO258W3$XqjVw{Ck zt8YCax`JW58~Br-jdug1K7bA#vHm~y8xGxTlAQe3q|0;T6=U?F-}s%^@YBaw<3aW* zIR=AQ9f5kzTH$cAq?@_bG<TpqG1hpqfbmRNQl%;8t%_CkhiPO^ype}tq5ynx**6ib z)h(ieSeK*j@Sv`GMw`YbL#2C=j{#PZbU2=Xr4p2ZhAKskHQWY&(qHc401rLO(tu^v zZ>w_gzq0r5QI{RnogldPm#G)Zl$1b%1j0%QfebRw1lzb><+KsK`r*RQq^7FI25j6l zHPwE5+-v?Yq{OUQt9rG^*sRsFW_nx(SC7YSO_eFTylQ%x8a~_IxQvl`Sq5WlNf<03 zB~ntRlu9Y{?!Iv%_Kx4)5$D`<Z>9v2?#{g5IVYYw;>3yAzt}q>*mg&PBY@0O0M-R( zgvCD1qMgk<`O29y^EPnOxNKs-fh=<)EZ;~QS70hsHPzB+S?y?`S}m{(vuUsaFjfTw zYfZWLKw?=p^=z3+JfC;L8Gu<vEKXj`eC)scSu}^zW?2I034!duf-7_Wh8MwXSa)Ei zf?OBbgj`f}?%Jx~6s(ql@_2+z5X+w1O?}4%XYwxE?*KNm5?_Y|njbL-h1;U#%pb8E zJ}i!XPgLK&`_MaIy!J0X2qN!Z187P6q>RNY(6xTqX>Zx}ZQ2LMz7gGO9@r0qAK4;! zaP|GVO>hwO(bO-WS|Hds!X0yNO{uBhX}|Vq9>Fj`6C>t`KL@Wl9L$L`olb9j>cv>T zhkI_k{>_83pe`%RXa4HuqIv>HqN7K%$@7t=`nQ7Mqve;Ew#B0@6Xl(t2Q9Fqou73F z=yY<(t+!I_|5bsK`^D;x#Spy0B$Ym+%z^3XvOOE_VUi^^ym!%4l$iJY1Z`=OwgC7U zNCDVpp|=7C>j*GT(dIHfdvA$(3}N2&u6G%}fb|#Jp;0;roy%y6JN%Vh1WR1)IrVyk z^KZD%e}_xnoe(#}%DWU2z2z;x@W3M{AO5kNI$8HOZvbTdKjO{f!ywZHIGReg4ti5* zuScuOL8Bl5qE99tg6HcFm;(0#0#)IN97tx94oew8bKGbMxGhQrt19#bL8uIgRp={v z;hik$_FiHI(na80`9ew<(B^mzHZ}L5u?C^LZqx&|pbTY_P)4ahgH=dpz2-83rZ+R| z0cp^FMF0}rNi~4QwAFzJ*qo@AwcbehDV;oZissO;QI?rl3jkl!y4J}8su+V^cFKxr zC5JMV4VbDFg`i$6MyW3;KpWl;l)J_SH_`>I3Wa=aICEd;USEWo1zTMz`^%)~o~3;9 z)Wa?%4m)!j(1mw5wDM|nq4iy246R-|<;}lE2G4b3fb0mPSpJZ2dDr#zxhQ09E%BVg zQhirAF;q3xtY-}CyJf^;B80nQL$g6Fo<V-?efmGbE06UC?$ZN*2CXW200yJE^<~Np zax68kI??C*O?!qJM2S3?zPWaFtQ`+U4X{Q**#RdOV;_%WNUXcgjjy7PA5%<ZHSxq# zn<fW$9!YIA1E!^3hgpj|KhV9$@4sa!HIZ(5rB{`y^7+5}MK`?4THbUz$L{c)_Gy8W zJGfo{i$@$CD`AeQ&+uHuz+-}%-y};)I}v06x5%giripEe;NxMpMGckU_T8H-JZOJ~ z4$)JV<f;=VPadHyjnWnXKZ7ZD3{*Q49XeGI&`wA~+#E@o8Qx*!@66U(x|-H8x8>ha z&c`E3GK01_N9$se)Zq^Ck|tPx={fhmdOmPk3!F`M@;P-m?#o~PmOnWA___B+siV$< zPiS*Xz)^qZMp(dM+VER1U7GM4&rq{nb4cXrWNAz$V2s}P!&~ko#B4$Unzz|M_FB~( z1=|%hiSwvXLEdZ{>Wiq_nAS8vN#*jQCXI?msR+-GBj6nZkCIrmK=n8vQ$Z(Ns`YiS zySkL6|C+POteAFGY*}!ADdOIm*B=r97UK=fO%(|+k=N`Q*r_JDB7%!JiC~#!1)C_p zW?Xb;<`F*01X>zxGPyOm;$ZBMnem6<fv~)k`R0-1q;fDqaPRxr`ZiThm+>w!Rt9m| zi5Nki;_DorS2eB%;7Q?g-&z{rnhuoFwATY*T_m7dfMH=&s%BN&gLmhG$)&^)A^$om z$R{qxFln<Gu4V0UnO3ohj>??qhGp&*XJOe*4~eu#3D))jadXj_gSMXyZ`&^1RNrlD zsbP4L-B(R@=#3HjP7G<_hl|N@CnCEqJUiyjfGI8M)_&4yel@g?gADztPzT_eISMg^ zaaw%p(Ntk+VvON7m05nPvtx`i5pOKNW{BjeL^@G<eLtVqSOV2O$wuFH_?zxtN=>%j z_l`UMpQ20567W?mZ$9()prn0TvZ!`&c-CcYx{OUV!DS=UBJ<@iVYla|DZq}+tk#D( z-UpeJ<Ak}OnL%+^pxamx<g_KYeGfggiTCi{chZ(dX$ye2)Fl-lqN!>moh6UXy|lDL z!s)kqmT<b>uE5#iC-9p(QvkukMp$Vru>P|1F4gnt(gE%HaCX%IEB)C=KatFP?uN;F z>w3LK%?PbAaJ6wqQs)Ujjo0<(Zo0EL<cYDI-DM^}Jn^HZjMY?+OnOw|R)KMmj)(A4 z&1GwjjPES}@<6s@k}8FnV3Vg!SR?1}1X2)EYkg&{a0cw;Kx-{yF`Jcs9r!B4L^wF@ zWNSkG5tJuaSbPQUJ9Hq`v|}nPsK7pmvkJtl&KQ6NRkjVExQs{FA}f%y*HpC0YR~OW zN)_xmAX$LXaLt=7rCm8`4n61D2WlQ#TB{kU@1r!nT;}}hY8l9bNYOnGh!?n{wJ*3O z$AtJ8HQlwGZlZwdD_)ekLRJ`FgiRn6Ac~gHM0Hc96n3$wYhx2n&w2KhG>0BK^{|#m z-;D{8%6lziS#LXNS+xl{Andx@yhb>#ABS43?Ukgl5)dK=>jdj3$m+U$;p)Jp7{jj3 zRQmxxsxh=x<HKHY9-rL1wAx{1%O-e+7a%?Z*WZ+z-VS}-_8AOcMYN}>{U+5(MfTcM z1jxuk^0Om(HEZDptP-Zd*6xVAlfMLgZJCH<1j@=6mGQ(+exkOwVY+eSCeUcSapyK} z??-Jp&4p*?u!@0o!mmtgUgTw)y(h~?hxy2nJ0$(;df$_sMADhR$A{%<akJ8N{E?pC zk^PQx2FZD|)1)QNA&-@H!JZi}6E-8J@=MZ;?SlKv*h_+N5`k{7-$``h#EGkxeou#; zl#gsT!y2b80NzrhJp8dALZZeOuDzY~(49K7ZLFPDHHAJl_`y2ip%W|M*AhrT`1tW7 zT-O38^XJ|4mooTG_q)T)W$MI}1~|veo%+A{7r*epnMWRdhe@VPh=EDkiAYZxX~ge* z$0P1W;ECw$;&O<^G?C`2v2jHZ%yYWjD8+>l4Ft40*+S&Cy|oP$%^UH^tTuBPPkAJa zWxzpz;pP=P|3>hFYy|EZ#nZ?Db@_7cLmez47-OP|CMZ@}T23J|!KJXi(vU#`C`G(8 zt)@7ovPagiHd8gfddv{lHJ!B_Qg`Gf|E$2WYLI=72()y@V=e&RzyES7V6>2GREY|B zq6+CP&&)qL<Z3*K$yS-~MO`;-O~>jS<D&3JSe0cmqE^SyB?++PwVpMxg4?Z51x&dk zsK#6mTy^F2=L&Rc34jIoP%XSpPBFBB<i0SVDb&&Q6>zL((?iX9>u#MKzzQKKY^^1< zV8+)dMZ;t7rf7tu3$jUw9e?FhuIA0`1ZGv*SEf9lwc82S*(3dk>kK>3$ZMHU<CtK1 zmXHqPHRLN)`#S{3*w5BU$3TO_PS|h3-{VB1K<h6bl4qUktb@zK)dx@fI_!<KaBgm< z;?B%#MZ!GA&;;Rd(Didqy)ZnHt@k*6>XCP(WnxL|ySsasPo6w%0pJMWB5Nhum8=E6 zo%%;uCU@J%WgrE<)%^Jw-F)-St~<>B#|W;ad$Z1AlvL{r7K}q2wfN{*JdUQhXV1k) z=xIWGE`IDgXiHt%0^lu00wGzN&Oyyfh}^ni>yNRcQGZ=KjGA2@Log*9+&vo1p@;j_ z@h&eV?rt)FHsG7-NcP!HLhv1;9eC>0)2!xAH~qjLo;`c+y$%N%%^j$?@5HN9;J!pL z@&v9t=Fcww-ft?+Nq%SeqripP&WYBzGiY%kG&V(?fbo+nJ{(G;NZpAU6#}`sqasEc zK2@M(Uw+RH2tW15yrOnYcV&@_ObG&MV8~D4I5lwv#^PkA?zc@f4>jK;0IxW`Agc9} ztY3DZkx(nFLbdK3E!AWdKocpTA=O-F!P$Vd@^SqB6Eue|x%eV_?w|$E^|A<{ydw#5 z)*P~l<I<^UE}Tj=ZB^iD+DwPrv~{Iei-oUwJJUIbWW|;C>ICkyr@mpvzM9D16BnRK z7{(?;mYVScSI}I#@2d}JYB`?(s22vhh3wsm#3m|Ui%Yhyw}NLCaPzz=Q*G~<pK}4N zF4em6>7u5Zy*3@cfl^OgYtin?gotR{NWl~ZE4HgUahLnjHA#I(Ob*pa=^SLLFYtYa zYDHsrPu6Fa`;bBj;`%5D%EBO+lfnEL(kc8v>e_Ea6V&Rb@yg`o4)&Ql)a?^_^kI~0 zeas0o6_;sMp4<d&<5U-RZgXg5Ic5i1O=r(O{_Y?8p||`&)%xy-262*;43+NEy5HU1 zBQ9<>%savf@TU6$dbt4KVH2zjd~Yx2(fOw!_s%=(dBA9Ckq9)vj0zdu3=7PhYn3!J z;O4GDV}*4qaGCfKdV0`uCh*)5+ESOc0C-DX62DGDI-r4ZQ!I0=10Q3=sTsT}O|a&H zYl1PmvKfP32TG>UM~Xw;nJ}9}!>-WpUUGAH<(oDj9(7(hcJV}#qw#rSY>pnhR@6y; z*~yC21etKxljg`5WWrJy&(tlNKbiS5t9f9^6T><mA&)3)KA1$o$0j@~*mD54Gp8d` zg&>O?O{2S|4>uA;TjR}*>RHHVi$guo8<+X!h{OiQ9L^&Y<SRN6*J>(y0ALBAi{aiX z#`7!{JcgZ(2OzVs=lhlbc<wsjYp#B7mb^<jYCc2G<)TLiA!J(=P-h6sgFtveYL2Jj zse+z7i6C{2G{d@KD6hpajd0rnGQzg{)SN2t)Mv3e%|+s3dY<Yq@p#SE&!ah%z^@nx z*L+Hz<qUZ)ndnj&2}}#tTd5O=j5D{QRshBFpw^<9##<XJAh}v7X#EX5;2Q{CRs+m4 zb2@PYrr2n|4#1hoI4SY$TdD08b~(??GdYGdH=3Ym;lgBJAj7L3yg0-o!W?`3vF}%F z7Tz+(OhO81-LdCdHebQ^4UFW&j9o^*|MRZXePoR1Z=%1fPRaW6zL))6_dQ;Y>9Lw7 z^O<6niDvN1G$kk4#IB@WpTBq5^*L#NRX$3xQZ|K7>wb@vxVx502EMA@-7PPDkkRZu zTkfg3b2fvn=FcV6?RnW-+Tco+B4M%{zvSV%lnECpY?2L8My2r8186Q?B14j8vU6nl z&eHu=^faNTQ&}!FZ2|C>B5^bsQ!pHXhpx9Mvvsb!4M2I2>OvS5_@spCn!ZpY#t^Ot zmI`o>kb>USdF!r(2#nMEmgJZ2k}32fr^>F-L~#;)oOtrldDNM98BMAk?1Qw@jWufs z4QWmfh@;*XY|?is*^WmOZ1k72Mxo2QIq;#+P~UADwJf^ev&T<-I}pv?SALvqXt8(7 z5ubUDU7IG2<h6r<G3@-zU}8&X+MKNo{boKL6KX0NTl42!5J9&B4lEHfbtV(U6(f|N zZ{=!!D|(Ku)I3W$O35?uaptLE?;*gI3Rv&E|En~IuD|YD)BX+Mq^u(@U5oW^Vj67m z;2yauHHUn00CZH!Q@AaF4uJM>F>GQWHuI3fxc5+bC3_Dd6=-?$Tm#jM0(Mgw7Yp4i zYWNOhIVnJM=>DYr)$9xZOFeq#c(DlUmfbpE?b{pN2Y}yFF2I}>k&?X+sdZdvQOc&} z$?J%7T`M1jSL2!3zc;OS>3ob;AQl%E<L2QJiXr)(#$TPxfY@-U_x*lB<@cS?h41VD z$RQ{yjr2$A%YK<jDQ`)atwwb7Kyh4&OAsf-xidCkzpN(CapDiU%j(*%3M@tUHx<uv z<MH%*lb7btaKlZ`{rtw5T2Z!D<ygrpCLrA$s^9YQ^MCiHH>Jn4yK}l``6#XVJyJ}e z(|uh7oJ^q8uFq-jmAnR6-H+Hh-vn~Y-YtV)HhIok;4IqNvNr2kZoTzZlL0x?z$IvI zQTB9kMVxhsF0WH}@g*jT7K(k6SJTsm_-Ry@3rkE}+LEU{j+RlrxDB0$4rY<S-NFqC zH6t*YRG|5!jtXY~Fn@W=Ti&vhI?)86mw<LBuQ{=ev6kVEN}hE*!u~v9PuX-Qt!YV} zd!FUgjj=v=*9U%a&z_5Z97;oT$%AH@3@EeH@o7%^RbVie1fy<{<|cU(X1mI9D!Oy2 z<60dH5foQH4Npb;3ZR#L>Z%${=`6&p4IJl9gzzhomQ{BnkXQUV&`9EsKKxMwLZHnn z0yRgl+TL5buu)LYy$6s>o;Cj}^o#U%v}KhptXO)_^$cOQeDyhN>=Xr|T0((H{xgJA zfS8}Z{aaqkuX@EzG>87>zxp@w=$XgbvN2V_Q|qu?^3hF<;Wfxkhy!7=78K$^eGrX= zubPND`ACX?bQ3Rey=h&G4BruF0ayey&Eb7r^ZbMK-T&El&>Z^EAAN*A`?<TRq(kw8 zsFeWwJe7%rQd7p9*dAl0{8ZaCe7}Nb>ZIj2s{)Dd%ayTdpA7gbf2LBI5_rdUOjn6k z+A&sfr!%PUPWgau&uLSM{{FYU&Ju?dYE6Ycgdtz>T7qA8D)qsFSbFJ3UL8Bw5G(Ks z6ek-srt3$U92k}`U~z}RI{JsJk2(Gn-$jS_#*2Bv&plD!c_Nc;9A3+>vN&2H#H-3_ z{U?oNQQKO2P3O*?d$*qX>&>2br5-a$WpmLx!2bwUdF$w~!*g28iwce;qZK!|=2r<7 z9#pw*D9V!JEeza1uN^7GHCYq-MAvU{M+2NTz}j=srSsO=JT*wpJ$~u44;<hJXiJW^ z8sIHO8af1yqaG2B&6uIK7oT<Z4LU|q(-jS`Gk%(YYIo5sg<sAvE;Rizvsl1yHGftO z@DZo>JyL!d{H81J3Vq}C-}|#m4a6rxQNvv&ur#zVD~Cp&4#N{Z<AWYsy7PwS5(nZ< zrAgD-x*yRBJ|+g^Cb7;hMlZ;U>VVGX-UO5&_%#)p)A2|}oIs&k4rZTURtWgK8!a*W zhgfgMLPb0!J=7kl5D>sGkx!{-<>xiMLJ^Sael#I2<{_|qG<8Udd2IA&YP7o<bW7d& zcY&JWD(vKVz>7fX((~Wk^S3mYUiy+l@KNKrt`s$wP-G~-mIfVE^R6bk<$dXz-4tZu z>Tm$i;+_HUi9{uO(dN2!(>n1}5fEyii>6d+{ox0Z?_YZ3bu^d$?n_@GG|y)8+GeKG z9trC)n<3{<FRi;a?XI9)UNqii;cQMff?u5&DS%K2@)6UTS1q`7CUo#~R=z8A_uAtc z#>O!-oo9GA@w?30c<VAsU5U3AAnJVdr7vL2G;a#+!<T-U3-}d?N8~2eYM)4feBb3< zF`wbB<{$QXn!ajvHQ)MH*}dTuZ^!m=U`*W)8ZLhqs(oT=2b^w?6!PM}f4$+p|5O4~ z`Aw!b5!Z)a;S$s4iNKvQ45rTs{O%vjoV^0!2rMZ}8;ahs&{*o0?w7KfWG(RRPR2_L zi{dso<fAR$<-UagevRv>?Twa)VJsdBrgEmvCR&2U?1xI9=*vLFBj(RUmp=V=O}_Ne z?M~1g+5+G$Ig)CpBx6B3aT=%6NevxP((qE9b(6B;f#`iAHG3{=La1zhrSXQ@#nj;f z57wirxpTZ`AiP`7tV{QG787?i{K~x#EKzrz9aC^6ol!Pfhe?=yZUp3pRt%t{-UfU| zf-oUS<W<RaqK<it`soFJ(e!sJzf}YMMD$ud1(WR82<yx?qp-*1!cbSMfnj%up-@q) zQPoMl#&@_qY9yVD+6q27?aVvXdMRI=j_a3PdU4LJWJd#Xg90cuW|qcibSUKyfSAZ9 z$<yzoo0sP&=aPZTP$T8FXw_sfxtMa7Vwbcztiu)iDYz=4j@)<u19axG$7l`>X3&JN zamWnH&IT;209L~)nA9znifMD^skFEJOiYcKMY<@r0A<p7nffjYKZ0Ob$ZE|roWtf| zR3T~86o9YlR(|>ZnyU}e97^?j>eM5mlLR$O?ZyjWErmfKUaM3$6f0}X6+D@KRU^2` zj`Eof=v5(==%!irtDl}(IFu@53^rs=otYsF1XQx7qDfba3zo(jLcdFh3vQy*P0PP~ z_wFG?T=wk~zW!1y?P59aWuX0%Zpx0`j<UXk6LnBN1Pfjjo;MkE{UWi;+wu_dlfB)3 zMdR&Q+C;visBi^udOzf->orNnqyEN59hU+1{U=62_iJuC>5V+Ca-Ksn#wWM;I?mjC z-~G3|{N*=rGH=e}(h<t0&L=rr%q3Ij-6A&;gHl1t{Q!Iq9z59ecxhv+vOLa!ZcwQ7 z0Pqm3_-SxUJGQ&puQ^M_m=7M~c^);qrKc-x0q~Z3gq@lb5oE*!664`4u@1m-CulCD zU|5sVgjSfy4B?8l*xa#`PJdD-o}AM96u(2XYJu~nSpWQ=|Ipo!J$B~*GA;X;j&u>6 zg=P}3^j($x4EAi?o|YTf0`XLSym~lqoOvQ&?)kI#?EN6ZczNoz0IaI*QNSt@mBbWl znBIWva?@}w1u@~)t=j|P!^@mO!(W6G5RQwo+jc}&+1#<+6U0%Q%5}pe++fH{3e=JU z8SggU3K=wG3T87{^m2J-rLMc>qM4SciFGsdRr8&$kDhsq?z?ZEmD&rhdEW42Qc#w! zr0c8^?c$Y)nz=ox8rd8)Xj)-CHrr7>6)fZWSGN|nXexXfnLkDiCn6HUc4-=71M3R3 zxvW8c>5YeI|Gvv<4&D2uFUP*#>d6CaC?C~(E3dBY)v}f{p~l;)1<|!N_7UOLuydzD zHZw)6HPY|m0St?-?<HNw8#m>#53|8F+RboT1FYdL+PgP@wp=Ia^0V(_6`a(`H%nTp zqs$$U^Dn7c=GJ$CHZ6kS*#DV!ITVVqkHY-8ZaTP%*u~|^a6B()6AQ~f9*P1+?Tl{b z-yiuLrk()V-ONY4=9P1E!nvk&J-0afv)^|3t@m7Z+22T33Y;t&-~GeJS1K!|<0f;Y zBLmRY9iMk$XVJ72t;k_RSUt5v<-G`WgW^NKce@suP#}J{_82C8Ae{Dx`b9H@?+tNV zdWO>$0B^|=`*ju8sg!;TgGOL%9ZtcvZkA5d(Rc`O6$oRes9})w%sAbAE3X4q*g(4R zRhpr+8OwtQk4gr@>G??6Av*aav!8q{(&^JT@J%;<!!Iw+$sc4sX`+JMh1Tm;d3L&E zVMd1K=5_=>jwL&u=4gzGpAJqdqE`WMl?1T5a&SP*V3)mLhLTQ5%0d(7Qp;VnyqKm0 zfGlJZEEjNCBpQ%oJ-%WhKe2#<YmIZ+rI#S6D5-|#R_if*izdWZ@Ze3JEgU9QB=B}N zN{fW+iG#cxwO>+p&t=k`c@>l>#>1VZVM8a(1Az~K8ohq{vv<*4`o@<W@<2)esO17E zq9p^#3%|a*yi|vV>}uLgVg!L|60N%&+f;;zE}RuON{E4n!TfpnDO6_7LbF9}Z`QPu zHPJeuuvp~s9Deo7X)b-@&c7m%OKW)+C4I3bFJz|7fUBT!NH9}|?*UDj$<=dok5u%* z9J8w$WcCSGb{sSY<A3;$)SMf_?TG7YAs$|_Y#R6COD@*$qQv$6BO{PPEiRNm!KQ&u zc69;I`f_UL6TyP@XH+%OIAJX?yFkFBZIsn!+6BTsM4xQb;OMX_p8m5gcRc-WnjL<5 z!p}L+DOoQRxB0D3#?^YycPxoG?j%~s;@98u1Gl|5-QRIXl7Wt-yQPezn%{g}Wb)7Q z)b0>H$y)j7$z5Y50pDbm2Pbq$(*D9Gr5r5$C}?OI++5F5WIWR(r}lX)Y@*6w@vPxg zzXFq`w52VL(TvY;OV1=KlW+<E6x8bE+-S6N<xYCpLv325yHSDji=8IbF~F`kOGxb) z0mmTi4%hTtHqqjGo?Ytn?+`s7_``R+|GKN6`<xFhS-6fSi;3ln{^P^d#QZ^%jm!=+ zhh!p-^e)sqt(9MmuvQ%D-p=uyjOQU;KeD!YO(dIOayx*6Kq&_1RA|HvV#@nw1uEpg zwm!Gxa}Imwr~fML!Yjpv<3>G>_s%9h%4#U1fg%njoaSenV|lP!3c{XKLcE{hP~^>y z{i$ZWqWy#vKB|0KtEm91Ca=PL3VZRz7xP>H(VOX#OD?84^y~kh-=UMI9<FJZbcm>G zqI(+|Dd&ZcvJX+WHynTx**mM8vo<Mi-l^98j(b00Q>}DewC{hk$MMq>X&p3u=eNI} z=1?+!zWoFLKW)+C-<^~R0v#K2^$o{Vv9-KdE42-TJ|Wkzw1)L=vozNo+74kgiqO>e z0l{h`n$a;?+m!M?d_8b|wd7cWPkXpN`#A^r=9^wZjN60xKbYr8<En32H=pYHRi2>l z0^o~4*N`=}8e;6zO8r6~*H-gr#q)TGzSrs()Rw;&hDOp|6?O{zu1G^~ght*^eD{+n zjquP9Hzt}fcH1KNeEHrlz3HF-^LO0cp7*=Eyg$5?-FC~yp(Oci-<+8)K?_Gx+K$h# z^Rt3jce2Nb*>m$%s_YqM(Q-xEv6L~iYoGSobmGM6LwhcwyXfgd+fA@WXsZF<k|Sm~ zw-cPxAJyjKOdJ3N4$qpNhSPKvPzwTH+zbml%Agg-HN(b3>6o>X9^BAOr#>IyyuJUC z;(Et$#$BEXB}!&Nk3V|mM@^}>Vvwa024{}55^IR<12#g<MB<u1t;n0^61#NA{QB`Y zhMZ5lW*n|R9`*F$V!&QJ)OPs!a>n+VourDH60|2=uEwL&iuiOynUS0)vuD~1x>(0K z?B2b5vt-?fJ*rhLXUr-|O-Ho(hHtrQJ3TmNw=q<`au3+%22Pe+vx~AfH8VgLz`^jd zb)wZziy~nyr^~-+2hW^2vz8Y4+rRC#RBV!2|Dcv}(6(k~YirQgYk#DyeH{WS!jM|t zg%*d@(9|?)Z2495V5xPq$N*PL`G;7GqA^w8q}EU6NJ{;pCR+I^`M+)r?e8b={7Z{$ zptADI^&85)x}MSOKsVRADVlKmwzyVpZFiBRZjM&8#`SAwqR{XiHQ$D@1m^^UTep+a zZ?7<nd>Rn8$qXI)%Gto;+A?3XXHUr@uZ_jNpqq80B&(X=x<7#jqD;P@vi^ztdDyE` zup4LMtgjSOz^NK&YPh4e<L$rI)|)XEo=jjguNa1>(rv>BW=8z`X`u4nZbDy=X|Lj+ zW??p_bx3)9`1I+Y`_^ww;CH{|Jy3QDHoxL*{+vm*z{w0+l?lg>ALsN-7IsDBIxGlN zKpcRvt_2<(io(M2Rh}7SJRP@^+fL;_*V?VO-nw&a<hV_gSBsn)D{^+F9XN2=-OE&- zR$y@pe*3iEm$ap40;$MnQV!Ah5lB-Mw7pHbog<K9bT{Ld&W_VfvNX-qv8IkTY{Sn* z<7)xcyr(>MvO8(VBYp0!-}%M8d-wc!-+Bf_F95YYjh<=)En4tjJ=j&Dam*VoGbn<* zb@G!9^7HY^lM&O3w7U7t$X%x6I86r!;ZJWlZhl4ng@ZQ6f!>g>s;_chntyF8UP&Vg zX6UZZf06F~{1-?yFU)?aDG`A_sbZi$F(LY3IR2&N$qoc}lK_pdE8)Z-GN~EX>aRx< zVM-i8F-Kl<srlL$UM=7E-EW-TG5z+x`yl<@y<c%m2A<1>TSXk#7K_#~41CrkST%^+ z416{WdowX9@-4usQO0#%Z2+4E)H`4(IiHu_c!<CA?|n1Pp_3;crr%m>e;<47aZ!G> z{i)`+wiAJNF|;M_u_;!jaZNUvR-UBOUhJzRYwPH2T`S|gwr}H90e6{lao;}s+)U#; z*}#3i`B^o^`K6`j>t6H%zU~{Yb&V;$(mD}G)Ef;w*rj|-8%#tQo1qn|8A^EvrMw){ z>|q6I@{JYIewbs#?Ol80p6Ux1{|a~xFY~&CRdH7OubH2ZGZls#d4gy2Aub)IvyVUi z?i+9TUO4hd&-P8A_sDR*Z_pW7|AuG!;ys277I_$UU`Ul5Bbs0dW3nqq={T@}y;|(a ztkSECIrPw}(|0W|hv;cQ%P;6-SMGb(YiUajZ8gAKilqGp3LVyg94iNmLtqy-xI3|; zbdZ*A(fX<%MN;i>$#>{Xp#vS#O5nHn?`VD_;8*IANV|^dv@W>r3cX)$y#CEUyEwP_ z#Hd-3@rS$;MZm085CsKQA{HTef_Qpt<r-v-A%8kqM*cdyfPe2t6Y(rAq(8|!yUUyy zF=~jDe_W2|aN6CGmuY^3K(gaRIg6tg)wsZ%kLm#JSv-eYAEa%iuzA@fmk?-m1VB{& zV5mw1;%aKp5`hNH5-%FCYRVZ*MyD&au9bDpIP*@8A!}Dy%bkl<5Tkr`rY&6mA(%%o z)BeKWeVM*^@0V#V{k=D&51spSTP0J&j-5|BGgTCti>!%Wh~EfHA(v@PSr3+}Xe{R; zxk-ozj$#F_+E-sU1$bJxtaUDJqU4qRFW>hpe%)(srn&UR<>bJbGmo2MQ0rSkYt?Yu zj#c<IORcA24fAk6)Z+rn65366SO2Cigz8q(zD=;J5eig+sD(H1n^_mgg<P^#%UkOb zwaWDyW5)?jEGb`?UV3TeLL4`y*{$_bzGCQ0*tJ9{{b<|6)pTK8VgK2xUwN6Gcvai% z`&xE+#WAf<+{ByezA??32h1I{H%+|ho*(OXnjxkc{+p1j3IOIO(1SO3Jmy#1jHR=X zd;Z~31;2?B_)Q>K*8pc);#D^%lPv23;N<{*ldQFqHyN#^gFRXt_yxZqEG}^iN)T5| zTpJ@6v`##?vZltP7-ufYV(|y`G@)hn+(TRH(#GHMmY(*cl5^~sU~!t)3WsMG7yZ)x zt+(FFFe9k5h=c#wOd*0_)%>Q1*eS<yl#Lo#!7p^!bnxKr(l43$?Ap5Eyi4?-A9~L7 z4*uzq+pBOEwo1g>`BwKRF}D(QjnmS^$SAUU+#E?tCOk!EBqC#+$!N6Iyvk<rWHfdg zXstLUOtZx|yjU+APz9A#ZC0UuGe#$(xE`;1)Z`TBr0e}({VM(Wr~j&8jQqJ#(2Thc ztkt&WZ?&)ynU~_sRJDx8uDBxBi2Y@PD3uM`Kq+B+es-S=mdiy_0B1ERg{rgqsy5kF zCIvDGe&IFG<M00mx6oYr$e;bWeB`5_%w1ScoIxvY<<vq$#pSnL^9Fa{B^KdbzyzFH zEjttH@uNR?)@=JVxu8`A^LBi1N%MQtORlH6^gsSjzbg-&JeBd$keq5so5lcpC5dYb zf*)Psr)v6}PO{Xc#h3Q|w_h*U&xNDAYr|9Vq&hb3Etg&DTJ4NXbi!6s$C)YjJ-}qp ztG?+Q`Kl|g(5!s7Lfm#Qxn3wzwIX2yhsDEyB77g#=P)p14YZWjefXU`Bk}mnbokMr zwb_m*B~AF24IW9EdeDf*XioWfb)mZHTB8|>VwztK+u<8O9|XZNlISwc2k!ae-+l9U zeCs>z&Mv6^%}c-Z*rOyL9X)z*kd>kmf#4;;CRYTOcM^)~sG|WkS+dB2UQ&{Ai^Jll ziW)|_5-oG+Jm|qwkNniKwttD9`n0TvJ#W8a-^K5zEj6^&0B@;FQf;NAtf@e6)B@Yh z)Bu|Nj@6@(Y?e^{M@(cS-fQQn8sW~2Br-AZpTfWqNdu+6J^gfphuz)7cKG|@!-tm| z;kVxN_+w{&7K<IKpla{P4^~Xw@wmpJb_|@BJ$U9YYr%=Qxotd6P@hVK$HH;vM-$<v z;#yWTCt8R(lJ+`rH0X}geB}4oj-{wg$>G?&KrRi#X5dv!&tDTtzm>@_rN3|Avj(Y# zHGL=RsYVK@6}(YhRf6ccT3iar&c8Y_?2cQH;-Opw);yWrj0#7-#CUQalCAHw^dti* zfi=PDYWD@K8slYBD1}d2;PjhI-~8Hd;upN&d3i0b@o5`7(Lzk+hh?++0g#$Cof_AL z&RWmf1{5e7$R~no8RXi<B9~ptrcS!nSc;PZ(b9$l*2ofr_BAs`uXy=O*8;zv`RrZv z;1c}0jyY#mn1nVklx<;0F8PTUXkG}CH8~{Je(RcV+xa{v!sYXcRN68}t!xkcawo2N zFvRN+`ZePlm(zKRrd;ACak*Xda1Jn$`-<6pDNOAEAoW8l@4W(M?O!4iVhUhDQ?hh= z;I~^g3ca+l$XJkWmAN=H9n`$1{9Qfu;_*b9+;Bx>IdF3`62?)dads&7#ckTv>{**b zlsDWHl&kFL*Mv%Lk3M?(=PLM3v`f|6t+?!F5S;wV$r=MCnW^lr;=bl2Pn93KGu|Hy z8<}=wJN>2<{Ia)LuI+e)qSn~lL3Y(NCR<mJ7LW4>=xIXd9zXX7w52X>0q|3ZPMnad zPMkh{X!tGf=?S1BggWz)Bz&e>y5g^nHrobkKSrl&v2(*K&in;a86s*nNT8zi9UaZ! zV0P`mhjj7|(7TeuBrULoDp%bRQO^h_ddZ8w?_ZreckaEpy!p2S0!*)O)&VT~aU9ej zouPm-Ati*tZFX<YQ-N!ulNDN}#8q+(MX3`f2xv|`o>?|vmU#u=Sb4Q5{W$PW427Xb zp=ix8rk{5v)`5?F(E=9%m#W}+=_QwXjUWu^V*|Ph+$A4tQALh+(7ybu@XJc7*?~sU z@F=<9Ra46LT$$;JkyT0qFkQ5N&`=ZzBOuOY1`ryO{>UAlqIKw&?|1`UvH$Xt7dgbI z?_&UEI$@C+BWo70YqkJ*r)>JG$8bo-vl>q~gwoV3ovP)xIw)XRvm-n9!}?kP=_TEg z_wt&~`~6S8^))n?(%RoY{j*OgQg1;vX}e?bGZCci$ZC-TDq!Z`2jbjJ%Ul|4Zb0zO zXdQSgA!x>*CnD+@yxhR>+HN9`<*UFA<_1RykL@;e2>RVY`-T?1@AAu=kHPweT=>eF z^$*32l`2?OH$Rso&^*PZk0#!ruI~&a{?lfHLNmpWm}siEjd9wb)Q!AmAYY$je%%64 z^l?F5dcIzQQ=8{VY^@hJNgnD{z)fG<4lov!{XTD|t}Jr)?78>;AAao6`_p~h;Oa2% z-@m^Jok4H~yh&b4Ki%CK&iZX+Jh0-U^6Zwhsj3#`J9N`vFs2UPL9=Y`Xl1DF9NeW@ z9?<W9CMj=(Rd)z`s?xG%K3>YQr4G&NdbafB&;V-po_h6O+Vd*e+4E`|%x~q@OOfNM z<ySlkc$Z)I-OCqwH}THhyg2vqvvlqgbavmz&tvDeGA?@?lPLIyjz&AQon!UvHtEG3 z%PY?49UI>|AN^gNqybJKIBJITcK&GUtl@QYtaK#OenG3B!-rqW|IL5%zrX7B-}2Jm zUvl}XTo<LVC{nE;9JE9rP7!bY0JbVUMM6OqlNn~x(o0=N!}fiBBJ)NTnUSvdTzkZl z&3Os8jf=iNe0OH9#zpYd*8=2)&^8xuq6qJ^B>cx8`4~NV=8UDy<d4ZIX{aPEB@4#f zKyX8oWb>+#+GAu?)Rx{j5#fWb6-Cu|V+Ng{o!MxgKhiRG!M@=Puep2EkvGuGZn}Zy z(tY=zpx^$z{~%``eXJuvQ{a(H>HN;W6&MZgjU(@7lIOuw+&D{jk+OQ_onSJKT4z#q zGgd8Gd)U7O_TTfLe;1|eTuR{gPyg)Cds<AJ3^Ef#$zZc-^UyV!S3FM3wNFLTzJ;;> z<eD~FSz=8kzkzV%R+pOZlwCXL7^>4Q%acH1oA<8od;b#r9)8WuwMAJ0YU%L%H(PK9 zJA4DnJle-qQ|A5#fAKyR#@%t7`V{fJVEuT!W+cK7&)sx*;T3WFVWz{kAuJ4j;Xpmm ziUD!_=T6<b4`GD&MlKP#=lbiu`z7kHTHgeIRpXmwoxCJW@0-j+PanW7_DKW9jY^O8 zk3t%2#sujxbw}0eC$RjZ)4p9Eae{FUJ$Ul;v1L;4qNgs&*8F*zwi@8CF`YPh^2mcH zA9>G1r%r!p&qa@(*u#52wER@xvz*F*+w!aZ-sPu!XbSu$8p0%1<}yx-o6<;WJ$UNT zk1f;vwG$6L{JpdR6)kTRakS^L4o7ivat@}=+#7(4yW;ENPtq`pM+?+5qe&esXonfX z4smtXGV+|AcIDtf-!UrSP2d+?hx<G3_^kZ*|NY-Taqk!J`@yu9raueI)E#KG`<C7S z$91MWq{rM(4^r;u%VqNmnx?);(D@bBYPtCEpmtrwZIg$lI~s1CbOT#7Cm!-bm}Mti zxoZT*x-K#cscg~-hLy#Fx>NIzuD2nE{Fd<sGiV|QI-HiUSYVoD)B%v5@9<!nG8IL$ z=1UV5(ld`VxP~uRO+T~Cb^~DC7f;jSl6>%EKaCT?STV&WTq_K*<xlSTB%L|)7|o^U zKIZ^^`?tK7tsgSzUg}%QrNBS+SFJSXuCQvXGn0+rWns!ON5dq5nEwErrQ*S?E?z9S zDq_WY6HQO!>Mxmdr(={ZzWAcG!Ee(3CJj24!8&oKs-R>$(x?JX4XDo)%<};ZQVj}# zuYs5FUKtm!nx9U5lufRzapqLj4BsCY#zmQ1mk(6gU92at*2e~`dy6Y`0kRo?*~vU} z3-7*Yh4<{;!{cK_{?_!xv-P=b{-{!w5Vv6q+J&<|>D-r8+Ph|4YkGf*Ax4V#gplP& z?#BCZ-;W!H&!1_=UMM7~-)|56atK$AV|?o9U!^4<lJOfIeE5OS-}|LECBFoGllC_q zeUyGG?^M8hq*%u#I^wd|bAN$!y>I<^g1>H5s+8_irx6qx&^<_V)qX!IQ-Vl{Zd}$5 z??C%TEiyxTJziJR;_RdEp{Mw9NL%ygX?l{ntt}xX(7Qu>61aWqDsX$jNR}Tm^9Rl? z7XS9Z6_<ZtJXlrQ7N^;5#54q*4z8^G<zOm<&$096-}<fJS}^<347I+x5muRT<ai*v z-@!1M@!Vd3aO&uD=TCujX0&b$k=6qrrr-Rncm2>s7w`Gi3`EArgt|6Ni8n_R9JP(> zk<c`cwAz2IGzE(>KRq9H)PF`QYkSJr(`dF%^fXAM+TS|4qi>$gk0|JO*|(0xB4}!; zh~bis<N7@P?HBK@Im5<7nT={5ZRV25Zm%Jl#3lwk+y`4ykOD`mq_(<3nd`Ai$a8MW zxB*fp$4I%J6!k!Q%A2L_KATs)@*DZ@zu_>gL!bW3zo8HQ!GEmj+j7f%w9jyxeI4V> zx=9j&rjiNx!SW26&?zk?yG@tyYI##PZq7{h?Yo@+^EZ7vJ@?rMXdU|X-~6}q&=LeQ z)eXroZL+ppd8~k!NG8_UX>=?=`GUA-bwJ|#$bKF73B%M+vuPvBRtdHy0VqZ-KVH%A z+816;FM08GFaa8~tWByl-K+(&+Ghj{F%G8X$KF_o?i0`O4_)EZr#$IBlGjvLG?&Lt znmpk*mjB8wYHq+L4tM88cNpaW=q`yIK<>@S>;OQ1{OqIe_}?A<fnV39T-mZMZ+w-H zdaRTEM~~)BK$AR_t>jV)N0-l4iI6qKyBfz{smg9WE4^U77n^~MxM#<pGy!>ZvZ8|( zq0j}O2OoO)eY~^tR(fjEuU)b4vLB%>jnY;F{3KB_Z$5eQk)Iqiy-N-4@;m*>Ck^~2 z%6YwQ&(6+or!&q@ojU#26DLj|YJ=&-nXK$=^cLb;C#BwLmQFjeWrygt*-ag&&d`NU zbeKuxjyg1fUs#jk2oGdWoi=KMJ@_SXw~jrW6-;I0tTc0a$5M!S^S?@KY7#eztDWwb zli97SIiZG_sAt~fWKEFpc+G*;rOB%$#r0C2O0yJ<YiaODG%Aj`IAi`(zg1-%WvG`I z`E+?SF(NWeir22>kol^b;V8%zfM~y+of<!;vG4L{RX<`<?OOvH*z$7#Ic{WCvNz3D z2`AiBLf5~>6WSN3yv0r)^WZnT<ot%&`6|v;-JWhB<l~eIB979YsNPs*BGnk=NeTY= zCqJ{+hFFP`+4L>n@vS+ng@7JfsA_75zvU>NQYy%o#E_x^NDYe}C7{^mCj?*$%-ul? zT*_*-Xo>H;d<lMUSs(l+)90iCE~T}#%ULsBSY3#3#2|`_2<}29ZCSHcwyIKVLNa3B zZgIJSeQ_AaTBBPNT)}TKjfYOuO-R(wOhVrEIc)qk+$;KEs=yq<Z+hOz;k0ZAuDr4Z zJLThNs^5KIqwAS;pq6}`npPb<hGW}UPX}x}LHERsOW%2Q=kDS)BY2x><7IJ6nK^n) z^4M)sqkb`8&2y|=KFt{cyAk`&`evyIer+P8pMbWJv**se`z1FVdjC>pk-FK{F6ka8 z75wfFe>3<^l;owH-LYf0yB3?4ltp<fJxAaRG9mRezDcQ3!a4V-<u%JF@6M36TK@^= z$soK!oHbvNr^UIQWAxM{Irli-Mq8Ss^J*MhT1^S~?!EZYpIizNKlP*n-ud*t<%e=> zSSYXULSP2YZH|Ta_^evsFf%?DZUt+ueM&HSwrg0EV&YlV1ZNZI{G7q?@#Dvqvzo`! zZ08c_9%sMf|E{C~q0Wx#`rwm%*XMul_m^ycM{fof2d%=g^N+K+J#DXdYtxudHN7>0 z$J;iLtnlwSF-^n+L7S%1<2J--ycIOJ471aRcc)I!a$}qKT4So;fda2GDRlCYN9c|} z`*YJulC7c5d3M+BRsdy;ndvkDDdLeerX90Sc!lK(d6x!@T1zSrvB>N5$C%DKX7p2y z9=Wx)R%NW^-@pHI{{DaPreTw-b?Es0C+PS7=Rc&Arydp}r+_Og#GB~O-Swh*B7&{% zxqjxpzQ;^%L3^x#6M9tIzi%IX?|-?T*>j?#^-bDel(mNx#eV||?(}(zqIXW)mwP<2 z5Um~)LfQ&#>M>T*$-kJ**SZ^7pWfs#qOrI9aKeK8hIPsBb+3K}Uw-*ze#}$<oPnF{ z#JX?R0|!u`Wo0+&t**bZc1*51#=@+od2H~^cr(kxtJ37wz5B45rt%vNPZi+y#{V*h z?3*O_J_+u~8Ce5-?%cUg-f-xj9InS4DWwgtj@XlK0ID)iIr_*>&;V_3@jq%xh2S^b zADiB*#ad?iP<lrmbtA2i4}+X(;nk`Tz877t$GpL2Sc#sBYk@@;w_dsb@?*56N!n_F zpFn!(p;K?$v-k8}Nx}Jb3Vsv4ZO=vYp_31v9zJlXYs~T_eAU8gN7C&?n42L*V10%u z2C!37DoHlNSINs}^EzOc!kQGKW&r6x7Qa-onN3P&J#`{;x2r|Y8sR(;)Y;Mfa`I#z zRPH@~-#aL6I>vQiiUV4Y6=#2k@@1$^-ar886Wd=N^@pF1z`P<31RcxMhi8o17f~Qz z8s%|}=hf?;$Fdyt4B4}<o{>0p4d2jcBUTq_o^hr-`$IXG?w4J1X$ecJO0H+@Qpu8> z7P@K;i{_2$cNJL2&9uPJz!)m_hChm801(s~L13eDoxU99H(o7$)K0tl=ekZ<&606V zX_0#nWT$d2`(66r?jO^-bnrO`D4i#K#lFjnX14%*?2||zbzN!UlM28E{c)aYscVEa z9T79>wK$|2WsGm&eu3|lv>Q&p7hLl^ddv6yXB&av-~PQ1TA2!8CRo;9m#WrTDo^A! z_v)(+&NQ>)c4=PmsdCwn3R*|e^~PRO8Q|LfTJY;qCHJQZ=Byi3`#Ut$c7lnlEJd&; zw){26!ql*iKU#^@&%E$1ZU0cpRQ&zbG{)Aw>dkZy%0xk%8bj45e>0CP6&}r<I+=UE znt0QBahoZ%yzq1)YtYIxJ7k{@yl?cZ&4nlDf5zmDbiWX}=WoCCl^;BOI8D~;j?epx z7Pubqm?#0?q}8oQLuR>1cYa2(2rcOf__gjLuJt|EIldB=7D<-W{af_cY4_$(ECacY zkCvAzRXBcI3a-m{Dl?QUD=Do7mbA(2Q-qeh-nBUUtoP8CR?-##KLK>&#Hm*&Q)k-Q z^J`znz!&LI>T8l|^uv!n`ol0&Hi+F4)R9xObI>8#OdN%dPJ69ma4s+b;MTC^=q1ZY zO=w^z!MN!b!F}1nznbr)e!Tpa9ep}3>2}cm4xRe|deJOeDVq-Mmv1}#)_cx8^5{Fp z2EhLGfT9qh9&m;b%~PpOLIYGDOTXvJKAq`Nzxb(eH5!Ii_{TiBM&M1-TtS<}<5}Vr zIi^<?qXeqJwzx3UnB|1}4}NvBd~i$Whc1ClMN>S?^cPu*%?;D6EycKmk5_6laOG)d z#sxLPsvR=`tD9v})o6u0Qd6&*Vyd(6TmXGe$nr8!T#gp9d#9BHNl~u|l7YVP#V^qx ze)yxbE+wt;TmSL*(5qi@6Or!)eI}rZ)uV?TZ|rNOLPaqU#kD_WXE9T9le+m8>9d+f zUvkMs^zCnW?NammMoRbVQi^lQMHgkztH(B#p0sS%RV8<_dQdH?WK;2~q!Qg6E2pUU z5H)T-Mc&V<&j*phgeJxSu3<L9A`SiwGd~pgr_%l!(|Y0fxz}vs<dHRBDVks6`jHI$ zEoXiunWgvo30=}qzt*;I==TxWuQbdy9CCc%UWk#NY`lY;4$e*P^WsgoV2ZiVfrpi4 z;JMD@`Ne!^aBbniMS9~ulmRuq)<xsD&;h<mCm(+J2maZQ{9o@$>wb544;P=4cH~h# z>$hGH9=vnum$bi0?#VJz*7hE;lsg(<hPA(}*8qMk{;`Q;kBH2Kf?P#W9WzzF<GSB~ zyz5=>a!cuumk5?2y%EW5H61u`;DLqE+v%x6X~oKqoW}_;&nQ~6o7>VVN}AL`<NFk* zrI7u;$9L$~1D9QP50$<vXl(0v2ZBA74y}{q&~Z+LL4QpX!w7b=@v3ypAB$w-Yc_#C zYNpUFCC4-X9A{hytoPXz`tVKyz<OZ(|M0#q{KQ3jF8W0ilFHzOeJ?XL=7jN!>jP$K zZ&ehI{Wzv6L@RrFfwX8<_*%A6|2cVv^rqvi%5y$1P|Q`)*2@Pj9iL9V($(-plSb<B z^qJ3oj=ubr`$f8&CN(Cd`BSX{>}^LgO{UhgQ^6J2qg=|Q4Q^yb&Qw$yeoP}qE?qQ_ z4&Z~)yqSFeV&!N|i;F2VTiL2xNi$vl-nYGuU;T=2q)q6HfA?kj{oVgar%pW#rnc19 z8}CR3?qaoWYp@M0Gbz72s7VxyU=_*?U5akzG-!f((E6q|%j;@=Bb|BdG5R;Z`$4+z zz7r)=8g19Li&1j~f(e^)wHY6x@ix%3*_C8z86%9j`fjzeNmVz^;K%IO?qc3;S;=xN zKu3I=&S9^9{&VSNFMYAOG^z5e9twFTth%P`O@z^hZcwP+waCYrADR0JwEn}x%F@nH zb5?%%FrBX@7ssFCVZgPUOzhUEpNFO2hCloGxp&`q!<*k-T@&a{7Hf60t18zVG`A`b z)r~@N^Q##IY5C)i@EPPal_k3kzc)FY+@{Q?gUnc*%q&{Q^4f%+3Z~Fo)93YQs{y`1 zls1$)dFs)RJ=MW)qU8+I+x9HzL#I!lzOFbiUVG*xWya2#tH4zyYfQ^X&8~IBEOo{( zJ+Mne(s4%#g>l`lUR%oGH{Ib{V7<>XqID)U(Mt|}&wJ0FJ^Nl0ghHu$V3;~#ni*kZ z9ZP}E?0+~N&NIXh_UY<uGfxDb9Qx<v>C&4QCl-5F9_(ue<4y^Q%uTIM#AA2CKyKzf z#EF`nF-?yqr0!{bC+SYWVJ=?fDsc133APx!Er0@LML1?@r><?R$qeSZjA@c;gEdjo zb-!#Vh^d+eSMbf$Yttn^9s?{5nJF~dMu-7lHI4qGr4~5t^1KPX@CDDOw=K27-+cI+ zc>li3NzIut42N@H;T?&z$0HRB=CYPojA^j~Pzk1*V95&41b!0_Z(IW3@B8jIo;UbS zbjigR4<_FS4?er*Zzj&Bu~(q39z@iep%eX<bb`R;Rn55Vjaz`K9VT$Y9Ln@TF*T1^ zVorm>_8i-I5tgm(aXAjm%0)W9Y3^LV^~^NG$6!-X2d=u3tO6?^dZT6U@ftqlyrC7A z)XLuL@O*02_D1c`rPZM^FP?asB6c?;y{s{~&YPZ*=F0rKzN_;?%|28nvL9svEFSwN z=SZ~c48OE7=Z!bKFl=_D;5RSZ@|$}m`R6#-eNmFklyV%vubDrq)m(3xSYoHR59ucv z48ZSjMKG*kh9Y`}iMw}W4ggz~>Bc6Jd)5*Fru&ns8_<>eFFPiS#rx^&l$K?D&ldcy zM_T}V0Vo}7v}dn;Y&odDnw~Bsbm;MObk~EY9{H&-TdtbgrbE%S8QSqgfUH;51Y>R~ zkF-m4=;S1r&PdVnT8DVdAI$DFz<3OjpXuz;!9lyLzf8MBKFN$4L+<XT0Q==HKK0q# zWFen$f(a|*=0X_+)X^1Zh6j;XYMd?zo=p{B%nlELgr}38@MH)6X64H;@Y4iOAe7j^ zPh%ns_oX|CFjdB}-(;M4KN>F!vBe&^totiIQSvOF$^FVJ_d|RYm{_-v?HGGG9`r-2 z=F6ntX4O*$z?<i>bWI~uBam@tvnPO|xpi~Z^fh3b%34pZuH_dM9Bp2iHz=rJJ+QR9 zM$_+q=)-I842|^7hhI4W#cw(MiUD}4xiFV~0W&aOJ}ee>4R0)o*lx)p`bQ@gviWc^ z!*xR7kVXQ&uV3c<55NDvpl^KX^>iUAf#4;e=I1{5fWqI>R+L-7MTXeH<ePFmV4B<$ z;hCMgxQ(&=PR}}V(oV4`qHtyl-UPn030Y>nv~ezFf?b=XrcCNCcF#3?DS6{}mU$KE z%aq5oGk58?;DapRKXw3S-V9-KxD0yTIBMBa>|omOzvIoZ&*Jg$F<DGQf1aUEe$?$6 zi$j|+JLeUQb>s0UFOx~l%chfO$ZsT_+Se0||E#@UZk7_u(5u0k-m*>K^ACUU%|Dyg z`1;(krP|S>cPx^%np&|XpR}eoZ+cZVz)SJTGRT&4M-9NL{1i^!z!Nqcb12(&EcFZ| zqoRX@(9_cd=eq05jzQrP$DH_lUUcOZm%r`n5d<%Jdf%1%pY_wUrL|~-&wfitCm$Jh zcz#+hI8T#s`!B!j*66GqRp;6}kF7|nuFavj3TlA}X9{Cl%Z_;G=9_O;Fg*M;p<s&R z@=U>UXP-@da(|9HMIYe|dQ~I5D~AvNS37syablqw;xw?N4YBf?;FJ8}JKlfY3!ZoI z_m^IWvZjW5_1ATG)gwKrann9qM$&6ItKogrHoZ~5PB?tzRq>>ES)KN*IQ_sI)vAj( zl>*c1`UG$H?UZM#CZ8$p|MDL{O6Sg=Z9X2z!hclM55%_7QeD34VW>0-G91Sf-JJH* zErYb;P%VmTfh!JT0+8%>kM?KH;_Q7^q3)nW=}n>0FVLI5^9}T}n_f)kOP~Ji-_WN& z^Vjsnd%vPQKzV{$ZH7QnwTr$?%;P(GzwnypEy4FI=!MrjpPpzM%%OkhgLM4<uTnMD z&Ly+PQY3UMr?#nz?A$x;QBAMDV;|brC6if?w`TA;U};h#8lKR_!Q@VSSISuBXzYU< z@hNS1c;9>X?(nz2;q{II2Y#9D1GF;pxH!g>575ze0&zFqJhDbR9b(#*SI6`D@M@mA z4imiaoP6gK`#+=PC$%T?cP%P};gC-5Det-W`2Dw}JxTJ}z8X4%-*jR{KDmMd9Soi0 z?T~Xdfi8*#Mh$S0t6W1n7IuIRvY$DVbs?iNV{HFU790b`n&wbVUVfZ4EN)5<o_ypz zoQ^X6I-mjkUUB)`X-jL<Rs(z<bn@Xd?|Qm}-$Y5#`q0Cte@(>gDvL96+VKtd%-wlr zy?3KDYKE!K)@hoSwuVo)(Yyu|f=)W-Rlu`<)``qIp_yh#hb{ky+0r}i_^hOjvXal? z!!I2+%&KSU<xR0ppE~)2m5(^!(I_Y`cmC20mK%)DS%BRrW<MTJ_{DJW>#KPCaf*7A zc~06PD$S{>8ko6mK{LCKc~!{R%;&`m?LU80PP?{jW$8TNyfZCEG}GBQ$`{Ze4SPBL zQ5?-Q^1ggr$jjCVXHX5BQ*jMc`wT6f1tZ3^#KPeY)kB+*T5J{)w~-XpJlTD0?5$7J z&d~DlPkn~YmtOYL8|eGr{3d$qKmK0&d*61LUU>CE|B(w^2gUA!NhdhS>TL)mRWrQQ z#$H4>Tz4&f`?tP^f9!{kE;X~aJSpHe=Y8?AOt%a>VGlgkeW$dJ+m+v3-{G(hn&5eS z9){dnbnbsQ6(X+qII{-6MGO?$E8DlldQ}h8O$RuxpJL~G3cWOo{|1HkUA~XdIG-pQ zJB#sDc%?{9?=<?rV=;X2HONxo9ye`1-FV%HmcN?MbehADryTm_m@NC6_2Sc<h-?!s zBWbV;*1RajFxa(}7W(MJkNrTBJ(3Jk!Ec(N-z|3){MOB{j##)P2NeYXC*Yfu14-^t z`3N_%N|Y21<O|Ft9N{%8E28$d%$jz`y;{cFwWFq(`ox7|I4*MI1qHrJOKs~<rB!?M zHKt+B?-u-SOdEXuTS_#5Us)WZXBO?Ad;HSx(;eo_tZbwmjm_%mS#3mJ<rQn(L@@iu zVE$~K@3E2d=TH-z?u*7ai|a$DUpxB@evd+2HT^j<<TJi8))Ct@>#y$qAKj){wGPP5 z;NmrxPu(P##p1xXX&)~7zeBOwso}dxYb5wQ?xc5F8FqErG8T0nxnj+XB{3{d2M!me zDgJEI#~#0M@0aOwe|;BZ=Ngc0{Dk-Rkpws37BzKM{3j|}R<>K?ti&*_utLsp?b{IF zHcoO{MWIFu2OA}oz$ye)t=-(UT&zmr#3yQng}&u=uUh_INf(;ZrdjDM;dI2%{r8`c zM<08PA3O6Hojmo3ZLpNMy5fp`11LWDoM#W_%?F=*fS&uD{QFvyYJ%@u@-N+u*YLbs zaT0ztg|4kzs0EAJ4Y6rlCtD05wB6)DZgZ=gy<p~qnQAx$x_OqQv-ws04pdmrw;Dfv z^-W+)!&xa1z2wD*=tVEMhNRaaF$(tmA{ZB)H!zoY{U|j!&yU#8XLa0F`J7j}D<0M; zUYq`!k?R=G-SMB)4f$j0Xpb{J{@B@{eaVZz=e_wU9eH%PXnS`ln?vt+!;4=7yelZ{ zB&zZbx*d&f2584*F5K*Dh!Es9km=kfv`YJ%<hHc)v&K_1=#Y*AUgisA?mUN1JoNDQ z?(FRR(vp!w^dyp`qmI&U&-*Xir7dkt8+HNDY<h-*-%L#J+yAUf-;SM;_Cp2OrY-6b z<o3*BP|$Egeb0nu#QX&X^X~4`dTi3oH{UMWXQ%6(cV+-w`*+<T`glnL&4i9O=_XC^ z{{5dF!lXeb&8#MqqrbW9cYkqb@17s$5hyh_pefKp5F9JV0<KL$ed&@{rz>4(Omnm9 z2I$;&9=)qfg&B!6i=ST98MQ4H8RmDyZ8B|y_%eH;>U~9ubmD;r>EoaJH1^i{e4IJ~ z6~F-3U5Q1)3{@X=)@K05mFH436W~)!s8_RSMBHH=FL{$`s;0w{pRQY|!wQ)Cq@YK& z&*{(0Z@NML-Wv|{C6`=GPe)21{3CaKl9pwpb<23>Oxhj#_XjXP)@jvAkbW9$O-O3^ ziaW$>V2wgkZQ4nj5BE)}>pN#_8|>n_2_VZK@Q6<`fLu+)W-o`>)&KRcebsOVFpW&G zdCm7c(AJ~arHqe~^T=1!69i0|rqkxh*rV~J8=q-@9y3b8vqI&dfsfJgzxX%67)ayd zj?ae=AEsoXmP6=<S6=h$O`y|0CpU9G{s^t!Jov3k#d6lvk=5efD}n4Nq$O~bXu>=q z&voTQm;~)-B>kP9acq2|DQ$qevuAOPcXr-NPXaB=_MXMr%WmBsb#(r;X7{+IXEgXN zl#WT-cll*+*BQR#*3sBn_}+|N(B!y|Z`HaF%{L|Tmbbjc)&pC@Rl2YaFdUKOl2eUv zrg~gb-Z}cn5GQXOk=F$$|KrDxSXu`UW^Hh~zx!{0^MlK*zrz737}QX++B0!7mPVbV zFZIj@pWJbl6<}{2lFj1Os2liC^HT0EY&;nkJ15H!o#0){M4UhR<Bu+dpR*K{2tlR5 z1vE5*dg}(+Q|Cw|ESVrHCd0rwN(n$DrV&AU-7%T*-ZaIT7wTyXbMy*sltqE#k9uG@ zYW@<XGk?GT&Hw3eeLB(K-2Dam;O>W)K=$!LtDH9Q+6V;yyWf}N_nlZ<Mqtv3h6dyg z@2j>u8lN0ll?V5y8DSy1NIhoMWN&SA3UqUv+Q!i|HG*H~mfc<F&Shx2=%PLH?QeK} zyO%}&K8;h)H;wwWWeogH1)LdQX7Dfvz)rF<mG;cCPsdwbE2~)V18AMV<mq_WnL*2{ z20GAO`kB@AIskYncmB@N@Barsm`$GdcZZo4^eXL^@QtP05)>cVf%AR`c}V@J1;0iU z+TgKaGs$T?$KXh#DeZ5fG2n{|mXeMF?PgrS$uN2X=}7>>yXS;%-D-U=9BtPCuR+6x zSI=<pn<yQV^x%UJA4AYOtgGa)&fNF(icujBcfvd2fuK{x9xbc~7B#scsz)S2N1eh- zyS2Z~fWpk^?d9y?qzz60_x7@u<_Ig;O#@B(DHu-vcYW^DX+7}WAoLA`nY(8g;5vY~ zJ18ooXNG64gD6jq&yYaJc}27}MUu_pOvYn(S(g{0(bCflmiqDVeK5ISKh8wmkH)J{ zX>Dc%zg#6PQu)NzHDhD2ql@agVajWY%kyy5PPdrD2Lp0t#r*(qnA|-z!dpnY>^3ZL zpQEznnbSA-d=`*JFS1VAjkvBSt#f1fxnA`c9_GB`e7a9s()a(yZ_A&2^po^-pagjT z@WUUa-}|5cV7O0Jc;8Zso6h=8fOZ{9fcg8s`%Qch%(BCZRwqoB2ISsRjH6!6@QQW) zc#Vje)bF>nR}RNBHHjDSo1@ew2}Mv4UdJOSkDuq!0CfX1pP6*-g|58f3XXz3;~)@= z=)Re@2Z%q4!FeKJAnxS?!$`-s&2KF6k^E};Iz60qRTE72(xhHIUKwwtKabS*m~3NF z7=qPh>1Cxz4bSm?dq2E761nH2fAYC^Wbm8Jo_Ea)mi7*l@p`X2KbKIP#U8b2QwzAG zOO0^0cq?L&f?u<sQx5RCxA_%OGcDgJ9g2mZPKb&vwF&Xis<4EGY_et<c>|ddfV>|A z=n19+2QIri?Gk<Nak@V36fJ`scz(1j?*q%<FE4@bcV4mYvhUo2-wR9gd$MOZrP-Zy z)Y0-wx{99Rq=Wmp#ksd%wg2+>feDJXC%Ye+;Un<3DLQp$p4BWltU2lO5D#S6IN;8C z6NuYwhiKIRr_Ha@;80D4syTF?Y1IMdh-3J}cl^H&z2JHK%g)fT=uCCv(&9QI%56j< z8^)9oK3vkX)56>J_>mQPiMvD}CR$GeJMK%7`L*k{%W5wbc7b~#zVzke^qJ3ouJQ9) zSo_{U+sTA$Dn|*lv{;9|`Yh<%&$8pjMih2AZr5CTZE$Om&u#wUMU<Q<n~FQ5ks{EW zfr_|Ftz86ai?6(5pZpj9>348ikNZ@lv@>-&^Z3kTk85?QGBgoytO<T>Fo&+1;8J~T z%>Xs7xsBl(aip<cU1)_M!s7vPjj$R2gvR5vx;l3{mT$+Lxq3ml(4G~hrBax0eCdt+ z{O3KFR*hpkep8<=fP}`g9E3)B=-;f7&p3G81W?c6rHL~U96Bdjmnvwk6wR2U>2vM6 zct(1|xO~sO$M3r(Z+cbDoK@RfwY~?34Lh@3a)i}dty;0AiG1DZIbYS>Ij;GIqmb0x z*)*=8OfdNhWh(%-lN2o^Ts_Q;uVLrr`DD|Hlc$gDkbLiww^uD6kE{xx0PiyF$CuYn zEQmj_1-wrzef_nVuR|KZ??v<>Y5>hMmrCdJz{Pv{HJ4p>**)kEvwGYye~#fsv!IEQ zS!V{ZGo~4`R7gv-17G&{gInDYO9ulzH?JOp)H5;4yDuIoe!KL^Pv7&Z<&512mszZs zFafzA2Tmc{6v~!CbAxCzavaB>ZJ?U$x{S=oM<$)u;V)!49(GpR<4LTJC!@D#&z`0K z<&QrqQyUW@;<1Po1k|;VMPA5}{d(b=s0Ru;A8)~DZUtOdfT3_8tm|E;;_8N3mc0PD zG9X<x%`ynm0bW)Yu2K}lS8MV_-}ut&`CDK2s^PrfrvjyoxBldgPcE-tQK#JR5}K3K zP{ijx=h^fFZ@%Tc)&#q{?!eLVx9x|6*}KRLgO%tMCsW9yia1zwr<%e9Ocww*$OI;l z0Q@W9jrH(`*T0r7z4Q{IRYl{jYkj%^(izWt7>~>2;U~OkB~a$o;ilt_$6cqG=LLQz zUQz_Xy<D9Y7&hh7>lJwS!09umZ+Y2`-~Y)YNA4)V_eit0S10Ea$W0b$83gNbjv6Kd z-@LTzsBHpT_DHc$29}HAGlfk^$7C%DvYmz%T)MVO%Yon)-NvFp_)UeTCxuR&K7EMJ zE^&k`u5z*=@41`y(%lCxyX<b-(vwCPpo@L_(}NE^{Jtk^f%{W~YTvi)cs_pR{%5_G z#ydoU4G|V@K}HcEAl_&i6U3|Hbxfh@&O7fc8sMW`w7+RU;H>#gyF2eLU?T{^vx9X; zwXUl<V&M=V|J7grzkm3mi}(KOz$8<%{#Tq(UT<Z}e=a?Nn&3_pytE#D&lO%WH~M6L zYsHf_0QcIwHCe3=6dphJslSj19(ai3n?)ed+g&+_p=!!ppd;G`K{6uvw}1jbNL{O0 zaTbH%hgx7wsJkX>Oj{hv)Z?iG#-!;Dm=G+(dgs7vI?6|7vzOg;gM9PhSMt~E`rrh7 zKk{dvk}rJm%P?u-fMqFX#SN(*4?g?Z!*NIFwJ{cu+uRB?&dN{WWc5Z?VdFF~b!K?s znBFKsGR|!dadSp<ZQYEg9m51qNq_LW>dGtWHLrYmmnVPIcNh;hgZHtgnQ2V}$2kCf zCa4~6ron3$Wjz5C2E1X!P2*W_9Xqd3NOgbw@yFirV?Xjk?@ya-X8&}~@9t8@IASMJ zB-d(@mSmSBbnxJ@;S<RIyJ?;80E*SRjXIwQYJJJSg3<N9!5zUb<8!*+dh4xj-7b(H zD<G|9oE_Xq3&Zr3Enn{dcuQYjw8<CzjG~7gI`uZ%+4F0(rBO=#)Gz(wzqk#zs;5Q_ z)v*29Kj<inoXuk$9FL`)sMApoVbK&i&@!E4%Yk74#KozCU7bzU0VMk$aR4~^<&Ch2 z^X%*{WowsR`rKV#eCOW1dw-$HGz@&v1PBMmH6fNSx@-`8Q}8SkV0J~kekhp{W+IM0 zmKGy3nV6SHo9O!W>@L%RmUQ<$U!c1_|Aiiq7#OPGi?rG~Wx1a;AqegTrS^y=rwxYM zsDg+)IaW&GuzRq?Y*<%&RjqUYPspDyf@<ViV8S$B&t(RHdb>|AfiS0Ye_!~5C+9rg zRg^WppQ10``{mdUtji!Gp8A%a_nc?T_x*!gcq4P@-$@|&fl_CA^1^9psMpLoh?T<; zTE)9Nc>@zDWC#N1LF#*U@sJ-hZ4T!CLx^@Wt}<~_jsouR7TZ+f;l>*d@wG3!W&*2C zi(EV}*hIYbMLPR{Th|%kH!TmZNOxAMYs48z;R0)ZXXfh0|9lUhLGfFhJ^St(uKy>u zC8yT%EIlk8P5Zkm-de3{g|jJiHF3@+&3D?wKgvu&+dI{5MzBlNbjKd_B7iMN8}-bV zn=S;xx~?BI%9`%lL-3ZK*|f=5{EVTk>GL!pXj|~!*Bsb)@h8Sip2^P!a_G!3%;2US zC(a;7>lxK77j5oB(;EZ9p>wAW6@GM+tUO@kS<`l%@DQS$7Yu8H(<Ty9wZue!bI))5 z;?B;VpJ*~;3fk5RSiN0m@!N=m#z5WF=%yf;eM)n)TOG(asFCIZL42HFD>5^l%q+u& zibu2KJ^JXQ^x=<uOob#oB8I}zM&6TDn9t!VcqyOOkeZk<Xkeme3g8Sl1i`N_kz$?# zAxt=Na|gOpj3!+Ln6AlmW2SAeD5L%c3<2mKId522je$cY?a2Q9&*Im-@?~=UbuW6- zwZaMXe(~O~$j3hQX+HDl<6gx}WQC`$EJ;qJ)UqEO)&#$4vo*oL^T8zu{wk>^6m#x^ zUF8#jXQOHDZ^C9fCkLb%Z=qRfywt)<gKo_GwNnL+FViYs97*IOe{0{S=Fe*YN*7`S ziEL9a*XFk_k9`m;^u&T{7jKOs$F?#@3*FCe{d(>hKk!6(&o065jZ5%bwY<B8OGwjE zjP(elL<c+U-rl$X5SDWK#Skw8VIOuvPAc(xU4IA!ptrMTmo>~PQ|B=^OfTPVLGYI5 z({>l=2})a<(-!=8NE(gh9y#|*+DYlGoQ5ga)O+>Jo@=UVT1oXVb?x+upn@}w26mHX z7x<AhTPU7E2aL;x4#@@mp)<doaPY{xJf{sKbQi?in}g%?PKrl{G>#wlWxL_JfBdtH z#p2h8Oqf9HTQbLiki)nvn+>{^YMSw<vSmM7*`XVLY`>{^bHylbd7KqT8Lx5X)eIE4 zMjs8jQEdl)LJ4QZ8~Y`?^wLY|z*Sc`iNn?<4jMJ49{7zcq$VX<X4mE=s*z(tO(OeQ z^`fdMQcIB`gTMhYiRQXfzISWJ0kFr)=>m|BU^Da=V1`}lN;?}-7xALCs44U$_!TJg z^6x_rouWVZUq8z4`;FhG-}wLj9{u6}ddC1vp9o4jIH$D#@WXe|`+nmCX%}btk01Rc zmz|vl?wSb)C<#ZQv?J)>cmE0b*T4Jw>+cSI@x_A)^}**n8?vKP&81PftYK0kSr>rz zpUbY!adHCVG224&;a<yMUuv@(bql`2CT!L=%4Dpi#7sS2N{;n|Dc?o?;&PPzm+$L< zU*AJ<aOEb%H1XK;#^8582fki;)IX0c^Ge8FURIN3F%`y*S=#Bt{YbiQj0nHca!-&n z--LPCGqRIpg&VJb;jQUD$sW4Dh*Fwt-@iYB--E+1pHzX=0^dXl{H7x#A)HP~Ns)!j zFDeQ;KzQiMixPq@nHVU4<M{02cYv)kcTU%o2f8Vr<-M9Fcnf~Fv@WgJYd(XhXn*gb zEsYX(c&Rfw^Z42CI(T6JZVaYD;CZ+&K-4t1Fe@nFh8o~_)pQ0ea5)cHD!|S8Ej#`l zG=EO{6b<w6?01Cr+x-Wi+Xe0=jRq9s+Tag;=v`M`f8)#28Nsh=HNVuYGOqz{{ae9m z6Vv4lH_RHMUdZ!<OQenB3PxQ!o=o_S_|T-!in;N%cnsyb`<}n0yYBfye(+e=HwI~v z&;ZhGP8CRxk;$rMNQk-SXNfzr=uX*GC@JBx$VH&pYxr@SW|c&nb)v0F_D~<$tkt2x zf#>o?6{ieirZj!rIUBiricOqk9-Y?KUU9{<24I*#;&W&0CY=E7V@r+d@%z3?51o2= zc|Ae*Eq}+qx@xnj!V4%{F&qQP*YLR<jDCZ2(gbg84*k0y9QXyMtQ|&S)B)elrfq66 zUuQ}R+gNsO2hd(haZ8gJ(e&zsYn^<hT34aXX@V|{z6)q>o%4%tyx}^2(F?C3tdQmo z-=xq=32dc+#{H0E*}%6#Q=oKiKF)O_&DBZHkGCocZ;)P1bHjMPQ*=H}cqie+F!G5{ ze(ck?y!p-Fd7@gD^-|fDc&2Zns@<h>>`?~2Mb^=r2bo8~@CvIq*Gj`uviOZht*!!W zjv$vh1xL3i8$uogV7PqtTMh7*Hly{w_GbufH@=#t2uKHFy8DXDFS{PrW(YgIPYxxa zM?_N=bt>V^J<Jr^5Hhkc!wk{Fg^$m=^}lua;jnnpvxL<ITG!xY-#j>_-4^SPj7RuS z{^Va=`TQ3g`slJ4hjO{0AQhcJ6;z5~I0EBZ!5j4dLbTzk-)RtBgUn}S?KmN>bX~{e z$f|JCcVZWPI{bLH^Qpv1yFvfahyQdWNclzr4)269GiEaLVQFCpB)~<!af!hW(h@hf z%9=F*k*u=~TtTU!rP6eD{c!;$%x2!*1I3k(TC^?*CWA<173nZCgVsCbN2>QL{ZSLI z9ybN-4DOd+a*14g@kK+~)ALRRQu63yXR=0@eEl+Pyu{?eZwqogK#p$JuM2_fIf3?# zk4XBR4<>DL;}<o%5fj)<Mlgk@`Zk-orYY0p=J=xUS`5PaHRw!rB7v15s%HsjR@yb~ zC9-pS!#BSMc7Jy5Av(>XdGWaKvNA6o&#UP;cy&q}6ms2otIEZ515T#B=1U@N%d7iz z{4g~p-YpyAJtrSL{>E3l;>Yhvz&GzJQb90odR5o_>d{72mS~w-GsA{gNKFqKc6aWE zA6Y&YdtvG1)1|09=`C@K;X7v14q$`4xuq@5qHSyG&{q39pJGQwbnfj}?A!PLUYG!I zN!p$N)Xz5b(V0N(7&~S&y<vOM1dpr_PGNT_j9EG>n&O2W5i!hg?Q47Wr~wOI;^e2} z$B*-S-}^sYcg3@>_~0_<L&hiqStq^r0bv|z)Q#wC0fL3r0dy$Q%UF6o=^(E6%kSd$ z<b7#UZ{yIMa>!Kld2!c@6H-`4`q(G$qz4{+sFbb0QPe<wjcmDXWZUrChX)5lt8<Ju z0*FIu2xKu6q9{3fK$MdlU`b;pD<Z3;as|XW;h?R9X9p64j0(+FfW-=;JOJgccAYzW zQppOC%K_LDxwDZy=&d_>kAUE6=G#_NF4%LQbAUHLC-{SO|NRe0Z%wbO2iy2R^Sr~J z_bz{G;;04av@r@tdFdoVPm4cA&_J5c#2m2glzt`UcjcA)`8BV+c|6SxBrRSu@^tW3 zp9`(c>?VNI4b&6)aW}&1wAbOq;+@Y+@=d{|8OQY)2g4=so6q|Frn{55GlJcEw2{Wr zO|8;>l~GjVn`9I9KX&Y9fz7NUn+^B{>p0g(L%6|BpV2HCkSoe?n6}DoPR2t*w-GI} zjA)d%w57FalP~^hPh0KpdC~3_`!4$~La{bzZ^2xJC<?<R3bmak_0mIAXzC1=MT0v4 zU;wzytY)I92@a;w(Qg=N)Z{t?;|zZF=m7{#x>IA?G5Wt-g5ZM(uKehd-K(NTx7G5t zC@_Y@$^*zuv&jLnjbPaZ8e5{3pmZ!w8OB!v=ymgxCW{%g-UL96wqb2ABmC_b@1?)` z>$@G3&P14KcEYY{fp8C-XBBP(5LWP4&fT?pq|Sy}B~1h-HO1QStAIp)BQMj=MzA$j zUh5{R$t^c0u~7l&ac-cNFNnAHoIgWuwXSv2F9KPGdv;&b=>lIGi$4aOF^+MYJ!Af^ zyw4pr#@Y-7|K`8`_wvxmQ>=inRGz&fs;2Y4uZFiz<gG)^t6CITI5Tao?zw%)!k%-o zekW&wG{Zzo1<{$iVCp}D(n^Sz-E<>e{rrQCx4)T3z!a@R?ElOQ-vsBGc}&My$-zXP zYZRfz*|4(Lt+N<AHrU!`eMp>Dvv^d&@2Nra`?k*$-Lc3gPGsPl!l*nEHM-$B`Ew56 ze%s0aSZAl_9z~g`?7(c_?TAd~5Gqyqj$qbnbmJ=u{ZWwdntmf_d=VMbmbNsPwyh=5 zR{MMYv=kw}bN~L!cGJC?L=yGvTTs@)YZv%}KleI20K=9JcJlGQGZ3ih^XPXG*ZTTh z6;qxHgz-wwEe&wL@_&E-tFGLC*#`*@Lmvmj6$H-%zclJHN^(8`xF!&V*EOQ{J&d?@ zmvy<76>((JSyp(iU2_|P;A95<#~=CF@_G(6ZHD3k#2`ZRW2K(P*t?6gX9*jQaDbSr zzX3+6$c6}jEv(xue1W+!a7?Nl)S?KXS+c9OI0+D#?pE;F`f2QgI!W|_XWUc^8cgYq z(9F6EaAQ4UgD-yE0m;-YT3eQmLwU=-jyE-j{`jXpLx1$gceK0|sGa21McDn{mBW?a zn>%N(`WA`=44PoJyp{l%MzzUx_iuBdnU)h!o~DiMy=X7J;q|Yfy?gg!%Hd`nF>Mxk zOvBhszqygoIDJ+&iPH<!roo%km))!vnK#MM$M#u=F`$=pZlmbW4?KAC^esQ}&))h8 z)$k^h=R~;V3JEp6`59%BqXihJ=VQzGX3a(f>>V55+zLs8f<e=W&nu}1f@!1?_2fj5 zBVBs%TwdpP4e*xc({>l=Ks$TsZM3EHBc^xREebqrn-wI=!e5!)OBelVJiXT&?c{pk z7eK3l?c&~@?JUm{*0bpIaIfah)bHfwm_O7Vw7^Ggkg7=}N?PDNyZg$Qz4a4k&Ybzt zm?&b03Uav_a<urvReuewF}QP13->i;QaAq_PoVNMFHX$6<IzoleSWivo2sPI{MhBA zzN2wQ%P_?bTMFw?611;*{`0DVFJ<t8iTNFD^KQvbI2Z%J_(Y{Wz{WudK<EZWwqq{< zIksJPYeqhgy322AZw7+dr-iSexT%m65>4ssL_yl^d)1Ic@C&<EYcyzi4)G|T4A9gA z(o#3v#>Q|CNZT&TEx0Z1N-!Qz2%h3ubyQwz(Nf2Jcv#PyOq$o-9r}htFKXP%JCO3n zz;CI$SbnH)iFHY}(__`QbBrk1F+zMzMcb{mK^n0e7}~}h@LTTEMq(FT0Pwp>WbLEj zsr4^m*xx|d@t&<_FfUFg^2m?6ysk`=e3|@BCk}UVXJBt5Vps3IVR~q>LgX!@*gdEF zBm-pdyF2*kdfyC&k8pO&*D6amp~6g_%M&~wWA%4TQ2&S{-279+!e*gZ5`mwk8A$}X z@+$k~su6MV1S$r>Z<6bx6_NPmaAizj*@E9KtxH<~9BBDny_L3fUbO6mj+{7=%zII0 zGhzU}tQuQ1Wzlfj$)%fPWh;CLn-i`;*LBb(4i!Il)i6_<-bBg#S<R)(03$Hia6f+D z{Hmk?>vU3_dR)PBP@|W=_=kSyu`_241nZ#Lj6zH%2BLfyWxc*1uLlwvDIq*FO{526 z2Kyf~cf_-P3hOaTYXZ;053NINnM{aU?hb#elJ3P>75BN%Jy5nW9*$%21HZzu9d>!( zT1-X|pg(;w*04+*vXGK}3+ghs?36%y=d#)cSusM>7nGlY&hl00<e2fJX3@*?8`#Ec zz8?XQ5*C26*GdyvWiz-F_}dlpYCtX3`eOL(rT^Nc7Z>t#ejMXeaIcdB?8?VJ?EPPT zKsEuvHhJccK4EAI$g0$K&P5y^CJn-S5vYAF#_)1W*?Dy9f-)IHWwExO{86*)us)u8 z?V>QM?F%b8<uUC1%;dk>k&l;slKwXmnMdN&XsF=AnBzR+rghJVWAWC^YekeigfQti z(g*RKH1&?D#&H$M6Y-|FE$A;oLd}lrwZ7Lj)yL1B{n7vGM}O#d(q>l*b`$Vb4X`ew zO8#i>oMe!)G|M<Z5FC#?3bIiwrlphO6nRQzs=@pj;;4J>tE$3c5z@#0*1|F~%5+sY ztO^ZRCgdG034K4l1-)C^oaXmZ&j31c^7N5COdp~xoi{DJ#-F}&-?QFh&m(JfrQH~z z3Y>M8PiGLDs}iQ6PU#P7fXjwhf*U`?H7;svgP^&r1&-+t&$>>yq*?r;`E#P<oX+dh zK`epfw6-U$^Z9T8yL;ccvuEd>SToMVStVLQ7DnWEl&Cq*Kx=w&ADIot5RnaHiCtF4 zmAPC6><8#XX7WO`P7TP6I5H>8et2wQ;Z?_Yx*1k}*I`|(^p7{v^|Bm~73#%<BZRn9 zq24Tcyhs^wl_k9~k+6YL30$IuU7;&bj9r0xK(mKUm~0&{bw3DK?%pO#P$c#h3cFeB z(NQ%pYKW}*Dts4#b;u<>yja}KRy7G{&AU`BH3gzE^KR$As?DskCisi@ewlvz-~9)I zcZ5YR**f#@rmlVcvXy)AgLlYbM{r!*ZDBQJtdq8mT>H;_)NiEbO%S!V`F)pPPTzd^ zl{AOAxfu=7cj0+)%yo5!6Y<uJ)4y3AmoF?YKJEtbhW5a-#)CNFEN)8!<DyHlSlo8~ zb^qwybr<L378s8{sxpJ$baQ+&&I}qm8(-Ns*)cKhYJ|bvWHXezxKqC%&kc{%c4s^i zwwo4_Q+SlV-<v~kX-k{ZRs#&QBa64umM#b_g@o@(R{*I)2O3RZLgz-H=}~uqSwp<` zIzSGl&`$fS=hwx}AQB}Ys~vn?ADrT)0jHP<NeMsXrvs1<I7gk$^X<Un?l6#L@7rNE z_Xz*|&s}rd;@sl4S~hkH)Lf4y62gpf3G42)Uc0is`qKFm6R(|4;d4$jD8H6&Rt{Qc zE8_w$BYBO+^HImsjv;s~T?or<__1oc`uWeJ+8zXzDENKhOgm@O+$`jC=d9LfCSAa< z6w#$fK2B?>t<j~$Wg{fc#@7W;kTj)Gu!1J7gUNQgi!ekU(n=3I)pS^6EAQo^;6-W* zy%$`x%cT>7nYCJ0j&iY`;)KgQ>S40V1xla>=*Z>+bG_6Thj|D)pevOp0L^0Tl%NWJ z!3{~j+ukHeZH6rOef0$Wn<c1Cn_R7;Pk;7rNXs>nq_1P+*@ugFq8mWNcTp!?@HKIL zAGK;QBTOFKxJ%dVSgp_Ozaz*~UUcm>G)4Ahce;boegb@5uqOP->*E-CgeM{jhB`5F zm$;YLbd)x4|4PRL&rP@=d2Je*`^qV@zps<64Bc0)5bnfH*K-B@rsq5fo`iv99d=L> z;H}_yw^*FjwZ4fGAXT}em`4lz5VR6?<fLTQtl`G%A!~wDm;gjMgzG6H#?n+?XA#3@ zh*Y~#+JfILT`1bLcX?XUL#IyPwY(gnEnN`WfBB^cmX`;K$W$Fl(23!8`OefOB-e98 zLOB!7Y6#tQO$&fs-SWRlI~@A%@(DXc0~pBK-)gc{cZY_QDQkpxhj<Ex@46>xg7>@= zi#$i8J7nzqOc3rWzWSrk24jl!1?)8<Zxp*<2QnwSxj8hqvQd}|5eGwgx&QIB8P=bs z&9EMCkVMo9YwYf<Q3|&h-&J``qg)b|xJIjb!4AAogaT?yS?t&vdnVnb8A?CNL;ZT; z``5>QIhf&Srm>eWS6rLY#>Q}Q!>#<TR$_r}{0VJ!2~S`mUQuD}wJ^#~)S@oM^5;HV zzVE+$Badl<llJ!m|L#9zVU@`D<y7Ba(DX+}i3~s2caqc6)x8?1YTUc^GLty$Ql83g zlSEV|iTv^c#$CiOyYv!z!#BUSm+}by6q+M)wJ>95oc;~1_Sz)<l_A@wHQrDMYt4(N zan_GYwK<LSlca5#;8n5*!`zNfXu7iOv)_H=_5Wm;>`q`eT{}wLLVmN&9M%PHzGReH zg8VXsgGv8xF@r^%^N*Hy+)OuGtv5>MUfhmFU#->Jhfqj+3xKzD!Dy=iE|hkErY-or zpmg$)M~-k^4<;S$u6A}RaG6#_KwXSsk-{2W91P-YrOl2G4;36U&Vq*gqQ)50q7E>o zgsaoJdnrsEr~K}Wb&c?@<eeOIyySQNbx9L^?l!C*oH@opR)h2at{cdEgE8FKnRuQl zg-6;b5~<L;No=MK;<2x{m4SmG#iL=^UncVi=|cTamnry`+lwyROD}ri)x`~8X5A>L zd{nl0v6n~B#1r$8c4y_<s=$=itpOz_i5mt%dbvl)J31Qx1Z^<GdQiqV<Z7OfPvuNX zf`u1~Ynjz7+L>-Mnbta1QX_C7U@vu0>QHiVJT)DKg@aAKP^;c<^3?+D0rV9>8F(|E zh1z!j*97<&)`R;vY-PXiz7zbL|K{J*$&(MqlF%pr{4eF-|Nb9V@H_A+Z0}1ozEj{g z`<Dk-Cq*k;k}dzNmg4$lEMuT*k>KAkE(H+Vp}f~_^PXq5u86L_`gu*(*4nxsbe}nF z&ph1``0)Od$D3}P>c!OgiYD`+8GK>?(tMvQ<Hn#fBLvzU8FABh$MI0m&FayQ%hk1| zvrEly0>63UdspR%<@ld0%#ut{_YTqfY<ZU50Q?F}+T*N>P0AO`HDsshmQ)d-n_QK9 zT#wt;?t%=5lV!f@SnH;WaSC)1^g_CMLzrSEf<Rf_cryWIOIsSHZHp@O&_k!*Mmu|c zjka{bXxWMV@|F9a^;6|hJ8QcaZ*s{#sym|*J(><wM%JXr$QqLocb7kTanXP<{08^9 zb|%ldCJ=llr-5zh#o#wwd+T=cQ3ZJ&&|UZZPrtCUhu`VhLH=nbiPHjO{628baS}~w zn>)dCUgd6V#O=qI>15X>ahJa5?C@=%d3;Il@`S|GBaxCe7!qNhChNs)(D2(+trwVo z>Nk?V!^jB3u}Z-lw`f)MF`GXduqD$lXO3!@fa`;uW-fbjr<OcR^@t>)YK1H!&>Xpz z+iS-CI_CI{+DI|b>9v%hzmi@)R5u#)b=giZxHiBR*D82=+{T`^=jR@oM$Dv3J#v19 zC1zR|e8s-YhcI9K(wFJXna4HRURMJNYKOx5AKx*@R?D5W<vdmFu`)BXhY5>_rVW%$ zvQV{L0Z@+lhS$HAE?sJYOX9Q+ara?$8oXxsb>fT%S=FQSNO|Uy&zmR1Ao3$Z6v&+f z=j7cqKYQ2Ks3AapgwNVO%laHGwwC?$yZ_HW|5LXfKYpBdcMn2E)>9*N{7)NX?(W_x z)xREnls2k@^}Ss!FHQFV108FRfsC@5ldoog&sc>qKQ5YO3VH_AHoI$(50#h3ZA)9) zl(rh+Ld#G52yN-Y64Q5t&Th~QNM1L>sQJ|ZCH&x*%#}v~teXwQjyld*N`KRvCO;~; zz&Nj<*AfV8W(*VyWReD`qet)LG;rN{r$1I84OAKY9<lt=z*fzr4-PZK@Bg*u-?}&_ zw*kk6S88XQxxGh;+XmtCa|1escwB{u*&tirp3T%&Hzxn<$7hR=Kb!fbH3{;jab_W) z<`?TO#+yoaj0s*Nj>e-EW$=`aM7nm+0!v6_ASrLOPE&YG3nDX9b%5By_BCfxSFNHX zsBM#MT{_6Mxjxk7I5DQ$J!O(?_CJ?C10(U$PSIF$Q`mZxQt>HP;8l}YdA9Y%#EiR2 zYcYc9Ybm#_2c>c1DN}8H6QJQHx8_)@#9}B@y3mj{9}0m~o9o^c`!e_<sfIo8Bp%{B zm000i?!W&8{mngJ7=8wRb$3>3Dg(9nm0!_@nYI6`z^_>_jA_U%)tG<y7{a6n*1NzO z`Z_Mv2^nI)cKMp;KaVam@Jnlv#j#H$yqs0>h-j@$U52e!)gp7?C&uya-0Ab@u$8lc zJ{SA`u^t%G*W&oGkJsV>%L9{4=8R*ijfFNT)n*XE@8DLhi^1&qr*2JSe+It^=nh)m zvbV_XZu~!T<QVL#tdr(>;(T{^7iD&iyFG{XzXX2n{umqssq#yapQc9s=Hv{GO4wC_ z##ir`;CB%<$mIvMPRfT0fo`g>JE^#(Eu9B#0dS$69ex#U>4Fl|&LNLA1vj+PPObr| zr2|Zz?P3JLx=vQzAin+3J#^l&6XgijkBuA_9|sr&)VkAjx`$(wLY})eVBCIt^2c?; zN0;dz<)8n#=ijzi$ghJy-wevJ01A+Oja31Kcj~|nf~^~{#au(c=6;NV6oH_2Wt^VZ z1|V3oUpK;JyjA|wjPRO58AKfwL6wGMSPGtiaMs2QU=AMjd$h3a`g;RYHH`=!>_K>H zMqbJrWZlq-qhMo9Dz99^a@Gzs(he&ZnNbG>704UDH`$(@ux<TN`NL2TSYD`yE*C?d zxRY_bcbkf#R(awc<Hfwi=VQEa1?UnabOW~a+~)K*zgw(KHN++lvlOh>NTGLVG}tVq zlQJHq-C!-VoGZRYr8*%|CsHWm6r6NH5F8-1O#n~@wwg9mbtfVKV`v602B=I!o$J6x zi0i-MTBv~b<L0R=$57M6E*{T{XZ^$oe=a#14>Owf{NN#8Y(4YJ;(ES_xJQ|Z`EZ+R z?I(N`4C$hClbsVAgu*zz`1Kpgn%{aV#6hXR_IB~7Mda~6S&!xC+sh<*4x{G<7j7g1 zTfBO%DzF5N?;zu_&N^bhh~FeLhSxM0{9>)426>R>G>;x%@gC(V^mpIrmbP>OXbXS~ zEkD;+)0QqU$yFy#pFRX2b?CGi)_4#(0a`maMoksYBx;A-1JGe+arhzVO`SK)SXz9Y z1=ZaVrO>g?Il^H*u=7t;&f~*88Fz**yGcX5V_*`UH_ys5!bg`v)_?sYl0Y!zhJz~w zcODzO%jjJdNGLo6vB0I%6IAN`xDYhrv5C}_h<UT9OtevsJS8%+@nb(~e{H;V!ed^R zB}Lg$ACngNn&%%>xm|Y-M!8MZS@Bg9S>Wtd=cvT2HF9=UTWA_mhQiT=U{WlqO&6;m z)$okxOiJk_Yk#?d&>=c&ISa#8UV^p71`w%ARx-}laIXS-1iez$H{-K%iRG@ES7<<D z%da)h8jnn-MxIJ~RomR8AMTNds<|`(IlQk7#__`yzhJX@o1yMtJ$aL7eyD&wgZP?; zkj~E3CdY~uia9-IO4ck(=49G?j_aX0my{wh2ZDrZZ)lpNGJfdhYeRA@SQ$*H;N#(2 zyY#Y4Ixmmx^_vfTx9nbczn5r!&CQB9ygCk1kLxvPgW!x6vo38K&vI|LsmYc%yW_s4 z7&iZ~4{)C|$9VaEv7q-~{|*1>NAtP9*}PdTz7na}0Q-duU^g$FI;!E9THds$NImzr z$PcbNTLFFz=pHM_I%*L#Jg=_f(zWJnlR0zH7Hj|G04xGzREDTG%65?cR?EAkCxy0+ zjM4^JkG*=&Mdv<7Te|SXi|@PQ^2<M<kJv$iM%ctfjM+&|H3>9E(ymwO#({7Qe3;+h zQ5_}l*wYR-VaUsn9L=e5C+WO_7L`HosLl)zM<o2Wzj*Jz+}YXrVI8o0C?n4{EB~!K z`nMF6Od-50gyUheiCB@%;#sciMwfLs#le`?q;>d{uG73MrHS+Cqi5)kKk{b{$}P_d zRLbkKw@JOA88i(}ys9kRStraqy=yc{{N8o*p%r<R&(^z2WXP|nb<c42aZS?-UNpAk zntp{_stObYausO98tRd=ksDAA_2lCy4`FS#9$__=XPNq7UqNj3K0V??^T{BbV;wr4 zUE#EW**jubJM4nOBnp_Dua-ri?J#U!#bM30T{V5J_f}Kg7TfN{>Hrx?^ljh#nqlp4 z7m#*JJ6)u)V9+wB;&S7%L4K>__4At%XS{$j^R!Q5?U-wY20rV2TJ;;d*Kq6x$pn5E zzn;JV<3Jq0Z`SrEN~b>PeKvV6<NV-~$NvOOZ+GK=*+*nZHHAsbs!AN!@kJp=<r3Y| z8T`9LL^Pc);MPPn0stIkrJ#gpKBi6_TMG<V<ZV*{VM|+Di#F?(o@R97<mn@Om_9^X zy5O|z+J5?q%P)BkQPtXZ$T~gj47JZbR*xzo2;(~ApdohQ!u_aJp?M=P2cT>50Jxf4 zXH$te#9?EsVX)KLUpxlko-cg)SC^N!t{NqDfSv-qeRlyQKq~-qh_@~kIJO~tCIpJJ zM@!iZT;lD#yksni)$uwJWKNuN``N#~o4)YHdwmcEFLpH`6u>0bC^^ADw}%QMie#i9 zqXhBym~1v971OkeAWo<?tLc($K4buiVE123k2`=i%>GEvJhugKSqs?%!1~UMJZO$0 z6#(1%RDphsCe{H%UDqd37sc5jR&^iBzfcXa%e&TZ>GmjUcA+8Ldm-vhS_FXG)+G^Y zfy;K@+y%W*j@kfAS(L~4On$P&F~xq<HapS^!SB$93*XGJp;{Hv#i#1KKP?wSy(aDN z%Wk@{Q?AjQk$UI_n~vi`Z3=u>#Eq3Aqj~nzm*}=C;w15g(fxPod;++wZoD!~FRj>7 zq-93u&PDJWDQ|q0sP6Ebv#jHPTHAZfVr2LHN}{ZRGDiTywbKHM6aHh=0k_>?<=W&q z2A1JoWj^lQWAoe6mYxvWnm{jUkDNP1TY6$h7KgZ1$?7u`xv6e09j<kN#T2>Q5klu| zM=X`}Mg1|X-b!n7W1TaY3c10CU?2&*E)LW&lQurU-_^she4xFVH`PJTjzO^a*IoPk zA6>|~U&$bWRMFEA4$@=b7l#$bJFa0+ik%)SHxO>}o2H&gS-kH@&OF6N#55^+`*7Ue z`_z1*%#QU59@!<nlCPL=D9m(R?|Z{_*V087UDUpH1TO_#Ho(HkFM_3&ouENu!d;rB zf<3P0%{A))tkitD?xCE44(0YB1sm1HsRN*P#TC;St0}d^kVAO|_;n<8vm<aU8*ynB z)mL1TtY+`|nKItflwehKj-1Vpm1$NJZgN0c018V5x!%oqV#Jvx&G->eooFm<xWei= zzg+5(sUA~QI$(_pk^10QU!3>?SsSr*%G(X-NZk5fvM^Zwm>n@|Jt^-IxZ8w@4hCFi zDp-^3HGI~24rG}iY?&Lq{<;^@C|QgZUu@GU%=^k++!gVfzHLRG_|(1U3Em(u!*4R; z3S#{n*N*PLQ}07IIc#nn9%C4F>*q!l2rsW^A3OWrxBqYgzf_Jp%v4uF;c}<j%jQ-& z3qSrJBM*S9hW1!zPZBU?)=nl()bE6F)Umo7C6Jk>0CRjxr8{Z&Utz!0O)ws6kjuBa z1;1N*!f6YDmn1toSJ9T95aOLZR}zuiP$!WBS9rD=Ky@lY9wSIaf*DHdbPI6B4!P+_ zd%#$)%lK&rMg!difH!HOTL?3l9hEerskGzeShF+ZQ5d{3TNwW5f95BD=Ipt%x7Ca% z1fU=U^yY+H0mFp(uJD1vzxUcq$e|!CHTR?OkP-ZqxD)w}N_vxldkoTQAdG=n*QL`s z;;!X69WQ(Cy-0V24iq(e0py?<tiX-yPQ+Zm1f*f#o1fbfKa20cZ_zkbsHE@ERG$jW zYM+pg;Q{%&u0z&q31jK=QU&8)u?b!Mn!}kaF5$<eFK5A`NZP=>gfx@yj{4QryUG`d zKO!m1?tWq*;{a9+mm}|Rqjd>|t0v`5XDF~Kl)VpphjF<G8;E3{vH6U3A=PAh0Nq@7 zqcSb8*#uCmhmtLB%2xS@T)5`r<n{J#vjwY~;~KV37}Uf`LcL!5f~z^3KKtTMfjx#W z+(o1PcF8eqhbmXZbK$8IkDEBX?rud^P-Gq{|9E{&g|?*DhCtT%oD~#T=NziI^@=r) z^Qak574&L)XU{EeyW#qO@-qhy?n=`BrhPmV__ik>9xZNm-Y?_$pGAXX5We0=xgl{8 z<P6Sv4!cZSb1swn7Ea}<V_|3K_^b*6k@+tKKgJ@LEvT(>Q&@xYf|<8FJ#XpBp)CMT zB(ep-PYx+C6eq2ab(jW}qh=Pus33+rN*jRIv*s}EF#xS@Qysg4*xo>+Zf|+ZTXv3h z%$|GZNt*4kuDNtx51iKk5pI?xx>NLvuY2KbvY=c0ypFpGfLi4u&V;iQW_<j3?Wh@P zGn$aPm}z?Ac`U6BxZ!ExhsN^aIeBrL5wFW5W0rmYCB0}Vq^C`>3`qtP;eyoI#nK&@ z>&$!*{_W+fX+;H!V9zYhY}z(nDn<6|VylL(zHq^3_PaExR!@zFb2COwusw@3fXz2v zr-&Q@b=VSXW!QREO-)GOCX>eiIkI(M<ySV^$}A+!`cB>Pn$XfPv_&cIdVumsBLK}i zHLb3Iqp&NrZRq8W1(N!lI}Wy5(C@Mct<tNz`j2!2tGp4GXzJq2);zJ_X<RFyOioDg zXNQJ?KOv}e%tMSreRuVJ>L1KY+k67PdAIfXWC=D6V>(Wa=UU<Xc+H!ij<+#&%Qen3 zmP;oCbYh@BL*rkAxhe}#{M;c7xCu3Ng<~AD(2SvQpRS7~v^)3s*>}JAx}Sif3)7lk zD&u&1zMbmM&SX0~>xNeOIHTKDb4ytpd~68Z)A*`;@N47>I3|e$=ruX1OxT-v0vlYJ z{FII{av2q6gUU}6GL%lJA%Ny+6bK%I*DY=7iKO%D|DG=N;K_%NEj0)4qAfiUw0p(A z%f6G=B<xVNw~S^rz3^NG9)_#A9SiG;N8;Pmq|SyOYY&Y_MnuyUk*0S~r0a$!1~qi! z5(jpOu6ZT@yY9L7ojZGW-f29`nrmuH32-3Ss}E%CP_={<l1(yOe@eeZ-(<b8=>JW! zTR*Rj;>rebN<6W<#_w;xa4-GUU*BC{SgiW6sS!2nWT^*KikB-b0m>6w=S$;nJ8Fg1 zZFuw=QOt(TO-;CaX;Y_Ji-A)E#s=}HcpEYMo$;y$m9#@#y)LT?;A)jv=MpAIWxp|# zfwZahyXGR@cVCQbIOASSs{seWM7tIxKf_L2VO=tLEw7YC=uFd02XD9TSF>h^Oe&Rn z;*qo}FC@L{^7Ztxm%eyd|2vjQ8-3hwjQRj}op|nM&3J3X8E!V<af5iB6jq1iUR*zx zjm0yqF@<kk#-lEln%}p-^&h=E9Z{4)?-7pce~%nF&gl%`u;y1&?v4L)tiPX#<D?@` z2+AxN?pVhPZE$GU=29;VQ9aH`JFJ0O2#<b25#i(|+R~Q34rr?Z-qP0{p;-(FI#O{k z0uJfMr?%7OGHcoGe1jQ|#SH_C4pufk2F);YAEE0y-y#2FtqBtq0PXU^I5f-}52NRh z{`J>gb6XmCwTON(AdOBGSeP<ZKBYA-^WU`)uyh+|%YB@Y{2)CyyG}Dm+rr%NnmSk0 z;dRKAM>IDsckbrLTbI9FHoI&5UUcmX=(0;MC6!kiaieYoL=<;S4m0ny4ipntEisk# zqq(isqk>kI$Fy!t6g9)1PvQnd74YP=j1==^1Hn|8_6@J|b{+U_Sg9QfH|23ZZam#Q zLM^++wNI7<6f+IBkea2#8fFH*0}q`t=!}Wf#g(w<pMl?jj~&Nj4qEE4p?sWGqq)J7 z#8MUTt7h_TxjVT~ZDXaqW#@uexDl#-du-~*>S!cmXbYEKaxq_X^+8CW_MiPPu)XVr zY2Vp&oNhY2b`;t$E37wKhgjpB2l$;F&3HT>g|TN<TxC;wNp&cV!Pj4xz;Ajw!WsNV zx?K|Z9qxubKL*F)lj>NM5moSuGKQdevr;GCFcGiIu#R<>U>yS!=N|a&$y5webI~GC z;}$oGe!#O}SlOC6Z|Q4HTL8SJuRB8X7hUs(Ylh?Oqjub(W9Ck}nq~u{qsBRaVI;RH zS3D07)&t`J$9auUzVFTK0x;(C%<;aQF<fFC%^+CL-3Hc5gi4Wll(WI{N<fQ;SBp`q zSLINQ+Y=}v=`ucDJUM$5EYb<D1#C4Axj3`pvPJI;(Bs*S3*FraUaofWM$1_P_WX6H zTHBN=7F_&hRSpnKFI59MPO5|ihT9!AKec4@nqs{lOrtw{s#MJ$wE!yTPCfVP$96xQ zds}j@b>v_PfUZ=o9qF0|s~b+f6qDHce&VEo-vF#6$QG6=@bl&FXm;&6Tc{89wo^~0 z>glvfMMq~(S=B6hs|`=lV17RV1Orvxk=4;=+N1*$9(fIK>@%oi{y4Nsj>h{0b)QYd z$@}|86w);laB}5}bp4?h(W);Qzt^#vcPVr`2cC?>v7g{x=r(TSHo@a)zV2p5Jf=D( zuZXjnljh<mj#u$%4CHFu$fBjUg6{-=fBxsLx$WrDU28Y#J|B0KH?q`?u=IRiy-(-+ zru#eZymPolnIOml!+l3?z=2=m4Iuc|TW{648b;9kxnuF><fjP`?EEyJ3Cp}jequha z2C=0rT`<}L;4M9&v=DiaHlVVGu-uC5?Cdx>FZH2|MP8PIGnxp5hy0ge;*6!Ht<TG} zU8k>|wx*?kx8!HS+w$2q>QcT^S}D4Qjf2_}FuVKC;N}3duFpvh>0V8u%fKo>|1&>v z+k(#hOclJDa9r$*RMQk^!G-z)LO~YJEe>~8nDFV>`)R>)g3IB@v*VRKaH53P$ThGz zE~<9I*R03IXCBXMoXN^e1kP7obp;)`^2!1TO9t%I_s11^Fp$G_0E1_%5pH1fBSMgu zHPMJMu@qG+svxZ5o3NP{(S&wJqpH<+)@pJW1_)Ps>AVYc0kh<_m~6^MN}x~x4l7?0 z);0srAcmXPQ|l7nSECVyvRewlESnn*rmnjc<GBJ^uE>Y$Zp~05!gc3n@ij_Nk4#zz zTFY9zT&z&pxGS_~ujd(?R+>T-;R^C}zX+W*^And;yDG;scN%A7?SSR)n31Q1UU2pE z=$hw0FQ()_?fAX=2Xk@EMPKgsDD(S*mbcjNtOI-}3b#6UUMKuiN_FDW)-<e&W6YC_ z>;3!V5{4<?<Y<_)XV3m<0>60|=OZP=uIR>Ab@QugwUvhT1blD4`IwYFKJ+-n-uNHy zadO>c6tG59(`VEGTgi{*U6`Sav8!i^@()r_5D=s*Aq<Cf2QN()tn>Qc+?KZVB+|C= zE$P8ikNniKtNkU~(uF6c_g!)MWpAf72|7j;0L_i7Jv5=)xpU{}w%cw?gMjTir~o?o zC4j1wKx%qU*FAgo(3pS8TA+h>1BAwxyjet=eI10hcfRwT{1<=m7YxTHX?RI9r^_EY z4+Ef<r_8Jh`EL|<b-dj+*htsAK7a2IFM0h{=5m(G=)hm`MNgQ}g@~F)b*Bju3ljy5 zHviTw<`J;cGzs3yXt`D<(3izm$6hx=vB%w%N0}3@+&=o~8T!bdeR3(Rohv|eVPFK$ z(dDtVueBlgvxG6193;x95jjWJDma#ErX5Y8qb6`lSh6xyqXKQp8Jxjcvmt%%t|_)u zf}=^{p<ZfmwmQ>nq$Xx%ADe8jdR80?-2i)#hwqMy`Lf~B!F|C121M6GH@%A12KoA_ zb<|l)JNBW$GT^A9)^eM3dGEjz#IkkBBiw?CJB1tR-PbyYwxW#@T5nDDqP-W%>tFjy zxASwG;i!Z6;nm^#apv}D41Z~EHa>;(h|J6*?P`ABzAyDwNwM#X8eELm^GCoN$0_bK zZERrBUWbn;f!`M&dg1$ZV@ln$GTk3Ja)i@bV1lta?Bg-H4@mDm#2wNsn|;~_0>HZV zs}0CqMaRPaC_O8?sjvWcwQo{)b1UijzJE(w`Wn$z1H7cAD(?Z>(i1|m*h~Wq+7G6R zeRWoI(7vh$wuEN|tZ)pG{)X@hZq;3%6$Gm$SP8(esJ59rAh&c9cuthSZ}M6Wk`w{1 zcJ>N>i#FH|0Li_iA*wBgd<Qe={L^@Os`>hFxaQX%JAL|f%Q58ycV^%RrI1viLgl`w znPsl`HJ<m6Va9|GhIG|R+oe(5FpnI6je*<oUxmQjXzKmS1WMqdb+X^e?0H?8kM;k0 zac0G12+MToWtY<R*IhgK2<%{tyC>I|RDR^NlvJ)9!Jftv1D5{U@Wpj!-cqj&LK0dl zml$PjaN!A#yD7<e?Wn*x$3&*HC3EABLNKRm`9+qSD+>9hY8u>fb5@&vQnsyekpgCJ z>qImSa@tb|qA3H*qHTtBrSOn7(Usp^AGK1YFvYODGP_-)OVglQx3&L;?CQ#eKJ_%d zP5`cx1^GkIWfC}Ai|m*pGa;|3Q^h9C;XP+2t4TU=iD4uh%~fi@zR8m6wJ*H71-~3` zm}ugwWS9APxPF}YaZddrfAh&T=lMNM?Oz$1`9!=?KW;-KXca*a>f?Ff%q|Shkifil zO+&$NXw5<ZoPqPD+XD}uK7BZY-$WVM=A}vL?kE-TtJ+;Ue*8FNvYOVh{svcsYkz|# zcK8-G9)isfrj!x+mX-I3bf;%sB37+0DCRf*{af~IX$0VlJg!P-OIvzEX$yb{;w=Dv zqKN5kIuDA1F6lU5I%Wl?34j*hs2%H|@l{}|!gjhvcO@MR)O`d5Ibe<HBn>dq@_86q zQTv-T!s)8OxLk37bY)CHS;2gAOS8-Poc`##;PiXROAdYF(TA5Hcp-O1lO-+3n3k47 zsx)qdnpya$EJ2ndFg9?g=|n-t1mwOD)Y6C;g=ss4UGH-pjHSSxgfuy(88~=-8s%k0 zq%|pRh;`tqD~5XoOI$WoQuHeUaEQ*7Wa(BRt~MZ7AzmP6nUIkb;8X`M<!Y-jkY2z0 zY9hT7sFG!mLYI41^WFLnljDLF+2xVzi<*_L%xca{u2OVjz|ZVdm}MbxlP|aaxr9T2 z%sWH|CVhT`sWYbT-cfzu0w*bvVJ6l(&XXh+<^~nKHJAz;7<s6mx7H;&O^;a~5IF(3 ze!kY4q@F*`ZLpkhQ2ue9B*@==J3&H~&#X0fJ6;#evz$D-<l^Pz(TmK73IELd4$m*n zdc^ayaCvzi$I^zeu-CuN$VEonu>n~=mT$f$@QO`3j$aDikre~KrKO6DuvV@-!aEyp zboXPYA9>@;mt(B@!ZAig%Ud<Qs`XVsoDzwe-_Cko$65MlAk46j2!LV>Q%s9Xxt(dW zOJB{Pafz3C3haoN$?`zHN?f(DvwR?3Jnl%8MN8lb8BDjdrOjvyfGL5VosZL&o)BW* za~EA$QlW}UM?E~3wYNLiaVIy`>Y|o5-6u0?OjNbK3CO1K30M~`^Wd(U-E^PQNnjS! zFKKfb#0Tv(`2j?tM!1y4Horo1p+pJn7EST6@z!!MT_jLkH^RzPw8BHYn{K-9o(CU! z;FcvDcV&irhJ!qSGI^K<7m-G0Oa4Rkum{jBvHJ-HVX66rnrQgV;n=P;9)A|`%BkzI zc$4Ec%7rwCvnq41T@vOduT}A1^5R1bvfl6t%g?}3F)?IgDkH7}C`vfg4A%{!;xq^; zXan&o12bv`Ae-Q7HjK)kMRe0FOQ~wF@z^CdSp(ou#*S735;9;`(jVA2EvQWtQ~*fb z$pc1SxB^lApknhk37!h<;yQ`Iz%rM5N)ZGEN)Dxfm`ru2F+mMFVd}+JnH?mr^#q$r zxw_yQ)wIsy!^J#Ho#;c+m`gir25i`0)$}q+FI3ILt!b~%5RAc8JU5xDWfrQ<=<ut* z$zGqoX$gJW;NxE>$243P<MF5$Zw;DTE~2?y%!wTvKl1Khn|4y(ty{}39|;q*k&Ur> zg63=C@HGf6?m2zxfj7RSfZsI!rpaiv#!@$=_)JvImm?kXyE_ZI>*kp0x6Er{s#W;% zROZOM=Tats8uF_}inID4cc7*>Xp2Sj(zV9PNr7+(r}>><^V!mto?zMn;3XY6aM|6o zr6+{W3Ex8(h{7zV%|>c}o<M2>qEU03*5#(>1RimKh~W|e=oP6OaSh;F*V`n}tLuDA z90ky#@zH#G$&(Ho%1^gk3G61*X(iAU<E-iccEctYD2B=_Z@TI32Tmmr%y;1!)PP~G zaySYAQ5YbiU}hEtm>6a~QW+>!SuYJ&NX9(ZA76RnF?mXZ?1B}*(i72Ugy%VuLz~GI z0N=Ooa!NbdGJC~{%8FLFfrL=NG!16~qn4<EMi||)1gdhaFq<7ShY}QxU}&IF$?39V zn#1X;Frm3u0g!{!xLRqe#+Oy&YGnfM7&q%O+(hiorzHb`HB*-E3(b=mm?qoHG`<;G zskYV3Zn<v3m!NtPu4Sw3-s!zjo9wl_nuw*T@7~NAcUnz+nUL`9M9ZH|ok=SRJ0Gr= z0|-VvAIO_C4R_ilKN+K%Ug~Ik%dDT&FUaC0&F^6P>?ZCg7PtDqH&{Exemn|6-29*m zLF0Lj#v3P$=a^m{i`J*wrHq2k(g8F;7yNyCz5CvC$YkvOvFAf+hZz9((B41s(8CXY z*FXKI|Mc@zf+o<LCZm<@W8uic@=WNTZuA(#G0krQx{S|y1<Nlg+Ey306w*E8Qm{mr zM$DUPC2`CLw8LEZSM%nYP<^(6goDZRmbUcuMq2<}X!)scwZKmR9oTpAg{)WXoULO` zpi^fk%X;1c2rFP+YHLMJq+u;DCoOK#+zOa^*+8Ni-b5*GO0H;j2Lf|x9GtjX7-bnW znM0?1b<k2%Z7mP32QH@5jd_%U;WUUPQ>gS@HrX(ISU1QbUV`9z9y;;p>y~hQmqHEB zkhN;YqJg3y!3H{<Kt>?oS)KU%2w+v-NUsJ3lU{sjhSW6$G~OT%M&>nQqhL%i9{0nC zc&kA-`ya-IP)VrYclqU<wRoh!q2P)h6WK>Xp`G@TecLD9y(}|cO=(Hrv7Q@DGJ+{` zuJ(2Kos)S)ng;*US}WjDu}}dcxS2AOP%{jmkHDZ;KZ6LetX^tcW^tQFso8PWB&(UV zhKIbVF-OPs+T<#lQS)OJR(Q$UWYf!5R*=ftXpVL1H0Z=o3-&G~XjjdW0NP1z23+I0 zl9pJR$x=VQf46KyojY@8^28nUW=$XR3GZ;=b#S|E34H6ZM}4v`gnJLu@htcxNfU=x zCqJ4WHwny1glF>F#?!xXGILh09AnI5K>Nz7{q<HmapDu#7c<n&!k*I!7K=altIvGu zjcF`Rrp)CiLj<ftw+0$q>3~}<8%EL1H{UFsFz$GxxXW`bADg?HGDnTFOl+PZ{n=@b zKvsE<`6j}Nc+eE<2R=FxC2MW!v863Nd9($<g_gMH6SSoZN^*fG6~NrtN$JcmuU$ZF zS(9r!KkFJ@90(E+)m@%(Juhdf#VAzFtSz7NEFo{(!8w861Z)dHcV^UO11~{dG|y_~ z<d04&;dCH1vuE`$v(7g2`%T~U4G;XEe)`96Id}H#FO#dtC}^mRiCD&8<Gm)Nf{y;Q z!rb~SxNn4_;-B1AY2L#*4g{BH20qrI3KKRV*8giqYvavKh1U^XAymlkl{bGQ?M)Lb zWkV%JIu2|Mq?<c~AT*dj`?FzH^U2jTnl*k75QHM!s48oT6^t-O)X$lrK~`{E-@P(t z+DSF7g$=W~9=XGIwJ9SgZUDhl3vT%;phqn#!$g8|g+SLBA>C~n*WohNcovKltkpCs zU@pK|*Yny00cv>31Nd4jnP@%;Y?<mrfd?cKcj|`J*|fY`&+rbVaK*(!z+#b8m5bKk zsL;&T+18_`xIHRs2vJ)IRJH={l-CY2GPIr7zUrICvZYq*y84TB-|gz)(6T}{Ymm=x zMy69F>jY+Zt78KdHZUoiIMuOZY<#eKpU%<3yOF{5NUeM3rLMrpJP4gzEPmzCwLkvG zTW-1KL=JUy7+>|=-V_v$AY!V;;}T{7x=HJ+p!rxh(ujaM6W(0hIm#G1zQbl&q<--k z@1w>xkntZ`1P$_n+ZhVImZ8LfUzY7o&s+LBrY!(g+TpDR_(GG=AJ7v(pvASEw3F4H zp_AD&6^(ErT>qOWbmXY*RUy2}9~GD?kan76oefpZGlJO!Sc}PYmBvbbx^7t0QJ#PB z2Y+x!HNL;_3%}5;9WHBc4ETn$ZQXE6GlAsmuY1AIoLii`mB<PCFbGx|J`a?cEtFMz z!ijqHz%s@`goEkCcrJax@|JL&bRjpIO+rvcZc@Qfy-!)XWA`f-1k|>zCTfhAIiWrW zZ21v~d}#%bz-OXMRl8Mp>MivVHEISDh^q-Qd(9MT*Z?$@z*ILQ%F<<X25T({NRLiV zmeL5>vqnzC8%SF+mz2f<n=5dwlUfE}M?Q}9+_?M%`454Zy;41zCR;#46?NqWkZ@g- z8-cBDo)vTN6{Yf`b;{&{WlgrN%ciZf&kNpRHHozTG+W*X89)y0P!n<5Z*#+m51imA z69~Sw*2Ewgn6O#qe&dS|k?#6zpPPO^Y_2r*<#ppRkHmKqDY-6rRyIDrm<=JntEtZw z&C1`WQtoQ4)_TB@JRX}v3qVb6jIW)AADhCb(1{n_^;xa`&z@V{di{&8{u$iV3U+)R znpQDqR&DMOF)ejU<E~Cjr|~s`W<1`o^1{thC<VdGw0HDAS+9Xr8f&`gr!q)0hH>7* z1VL{v|8kY!FEKBO!yz33Q*8U>U?NJk;CD-3&osMxd%Dw!6Q>XDxhQWOw51C~yz{+R zTz<*Fr6-7_o`Xp^+o>Hep6NTV<HO+KU^^d1e_UrQVB1V(kkCOW=2gs|>?~qT8~MSr zhv7V7H{hj#wU|+h`lrFOv#FL<O^RENVi@kz!2Bcs^q>6%E%^Uth~3u##Tnx27ln-W zxuA_Kx(9&Uo7KlO)pFMSiA-(edMJDjz}k=Bo6vYX*(gcbES{`e0+|s{+jM^V)SZ7x z$M5?pxfr$%lZoKCBPp8N7R=?i284U>Dm=30v%*wQK~YF$ERK*j4|Zo3udGYSLSXL< zVmvFkI9706&%3Q|kxCdXyO?v^v`zZ1%Veu5a?A_!!*G^Xtz(!FD4$eseQpJgHTm|~ zEN;tZX)IuueeyU=KpRXkfGBTqf&|Z{Catr!omHMuvtB13+Bz=nJJ2=PJWpQs(i_=F znlB!)|Fc27P2#K>k+i?W)(C_h>iQh@U1R4F8^83D&{q$vjeN)+8getXXqf8e0G&%e zeRJnz@w3-od-bp6vwa89D|)1nYF^dCi>O*#g|V1Rd>jAA2*z<yQ)#G~As^jS1mzDH zpHV(>aY3HYeM%&PSY0NT!oxjj-n#y`gpFWZFrN71jx_zP26#(fx3tv&7s?x9$@Vy; z3rOc4TRfp=<<PNWr#_fJhckT#Pu&b_aHunv)^X#EY8WUjpJaZ`ASU5DVF*8LvW02H zW0w-84X@NxJH<%@YuUuhiFvv%IPF{wM=7~MC9DS?!X)sk?kVl-UU2n$A3yu}Elckc z%4d`;qWM%$@IZmWd(;bu@T}J$d$Gx*^=G!1BkAKknqK?d^N&sRUM1M^=x-yLaAvNZ zXd8&oydoZBNP78AFCH{q%xGFm1yuRXt(Z}~wA6&{U3H{Y@<I^CMQ}~b@YQBbG1m-5 zn@edoeoNsJhQ?Znw4lwj9wBs3v*|Xm;tH~;?tWbIp^+8Mxo#2oV|ysf2_b+k*q_5X z+<MOt&TFcN_urVJBhC=FHaUXZ8d!JT)^nIcJ?57oH4U|Fb|FHA_<k5d3VX0ik$=*2 zg5jLw2-Jn@PT`3c2Yz+GXRWIS{BpL8_=Xp8tLdFb?Eh>KZ<9D{MkM#8Q@5|1?C3CT z?>U49FYZN+$%eSS30DsH+)1yeF-E`G2f!G8;<3jcyCs2NjFSMWYIOhNFaCl9&>gI; zdZ#;-9h+S`k&@eTOm{L&*)S9PHP&TX`YW1UH`W)qz`$&}#*;6SdkUv`wxq*h11nao zLb@)?X2OkXmNjmeKyNHYN}MhD-O|@Bt>242jp@OYkGyC3!Tuy|=|a%%75gsxPI{6k zXn|Qb!@}9k5|qnqYA1;-S?bKG^Ps%@VH&hjXTM6jtb-4R3*dWjN<1n*YO<v9(pAqB z#`A^~kRQ?hiu#Rch=;WP@-Oc>blJX3Ke&9nzL!W8K6;wpc6MGy<D(dk7aB>cgUdT4 z7QUaSC-1-Jm~3osGM0Nj*NnDCjyS8oI^3yKkI<id^b_F5KFo+#4qsgkX(p!yoq5fv zeHR6|R4rZ$)_R-*l2cG9(iyi>=8JNa5!bk-X_g(4gJ!f%qpoQd2O_IUaOKU`Gq2`- zij-N5!(NL`xRzSek4OASDIbI1iY%LnK6rQfO)iR3$iPFLAQS)YRTIwy!JP&i%Su?z za1ZjgH1%8oOjImdS0cVzO1~@OCK9ZT6Mx&cymr|9YF%K-<2Uo-&JUjBY>*G;xamY* zkJ2t2i%#F`^O(+XPCp+tyi+}5ZqFeuO^-1=lw)!CnTH>I<4rf+ba#qYjvoviVkTI2 zG|G@}YBk47OT*}qM+7nfo+bg>-{j7!*^Ox?KaJbl_oVQrvJC4)I%<f+5sr-sc45cL z9>MUIw)9k?tp*rqLHq&Q(gmVD@1rM?VCHiWoXSjPuSd3Hj;PL<x)DObX9^eA=?>=% zBREz<4R4vrZ8XE09sprcO|=eEs1;VtZ=!Txo*8zHZmI!}P8!05a6=})@f-j0?$f6p zy=9qYcinr>WZABr8TL5ID^6TzNQ1qzO3u;;vZgT(yuf6&(+o_}+5psLN($g;eJXs? znsgqr1h4ev;b^3n-gqdx*bB6Z2lHDNP}8f5U=W5>qbTmh=Bp?Yq7Gcm4T*zWJr5Yn zUXdTMxRwk6(&fY!d8{PLBiHrW^<BnVVS`7g%`gx)#Dg`@LgXzOSeml<45+IOk?L-B z8;+P_z1MS*qgkP%eey?DF>H<%vQ&^6eY9tSd@QXTRn_ssU!3^xdOZfy?DD6bKSB_X zX7}+3shpy|H`_QZqz0`o{2e+NWsz&US-RbD=-Nr}yYe&S*&!`dM@8NZM^yVeZq%sr zi8t)Ix@nb!7Vs|HzSZ-|;X0MB-ZMwf)u}{2Ce5Zv!LNK=!7qZ_1cLRa@$~cs0JRM; z&iP6g{3c)t;RbW(vR{bd+p^qgxYuj?Q!LL|-J?aB%0DWbXc!Eq6YObSabi=o&mhw< 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 BNnQW| literal 0 HcmV?d00001 diff --git a/eslint/docs/src/assets/images/architecture/dependency.svg b/eslint/docs/src/assets/images/architecture/dependency.svg new file mode 100644 index 0000000..1609b53 --- /dev/null +++ b/eslint/docs/src/assets/images/architecture/dependency.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="522" preserveAspectRatio="none" style="width:439px;height:522px" width="439"><defs><filter height="300%" id="a" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2"/><feColorMatrix in="blurOut" result="blurOut2" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4" dy="4" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3"/></filter></defs><path fill="#FFF" filter="url(#a)" style="stroke:#000;stroke-width:1.5" d="M271 24v.07l8-.208 8 .202 8 .07 8-.372 8 .238-.025-.008 1.29 4.425 1.413 4.463 1.5 4.491 1.202 4.398 1.62 4.528v.553l9.5-1.183 9.5.432 9.5.63 9.5-.518 9.5.154 9.5-.068h-.032l.21 10.784.061 10.784.347 10.783.085 10.784.008 10.784L375 111v.255l-10.4.209-10.4.238-10.4-1.423-10.4 1.4-10.4-.975-10.4.83-10.4-1.029-10.4.427-10.4.81L271 111h-.049l.154-9.667.234-9.666.077-9.667-.42-9.667.291-9.666-.86-9.667.857-9.667.264-9.666L271 24z"/><path d="M271 46.297v.28l9.4-.833 9.4.81 9.4.276 9.4-1.484 9.4.95" fill="#FFF" style="stroke:#000;stroke-width:1.5"/><text font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="24" x="280" y="38.995">bin</text><path fill="#FFF" filter="url(#a)" style="stroke:#000;stroke-width:1.5" d="M22 135v.07l6.8-.208 6.8.202 6.8.07 6.8-.372L56 135l-.025-.008 1.29 4.425 1.413 4.464 1.5 4.49 1.202 4.397 1.62 4.529v.554l10.114-1.184 10.115.432 10.114.63 10.114-.518 10.114.154 10.115-.1 10.114.21 10.114.061 10.115.347 10.114.085 10.114.008 10.114-.424 10.115.209 10.114.238 10.114-1.423 10.115 1.4 10.114-.976 10.114.83 10.114-1.028 10.115.426 10.114.81 10.114-.79 10.115.154 10.114.234 10.114.077 10.114-.42 10.115.291 10.114-.86 10.114.857 10.115.264 10.114-.104 10.114.169 10.114-1.096 10.115-.17 10.114.653h-.621l.562 10.077-.137 10.077.877 10.078-.856 10.077-.168 10.077.571 10.077-.895 10.078.148 10.077 1.168 10.077-.213 10.077.299 10.077-1.057 10.078.641 10.077.271 10.077-1.062 10.077.376 10.078.222 10.077.526 10.077-.656 10.077.467 10.077-1.017 10.078-.123 10.077 1.18 10.077-1.22 10.077 1.226 10.078-.302 10.077-.475 10.077-.086 10.077.813 10.078-.758 10.077.89 10.077-1.144 10.077 1.17 10.078-.133 10.077L417 510v.245l-9.875-.198-9.875.68-9.875-.113-9.875-.445-9.875.1-9.875-.4-9.875.847-9.875-.561-9.875.018-9.875-.781-9.875.203-9.875.936-9.875-.101-9.875-.473-9.875-.28-9.875.104-9.875-.467-9.875 1.1-9.875.326-9.875-.214-9.875.169-9.875-.832-9.875.224-9.875-.475-9.875.672-9.875-.037-9.875.305-9.875-.782-9.875.096-9.875.577-9.875.124-9.875-1.08-9.875.32-9.875.342-9.875-.76-9.875.964-9.875-.095-9.875-.359-9.875.243L22 510h.729l-1.042-9.868.628-9.869-.03-9.868-.17-9.869.026-9.868-.027-9.869-.738-9.868.223-9.868-.06-9.869.525-9.868.024-9.869.074-9.868-.453-9.868.224-9.869-.053-9.868.697-9.869-.15-9.868-.912-9.869.412-9.868-.504-9.868.865-9.869.32-9.868-.063-9.869-.98-9.868.899-9.869-1.207-9.868.943-9.868-.5-9.869.397-9.868.143-9.869.232-9.868-1.192-9.869 1.195-9.868-.297-9.868.177-9.869.393-9.868-.742-9.869L22 135z"/><path d="M22 157.297v.093l8.2-.277 8.2.27 8.2.091 8.2-.494 8.2.317" fill="#FFF" style="stroke:#000;stroke-width:1.5"/><text font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="18" x="31" y="149.995">lib</text><path fill="#F8F8F8" filter="url(#a)" style="stroke:#000;stroke-width:1.5" d="M287 59v.21l10.286-.624 10.285.607 10.286.207 10.286-1.113 10.286.635 10.285-.348L359 59h-.128l.105 7.26-.207 7.259.415 7.26-.395 7.258.21 7.26v-.198l-10.286.63-10.285-.518-10.286.154-10.286-.1-10.286.21-10.285.061-10.286-.24h.195l.029-7.259.002-7.259-.141-7.26.07-7.259L287 59z"/><text font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="52" x="297" y="81.995">eslint.js</text><path fill="#F8F8F8" filter="url(#a)" style="stroke:#000;stroke-width:1.5" d="M258.5 170v.21l9.8-.624 9.8.607 9.8.207 9.8-1.113 9.8.713h-.026l-.116 7.26.014 7.259.105 7.26-.207 7.258.23 7.26v.554l-9.8-1.184-9.8.432-9.8.63-9.8-.518-9.8.086h.023l-.034-7.26.07-7.259.02-7.26.116-7.259L258.5 170z"/><text font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="29" x="268.5" y="192.995">cli.js</text><path fill="#F8F8F8" filter="url(#a)" style="stroke:#000;stroke-width:1.5" d="M130.5 170v.21l9.167-.624 9.166.607 9.167.207 9.167-1.113 9.166.635 9.167.078h-.142l.014 7.26.105 7.259-.208 7.26.416 7.258-.185 7.26v-.63l-9.167.432-9.166.63-9.167-.518-9.167.154-9.166-.1-9.167.032h.06l.02-7.26.115-7.259.029-7.26.002-7.259L130.5 170z"/><text font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="35" x="140.5" y="192.995">api.js</text><path fill="#F8F8F8" filter="url(#a)" style="stroke:#000;stroke-width:1.5" d="M343 170v.07l8-.208 8 .202 8 .07 8-.372 8 .238h-.026l-.116 7.26.014 7.259.105 7.26-.207 7.258.23 7.26v.184l-8-.394-8 .144-8 .21-8-.173-8 .029h.023l-.034-7.26.07-7.259.02-7.26.116-7.259L343 170z"/><text font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="20" x="353" y="192.995">init</text><path fill="#F8F8F8" filter="url(#a)" style="stroke:#000;stroke-width:1.5" d="M239.5 266v.21l9.667-.624 9.666.607 9.667.207 9.667-1.113 9.666.635 9.667-.349 9.667.043 9.666.316 9.667.068h-.23l.415 7.26-.395 7.259.144 7.26.21 7.259-.144 7.259v-.086l-9.667.154-9.666-.1-9.667.21-9.667.061-9.666.347-9.667.085-9.667.008-9.666-.425-9.667-.254h.155l.08-7.26-.475-7.259.466-7.26-.325-7.259.099-7.259z"/><text font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="67" x="249.5" y="288.995">cli-engine</text><path fill="#F8F8F8" filter="url(#a)" style="stroke:#000;stroke-width:1.5" d="M178 362v.21l10.8-.624 10.8.607 10.8.207 10.8-1.113L232 362h-.026l-.116 7.26.014 7.259.105 7.26-.208 7.259.231 7.259v.553l-10.8-1.183-10.8.432-10.8.63-10.8-.518-10.8.086h.023l-.034-7.26.07-7.259.02-7.26.116-7.259L178 362z"/><text font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="34" x="188" y="384.995">linter</text><path fill="#F8F8F8" filter="url(#a)" style="stroke:#000;stroke-width:1.5" d="M94 458v.21l9.818-.624 9.818.607 9.819.207 9.818-1.113 9.818.635 9.818-.349 9.818.043 9.819.316 9.818-.623 9.818 1.245L202 458h-.21l.144 7.26.21 7.259-.173 7.26.052 7.259-.023 7.259v-.032l-9.818.21-9.818.061-9.819.347-9.818.085-9.818.008-9.818-.425-9.818.21-9.819.238-9.818-1.423-9.818 1.4-9.818-.68h-.099l.277-7.258-.343-7.26.142-7.26.27-7.259L94 458z"/><text font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="88" x="104" y="480.995">source-code</text><path fill="#F8F8F8" filter="url(#a)" style="stroke:#000;stroke-width:1.5" d="M75 266v.21l10.222-.624 10.222.607 10.223.207 10.222-1.113 10.222.635 10.222-.349 10.223.043 10.222.316L167 266h-.23l.415 7.26-.395 7.259.144 7.26.21 7.259-.144 7.259v-.086l-10.222.154-10.222-.1-10.223.21-10.222.061-10.222.347-10.222.085-10.223.008-10.222-.425L75 302.297h.154l.08-7.26-.474-7.259.466-7.26-.325-7.259L75 266z"/><text font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="72" x="85" y="288.995">rule-tester</text><path fill="#F8F8F8" filter="url(#a)" style="stroke:#000;stroke-width:1.5" d="M292 458v.21l10.8-.624 10.8.607 10.8.207 10.8-1.113L346 458h-.026l-.116 7.26.014 7.259.105 7.26-.207 7.259.23 7.259v.553l-10.8-1.183-10.8.432-10.8.63-10.8-.518-10.8.086h.023l-.034-7.26.07-7.259.02-7.26.116-7.259L292 458z"/><text font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="34" x="302" y="480.995">rules</text><path d="M283 206.241h.28l-.832 10.843.81 10.844.275 10.843-1.484 10.844.951 10.843" fill="none" style="stroke:#383838;stroke-width:1;stroke-dasharray:7,7"/><path fill="#383838" style="stroke:#383838;stroke-width:1" d="m283 265.868.064.029.61-1.885.985-1.718.863-1.772.46-1.95 1.018-1.704-.018-.018-.883.717-.79.81-.725.875-.947.653-.637.963.13.13-1.079-1.079-.698-.698-.651-.651-.922-.922-.78-.78.02.01.77 1.786.864 1.828.819 1.808.905 1.847.622 1.721z"/><path d="m164.598 206.218.088.032.676 2.49 1.192 2.679 1.023 2.617.473 2.417 1.235 2.693-.032-.01.878 2.935 1.043 2.991 1.158 3.032.763 2.895 1.316 3.086.235.075.512 3.03 1.197 3.247 1.28 3.274.796 3.119 1.05 3.2.029.009.86 3.184.995 3.221.93 3.203 1.052 3.238L184 266l.29.072.595 2.389.409 2.342.682 2.41.695 2.414.288 2.313-.312-.07 1.16 2.585.133 2.352.914 2.53.108 2.346.77 2.497-.03-.007.867 2.536.17 2.39.583 2.476.616 2.483.368 2.43.181.036.29 2.394.6 2.454.099 2.357.847 2.503.35 2.405.24.043.768 4.572.888 4.592.335 4.495.74 4.566 1.1 4.63-.273-.043.87 3.94.564 3.89 1.01 3.962.248 3.84.701 3.912" fill="none" style="stroke:#383838;stroke-width:1;stroke-dasharray:7,7"/><path fill="#383838" style="stroke:#383838;stroke-width:1" d="m202.609 361.988.067.019.323-1.955.718-1.845.59-1.88.165-1.998.753-1.836-.021-.015-.766.84-.66.92-.588.972-.839.787-.486 1.047.11.148-1.145-.99-.825-.555-.785-.503-1.013-.811-.893-.65.019.013 1.03 1.643 1.12 1.698 1.075 1.672 1.157 1.723.894 1.556z"/><path d="m180.637 206.023.168.224 7.876 5.633 8.863 6.946 8.541 6.519 7.484 5.112 8.885 6.977 8.097 5.927 8.41 6.344 8.628 6.635 8.431 6.371" fill="none" style="stroke:#383838;stroke-width:1;stroke-dasharray:7,7"/><path fill="#383838" style="stroke:#383838;stroke-width:1" d="m260.109 265.786.061.034-1.14-1.822-.78-1.623-.898-1.688-1.282-1.901-.75-1.606-.026-.004.044 1.104.172 1.123.263 1.134-.047 1.091.387 1.153.026.183-1.176-.233-1.1.302-1.09.366-1.145-.012-1.116.187.005.022 1.912.41 1.935.51 1.924.463 1.945.555 1.876.252z"/><path d="m151.214 206.241.26.103-4.36 8.803-2.83 9.405-3.33 9.21-4.966 8.564-2.796 9.419-3.489 9.146" fill="none" style="stroke:#383838;stroke-width:1;stroke-dasharray:7,7"/><path fill="#383838" style="stroke:#383838;stroke-width:1" d="m127.743 265.868.05.05 1.257-1.53 1.546-1.238 1.452-1.333 1.143-1.646 1.57-1.213-.01-.023-1.084.344-1.031.465-.996.548-1.12.26-.946.663.17.074-.814-1.195-.319-.98-.259-.953-.61-1.107-.425-1.026.023.001.052 1.967.155 1.97.105 1.97.2 1.973-.109 1.959z"/><path d="m130.322 201.197.044.082-2.034.774-1.775 1.256-1.86 1.1-2.136.581-1.753 1.298-.018-.03-2.094 1.06-2.005 1.208-1.944 1.313-2.155.954-1.859 1.457.136.205-2.352.927-1.954 1.526-1.907 1.599-2.188 1.174-2.04 1.397.019.024-2.068 1.502-1.985 1.613-2.025 1.559-1.948 1.66-2.198 1.33.197.225-1.953 1.71-2.08 1.567-1.893 1.778-1.886 1.789-2.16 1.473-.231-.222-1.355 2.309-2.115 1.578-1.537 2.133-2.133 1.562-1.645 2.03-.024-.018-1.3 2.267-1.863 1.831-1.531 2.088-1.504 2.11-1.704 1.955.16.094-1.462 2.119-1.19 2.28-1.63 2.02-.974 2.406L57 266l.226.09-1.067 2.544-.954 2.588-1.477 2.38-1.094 2.532-.755 2.668-.27-.061-.35 2.67-.654 2.6-.215 2.7-.965 2.53-.52 2.63-.151-.011.05 2.669-.6 2.62-.138 2.654.314 2.69-.49 2.627.193.011.283 2.676-.319 2.642.435 2.684.27 2.675-.111 2.653-.207-.036.63 2.698.564 2.686.696 2.71.178 2.619.468 2.67.198.055.308 2.53.69 2.638 1.249 2.795.22 2.506 1.05 2.739.213.08.857 2.57.785 2.546.947 2.605 1.32 2.746.793 2.547-.121-.056 1.544 2.733.722 2.355 1.657 2.785 1.13 2.542.989 2.478.096.051 1.27 2.457 1.614 2.642 1.303 2.475 1.174 2.404 1.282 2.463.101.063 1.322 2.32 1.795 2.608 1.26 2.282 1.48 2.416 1.408 2.373-.224-.152 1.635 2.359 1.906 2.542 1.523 2.283 1.387 2.19 1.577 2.32-.116-.085 1.647 2.214 1.444 2.064 2.004 2.478 1.726 2.272 1.346 1.993.183.145 1.68 2.095 1.333 1.819 1.7 2.11 1.456 1.918 1.757 2.155.096.082 1.583 1.881 1.7 1.98 1.329 1.668 1.628 1.92 1.64 1.93.148.132 1.572 1.755 1.172 1.4 1.637 1.813 1.645 1.82 1.481 1.674-.198-.185 1.741 1.82 1.398 1.499 1.311 1.419 1.508 1.601 1.382 1.484" fill="none" style="stroke:#383838;stroke-width:1;stroke-dasharray:7,7"/><path fill="#383838" style="stroke:#383838;stroke-width:1" d="m130.215 457.947.066.024-.873-1.921-.488-1.78-.613-1.826-1.026-1.977-.454-1.768h-.026l-.135 1.129-.003 1.132.087 1.132-.226 1.128.212 1.135.003.185-1.137-.413-1.13.126-1.127.192-1.134-.19-1.13.01.008.021 1.814.705 1.853.802 1.835.755 1.87.843 1.754.556z"/><path d="m364.479 206.028.093.003-.218 1.941.329 1.959.15 1.952-.435 1.935.376 1.96h-.035l-.18 2.236-.006 2.238.115 2.24-.301 2.235.282 2.241.245.015-.673 2.414.043 2.458.13 2.463-.377 2.432-.11 2.449.03.003-.357 2.57-.219 2.585-.284 2.578-.16 2.593-.57 2.543.293.058-.51 2.623-.7 2.587-.423 2.641-.41 2.643-.821 2.564-.308-.09-.16 2.766-1.172 2.47-.402 2.695-1.196 2.464-.545 2.654-.029-.012-.706 2.62-1.362 2.345-.976 2.507-.943 2.521-1.177 2.423.159.094-1.52 2.195-1.25 2.356-1.688 2.095-1.032 2.484L344 302l.188.155-2.17 2.563-2.075 2.639-2.51 2.282-2.192 2.544-1.91 2.777-.189-.202-2.301 2.499-2.514 2.271-2.205 2.601-2.732 2.038-2.419 2.373-.092-.122-2.565 2.255-2.957 1.734-2.679 2.104-2.405 2.465-2.892 1.822.103.164-2.801 1.91-3.121 1.4-2.72 2.04-2.808 1.9-3.011 1.576-.099-.185-2.855 1.704-2.887 1.643-2.824 1.762-3.07 1.299-2.932 1.557.085.187-3.09.914-2.926 1.276-2.685 1.802-3.128.832-2.77 1.615.083.21-2.83.98-2.858.91-2.794 1.07-2.647 1.44-2.856.916-.043-.125-2.435 1.27-2.733.417-2.394 1.388-2.585.841-2.636.694" fill="none" style="stroke:#383838;stroke-width:1;stroke-dasharray:7,7"/><path fill="#383838" style="stroke:#383838;stroke-width:1" d="m232.067 371.819.008.07 1.935.007 1.98.415 1.966.282 1.918-.155 1.984.45-.012-.023-1.06-.622-.998-.505-.958-.425-1.1-.703-.9-.314.163.085.168-1.187.647-.94.704-.909.365-1.084.544-.993.015.017-1.493 1.285-1.424 1.363-1.457 1.325-1.394 1.397-1.601 1.164z"/><path d="m348.327 206.241.213.182-7.382 7.39-6.132 8.455-6.54 8.107-7.878 6.968-6.103 8.48-7.103 7.628-6.316 8.298" fill="none" style="stroke:#383838;stroke-width:1;stroke-dasharray:7,7"/><path fill="#383838" style="stroke:#383838;stroke-width:1" d="m297.58 265.868.03.063 1.686-1.04 1.864-.67 1.805-.79 1.615-1.186 1.88-.638-.003-.026-1.137-.025-1.126.105-1.12.195-1.144-.116-1.11.32.185.015-.484-1.16.053-1.115.118-1.111-.263-1.142-.062-1.125.022.006-.59 1.88-.49 1.91-.538 1.894-.446 1.922-.745 1.834z"/><path d="m363.642 206.316.093.001-.22 3.917.329 3.924.15 3.922-.437 3.913.375 3.926h-.034l-.162 2.314.012 2.314.134 2.315-.284 2.314.3 2.316.247.004-.57 2.468.15 2.48.236 2.482-.274 2.473-.005 2.478h.03l-.134 2.583.003 2.588-.063 2.584.064 2.59-.35 2.575.298.016-.143 2.636-.334 2.625-.054 2.641-.04 2.642-.458 2.618-.32-.026.408 2.683-.644 2.597.156 2.661-.668 2.596.007 2.65-.03-.004.07 2.613-.638 2.534-.22 2.58-.185 2.585L360 302l.183.026-.476 2.05-.163 2.094-.67 2.023.086 2.129-.416 2.058.24.038-.378 2.096-.26 2.114-.815 2.026-.407 2.09-.047 2.148-.272-.048-.125 2.161-.43 2.107.014 2.185-.746 2.052-.293 2.13-.15-.028-.153 2.169-.793 2.047-.338 2.134.108 2.218-.686 2.067.19.04-.75 4.237-1.338 4.114-.6 4.268-.762 4.235-1.136 4.156-.204-.047-.782 4.13-.848 4.113-.717 4.144-1.228 4.026-.943 4.091.2.05-1.407 3.775-1.021 3.87-.459 4.01-1.494 3.753-.66 3.96.22.058-1.08 3.552-1.155 3.532-.987 3.576-.602 3.679-1.147 3.534-.128-.036-.51 3.306-1.381 3.062-.39 3.34-.949 3.182-1.099 3.142.105.03-.875 2.699-.5 2.807-.84 2.709-.98 2.667-.863 2.702" fill="none" style="stroke:#383838;stroke-width:1;stroke-dasharray:7,7"/><path fill="#383838" style="stroke:#383838;stroke-width:1" d="m324.406 457.54.053.046 1.123-1.632 1.435-1.365 1.333-1.451 1-1.738 1.461-1.341-.012-.023-1.05.435-.99.551-.945.63-1.094.356-.885.74.162.088-.885-1.183-.411-.926-.354-.896-.69-1.077-.512-.982.022.003.22 1.95.321 1.962.272 1.956.367 1.969.059 1.928z"/><path d="m268.694 302.241.216.179-7.221 7.398-5.957 8.447-6.368 8.105-7.722 6.983-5.928 8.47-6.938 7.633-6.142 8.293" fill="none" style="stroke:#383838;stroke-width:1;stroke-dasharray:7,7"/><path fill="#383838" style="stroke:#383838;stroke-width:1" d="m219.216 361.868.031.063 1.673-1.061 1.855-.693 1.796-.812 1.6-1.207 1.87-.661-.002-.026-1.137-.01-1.125.118-1.117.21-1.146-.103-1.105.335.184.017-.498-1.163.04-1.114.103-1.107-.276-1.142-.076-1.124.022.006-.566 1.887-.467 1.915-.514 1.902-.423 1.927-.722 1.843z"/><path d="m136.407 302.241.209.187 6.465 7.375 7.69 8.47 7.292 8.112 5.98 6.941 7.718 8.494 6.739 7.62 7.51 8.309" fill="none" style="stroke:#383838;stroke-width:1;stroke-dasharray:7,7"/><path fill="#383838" style="stroke:#383838;stroke-width:1" d="m189.691 361.868.067.021-.801-1.939-.41-1.813-.537-1.854-.956-1.989-.377-1.802-.025-.002-.18 1.123-.05 1.13.042 1.136-.27 1.118.166 1.142.01.185-1.152-.458-1.121.08-1.118.147-1.14-.236-1.127-.035.009.02 1.782.78 1.825.873 1.804.827 1.843.915 1.716.631z"/><path d="m225.645 398.023.178.216 7.08 5.633 8.127 6.9 7.785 6.488 6.666 5.13 8.15 6.93 7.314 5.916 7.647 6.32 7.878 6.599 7.668 6.345" fill="none" style="stroke:#383838;stroke-width:1;stroke-dasharray:7,7"/><path fill="#383838" style="stroke:#383838;stroke-width:1" d="m298.124 457.786.063.032-1.067-1.856-.699-1.671-.818-1.732-1.212-1.928-.667-1.656-.026-.002-.007 1.115.122 1.127.213 1.136-.098 1.107.338 1.148.017.184-1.163-.285-1.113.252-1.106.318-1.142-.064-1.124.137.006.022 1.889.495 1.917.596 1.903.547 1.928.639 1.846.34z"/><path d="m194.545 398.241.24.145-6.279 8.749-4.874 9.6-5.33 9.322-6.836 8.41-4.842 9.62-5.478 9.234" fill="none" style="stroke:#383838;stroke-width:1;stroke-dasharray:7,7"/><path fill="#383838" style="stroke:#383838;stroke-width:1" d="m158.388 457.868.04.058 1.499-1.295 1.733-.958 1.656-1.068 1.406-1.429 1.754-.928-.007-.025-1.126.156-1.096.283-1.074.37-1.148.068-1.044.493.18.044-.653-1.193-.13-1.064-.064-1.05-.437-1.14-.242-1.091.023.003-.283 1.95-.18 1.962-.229 1.957-.135 1.968-.443 1.93z"/><path d="m316.75 95.031.263.096-4.448 9.704-2.905 10.27-3.408 10.084-5.06 9.479-2.87 10.282-4.103 9.83-3.132 10.186" fill="none" style="stroke:#383838;stroke-width:1;stroke-dasharray:7,7"/><path fill="#383838" style="stroke:#383838;stroke-width:1" d="m289.338 169.729.05.049 1.222-1.56 1.517-1.272 1.42-1.367 1.105-1.672 1.542-1.249-.01-.023-1.076.37-1.021.488-.983.57-1.113.288-.93.684.167.078-.833-1.193-.345-.966-.285-.938-.632-1.1-.45-1.014.024.001.097 1.964.2 1.97.152 1.967.246 1.972-.064 1.953z"/><path d="m329.25 95.031.263.096 2.885 9.704 4.426 10.27 3.925 10.084 2.273 9.479 4.461 10.282 3.23 9.83 4.2 10.186" fill="none" style="stroke:#383838;stroke-width:1;stroke-dasharray:7,7"/><path fill="#383838" style="stroke:#383838;stroke-width:1" d="m356.662 169.729.07.005-.077-1.98.333-1.952.2-1.96-.24-1.99.368-1.95-.023-.011-.581.978-.462 1.032-.38 1.071-.664.94-.267 1.123.078.168-1.193-.834-.966-.344-.938-.285-1.1-.632-1.014-.45.016.016 1.348 1.391 1.421 1.463 1.386 1.428 1.454 1.495 1.231 1.278z"/></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/code-path-analysis/example-dowhilestatement.svg b/eslint/docs/src/assets/images/code-path-analysis/example-dowhilestatement.svg new file mode 100644 index 0000000..f81d361 --- /dev/null +++ b/eslint/docs/src/assets/images/code-path-analysis/example-dowhilestatement.svg @@ -0,0 +1 @@ +<svg width="167pt" height="422pt" viewBox="0 0 167 422" xmlns="http://www.w3.org/2000/svg"><g class="graph"><circle stroke="#000" cx="74" cy="-405" r="9" class="node" transform="translate(4 418)"/><g class="node"><path fill="#fff" stroke="#fff" d="M127.479 58.398H28.521l-12 12v17.204l12 12h98.958l12-12V70.398l-12-12z"/><path fill="#fff" stroke="#fff" d="M28.521 58.398c-6 0-12 6-12 12m0 17.204c0 6 6 12 12 12m98.958 0c6 0 12-6 12-12m0-17.204c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M127.479 58.398H28.521m0 0c-6 0-12 6-12 12m0 0v17.204m0 0c0 6 6 12 12 12m0 0h98.958m0 0c6 0 12-6 12-12m0 0V70.398m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="74" y="-343.2" font-family="Times,serif" font-size="14" transform="translate(4 418)">Program</text><text text-anchor="middle" x="74" y="-326.4" font-family="Times,serif" font-size="14" transform="translate(4 418)">DoWhileStatement</text></g><g class="edge" stroke="#000"><path fill="none" d="M78 22.106V48.06"/><path d="m81.5 48.158-3.5 10-3.5-10h7z"/></g><g class="node" stroke="#000" transform="translate(4 418)"><circle cx="74" cy="-13" r="9"/><circle fill="none" cx="74" cy="-13" r="13"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M133.147 135.599H22.853l-12 12v118.802l12 12h110.294l12-12V147.599l-12-12z"/><path fill="#fff" stroke="#fff" d="M22.853 135.599c-6 0-12 6-12 12m0 118.802c0 6 6 12 12 12m110.294 0c6 0 12-6 12-12m0-118.802c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M133.147 135.599H22.853m0 0c-6 0-12 6-12 12m0 0v118.802m0 0c0 6 6 12 12 12m0 0h110.294m0 0c6 0 12-6 12-12m0 0V147.599m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="74" y="-265.6" font-family="Times,serif" font-size="14" transform="translate(4 418)">BlockStatement</text><text text-anchor="middle" x="74" y="-248.8" font-family="Times,serif" font-size="14" transform="translate(4 418)">ExpressionStatement</text><text text-anchor="middle" x="74" y="-232" font-family="Times,serif" font-size="14" transform="translate(4 418)">CallExpression</text><text text-anchor="middle" x="74" y="-215.2" font-family="Times,serif" font-size="14" transform="translate(4 418)">Identifier (foo)</text><text text-anchor="middle" x="74" y="-198.4" font-family="Times,serif" font-size="14" transform="translate(4 418)">ExpressionStatement</text><text text-anchor="middle" x="74" y="-181.6" font-family="Times,serif" font-size="14" transform="translate(4 418)">CallExpression</text><text text-anchor="middle" x="74" y="-164.8" font-family="Times,serif" font-size="14" transform="translate(4 418)">Identifier (bar)</text><text text-anchor="middle" x="74" y="-148" font-family="Times,serif" font-size="14" transform="translate(4 418)">Identifier (a)</text></g><g class="edge" stroke="#000"><path fill="none" d="M78 99.687v25.858"/><path d="m81.5 125.632-3.5 10-3.5-10h7z"/></g><g class="edge" stroke="#000"><path fill="none" d="M145.337 185.005C155.84 188.293 163 195.625 163 207c0 7.643-3.232 13.46-8.539 17.452"/><path d="m155.849 227.671-10.512 1.324 7.392-7.591 3.12 6.267z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M140.144 314.398H15.856l-12 12v17.204l12 12h124.288l12-12v-17.204l-12-12z"/><path fill="#fff" stroke="#fff" d="M15.856 314.398c-6 0-12 6-12 12m0 17.204c0 6 6 12 12 12m124.288 0c6 0 12-6 12-12m0-17.204c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M140.144 314.398H15.856m0 0c-6 0-12 6-12 12m0 0v17.204m0 0c0 6 6 12 12 12m0 0h124.288m0 0c6 0 12-6 12-12m0 0v-17.204m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="74" y="-87.2" font-family="Times,serif" font-size="14" transform="translate(4 418)">DoWhileStatement:exit</text><text text-anchor="middle" x="74" y="-70.4" font-family="Times,serif" font-size="14" transform="translate(4 418)">Program:exit</text></g><g class="edge" stroke="#000"><path fill="none" d="M78 278.368v25.821"/><path d="m81.5 304.274-3.5 10-3.5-10h7z"/></g><g class="edge" stroke="#000"><path fill="none" d="M78 355.668v25.812"/><path d="m81.5 381.651-3.5 10-3.5-10h7z"/></g></g></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/code-path-analysis/example-forinstatement.svg b/eslint/docs/src/assets/images/code-path-analysis/example-forinstatement.svg new file mode 100644 index 0000000..a6bc754 --- /dev/null +++ b/eslint/docs/src/assets/images/code-path-analysis/example-forinstatement.svg @@ -0,0 +1 @@ +<svg width="185pt" height="538pt" viewBox="0 0 185 538" xmlns="http://www.w3.org/2000/svg"><g class="graph"><circle stroke="#000" cx="114" cy="-521" r="9" class="node" transform="translate(4 534)"/><g class="node"><path fill="#fff" stroke="#fff" d="M157.319 58.398H78.681l-12 12v17.204l12 12h78.638l12-12V70.398l-12-12zm-78.639 0c-6 0-12 6-12 12m0 17.204c0 6 6 12 12 12"/><path fill="#fff" stroke="#fff" d="M157.319 99.602c6 0 12-6 12-12m0-17.204c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M157.319 58.398H78.681m-.001 0c-6 0-12 6-12 12m0 0v17.204m0 0c0 6 6 12 12 12m0 0h78.639m0 0c6 0 12-6 12-12m0 0V70.398m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="114" y="-459.2" font-family="Times,serif" font-size="14" transform="translate(4 534)">Program</text><text text-anchor="middle" x="114" y="-442.4" font-family="Times,serif" font-size="14" transform="translate(4 534)">ForInStatement</text></g><g class="edge" stroke="#000"><path fill="none" d="M118 22.106V48.06"/><path d="m121.5 48.158-3.5 10-3.5-10h7z"/></g><g class="node" stroke="#000" transform="translate(4 534)"><circle cx="114" cy="-13" r="9"/><circle fill="none" cx="114" cy="-13" r="13"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M155.097 136H80.903l-12 12v12l12 12h74.194l12-12v-12l-12-12z"/><path fill="#fff" stroke="#fff" d="M80.903 136c-6 0-12 6-12 12m0 12c0 6 6 12 12 12m74.194 0c6 0 12-6 12-12m0-12c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M155.097 136H80.903m0 0c-6 0-12 6-12 12m0 0v12m0 0c0 6 6 12 12 12m0 0h74.194m0 0c6 0 12-6 12-12m0 0v-12m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="114" y="-375.8" font-family="Times,serif" font-size="14" transform="translate(4 534)">Identifier (obj)</text></g><g class="edge" stroke="#000"><path fill="none" d="M118 99.948v25.416"/><path d="m121.5 125.561-3.5 10-3.5-10h7z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M123.617 207.599H18.383l-12 12v34.802l12 12h105.234l12-12v-34.802l-12-12z"/><path fill="#fff" stroke="#fff" d="M18.383 207.599c-6 0-12 6-12 12m0 34.802c0 6 6 12 12 12m105.234 0c6 0 12-6 12-12m0-34.802c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M123.617 207.599H18.383m0 0c-6 0-12 6-12 12m0 0v34.802m0 0c0 6 6 12 12 12m0 0h105.234m0 0c6 0 12-6 12-12m0 0v-34.802m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="67" y="-309.6" font-family="Times,serif" font-size="14" transform="translate(4 534)">VariableDeclaration</text><text text-anchor="middle" x="67" y="-292.8" font-family="Times,serif" font-size="14" transform="translate(4 534)">VariableDeclarator</text><text text-anchor="middle" x="67" y="-276" font-family="Times,serif" font-size="14" transform="translate(4 534)">Identifier (key)</text></g><g class="edge" stroke="#000"><path fill="none" d="m108.033 172.178-15.499 26.71"/><path d="m95.472 200.799-8.046 6.892 1.992-10.406 6.054 3.514z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M169.484 430.398H66.516l-12 12v17.204l12 12h102.968l12-12v-17.204l-12-12z"/><path fill="#fff" stroke="#fff" d="M66.516 430.398c-6 0-12 6-12 12m0 17.204c0 6 6 12 12 12m102.968 0c6 0 12-6 12-12m0-17.204c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M169.484 430.398H66.516m0 0c-6 0-12 6-12 12m0 0v17.204m0 0c0 6 6 12 12 12m0 0h102.968m0 0c6 0 12-6 12-12m0 0v-17.204m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="114" y="-87.2" font-family="Times,serif" font-size="14" transform="translate(4 534)">ForInStatement:exit</text><text text-anchor="middle" x="114" y="-70.4" font-family="Times,serif" font-size="14" transform="translate(4 534)">Program:exit</text></g><g class="edge" stroke="#000"><path fill="none" d="M128.891 172.427C134.533 182.434 140.88 195.469 144 208c19.973 80.229 22.566 105.671 3 186-2.283 9.374-6.431 18.931-10.889 27.433"/><path d="m139.155 423.16-7.93 7.026 1.818-10.437 6.112 3.411z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M126.147 302H15.853l-12 12v68l12 12h110.294l12-12v-68l-12-12z"/><path fill="#fff" stroke="#fff" d="M15.853 302c-6 0-12 6-12 12m0 68c0 6 6 12 12 12m110.294 0c6 0 12-6 12-12m0-68c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M126.147 302H15.853m0 0c-6 0-12 6-12 12m0 0v68m0 0c0 6 6 12 12 12m0 0h110.294m0 0c6 0 12-6 12-12m0 0v-68m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="67" y="-215.4" font-family="Times,serif" font-size="14" transform="translate(4 534)">BlockStatement</text><text text-anchor="middle" x="67" y="-198.6" font-family="Times,serif" font-size="14" transform="translate(4 534)">ExpressionStatement</text><text text-anchor="middle" x="67" y="-181.8" font-family="Times,serif" font-size="14" transform="translate(4 534)">CallExpression</text><text text-anchor="middle" x="67" y="-165" font-family="Times,serif" font-size="14" transform="translate(4 534)">Identifier (foo)</text><text text-anchor="middle" x="67" y="-148.2" font-family="Times,serif" font-size="14" transform="translate(4 534)">Identifier (key)</text></g><g class="edge" stroke="#000"><path fill="none" d="M64.994 266.354c-.48 7.798-.728 16.532-.743 25.295"/><path d="m67.753 291.866-3.413 10.03-3.587-9.969 7-.061z"/></g><g class="edge" stroke="#000"><path fill="none" d="M77.66 301.896c.163-8.46.104-17.23-.178-25.464"/><path d="m73.982 276.508 3.024-10.154 3.968 9.823-6.992.331z"/></g><g class="edge" stroke="#000"><path fill="none" d="m92.026 394.183 12.419 26.689"/><path d="m107.718 419.608 1.045 10.543-7.392-7.59 6.347-2.953z"/></g><g class="edge" stroke="#000"><path fill="none" d="M118 471.668v25.812"/><path d="m121.5 497.651-3.5 10-3.5-10h7z"/></g></g></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/code-path-analysis/example-forstatement-for-ever.svg b/eslint/docs/src/assets/images/code-path-analysis/example-forstatement-for-ever.svg new file mode 100644 index 0000000..4d334ca --- /dev/null +++ b/eslint/docs/src/assets/images/code-path-analysis/example-forstatement-for-ever.svg @@ -0,0 +1 @@ +<svg width="160pt" height="288" viewBox="0 0 160 216" xmlns="http://www.w3.org/2000/svg"><g class="graph"><circle stroke="#000" cx="67" cy="-199" r="9" class="node" transform="translate(4 212)"/><g class="node"><path fill="#fff" stroke="#fff" d="M104.573 58.398H37.427l-12 12v17.204l12 12h67.146l12-12V70.398l-12-12z"/><path fill="#fff" stroke="#fff" d="M37.427 58.398c-6 0-12 6-12 12m0 17.204c0 6 6 12 12 12m67.146 0c6 0 12-6 12-12m0-17.204c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M104.573 58.398H37.427m0 0c-6 0-12 6-12 12m0 0v17.204m0 0c0 6 6 12 12 12m0 0h67.146m0 0c6 0 12-6 12-12m0 0V70.398m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="67" y="-137.2" font-family="Times,serif" font-size="14" transform="translate(4 212)">Program</text><text text-anchor="middle" x="67" y="-120.4" font-family="Times,serif" font-size="14" transform="translate(4 212)">ForStatement</text></g><g class="edge" stroke="#000"><path fill="none" d="M71 22.106V48.06"/><path d="m74.5 48.158-3.5 10-3.5-10h7z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M126.147 136.3H15.853l-12 12v51.4l12 12h110.294l12-12v-51.4l-12-12z"/><path fill="#fff" stroke="#fff" d="M15.853 136.3c-6 0-12 6-12 12m0 51.4c0 6 6 12 12 12m110.294 0c6 0 12-6 12-12m0-51.4c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M126.147 136.3H15.853m0 0c-6 0-12 6-12 12m0 0v51.4m0 0c0 6 6 12 12 12m0 0h110.294m0 0c6 0 12-6 12-12m0 0v-51.4m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="67" y="-59" font-family="Times,serif" font-size="14" transform="translate(4 212)">BlockStatement</text><text text-anchor="middle" x="67" y="-42.2" font-family="Times,serif" font-size="14" transform="translate(4 212)">ExpressionStatement</text><text text-anchor="middle" x="67" y="-25.4" font-family="Times,serif" font-size="14" transform="translate(4 212)">CallExpression</text><text text-anchor="middle" x="67" y="-8.6" font-family="Times,serif" font-size="14" transform="translate(4 212)">Identifier (foo)</text></g><g class="edge" stroke="#000"><path fill="none" d="M71 99.723v26.297"/><path d="m74.5 126.035-3.5 10-3.5-10h7z"/></g><g class="edge" stroke="#000"><path fill="none" d="M138.337 157.848C148.84 160.262 156 165.647 156 174c0 5.482-3.084 9.685-8.172 12.61"/><path d="m148.93 189.934-10.593.218 8.145-6.776 2.448 6.558z"/></g></g></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/code-path-analysis/example-forstatement.svg b/eslint/docs/src/assets/images/code-path-analysis/example-forstatement.svg new file mode 100644 index 0000000..aa0ccf0 --- /dev/null +++ b/eslint/docs/src/assets/images/code-path-analysis/example-forstatement.svg @@ -0,0 +1 @@ +<svg width="350pt" height="646pt" viewBox="0 0 350 646" xmlns="http://www.w3.org/2000/svg"><g class="graph"><circle stroke="#000" cx="174" cy="-629" r="9" class="node" transform="translate(4 642)"/><g class="node"><path fill="#fff" stroke="#fff" d="M230.617 58.7H125.383l-12 12v84.6l12 12h105.234l12-12V70.7l-12-12z"/><path fill="#fff" stroke="#fff" d="M125.383 58.7c-6 0-12 6-12 12m0 84.6c0 6 6 12 12 12m105.234 0c6 0 12-6 12-12m0-84.6c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M230.617 58.7H125.383m0 0c-6 0-12 6-12 12m0 0v84.6m0 0c0 6 6 12 12 12m0 0h105.234m0 0c6 0 12-6 12-12m0 0V70.7m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="174" y="-566.8" font-family="Times,serif" font-size="14" transform="translate(4 642)">Program</text><text text-anchor="middle" x="174" y="-550" font-family="Times,serif" font-size="14" transform="translate(4 642)">ForStatement</text><text text-anchor="middle" x="174" y="-533.2" font-family="Times,serif" font-size="14" transform="translate(4 642)">VariableDeclaration</text><text text-anchor="middle" x="174" y="-516.4" font-family="Times,serif" font-size="14" transform="translate(4 642)">VariableDeclarator</text><text text-anchor="middle" x="174" y="-499.6" font-family="Times,serif" font-size="14" transform="translate(4 642)">Identifier (i)</text><text text-anchor="middle" x="174" y="-482.8" font-family="Times,serif" font-size="14" transform="translate(4 642)">Literal (0)</text></g><g class="edge" stroke="#000"><path fill="none" d="M178 22.02v26.167"/><path d="m181.5 48.414-3.5 10-3.5-10h7z"/></g><g class="node" stroke="#000" transform="translate(4 642)"><circle cx="58" cy="-13" r="9"/><circle fill="none" cx="58" cy="-13" r="13"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M224.233 203.599h-92.466l-12 12v34.802l12 12h92.466l12-12v-34.802l-12-12zm-92.466 0c-6 0-12 6-12 12m0 34.802c0 6 6 12 12 12"/><path fill="#fff" stroke="#fff" d="M224.233 262.401c6 0 12-6 12-12m0-34.802c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M224.233 203.599h-92.466m0 0c-6 0-12 6-12 12m0 0v34.802m0 0c0 6 6 12 12 12m0 0h92.466m0 0c6 0 12-6 12-12m0 0v-34.802m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="174" y="-421.6" font-family="Times,serif" font-size="14" transform="translate(4 642)">BinaryExpression</text><text text-anchor="middle" x="174" y="-404.8" font-family="Times,serif" font-size="14" transform="translate(4 642)">Identifier (i)</text><text text-anchor="middle" x="174" y="-388" font-family="Times,serif" font-size="14" transform="translate(4 642)">Literal (10)</text></g><g class="edge" stroke="#000"><path fill="none" d="M178 167.476v25.952"/><path d="m181.5 193.548-3.5 10-3.5-10h7z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M233.147 298.7H122.853l-12 12v84.6l12 12h110.294l12-12v-84.6l-12-12z"/><path fill="#fff" stroke="#fff" d="M122.853 298.7c-6 0-12 6-12 12m0 84.6c0 6 6 12 12 12m110.294 0c6 0 12-6 12-12m0-84.6c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M233.147 298.7H122.853m0 0c-6 0-12 6-12 12m0 0v84.6m0 0c0 6 6 12 12 12m0 0h110.294m0 0c6 0 12-6 12-12m0 0v-84.6m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="174" y="-326.8" font-family="Times,serif" font-size="14" transform="translate(4 642)">BlockStatement</text><text text-anchor="middle" x="174" y="-310" font-family="Times,serif" font-size="14" transform="translate(4 642)">ExpressionStatement</text><text text-anchor="middle" x="174" y="-293.2" font-family="Times,serif" font-size="14" transform="translate(4 642)">CallExpression</text><text text-anchor="middle" x="174" y="-276.4" font-family="Times,serif" font-size="14" transform="translate(4 642)">Identifier (foo)</text><text text-anchor="middle" x="174" y="-259.6" font-family="Times,serif" font-size="14" transform="translate(4 642)">IfStatement</text><text text-anchor="middle" x="174" y="-242.8" font-family="Times,serif" font-size="14" transform="translate(4 642)">Identifier (b)</text></g><g class="edge" stroke="#000"><path fill="none" d="M178 262.264v26.278"/><path d="m181.5 288.546-3.5 10-3.5-10h7z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M108.239 538.398H15.761l-12 12v17.204l12 12h92.478l12-12v-17.204l-12-12z"/><path fill="#fff" stroke="#fff" d="M15.761 538.398c-6 0-12 6-12 12m0 17.204c0 6 6 12 12 12m92.478 0c6 0 12-6 12-12m0-17.204c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M108.239 538.398H15.761m0 0c-6 0-12 6-12 12m0 0v17.204m0 0c0 6 6 12 12 12m0 0h92.478m0 0c6 0 12-6 12-12m0 0v-17.204m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="58" y="-87.2" font-family="Times,serif" font-size="14" transform="translate(4 642)">ForStatement:exit</text><text text-anchor="middle" x="58" y="-70.4" font-family="Times,serif" font-size="14" transform="translate(4 642)">Program:exit</text></g><g class="edge" stroke="#000"><path fill="none" d="M137.184 262.461C124.713 272.608 111.737 284.819 102 298c-41.888 56.703-47.94 76.919-62 146-5.141 25.26-4.797 32.672 0 58 1.704 8.999 4.822 18.404 8.185 26.88"/><path d="m51.508 527.751.668 10.573-7.116-7.849 6.448-2.724z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M142.572 452.398H61.428l-12 12v17.204l12 12h81.144l12-12v-17.204l-12-12z"/><path fill="#fff" stroke="#fff" d="M61.428 452.398c-6 0-12 6-12 12m0 17.204c0 6 6 12 12 12m81.144 0c6 0 12-6 12-12m0-17.204c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M142.572 452.398H61.428m0 0c-6 0-12 6-12 12m0 0v17.204m0 0c0 6 6 12 12 12m0 0h81.144m0 0c6 0 12-6 12-12m0 0v-17.204m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="98" y="-173.2" font-family="Times,serif" font-size="14" transform="translate(4 642)">BlockStatement</text><text text-anchor="middle" x="98" y="-156.4" font-family="Times,serif" font-size="14" transform="translate(4 642)">BreakStatement</text></g><g class="edge" stroke="#000"><path fill="none" d="m143.558 407.476-23.304 36.182"/><path d="m123.046 445.787-8.357 6.512 2.472-10.302 5.885 3.79z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M295.147 443.599H184.853l-12 12v34.802l12 12h110.294l12-12v-34.802l-12-12z"/><path fill="#fff" stroke="#fff" d="M184.853 443.599c-6 0-12 6-12 12m0 34.802c0 6 6 12 12 12m110.294 0c6 0 12-6 12-12m0-34.802c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M295.147 443.599H184.853m0 0c-6 0-12 6-12 12m0 0v34.802m0 0c0 6 6 12 12 12m0 0h110.294m0 0c6 0 12-6 12-12m0 0v-34.802m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="236" y="-181.6" font-family="Times,serif" font-size="14" transform="translate(4 642)">ExpressionStatement</text><text text-anchor="middle" x="236" y="-164.8" font-family="Times,serif" font-size="14" transform="translate(4 642)">CallExpression</text><text text-anchor="middle" x="236" y="-148" font-family="Times,serif" font-size="14" transform="translate(4 642)">Identifier (bar)</text></g><g class="edge" stroke="#000"><path fill="none" d="m206.098 407.476 14.215 27.054"/><path d="m223.498 433.068 1.553 10.48-7.75-7.224 6.197-3.256z"/></g><g class="edge" stroke="#000"><path fill="none" d="M92.52 493.907c-4.98 10.461-11.18 23.478-16.687 35.044"/><path d="m78.87 530.712-7.459 7.524 1.14-10.533 6.32 3.009z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M333.977 538.398h-93.954l-12 12v17.204l12 12h93.954l12-12v-17.204l-12-12z"/><path fill="#fff" stroke="#fff" d="M240.023 538.398c-6 0-12 6-12 12m0 17.204c0 6 6 12 12 12m93.954 0c6 0 12-6 12-12m0-17.204c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M333.977 538.398h-93.954m0 0c-6 0-12 6-12 12m0 0v17.204m0 0c0 6 6 12 12 12m0 0h93.954m0 0c6 0 12-6 12-12m0 0v-17.204m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="283" y="-87.2" font-family="Times,serif" font-size="14" transform="translate(4 642)">UpdateExpression</text><text text-anchor="middle" x="283" y="-70.4" font-family="Times,serif" font-size="14" transform="translate(4 642)">Identifier (i)</text></g><g class="edge" stroke="#000"><path fill="none" d="m255.912 502.439 15.197 27.161"/><path d="m274.167 527.896 1.828 10.436-7.937-7.018 6.109-3.418z"/></g><g class="edge" stroke="#000"><path fill="none" d="M300.225 538.186C306.324 527.868 312.891 514.765 316 502c6.1-25.046 5.141-32.74 0-58-14.06-69.081-20.112-89.297-62-146-7.683-10.4-17.383-20.197-27.26-28.853"/><path d="m224.202 271.585-5.386-9.124 9.9 3.774-4.514 5.35z"/></g><g class="edge" stroke="#000"><path fill="none" d="M62 579.668v25.812"/><path d="m65.5 605.651-3.5 10-3.5-10h7z"/></g></g></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/code-path-analysis/example-hello-world.svg b/eslint/docs/src/assets/images/code-path-analysis/example-hello-world.svg new file mode 100644 index 0000000..fc28d1f --- /dev/null +++ b/eslint/docs/src/assets/images/code-path-analysis/example-hello-world.svg @@ -0,0 +1 @@ +<svg width="146pt" height="250pt" viewBox="0 0 146 250" xmlns="http://www.w3.org/2000/svg"><g class="graph"><circle stroke="#000" cx="69" cy="-233" r="9" class="node" transform="translate(4 246)"/><g class="node"><path fill="#fff" stroke="#fff" d="M130.042 58.399H15.958l-12 12v101.202l12 12h114.084l12-12V70.399l-12-12z"/><path fill="#fff" stroke="#fff" d="M15.958 58.399c-6 0-12 6-12 12m0 101.201c0 6 6 12 12 12m114.084 0c6 0 12-6 12-12m0-101.201c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M130.042 58.399H15.958m0 0c-6 0-12 6-12 12m0 0v101.202m0-.001c0 6 6 12 12 12m0 0h114.084m0 0c6 0 12-6 12-12m0 0V70.4m0-.001c0-6-6-12-12-12"/><text text-anchor="middle" x="69" y="-171.2" font-family="Times,serif" font-size="14" transform="translate(4 246)">Program</text><text text-anchor="middle" x="69" y="-154.4" font-family="Times,serif" font-size="14" transform="translate(4 246)">ExpressionStatement</text><text text-anchor="middle" x="69" y="-137.6" font-family="Times,serif" font-size="14" transform="translate(4 246)">CallExpression</text><text text-anchor="middle" x="69" y="-120.8" font-family="Times,serif" font-size="14" transform="translate(4 246)">MemberExpression</text><text text-anchor="middle" x="69" y="-104" font-family="Times,serif" font-size="14" transform="translate(4 246)">Identifier (console)</text><text text-anchor="middle" x="69" y="-87.2" font-family="Times,serif" font-size="14" transform="translate(4 246)">Identifier (log)</text><text text-anchor="middle" x="69" y="-70.4" font-family="Times,serif" font-size="14" transform="translate(4 246)">Literal (Hello world!)</text></g><g class="edge" stroke="#000"><path fill="none" d="M73 22.318V48.14"/><path d="m76.5 48.325-3.5 10-3.5-10h7z"/></g><g class="node" stroke="#000" transform="translate(4 246)"><circle cx="69" cy="-13" r="9"/><circle fill="none" cx="69" cy="-13" r="13"/></g><g class="edge" stroke="#000"><path fill="none" d="M73 183.752v25.814"/><path d="m76.5 209.705-3.5 10-3.5-10h7z"/></g></g></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/code-path-analysis/example-ifstatement-chain.svg b/eslint/docs/src/assets/images/code-path-analysis/example-ifstatement-chain.svg new file mode 100644 index 0000000..0944c3b --- /dev/null +++ b/eslint/docs/src/assets/images/code-path-analysis/example-ifstatement-chain.svg @@ -0,0 +1 @@ +<svg width="371pt" height="562pt" viewBox="0 0 371 562" xmlns="http://www.w3.org/2000/svg"><g class="graph"><circle stroke="#000" cx="114" cy="-545" r="9" class="node" transform="translate(4 558)"/><g class="node"><path fill="#fff" stroke="#fff" d="M149.339 57.599H86.661l-12 12v34.802l12 12h62.678l12-12V69.599l-12-12z"/><path fill="#fff" stroke="#fff" d="M86.661 57.599c-6 0-12 6-12 12m0 34.802c0 6 6 12 12 12m62.678 0c6 0 12-6 12-12m0-34.802c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M149.339 57.599H86.661m0 0c-6 0-12 6-12 12m0 0v34.802m0 0c0 6 6 12 12 12m0 0h62.678m0 0c6 0 12-6 12-12m0 0V69.599m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="114" y="-483.6" font-family="Times,serif" font-size="14" transform="translate(4 558)">Program</text><text text-anchor="middle" x="114" y="-466.8" font-family="Times,serif" font-size="14" transform="translate(4 558)">IfStatement</text><text text-anchor="middle" x="114" y="-450" font-family="Times,serif" font-size="14" transform="translate(4 558)">Identifier (a)</text></g><g class="edge" stroke="#000"><path fill="none" d="M118 22.259v25.126"/><path d="m121.5 47.676-3.5 10-3.5-10h7z"/></g><g class="node" stroke="#000" transform="translate(4 558)"><circle cx="181" cy="-13" r="9"/><circle fill="none" cx="181" cy="-13" r="13"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M126.147 342.3H15.853l-12 12v51.4l12 12h110.294l12-12v-51.4l-12-12z"/><path fill="#fff" stroke="#fff" d="M15.853 342.3c-6 0-12 6-12 12m0 51.4c0 6 6 12 12 12m110.294 0c6 0 12-6 12-12m0-51.4c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M126.147 342.3H15.853m0 0c-6 0-12 6-12 12m0 0v51.4m0 0c0 6 6 12 12 12m0 0h110.294m0 0c6 0 12-6 12-12m0 0v-51.4m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="67" y="-199" font-family="Times,serif" font-size="14" transform="translate(4 558)">BlockStatement</text><text text-anchor="middle" x="67" y="-182.2" font-family="Times,serif" font-size="14" transform="translate(4 558)">ExpressionStatement</text><text text-anchor="middle" x="67" y="-165.4" font-family="Times,serif" font-size="14" transform="translate(4 558)">CallExpression</text><text text-anchor="middle" x="67" y="-148.6" font-family="Times,serif" font-size="14" transform="translate(4 558)">Identifier (foo)</text></g><g class="edge" stroke="#000"><path fill="none" d="M111.798 116.456C105.706 145.052 96.415 190.438 90 230c-5.526 34.079-10.418 72.759-13.854 102.168"/><path d="m79.617 332.627-4.624 9.533-2.33-10.335 6.954.802z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M197.429 152.398h-62.858l-12 12v17.204l12 12h62.858l12-12v-17.204l-12-12z"/><path fill="#fff" stroke="#fff" d="M134.571 152.398c-6 0-12 6-12 12m0 17.204c0 6 6 12 12 12m62.858 0c6 0 12-6 12-12m0-17.204c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M197.429 152.398h-62.858m0 0c-6 0-12 6-12 12m0 0v17.204m0 0c0 6 6 12 12 12m0 0h62.858m0 0c6 0 12-6 12-12m0 0v-17.204m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="162" y="-389.2" font-family="Times,serif" font-size="14" transform="translate(4 558)">IfStatement</text><text text-anchor="middle" x="162" y="-372.4" font-family="Times,serif" font-size="14" transform="translate(4 558)">Identifier (b)</text></g><g class="edge" stroke="#000"><path fill="none" d="m134.251 116.439 15.52 27.161"/><path d="m152.839 141.913 1.922 10.419-8-6.946 6.078-3.473z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M226.147 454.398h-82.294l-12 12v17.204l12 12h82.294l12-12v-17.204l-12-12z"/><path fill="#fff" stroke="#fff" d="M143.853 454.398c-6 0-12 6-12 12m0 17.204c0 6 6 12 12 12m82.294 0c6 0 12-6 12-12m0-17.204c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M226.147 454.398h-82.294m0 0c-6 0-12 6-12 12m0 0v17.204m0 0c0 6 6 12 12 12m0 0h82.294m0 0c6 0 12-6 12-12m0 0v-17.204m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="181" y="-87.2" font-family="Times,serif" font-size="14" transform="translate(4 558)">IfStatement:exit</text><text text-anchor="middle" x="181" y="-70.4" font-family="Times,serif" font-size="14" transform="translate(4 558)">Program:exit</text></g><g class="edge" stroke="#000"><path fill="none" d="m116.056 417.756 36.853 30.065"/><path d="m155.37 445.311 5.536 9.034-9.961-3.61 4.425-5.424z"/></g><g class="edge" stroke="#000"><path fill="none" d="M185 495.668v25.812"/><path d="m188.5 521.651-3.5 10-3.5-10h7z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M221.147 230.3H110.853l-12 12v51.4l12 12h110.294l12-12v-51.4l-12-12z"/><path fill="#fff" stroke="#fff" d="M110.853 230.3c-6 0-12 6-12 12m0 51.4c0 6 6 12 12 12m110.294 0c6 0 12-6 12-12m0-51.4c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M221.147 230.3H110.853m0 0c-6 0-12 6-12 12m0 0v51.4m0 0c0 6 6 12 12 12m0 0h110.294m0 0c6 0 12-6 12-12m0 0v-51.4m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="162" y="-311" font-family="Times,serif" font-size="14" transform="translate(4 558)">BlockStatement</text><text text-anchor="middle" x="162" y="-294.2" font-family="Times,serif" font-size="14" transform="translate(4 558)">ExpressionStatement</text><text text-anchor="middle" x="162" y="-277.4" font-family="Times,serif" font-size="14" transform="translate(4 558)">CallExpression</text><text text-anchor="middle" x="162" y="-260.6" font-family="Times,serif" font-size="14" transform="translate(4 558)">Identifier (bar)</text></g><g class="edge" stroke="#000"><path fill="none" d="M166 193.723v26.297"/><path d="m169.5 220.035-3.5 10-3.5-10h7z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M326.339 247.398h-62.678l-12 12v17.204l12 12h62.678l12-12v-17.204l-12-12z"/><path fill="#fff" stroke="#fff" d="M263.661 247.398c-6 0-12 6-12 12m0 17.204c0 6 6 12 12 12m62.678 0c6 0 12-6 12-12m0-17.204c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M326.339 247.398h-62.678m0 0c-6 0-12 6-12 12m0 0v17.204m0 0c0 6 6 12 12 12m0 0h62.678m0 0c6 0 12-6 12-12m0 0v-17.204m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="291" y="-294.2" font-family="Times,serif" font-size="14" transform="translate(4 558)">IfStatement</text><text text-anchor="middle" x="291" y="-277.4" font-family="Times,serif" font-size="14" transform="translate(4 558)">Identifier (c)</text></g><g class="edge" stroke="#000"><path fill="none" d="m193.358 193.723 66.024 47.599"/><path d="m261.617 238.618 6.065 8.688-10.159-3.009 4.094-5.679z"/></g><g class="edge" stroke="#000"><path fill="none" d="m169.397 305.65 12.853 138.677"/><path d="m185.744 444.107-2.562 10.28-4.408-9.634 6.97-.646z"/></g><g class="edge" stroke="#000"><path fill="none" d="M270.084 288.608C254.495 302.092 235.136 321.258 223 342c-18.795 32.122-28.797 74.136-33.741 102.043"/><path d="m192.697 444.707-5.093 9.291-1.813-10.439 6.906 1.148z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M354.147 342.3H243.853l-12 12v51.4l12 12h110.294l12-12v-51.4l-12-12z"/><path fill="#fff" stroke="#fff" d="M243.853 342.3c-6 0-12 6-12 12m0 51.4c0 6 6 12 12 12m110.294 0c6 0 12-6 12-12m0-51.4c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M354.147 342.3H243.853m0 0c-6 0-12 6-12 12m0 0v51.4m0 0c0 6 6 12 12 12m0 0h110.294m0 0c6 0 12-6 12-12m0 0v-51.4m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="295" y="-199" font-family="Times,serif" font-size="14" transform="translate(4 558)">BlockStatement</text><text text-anchor="middle" x="295" y="-182.2" font-family="Times,serif" font-size="14" transform="translate(4 558)">ExpressionStatement</text><text text-anchor="middle" x="295" y="-165.4" font-family="Times,serif" font-size="14" transform="translate(4 558)">CallExpression</text><text text-anchor="middle" x="295" y="-148.6" font-family="Times,serif" font-size="14" transform="translate(4 558)">Identifier (hoge)</text></g><g class="edge" stroke="#000"><path fill="none" d="m295.715 288.666 1.571 43.187"/><path d="m300.795 332.041-3.135 10.12-3.861-9.866 6.996-.254z"/></g><g class="edge" stroke="#000"><path fill="none" d="m253.944 417.756-36.853 30.065"/><path d="m219.055 450.735-9.961 3.61 5.536-9.034 4.425 5.424z"/></g></g></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/code-path-analysis/example-ifstatement.svg b/eslint/docs/src/assets/images/code-path-analysis/example-ifstatement.svg new file mode 100644 index 0000000..b83c67b --- /dev/null +++ b/eslint/docs/src/assets/images/code-path-analysis/example-ifstatement.svg @@ -0,0 +1 @@ +<svg width="392" height="496" viewBox="0 0 294 372" xmlns="http://www.w3.org/2000/svg"><g class="graph"><circle stroke="#000" cx="143" cy="-355" r="9" class="node" transform="translate(4 368)"/><g class="node"><path fill="#fff" stroke="#fff" d="M178.339 57.599h-62.678l-12 12v34.802l12 12h62.678l12-12V69.599l-12-12z"/><path fill="#fff" stroke="#fff" d="M115.661 57.599c-6 0-12 6-12 12m0 34.802c0 6 6 12 12 12m62.678 0c6 0 12-6 12-12m0-34.802c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M178.339 57.599h-62.678m0 0c-6 0-12 6-12 12m0 0v34.802m0 0c0 6 6 12 12 12m0 0h62.678m0 0c6 0 12-6 12-12m0 0V69.599m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="143" y="-293.6" font-family="Times,serif" font-size="14" transform="translate(4 368)">Program</text><text text-anchor="middle" x="143" y="-276.8" font-family="Times,serif" font-size="14" transform="translate(4 368)">IfStatement</text><text text-anchor="middle" x="143" y="-260" font-family="Times,serif" font-size="14" transform="translate(4 368)">Identifier (a)</text></g><g class="edge" stroke="#000"><path fill="none" d="M147 22.259v25.126"/><path d="m150.5 47.676-3.5 10-3.5-10h7z"/></g><g class="node" stroke="#000" transform="translate(4 368)"><circle cx="143" cy="-13" r="9"/><circle fill="none" cx="143" cy="-13" r="13"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M126.147 152.3H15.853l-12 12v51.4l12 12h110.294l12-12v-51.4l-12-12z"/><path fill="#fff" stroke="#fff" d="M15.853 152.3c-6 0-12 6-12 12m0 51.4c0 6 6 12 12 12m110.294 0c6 0 12-6 12-12m0-51.4c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M126.147 152.3H15.853m0 0c-6 0-12 6-12 12m0 0v51.4m0 0c0 6 6 12 12 12m0 0h110.294m0 0c6 0 12-6 12-12m0 0v-51.4m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="67" y="-199" font-family="Times,serif" font-size="14" transform="translate(4 368)">BlockStatement</text><text text-anchor="middle" x="67" y="-182.2" font-family="Times,serif" font-size="14" transform="translate(4 368)">ExpressionStatement</text><text text-anchor="middle" x="67" y="-165.4" font-family="Times,serif" font-size="14" transform="translate(4 368)">CallExpression</text><text text-anchor="middle" x="67" y="-148.6" font-family="Times,serif" font-size="14" transform="translate(4 368)">Identifier (foo)</text></g><g class="edge" stroke="#000"><path fill="none" d="m125.628 116.403-20.757 27.584"/><path d="m107.554 146.243-8.81 5.886 3.216-10.095 5.594 4.209z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M278.147 152.3H167.853l-12 12v51.4l12 12h110.294l12-12v-51.4l-12-12z"/><path fill="#fff" stroke="#fff" d="M167.853 152.3c-6 0-12 6-12 12m0 51.4c0 6 6 12 12 12m110.294 0c6 0 12-6 12-12m0-51.4c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M278.147 152.3H167.853m0 0c-6 0-12 6-12 12m0 0v51.4m0 0c0 6 6 12 12 12m0 0h110.294m0 0c6 0 12-6 12-12m0 0v-51.4m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="219" y="-199" font-family="Times,serif" font-size="14" transform="translate(4 368)">BlockStatement</text><text text-anchor="middle" x="219" y="-182.2" font-family="Times,serif" font-size="14" transform="translate(4 368)">ExpressionStatement</text><text text-anchor="middle" x="219" y="-165.4" font-family="Times,serif" font-size="14" transform="translate(4 368)">CallExpression</text><text text-anchor="middle" x="219" y="-148.6" font-family="Times,serif" font-size="14" transform="translate(4 368)">Identifier (bar)</text></g><g class="edge" stroke="#000"><path fill="none" d="m168.372 116.403 20.757 27.584"/><path d="m192.04 142.034 3.216 10.095-8.81-5.886 5.594-4.209z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M188.147 264.398h-82.294l-12 12v17.204l12 12h82.294l12-12v-17.204l-12-12z"/><path fill="#fff" stroke="#fff" d="M105.853 264.398c-6 0-12 6-12 12m0 17.204c0 6 6 12 12 12m82.294 0c6 0 12-6 12-12m0-17.204c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M188.147 264.398h-82.294m0 0c-6 0-12 6-12 12m0 0v17.204m0 0c0 6 6 12 12 12m0 0h82.294m0 0c6 0 12-6 12-12m0 0v-17.204m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="143" y="-87.2" font-family="Times,serif" font-size="14" transform="translate(4 368)">IfStatement:exit</text><text text-anchor="middle" x="143" y="-70.4" font-family="Times,serif" font-size="14" transform="translate(4 368)">Program:exit</text></g><g class="edge" stroke="#000"><path fill="none" d="m101.037 227.756 23.451 28.697"/><path d="m127.32 254.387 3.618 9.958-9.039-5.529 5.421-4.429z"/></g><g class="edge" stroke="#000"><path fill="none" d="M147 305.668v25.812"/><path d="m150.5 331.651-3.5 10-3.5-10h7z"/></g><g class="edge" stroke="#000"><path fill="none" d="m192.963 227.756-23.451 28.697"/><path d="m172.101 258.816-9.039 5.529 3.618-9.958 5.421 4.429z"/></g></g></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/code-path-analysis/example-switchstatement-has-default.svg b/eslint/docs/src/assets/images/code-path-analysis/example-switchstatement-has-default.svg new file mode 100644 index 0000000..5d6d739 --- /dev/null +++ b/eslint/docs/src/assets/images/code-path-analysis/example-switchstatement-has-default.svg @@ -0,0 +1 @@ +<svg width="347pt" height="802pt" viewBox="0 0 347 802" xmlns="http://www.w3.org/2000/svg"><g class="graph"><circle stroke="#000" cx="121" cy="-785" r="9" class="node" transform="translate(4 798)"/><g class="node"><path fill="#fff" stroke="#fff" d="M168.156 58H81.844l-12 12v68l12 12h86.312l12-12V70l-12-12z"/><path fill="#fff" stroke="#fff" d="M81.844 58c-6 0-12 6-12 12m0 68c0 6 6 12 12 12m86.312 0c6 0 12-6 12-12m0-68c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M168.156 58H81.844m0 0c-6 0-12 6-12 12m0 0v68m0 0c0 6 6 12 12 12m0 0h86.312m0 0c6 0 12-6 12-12m0 0V70m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="121" y="-723.4" font-family="Times,serif" font-size="14" transform="translate(4 798)">Program</text><text text-anchor="middle" x="121" y="-706.6" font-family="Times,serif" font-size="14" transform="translate(4 798)">SwitchStatement</text><text text-anchor="middle" x="121" y="-689.8" font-family="Times,serif" font-size="14" transform="translate(4 798)">Identifier (a)</text><text text-anchor="middle" x="121" y="-673" font-family="Times,serif" font-size="14" transform="translate(4 798)">SwitchCase</text><text text-anchor="middle" x="121" y="-656.2" font-family="Times,serif" font-size="14" transform="translate(4 798)">Literal (0)</text></g><g class="edge" stroke="#000"><path fill="none" d="M125 22.213v25.49"/><path d="m128.5 47.881-3.5 10-3.5-10h7z"/></g><g class="node" stroke="#000" transform="translate(4 798)"><circle cx="162" cy="-13" r="9"/><circle fill="none" cx="162" cy="-13" r="13"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M126.147 264.3H15.853l-12 12v51.4l12 12h110.294l12-12v-51.4l-12-12z"/><path fill="#fff" stroke="#fff" d="M15.853 264.3c-6 0-12 6-12 12m0 51.4c0 6 6 12 12 12m110.294 0c6 0 12-6 12-12m0-51.4c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M126.147 264.3H15.853m0 0c-6 0-12 6-12 12m0 0v51.4m0 0c0 6 6 12 12 12m0 0h110.294m0 0c6 0 12-6 12-12m0 0v-51.4m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="67" y="-517" font-family="Times,serif" font-size="14" transform="translate(4 798)">ExpressionStatement</text><text text-anchor="middle" x="67" y="-500.2" font-family="Times,serif" font-size="14" transform="translate(4 798)">CallExpression</text><text text-anchor="middle" x="67" y="-483.4" font-family="Times,serif" font-size="14" transform="translate(4 798)">Identifier (foo)</text><text text-anchor="middle" x="67" y="-466.6" font-family="Times,serif" font-size="14" transform="translate(4 798)">BreakStatement</text></g><g class="edge" stroke="#000"><path fill="none" d="M112.476 150.459 83.82 254.467"/><path d="m87.14 255.595-6.03 8.711-.719-10.57 6.749 1.859z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M195.072 186.398h-58.144l-12 12v17.204l12 12h58.144l12-12v-17.204l-12-12z"/><path fill="#fff" stroke="#fff" d="M136.928 186.398c-6 0-12 6-12 12m0 17.204c0 6 6 12 12 12m58.144 0c6 0 12-6 12-12m0-17.204c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M195.072 186.398h-58.144m0 0c-6 0-12 6-12 12m0 0v17.204m0 0c0 6 6 12 12 12m0 0h58.144m0 0c6 0 12-6 12-12m0 0v-17.204m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="162" y="-595.2" font-family="Times,serif" font-size="14" transform="translate(4 798)">SwitchCase</text><text text-anchor="middle" x="162" y="-578.4" font-family="Times,serif" font-size="14" transform="translate(4 798)">Literal (1)</text></g><g class="edge" stroke="#000"><path fill="none" d="m143.341 150.183 10.835 26.689"/><path d="m157.424 175.569.519 10.582-7.005-7.949 6.486-2.633z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M221.321 694.398H110.679l-12 12v17.204l12 12h110.642l12-12v-17.204l-12-12z"/><path fill="#fff" stroke="#fff" d="M110.679 694.398c-6 0-12 6-12 12m0 17.204c0 6 6 12 12 12m110.642 0c6 0 12-6 12-12m0-17.204c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M221.321 694.398H110.679m0 0c-6 0-12 6-12 12m0 0v17.204m0 0c0 6 6 12 12 12m0 0h110.642m0 0c6 0 12-6 12-12m0 0v-17.204m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="162" y="-87.2" font-family="Times,serif" font-size="14" transform="translate(4 798)">SwitchStatement:exit</text><text text-anchor="middle" x="162" y="-70.4" font-family="Times,serif" font-size="14" transform="translate(4 798)">Program:exit</text></g><g class="edge" stroke="#000"><path fill="none" d="M69.96 339.873C69.488 388.054 71.683 474.685 90 546c13.193 51.361 41.133 106.594 59.212 139.184"/><path d="m152.402 683.716 1.852 10.432-7.953-7 6.101-3.432z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M221.147 375.599H110.853l-12 12v34.802l12 12h110.294l12-12v-34.802l-12-12z"/><path fill="#fff" stroke="#fff" d="M110.853 375.599c-6 0-12 6-12 12m0 34.802c0 6 6 12 12 12m110.294 0c6 0 12-6 12-12m0-34.802c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M221.147 375.599H110.853m0 0c-6 0-12 6-12 12m0 0v34.802m0 0c0 6 6 12 12 12m0 0h110.294m0 0c6 0 12-6 12-12m0 0v-34.802m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="162" y="-405.6" font-family="Times,serif" font-size="14" transform="translate(4 798)">ExpressionStatement</text><text text-anchor="middle" x="162" y="-388.8" font-family="Times,serif" font-size="14" transform="translate(4 798)">CallExpression</text><text text-anchor="middle" x="162" y="-372" font-family="Times,serif" font-size="14" transform="translate(4 798)">Identifier (bar)</text></g><g class="node"><path fill="#fff" stroke="#fff" d="M221.147 470.3H110.853l-12 12v51.4l12 12h110.294l12-12v-51.4l-12-12z"/><path fill="#fff" stroke="#fff" d="M110.853 470.3c-6 0-12 6-12 12m0 51.4c0 6 6 12 12 12m110.294 0c6 0 12-6 12-12m0-51.4c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M221.147 470.3H110.853m0 0c-6 0-12 6-12 12m0 0v51.4m0 0c0 6 6 12 12 12m0 0h110.294m0 0c6 0 12-6 12-12m0 0v-51.4m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="162" y="-311" font-family="Times,serif" font-size="14" transform="translate(4 798)">ExpressionStatement</text><text text-anchor="middle" x="162" y="-294.2" font-family="Times,serif" font-size="14" transform="translate(4 798)">CallExpression</text><text text-anchor="middle" x="162" y="-277.4" font-family="Times,serif" font-size="14" transform="translate(4 798)">Identifier (hoge)</text><text text-anchor="middle" x="162" y="-260.6" font-family="Times,serif" font-size="14" transform="translate(4 798)">BreakStatement</text></g><g class="edge" stroke="#000"><path fill="none" d="M166 434.403v25.592"/><path d="m169.5 460.129-3.5 10-3.5-10h7z"/></g><g class="edge" stroke="#000"><path fill="none" d="M166 545.65v138.677"/><path d="m169.5 684.387-3.5 10-3.5-10h7z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M331.147 582.3H220.853l-12 12v51.4l12 12h110.294l12-12v-51.4l-12-12z"/><path fill="#fff" stroke="#fff" d="M220.853 582.3c-6 0-12 6-12 12m0 51.4c0 6 6 12 12 12m110.294 0c6 0 12-6 12-12m0-51.4c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M331.147 582.3H220.853m0 0c-6 0-12 6-12 12m0 0v51.4m0 0c0 6 6 12 12 12m0 0h110.294m0 0c6 0 12-6 12-12m0 0v-51.4m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="272" y="-199" font-family="Times,serif" font-size="14" transform="translate(4 798)">ExpressionStatement</text><text text-anchor="middle" x="272" y="-182.2" font-family="Times,serif" font-size="14" transform="translate(4 798)">CallExpression</text><text text-anchor="middle" x="272" y="-165.4" font-family="Times,serif" font-size="14" transform="translate(4 798)">Identifier (fuga)</text><text text-anchor="middle" x="272" y="-148.6" font-family="Times,serif" font-size="14" transform="translate(4 798)">BreakStatement</text></g><g class="edge" stroke="#000"><path fill="none" d="m232.525 657.756-35.56 30.065"/><path d="m199.145 690.561-9.897 3.784 5.377-9.13 4.52 5.346z"/></g><g class="edge" stroke="#000"><path fill="none" d="M166 735.668v25.812"/><path d="m169.5 761.651-3.5 10-3.5-10h7z"/></g><g class="edge" stroke="#000"><path fill="none" d="M166 227.872v137.454"/><path d="m169.5 365.576-3.5 10-3.5-10h7z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M264.072 281.398h-58.144l-12 12v17.204l12 12h58.144l12-12v-17.204l-12-12z"/><path fill="#fff" stroke="#fff" d="M205.928 281.398c-6 0-12 6-12 12m0 17.204c0 6 6 12 12 12m58.144 0c6 0 12-6 12-12m0-17.204c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M264.072 281.398h-58.144m0 0c-6 0-12 6-12 12m0 0v17.204m0 0c0 6 6 12 12 12m0 0h58.144m0 0c6 0 12-6 12-12m0 0v-17.204m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="231" y="-500.2" font-family="Times,serif" font-size="14" transform="translate(4 798)">SwitchCase</text><text text-anchor="middle" x="231" y="-483.4" font-family="Times,serif" font-size="14" transform="translate(4 798)">Literal (2)</text></g><g class="edge" stroke="#000"><path fill="none" d="m180.633 227.723 33.661 45.369"/><path d="m217.24 271.189 3.148 10.117-8.769-5.946 5.621-4.171z"/></g><g class="edge" stroke="#000"><path fill="none" d="m221.368 322.954-30.177 44.172"/><path d="m193.882 369.392-8.531 6.283 2.751-10.232 5.78 3.949z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M321.072 384.398h-58.144l-12 12v17.204l12 12h58.144l12-12v-17.204l-12-12z"/><path fill="#fff" stroke="#fff" d="M262.928 384.398c-6 0-12 6-12 12m0 17.204c0 6 6 12 12 12m58.144 0c6 0 12-6 12-12m0-17.204c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M321.072 384.398h-58.144m0 0c-6 0-12 6-12 12m0 0v17.204m0 0c0 6 6 12 12 12m0 0h58.144m0 0c6 0 12-6 12-12m0 0v-17.204m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="288" y="-397.2" font-family="Times,serif" font-size="14" transform="translate(4 798)">SwitchCase</text><text text-anchor="middle" x="288" y="-380.4" font-family="Times,serif" font-size="14" transform="translate(4 798)">Literal (3)</text></g><g class="edge" stroke="#000"><path fill="none" d="m246.261 322.954 29.523 52.312"/><path d="m278.895 373.658 1.867 10.429-7.963-6.989 6.096-3.44z"/></g><g class="edge" stroke="#000"><path fill="none" d="m267.407 425.714-47.656 38.2"/><path d="m221.69 466.845-9.992 3.524 5.614-8.986 4.378 5.462z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M321.072 490h-58.144l-12 12v12l12 12h58.144l12-12v-12l-12-12z"/><path fill="#fff" stroke="#fff" d="M262.928 490c-6 0-12 6-12 12m0 12c0 6 6 12 12 12m58.144 0c6 0 12-6 12-12m0-12c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M321.072 490h-58.144m0 0c-6 0-12 6-12 12m0 0v12m0 0c0 6 6 12 12 12m0 0h58.144m0 0c6 0 12-6 12-12m0 0v-12m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="288" y="-285.8" font-family="Times,serif" font-size="14" transform="translate(4 798)">SwitchCase</text></g><g class="edge" stroke="#000"><path fill="none" d="M292 425.954v53.445"/><path d="m295.5 479.777-3.5 10-3.5-10h7z"/></g><g class="edge" stroke="#000"><path fill="none" d="m289.5 526.187-6.716 46.173"/><path d="m286.231 572.98-4.903 9.392-2.024-10.4 6.927 1.008z"/></g></g></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/code-path-analysis/example-switchstatement.svg b/eslint/docs/src/assets/images/code-path-analysis/example-switchstatement.svg new file mode 100644 index 0000000..e43e5e1 --- /dev/null +++ b/eslint/docs/src/assets/images/code-path-analysis/example-switchstatement.svg @@ -0,0 +1 @@ +<svg width="337pt" height="920" viewBox="0 0 337 690" xmlns="http://www.w3.org/2000/svg"><g class="graph"><circle stroke="#000" cx="121" cy="-673" r="9" class="node" transform="translate(4 686)"/><g class="node"><path fill="#fff" stroke="#fff" d="M168.156 58H81.844l-12 12v68l12 12h86.312l12-12V70l-12-12z"/><path fill="#fff" stroke="#fff" d="M81.844 58c-6 0-12 6-12 12m0 68c0 6 6 12 12 12m86.312 0c6 0 12-6 12-12m0-68c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M168.156 58H81.844m0 0c-6 0-12 6-12 12m0 0v68m0 0c0 6 6 12 12 12m0 0h86.312m0 0c6 0 12-6 12-12m0 0V70m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="121" y="-611.4" font-family="Times,serif" font-size="14" transform="translate(4 686)">Program</text><text text-anchor="middle" x="121" y="-594.6" font-family="Times,serif" font-size="14" transform="translate(4 686)">SwitchStatement</text><text text-anchor="middle" x="121" y="-577.8" font-family="Times,serif" font-size="14" transform="translate(4 686)">Identifier (a)</text><text text-anchor="middle" x="121" y="-561" font-family="Times,serif" font-size="14" transform="translate(4 686)">SwitchCase</text><text text-anchor="middle" x="121" y="-544.2" font-family="Times,serif" font-size="14" transform="translate(4 686)">Literal (0)</text></g><g class="edge" stroke="#000"><path fill="none" d="M125 22.213v25.49"/><path d="m128.5 47.881-3.5 10-3.5-10h7z"/></g><g class="node" stroke="#000" transform="translate(4 686)"><circle cx="170" cy="-13" r="9"/><circle fill="none" cx="170" cy="-13" r="13"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M126.147 264.3H15.853l-12 12v51.4l12 12h110.294l12-12v-51.4l-12-12z"/><path fill="#fff" stroke="#fff" d="M15.853 264.3c-6 0-12 6-12 12m0 51.4c0 6 6 12 12 12m110.294 0c6 0 12-6 12-12m0-51.4c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M126.147 264.3H15.853m0 0c-6 0-12 6-12 12m0 0v51.4m0 0c0 6 6 12 12 12m0 0h110.294m0 0c6 0 12-6 12-12m0 0v-51.4m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="67" y="-405" font-family="Times,serif" font-size="14" transform="translate(4 686)">ExpressionStatement</text><text text-anchor="middle" x="67" y="-388.2" font-family="Times,serif" font-size="14" transform="translate(4 686)">CallExpression</text><text text-anchor="middle" x="67" y="-371.4" font-family="Times,serif" font-size="14" transform="translate(4 686)">Identifier (foo)</text><text text-anchor="middle" x="67" y="-354.6" font-family="Times,serif" font-size="14" transform="translate(4 686)">BreakStatement</text></g><g class="edge" stroke="#000"><path fill="none" d="M112.476 150.459 83.82 254.467"/><path d="m87.14 255.595-6.03 8.711-.719-10.57 6.749 1.859z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M195.072 186.398h-58.144l-12 12v17.204l12 12h58.144l12-12v-17.204l-12-12z"/><path fill="#fff" stroke="#fff" d="M136.928 186.398c-6 0-12 6-12 12m0 17.204c0 6 6 12 12 12m58.144 0c6 0 12-6 12-12m0-17.204c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M195.072 186.398h-58.144m0 0c-6 0-12 6-12 12m0 0v17.204m0 0c0 6 6 12 12 12m0 0h58.144m0 0c6 0 12-6 12-12m0 0v-17.204m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="162" y="-483.2" font-family="Times,serif" font-size="14" transform="translate(4 686)">SwitchCase</text><text text-anchor="middle" x="162" y="-466.4" font-family="Times,serif" font-size="14" transform="translate(4 686)">Literal (1)</text></g><g class="edge" stroke="#000"><path fill="none" d="m143.341 150.183 10.835 26.689"/><path d="m157.424 175.569.519 10.582-7.005-7.949 6.486-2.633z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M229.321 582.398H118.679l-12 12v17.204l12 12h110.642l12-12v-17.204l-12-12z"/><path fill="#fff" stroke="#fff" d="M118.679 582.398c-6 0-12 6-12 12m0 17.204c0 6 6 12 12 12m110.642 0c6 0 12-6 12-12m0-17.204c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M229.321 582.398H118.679m0 0c-6 0-12 6-12 12m0 0v17.204m0 0c0 6 6 12 12 12m0 0h110.642m0 0c6 0 12-6 12-12m0 0v-17.204m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="170" y="-87.2" font-family="Times,serif" font-size="14" transform="translate(4 686)">SwitchStatement:exit</text><text text-anchor="middle" x="170" y="-70.4" font-family="Times,serif" font-size="14" transform="translate(4 686)">Program:exit</text></g><g class="edge" stroke="#000"><path fill="none" d="M66.364 339.973C61.915 390.184 60.565 481.104 98 546c6.985 12.109 17.753 22.366 29.007 30.661"/><path d="m129.004 573.787 6.236 8.565-10.216-2.807 3.98-5.758z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M221.147 375.599H110.853l-12 12v34.802l12 12h110.294l12-12v-34.802l-12-12z"/><path fill="#fff" stroke="#fff" d="M110.853 375.599c-6 0-12 6-12 12m0 34.802c0 6 6 12 12 12m110.294 0c6 0 12-6 12-12m0-34.802c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M221.147 375.599H110.853m0 0c-6 0-12 6-12 12m0 0v34.802m0 0c0 6 6 12 12 12m0 0h110.294m0 0c6 0 12-6 12-12m0 0v-34.802m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="162" y="-293.6" font-family="Times,serif" font-size="14" transform="translate(4 686)">ExpressionStatement</text><text text-anchor="middle" x="162" y="-276.8" font-family="Times,serif" font-size="14" transform="translate(4 686)">CallExpression</text><text text-anchor="middle" x="162" y="-260" font-family="Times,serif" font-size="14" transform="translate(4 686)">Identifier (bar)</text></g><g class="node"><path fill="#fff" stroke="#fff" d="M229.147 470.3H118.853l-12 12v51.4l12 12h110.294l12-12v-51.4l-12-12z"/><path fill="#fff" stroke="#fff" d="M118.853 470.3c-6 0-12 6-12 12m0 51.4c0 6 6 12 12 12m110.294 0c6 0 12-6 12-12m0-51.4c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M229.147 470.3H118.853m0 0c-6 0-12 6-12 12m0 0v51.4m0 0c0 6 6 12 12 12m0 0h110.294m0 0c6 0 12-6 12-12m0 0v-51.4m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="170" y="-199" font-family="Times,serif" font-size="14" transform="translate(4 686)">ExpressionStatement</text><text text-anchor="middle" x="170" y="-182.2" font-family="Times,serif" font-size="14" transform="translate(4 686)">CallExpression</text><text text-anchor="middle" x="170" y="-165.4" font-family="Times,serif" font-size="14" transform="translate(4 686)">Identifier (hoge)</text><text text-anchor="middle" x="170" y="-148.6" font-family="Times,serif" font-size="14" transform="translate(4 686)">BreakStatement</text></g><g class="edge" stroke="#000"><path fill="none" d="m168.25 434.403 2.027 25.592"/><path d="m173.779 459.884-2.699 10.245-4.279-9.692 6.978-.553z"/></g><g class="edge" stroke="#000"><path fill="none" d="M174 545.756v26.472"/><path d="m177.5 572.345-3.5 10-3.5-10h7z"/></g><g class="edge" stroke="#000"><path fill="none" d="M174 623.668v25.812"/><path d="m177.5 649.651-3.5 10-3.5-10h7z"/></g><g class="edge" stroke="#000"><path fill="none" d="M166 227.872v137.454"/><path d="m169.5 365.576-3.5 10-3.5-10h7z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M264.072 281.398h-58.144l-12 12v17.204l12 12h58.144l12-12v-17.204l-12-12z"/><path fill="#fff" stroke="#fff" d="M205.928 281.398c-6 0-12 6-12 12m0 17.204c0 6 6 12 12 12m58.144 0c6 0 12-6 12-12m0-17.204c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M264.072 281.398h-58.144m0 0c-6 0-12 6-12 12m0 0v17.204m0 0c0 6 6 12 12 12m0 0h58.144m0 0c6 0 12-6 12-12m0 0v-17.204m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="231" y="-388.2" font-family="Times,serif" font-size="14" transform="translate(4 686)">SwitchCase</text><text text-anchor="middle" x="231" y="-371.4" font-family="Times,serif" font-size="14" transform="translate(4 686)">Literal (2)</text></g><g class="edge" stroke="#000"><path fill="none" d="m180.633 227.723 33.661 45.369"/><path d="m217.24 271.189 3.148 10.117-8.769-5.946 5.621-4.171z"/></g><g class="edge" stroke="#000"><path fill="none" d="m221.368 322.954-30.177 44.172"/><path d="m193.882 369.392-8.531 6.283 2.751-10.232 5.78 3.949z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M321.072 384.398h-58.144l-12 12v17.204l12 12h58.144l12-12v-17.204l-12-12z"/><path fill="#fff" stroke="#fff" d="M262.928 384.398c-6 0-12 6-12 12m0 17.204c0 6 6 12 12 12m58.144 0c6 0 12-6 12-12m0-17.204c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M321.072 384.398h-58.144m0 0c-6 0-12 6-12 12m0 0v17.204m0 0c0 6 6 12 12 12m0 0h58.144m0 0c6 0 12-6 12-12m0 0v-17.204m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="288" y="-285.2" font-family="Times,serif" font-size="14" transform="translate(4 686)">SwitchCase</text><text text-anchor="middle" x="288" y="-268.4" font-family="Times,serif" font-size="14" transform="translate(4 686)">Literal (3)</text></g><g class="edge" stroke="#000"><path fill="none" d="m246.261 322.954 29.523 52.312"/><path d="m278.895 373.658 1.867 10.429-7.963-6.989 6.096-3.44z"/></g><g class="edge" stroke="#000"><path fill="none" d="m268.968 425.714-43.996 37.658"/><path d="m226.909 466.32-9.873 3.844 5.322-9.162 4.551 5.318z"/></g><g class="edge" stroke="#000"><path fill="none" d="M290.047 425.817C286.381 454.613 276.302 508.656 250 546c-8.278 11.753-19.805 22.026-31.383 30.454"/><path d="m220.439 579.449-10.216 2.81 6.234-8.567 3.982 5.757z"/></g></g></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/code-path-analysis/example-trystatement-try-catch-finally.svg b/eslint/docs/src/assets/images/code-path-analysis/example-trystatement-try-catch-finally.svg new file mode 100644 index 0000000..60ec1cd --- /dev/null +++ b/eslint/docs/src/assets/images/code-path-analysis/example-trystatement-try-catch-finally.svg @@ -0,0 +1 @@ +<svg width="316" height="652pt" viewBox="0 0 237 652" xmlns="http://www.w3.org/2000/svg"><g class="graph"><circle stroke="#000" cx="114" cy="-635" r="9" class="node" transform="translate(4 648)"/><g class="node"><path fill="#fff" stroke="#fff" d="M173.147 58.7H62.853l-12 12v84.6l12 12h110.294l12-12V70.7l-12-12z"/><path fill="#fff" stroke="#fff" d="M62.853 58.7c-6 0-12 6-12 12m0 84.6c0 6 6 12 12 12m110.294 0c6 0 12-6 12-12m0-84.6c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M173.147 58.7H62.853m0 0c-6 0-12 6-12 12m0 0v84.6m0 0c0 6 6 12 12 12m0 0h110.294m0 0c6 0 12-6 12-12m0 0V70.7m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="114" y="-572.8" font-family="Times,serif" font-size="14" transform="translate(4 648)">Program</text><text text-anchor="middle" x="114" y="-556" font-family="Times,serif" font-size="14" transform="translate(4 648)">TryStatement</text><text text-anchor="middle" x="114" y="-539.2" font-family="Times,serif" font-size="14" transform="translate(4 648)">BlockStatement</text><text text-anchor="middle" x="114" y="-522.4" font-family="Times,serif" font-size="14" transform="translate(4 648)">ExpressionStatement</text><text text-anchor="middle" x="114" y="-505.6" font-family="Times,serif" font-size="14" transform="translate(4 648)">CallExpression</text><text text-anchor="middle" x="114" y="-488.8" font-family="Times,serif" font-size="14" transform="translate(4 648)">Identifier (foo)</text></g><g class="edge" stroke="#000"><path fill="none" d="M118 22.02v26.167"/><path d="m121.5 48.414-3.5 10-3.5-10h7z"/></g><g class="node" stroke="#000" transform="translate(4 648)"><circle cx="114" cy="-13" r="9"/><circle fill="none" cx="114" cy="-13" r="13"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M221.147 203.599H110.853l-12 12v34.802l12 12h110.294l12-12v-34.802l-12-12z"/><path fill="#fff" stroke="#fff" d="M110.853 203.599c-6 0-12 6-12 12m0 34.802c0 6 6 12 12 12m110.294 0c6 0 12-6 12-12m0-34.802c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M221.147 203.599H110.853m0 0c-6 0-12 6-12 12m0 0v34.802m0 0c0 6 6 12 12 12m0 0h110.294m0 0c6 0 12-6 12-12m0 0v-34.802m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="162" y="-427.6" font-family="Times,serif" font-size="14" transform="translate(4 648)">ExpressionStatement</text><text text-anchor="middle" x="162" y="-410.8" font-family="Times,serif" font-size="14" transform="translate(4 648)">CallExpression</text><text text-anchor="middle" x="162" y="-394" font-family="Times,serif" font-size="14" transform="translate(4 648)">Identifier (bar)</text></g><g class="edge" stroke="#000"><path fill="none" d="m139.753 167.476 10.893 26.78"/><path d="m153.9 192.967.526 10.581-7.01-7.944 6.484-2.637z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M126.147 298.399H15.853l-12 12v101.202l12 12h110.294l12-12V310.399l-12-12z"/><path fill="#fff" stroke="#fff" d="M15.853 298.399c-6 0-12 6-12 12m0 101.202c0 6 6 12 12 12m110.294 0c6 0 12-6 12-12m0-101.202c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M126.147 298.399H15.853m0 0c-6 0-12 6-12 12m0 0v101.202m0 0c0 6 6 12 12 12m0 0h110.294m0 0c6 0 12-6 12-12m0 0V310.399m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="67" y="-333.2" font-family="Times,serif" font-size="14" transform="translate(4 648)">CatchClause</text><text text-anchor="middle" x="67" y="-316.4" font-family="Times,serif" font-size="14" transform="translate(4 648)">Identifier (err)</text><text text-anchor="middle" x="67" y="-299.6" font-family="Times,serif" font-size="14" transform="translate(4 648)">BlockStatement</text><text text-anchor="middle" x="67" y="-282.8" font-family="Times,serif" font-size="14" transform="translate(4 648)">ExpressionStatement</text><text text-anchor="middle" x="67" y="-266" font-family="Times,serif" font-size="14" transform="translate(4 648)">CallExpression</text><text text-anchor="middle" x="67" y="-249.2" font-family="Times,serif" font-size="14" transform="translate(4 648)">Identifier (hoge)</text><text text-anchor="middle" x="67" y="-232.4" font-family="Times,serif" font-size="14" transform="translate(4 648)">Identifier (err)</text></g><g class="edge" stroke="#000"><path fill="none" d="M99.664 167.356C96.044 179.307 92.575 192 90 204c-5.838 27.202-10.04 57.486-12.983 84.079"/><path d="m80.492 288.505-4.541 9.572-2.42-10.315 6.961.743z"/></g><g class="edge" stroke="#000"><path fill="none" d="m144.68 262.277-20.949 27.784"/><path d="m126.308 292.457-8.815 5.878 3.226-10.092 5.589 4.214z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M173.147 460.399H62.853l-12 12v101.202l12 12h110.294l12-12V472.399l-12-12z"/><path fill="#fff" stroke="#fff" d="M62.853 460.399c-6 0-12 6-12 12m0 101.201c0 6 6 12 12 12m110.294 0c6 0 12-6 12-12m0-101.201c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M173.147 460.399H62.853m0 0c-6 0-12 6-12 12m0 0v101.202m0-.001c0 6 6 12 12 12m0 0h110.294m0 0c6 0 12-6 12-12m0 0V472.4m0-.001c0-6-6-12-12-12"/><text text-anchor="middle" x="114" y="-171.2" font-family="Times,serif" font-size="14" transform="translate(4 648)">BlockStatement</text><text text-anchor="middle" x="114" y="-154.4" font-family="Times,serif" font-size="14" transform="translate(4 648)">ExpressionStatement</text><text text-anchor="middle" x="114" y="-137.6" font-family="Times,serif" font-size="14" transform="translate(4 648)">CallExpression</text><text text-anchor="middle" x="114" y="-120.8" font-family="Times,serif" font-size="14" transform="translate(4 648)">Identifier (fuga)</text><text text-anchor="middle" x="114" y="-104" font-family="Times,serif" font-size="14" transform="translate(4 648)">ExpressionStatement</text><text text-anchor="middle" x="114" y="-87.2" font-family="Times,serif" font-size="14" transform="translate(4 648)">CallExpression</text><text text-anchor="middle" x="114" y="-70.4" font-family="Times,serif" font-size="14" transform="translate(4 648)">Identifier (last)</text></g><g class="edge" stroke="#000"><path fill="none" d="M164.835 262.25c-1.917 37.325-6.7 104.984-17.835 161.75-1.687 8.602-3.804 17.534-6.12 26.349"/><path d="m144.195 451.496-6.004 8.73-.75-10.568 6.754 1.838z"/></g><g class="edge" stroke="#000"><path fill="none" d="m89.171 423.86 7.878 26.818"/><path d="m100.416 449.723-.54 10.581-6.176-8.608 6.716-1.973z"/></g><g class="edge" stroke="#000"><path fill="none" d="M118 585.752v25.814"/><path d="m121.5 611.705-3.5 10-3.5-10h7z"/></g></g></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/code-path-analysis/example-trystatement-try-catch.svg b/eslint/docs/src/assets/images/code-path-analysis/example-trystatement-try-catch.svg new file mode 100644 index 0000000..a2a0c8a --- /dev/null +++ b/eslint/docs/src/assets/images/code-path-analysis/example-trystatement-try-catch.svg @@ -0,0 +1 @@ +<svg width="323pt" height="680pt" viewBox="0 0 323 680" xmlns="http://www.w3.org/2000/svg"><g class="graph"><circle stroke="#000" cx="248" cy="-663" r="9" class="node" transform="translate(4 676)"/><g class="node"><path fill="#fff" stroke="#fff" d="M307.147 58.7H196.853l-12 12v84.6l12 12h110.294l12-12V70.7l-12-12z"/><path fill="#fff" stroke="#fff" d="M196.853 58.7c-6 0-12 6-12 12m0 84.6c0 6 6 12 12 12m110.294 0c6 0 12-6 12-12m0-84.6c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M307.147 58.7H196.853m0 0c-6 0-12 6-12 12m0 0v84.6m0 0c0 6 6 12 12 12m0 0h110.294m0 0c6 0 12-6 12-12m0 0V70.7m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="248" y="-600.8" font-family="Times,serif" font-size="14" transform="translate(4 676)">Program</text><text text-anchor="middle" x="248" y="-584" font-family="Times,serif" font-size="14" transform="translate(4 676)">TryStatement</text><text text-anchor="middle" x="248" y="-567.2" font-family="Times,serif" font-size="14" transform="translate(4 676)">BlockStatement</text><text text-anchor="middle" x="248" y="-550.4" font-family="Times,serif" font-size="14" transform="translate(4 676)">ExpressionStatement</text><text text-anchor="middle" x="248" y="-533.6" font-family="Times,serif" font-size="14" transform="translate(4 676)">CallExpression</text><text text-anchor="middle" x="248" y="-516.8" font-family="Times,serif" font-size="14" transform="translate(4 676)">Identifier (foo)</text></g><g class="edge" stroke="#000"><path fill="none" d="M252 22.02v26.167"/><path d="m255.5 48.414-3.5 10-3.5-10h7z"/></g><g class="node" stroke="#000" transform="translate(4 676)"><circle cx="142" cy="-13" r="9"/><circle fill="none" cx="142" cy="-13" r="13"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M242.339 204.398h-62.678l-12 12v17.204l12 12h62.678l12-12v-17.204l-12-12z"/><path fill="#fff" stroke="#fff" d="M179.661 204.398c-6 0-12 6-12 12m0 17.204c0 6 6 12 12 12m62.678 0c6 0 12-6 12-12m0-17.204c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M242.339 204.398h-62.678m0 0c-6 0-12 6-12 12m0 0v17.204m0 0c0 6 6 12 12 12m0 0h62.678m0 0c6 0 12-6 12-12m0 0v-17.204m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="207" y="-455.2" font-family="Times,serif" font-size="14" transform="translate(4 676)">IfStatement</text><text text-anchor="middle" x="207" y="-438.4" font-family="Times,serif" font-size="14" transform="translate(4 676)">Identifier (a)</text></g><g class="edge" stroke="#000"><path fill="none" d="m232.101 167.389-10.214 27.403"/><path d="m225.164 196.02-6.772 8.147.213-10.592 6.559 2.445z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M254.147 394.399H143.853l-12 12v101.202l12 12h110.294l12-12V406.399l-12-12z"/><path fill="#fff" stroke="#fff" d="M143.853 394.399c-6 0-12 6-12 12m0 101.202c0 6 6 12 12 12m110.294 0c6 0 12-6 12-12m0-101.202c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M254.147 394.399H143.853m0 0c-6 0-12 6-12 12m0 0v101.202m0 0c0 6 6 12 12 12m0 0h110.294m0 0c6 0 12-6 12-12m0 0V406.399m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="195" y="-265.2" font-family="Times,serif" font-size="14" transform="translate(4 676)">CatchClause</text><text text-anchor="middle" x="195" y="-248.4" font-family="Times,serif" font-size="14" transform="translate(4 676)">Identifier (err)</text><text text-anchor="middle" x="195" y="-231.6" font-family="Times,serif" font-size="14" transform="translate(4 676)">BlockStatement</text><text text-anchor="middle" x="195" y="-214.8" font-family="Times,serif" font-size="14" transform="translate(4 676)">ExpressionStatement</text><text text-anchor="middle" x="195" y="-198" font-family="Times,serif" font-size="14" transform="translate(4 676)">CallExpression</text><text text-anchor="middle" x="195" y="-181.2" font-family="Times,serif" font-size="14" transform="translate(4 676)">Identifier (hoge)</text><text text-anchor="middle" x="195" y="-164.4" font-family="Times,serif" font-size="14" transform="translate(4 676)">Identifier (err)</text></g><g class="edge" stroke="#000"><path fill="none" d="M269.496 167.376C283.169 217.839 296.566 295 275 358c-3.242 9.472-7.815 18.737-13.126 27.556"/><path d="m264.672 387.677-8.334 6.542 2.436-10.311 5.898 3.769z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M254.329 282.3h-86.658l-12 12v51.4l12 12h86.658l12-12v-51.4l-12-12z"/><path fill="#fff" stroke="#fff" d="M167.671 282.3c-6 0-12 6-12 12m0 51.4c0 6 6 12 12 12m86.658 0c6 0 12-6 12-12m0-51.4c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M254.329 282.3h-86.658m0 0c-6 0-12 6-12 12m0 0v51.4m0 0c0 6 6 12 12 12m0 0h86.658m0 0c6 0 12-6 12-12m0 0v-51.4m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="207" y="-377" font-family="Times,serif" font-size="14" transform="translate(4 676)">BlockStatement</text><text text-anchor="middle" x="207" y="-360.2" font-family="Times,serif" font-size="14" transform="translate(4 676)">ThrowStatement</text><text text-anchor="middle" x="207" y="-343.4" font-family="Times,serif" font-size="14" transform="translate(4 676)">NewExpression</text><text text-anchor="middle" x="207" y="-326.6" font-family="Times,serif" font-size="14" transform="translate(4 676)">Identifier (Error)</text></g><g class="edge" stroke="#000"><path fill="none" d="M211 245.723v26.297"/><path d="m214.5 272.035-3.5 10-3.5-10h7z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M126.147 290.599H15.853l-12 12v34.802l12 12h110.294l12-12v-34.802l-12-12z"/><path fill="#fff" stroke="#fff" d="M15.853 290.599c-6 0-12 6-12 12m0 34.802c0 6 6 12 12 12m110.294 0c6 0 12-6 12-12m0-34.802c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M126.147 290.599H15.853m0 0c-6 0-12 6-12 12m0 0v34.802m0 0c0 6 6 12 12 12m0 0h110.294m0 0c6 0 12-6 12-12m0 0v-34.802m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="67" y="-368.6" font-family="Times,serif" font-size="14" transform="translate(4 676)">ExpressionStatement</text><text text-anchor="middle" x="67" y="-351.8" font-family="Times,serif" font-size="14" transform="translate(4 676)">CallExpression</text><text text-anchor="middle" x="67" y="-335" font-family="Times,serif" font-size="14" transform="translate(4 676)">Identifier (bar)</text></g><g class="edge" stroke="#000"><path fill="none" d="m181.31 245.723-59.265 39.368"/><path d="m123.93 288.041-10.266 2.618 6.393-8.449 3.873 5.831z"/></g><g class="edge" stroke="#000"><path fill="none" d="m207.721 357.889-2.323 26.129"/><path d="m208.863 384.578-4.372 9.651-2.601-10.271 6.973.62z"/></g><g class="edge" stroke="#000"><path fill="none" d="m97.833 349.3 35.718 37.671"/><path d="m136.227 384.707 4.34 9.665-9.42-4.849 5.08-4.816z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M201.147 555.599H90.853l-12 12v34.802l12 12h110.294l12-12V567.6l-12-12z"/><path fill="#fff" stroke="#fff" d="M90.853 555.599c-6 0-12 6-12 12m0 34.802c0 6 6 12 12 12m110.294 0c6 0 12-6 12-12m0-34.802c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M201.147 555.599H90.853m0 0c-6 0-12 6-12 12m0 0v34.802m0 0c0 6 6 12 12 12m0 0h110.294m0 0c6 0 12-6 12-12m0 0V567.6m0-.001c0-6-6-12-12-12"/><text text-anchor="middle" x="142" y="-103.6" font-family="Times,serif" font-size="14" transform="translate(4 676)">ExpressionStatement</text><text text-anchor="middle" x="142" y="-86.8" font-family="Times,serif" font-size="14" transform="translate(4 676)">CallExpression</text><text text-anchor="middle" x="142" y="-70" font-family="Times,serif" font-size="14" transform="translate(4 676)">Identifier (last)</text></g><g class="edge" stroke="#000"><path fill="none" d="M77.536 349.236C86.703 388.013 104.357 459.795 123 520c2.611 8.431 5.658 17.395 8.664 25.861"/><path d="m135.044 544.917.101 10.594-6.686-8.219 6.585-2.375z"/></g><g class="edge" stroke="#000"><path fill="none" d="m172.966 519.893-11.128 26.455"/><path d="m164.974 547.92-7.104 7.861.651-10.575 6.453 2.714z"/></g><g class="edge" stroke="#000"><path fill="none" d="M146 614.3v25.642"/><path d="m149.5 639.973-3.5 10-3.5-10h7z"/></g></g></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/code-path-analysis/example-trystatement-try-finally.svg b/eslint/docs/src/assets/images/code-path-analysis/example-trystatement-try-finally.svg new file mode 100644 index 0000000..68c7801 --- /dev/null +++ b/eslint/docs/src/assets/images/code-path-analysis/example-trystatement-try-finally.svg @@ -0,0 +1 @@ +<svg width="392" height="490pt" viewBox="0 0 294 490" xmlns="http://www.w3.org/2000/svg"><g class="graph"><circle stroke="#000" cx="171" cy="-473" r="9" class="node" transform="translate(4 486)"/><g class="node"><path fill="#fff" stroke="#fff" d="M230.147 58.7H119.853l-12 12v84.6l12 12h110.294l12-12V70.7l-12-12z"/><path fill="#fff" stroke="#fff" d="M119.853 58.7c-6 0-12 6-12 12m0 84.6c0 6 6 12 12 12m110.294 0c6 0 12-6 12-12m0-84.6c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M230.147 58.7H119.853m0 0c-6 0-12 6-12 12m0 0v84.6m0 0c0 6 6 12 12 12m0 0h110.294m0 0c6 0 12-6 12-12m0 0V70.7m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="171" y="-410.8" font-family="Times,serif" font-size="14" transform="translate(4 486)">Program</text><text text-anchor="middle" x="171" y="-394" font-family="Times,serif" font-size="14" transform="translate(4 486)">TryStatement</text><text text-anchor="middle" x="171" y="-377.2" font-family="Times,serif" font-size="14" transform="translate(4 486)">BlockStatement</text><text text-anchor="middle" x="171" y="-360.4" font-family="Times,serif" font-size="14" transform="translate(4 486)">ExpressionStatement</text><text text-anchor="middle" x="171" y="-343.6" font-family="Times,serif" font-size="14" transform="translate(4 486)">CallExpression</text><text text-anchor="middle" x="171" y="-326.8" font-family="Times,serif" font-size="14" transform="translate(4 486)">Identifier (foo)</text></g><g class="edge" stroke="#000"><path fill="none" d="M175 22.02v26.167"/><path d="m178.5 48.414-3.5 10-3.5-10h7z"/></g><g class="node" stroke="#000" transform="translate(4 486)"><circle cx="67" cy="-13" r="9"/><circle fill="none" cx="67" cy="-13" r="13"/></g><g class="node" transform="translate(4 486)"><circle fill="#fff" stroke="#000" cx="219" cy="-13" r="11"/><text text-anchor="middle" x="219" y="-8.8" font-family="Times,serif" font-size="14">✘</text></g><g class="node"><path fill="#fff" stroke="#fff" d="M183.147 203.599H72.853l-12 12v34.802l12 12h110.294l12-12v-34.802l-12-12z"/><path fill="#fff" stroke="#fff" d="M72.853 203.599c-6 0-12 6-12 12m0 34.802c0 6 6 12 12 12m110.294 0c6 0 12-6 12-12m0-34.802c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M183.147 203.599H72.853m0 0c-6 0-12 6-12 12m0 0v34.802m0 0c0 6 6 12 12 12m0 0h110.294m0 0c6 0 12-6 12-12m0 0v-34.802m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="124" y="-265.6" font-family="Times,serif" font-size="14" transform="translate(4 486)">ExpressionStatement</text><text text-anchor="middle" x="124" y="-248.8" font-family="Times,serif" font-size="14" transform="translate(4 486)">CallExpression</text><text text-anchor="middle" x="124" y="-232" font-family="Times,serif" font-size="14" transform="translate(4 486)">Identifier (bar)</text></g><g class="edge" stroke="#000"><path fill="none" d="m153.7 167.476-10.666 26.78"/><path d="m146.284 195.553-6.952 7.995.449-10.585 6.503 2.59z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M278.147 323.3H167.853l-12 12v51.4l12 12h110.294l12-12v-51.4l-12-12z"/><path fill="#fff" stroke="#fff" d="M167.853 323.3c-6 0-12 6-12 12m0 51.4c0 6 6 12 12 12m110.294 0c6 0 12-6 12-12m0-51.4c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M278.147 323.3H167.853m0 0c-6 0-12 6-12 12m0 0v51.4m0 0c0 6 6 12 12 12m0 0h110.294m0 0c6 0 12-6 12-12m0 0v-51.4m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="219" y="-146" font-family="Times,serif" font-size="14" transform="translate(4 486)">BlockStatement</text><text text-anchor="middle" x="219" y="-129.2" font-family="Times,serif" font-size="14" transform="translate(4 486)">ExpressionStatement</text><text text-anchor="middle" x="219" y="-112.4" font-family="Times,serif" font-size="14" transform="translate(4 486)">CallExpression</text><text text-anchor="middle" x="219" y="-95.6" font-family="Times,serif" font-size="14" transform="translate(4 486)">Identifier (fuga)</text></g><g class="edge" stroke="#000"><path fill="none" d="M194.026 167.319c3.746 11.952 7.33 24.656 9.974 36.681 7.95 36.15 12.809 77.796 15.622 108.96"/><path d="m223.124 312.84-2.625 10.264-4.349-9.661 6.974-.603z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M126.147 298.399H15.853l-12 12v101.202l12 12h110.294l12-12V310.399l-12-12z"/><path fill="#fff" stroke="#fff" d="M15.853 298.399c-6 0-12 6-12 12m0 101.201c0 6 6 12 12 12m110.294 0c6 0 12-6 12-12m0-101.201c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M126.147 298.399H15.853m0 0c-6 0-12 6-12 12m0 0v101.202m0-.001c0 6 6 12 12 12m0 0h110.294m0 0c6 0 12-6 12-12m0 0V310.4m0-.001c0-6-6-12-12-12"/><text text-anchor="middle" x="67" y="-171.2" font-family="Times,serif" font-size="14" transform="translate(4 486)">BlockStatement</text><text text-anchor="middle" x="67" y="-154.4" font-family="Times,serif" font-size="14" transform="translate(4 486)">ExpressionStatement</text><text text-anchor="middle" x="67" y="-137.6" font-family="Times,serif" font-size="14" transform="translate(4 486)">CallExpression</text><text text-anchor="middle" x="67" y="-120.8" font-family="Times,serif" font-size="14" transform="translate(4 486)">Identifier (fuga)</text><text text-anchor="middle" x="67" y="-104" font-family="Times,serif" font-size="14" transform="translate(4 486)">ExpressionStatement</text><text text-anchor="middle" x="67" y="-87.2" font-family="Times,serif" font-size="14" transform="translate(4 486)">CallExpression</text><text text-anchor="middle" x="67" y="-70.4" font-family="Times,serif" font-size="14" transform="translate(4 486)">Identifier (last)</text></g><g class="edge" stroke="#000"><path fill="none" d="m115.208 262.277-12.17 26.902"/><path d="m106.207 290.667-7.311 7.668.933-10.554 6.378 2.886z"/></g><g class="edge" stroke="#000"><path fill="none" d="m149.32 262.277 39.59 52.509"/><path d="m192.029 313.109 3.226 10.092-8.815-5.878 5.589-4.214z"/></g><g class="edge" stroke="#000"><path fill="none" d="M71 423.752v25.814"/><path d="m74.5 449.705-3.5 10-3.5-10h7z"/></g><g class="edge" stroke="#000"><path fill="none" d="M223 398.628v53.191"/><path d="m226.5 451.913-3.5 10-3.5-10h7z"/></g></g></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/code-path-analysis/example-when-there-is-a-function-f.svg b/eslint/docs/src/assets/images/code-path-analysis/example-when-there-is-a-function-f.svg new file mode 100644 index 0000000..53bb946 --- /dev/null +++ b/eslint/docs/src/assets/images/code-path-analysis/example-when-there-is-a-function-f.svg @@ -0,0 +1 @@ +<svg width="360" height="328pt" viewBox="0 0 270 328" xmlns="http://www.w3.org/2000/svg"><g class="graph"><circle stroke="#000" cx="125" cy="-311" r="9" class="node" transform="translate(4 324)"/><g class="node"><path fill="#fff" stroke="#fff" d="M182.307 58.7H75.693l-12 12v84.6l12 12h106.614l12-12V70.7l-12-12z"/><path fill="#fff" stroke="#fff" d="M75.693 58.7c-6 0-12 6-12 12m0 84.6c0 6 6 12 12 12m106.614 0c6 0 12-6 12-12m0-84.6c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M182.307 58.7H75.693m0 0c-6 0-12 6-12 12m0 0v84.6m0 0c0 6 6 12 12 12m0 0h106.614m0 0c6 0 12-6 12-12m0 0V70.7m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="125" y="-248.8" font-family="Times,serif" font-size="14" transform="translate(4 324)">FunctionDeclaration</text><text text-anchor="middle" x="125" y="-232" font-family="Times,serif" font-size="14" transform="translate(4 324)">Identifier (foo)</text><text text-anchor="middle" x="125" y="-215.2" font-family="Times,serif" font-size="14" transform="translate(4 324)">Identifier (a)</text><text text-anchor="middle" x="125" y="-198.4" font-family="Times,serif" font-size="14" transform="translate(4 324)">BlockStatement</text><text text-anchor="middle" x="125" y="-181.6" font-family="Times,serif" font-size="14" transform="translate(4 324)">IfStatement</text><text text-anchor="middle" x="125" y="-164.8" font-family="Times,serif" font-size="14" transform="translate(4 324)">Identifier (a)</text></g><g class="edge" stroke="#000"><path fill="none" d="M129 22.02v26.167"/><path d="m132.5 48.414-3.5 10-3.5-10h7z"/></g><g class="node" stroke="#000" transform="translate(4 324)"><circle cx="125" cy="-13" r="9"/><circle fill="none" cx="125" cy="-13" r="13"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M102.068 212.398H15.932l-12 12v17.204l12 12h86.136l12-12v-17.204l-12-12z"/><path fill="#fff" stroke="#fff" d="M15.932 212.398c-6 0-12 6-12 12m0 17.204c0 6 6 12 12 12m86.136 0c6 0 12-6 12-12m0-17.204c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M102.068 212.398H15.932m0 0c-6 0-12 6-12 12m0 0v17.204m0 0c0 6 6 12 12 12m0 0h86.136m0 0c6 0 12-6 12-12m0 0v-17.204m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="55" y="-95.2" font-family="Times,serif" font-size="14" transform="translate(4 324)">BlockStatement</text><text text-anchor="middle" x="55" y="-78.4" font-family="Times,serif" font-size="14" transform="translate(4 324)">ReturnStatement</text></g><g class="edge" stroke="#000"><path fill="none" d="m97.277 167.476-21.464 36.182"/><path d="m78.8 205.484-8.113 6.815 2.092-10.386 6.02 3.571z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M254.147 203.599H143.853l-12 12v34.802l12 12h110.294l12-12V215.6l-12-12z"/><path fill="#fff" stroke="#fff" d="M143.853 203.599c-6 0-12 6-12 12m0 34.802c0 6 6 12 12 12m110.294 0c6 0 12-6 12-12m0-34.802c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M254.147 203.599H143.853m0 0c-6 0-12 6-12 12m0 0v34.802m0 0c0 6 6 12 12 12m0 0h110.294m0 0c6 0 12-6 12-12m0 0V215.6m0-.001c0-6-6-12-12-12"/><text text-anchor="middle" x="195" y="-103.6" font-family="Times,serif" font-size="14" transform="translate(4 324)">ExpressionStatement</text><text text-anchor="middle" x="195" y="-86.8" font-family="Times,serif" font-size="14" transform="translate(4 324)">CallExpression</text><text text-anchor="middle" x="195" y="-70" font-family="Times,serif" font-size="14" transform="translate(4 324)">Identifier (bar)</text></g><g class="edge" stroke="#000"><path fill="none" d="m160.723 167.476 16.212 27.329"/><path d="m180.03 193.162 2.092 10.386-8.112-6.815 6.02-3.571z"/></g><g class="edge" stroke="#000"><path fill="none" d="m77.392 253.968 36.042 39.132"/><path d="m116.278 291.02 4.2 9.727-9.349-4.984 5.149-4.742z"/></g><g class="edge" stroke="#000"><path fill="none" d="m172.935 262.3-28.634 31.087"/><path d="m146.676 295.976-9.35 4.984 4.201-9.727 5.149 4.743z"/></g></g></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/code-path-analysis/example-when-there-is-a-function-g.svg b/eslint/docs/src/assets/images/code-path-analysis/example-when-there-is-a-function-g.svg new file mode 100644 index 0000000..4d3fe12 --- /dev/null +++ b/eslint/docs/src/assets/images/code-path-analysis/example-when-there-is-a-function-g.svg @@ -0,0 +1 @@ +<svg width="142pt" height="312" viewBox="0 0 142 234" xmlns="http://www.w3.org/2000/svg"><g class="graph"><circle stroke="#000" cx="67" cy="-217" r="9" class="node" transform="translate(4 230)"/><g class="node"><path fill="#fff" stroke="#fff" d="M126.147 58.7H15.853l-12 12v84.6l12 12h110.294l12-12V70.7l-12-12z"/><path fill="#fff" stroke="#fff" d="M15.853 58.7c-6 0-12 6-12 12m0 84.6c0 6 6 12 12 12m110.294 0c6 0 12-6 12-12m0-84.6c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M126.147 58.7H15.853m0 0c-6 0-12 6-12 12m0 0v84.6m0 0c0 6 6 12 12 12m0 0h110.294m0 0c6 0 12-6 12-12m0 0V70.7m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="67" y="-154.8" font-family="Times,serif" font-size="14" transform="translate(4 230)">Program</text><text text-anchor="middle" x="67" y="-138" font-family="Times,serif" font-size="14" transform="translate(4 230)">FunctionDeclaration</text><text text-anchor="middle" x="67" y="-121.2" font-family="Times,serif" font-size="14" transform="translate(4 230)">ExpressionStatement</text><text text-anchor="middle" x="67" y="-104.4" font-family="Times,serif" font-size="14" transform="translate(4 230)">CallExpression</text><text text-anchor="middle" x="67" y="-87.6" font-family="Times,serif" font-size="14" transform="translate(4 230)">Identifier (foo)</text><text text-anchor="middle" x="67" y="-70.8" font-family="Times,serif" font-size="14" transform="translate(4 230)">Literal (false)</text></g><g class="edge" stroke="#000"><path fill="none" d="M71 22.02v26.167"/><path d="m74.5 48.414-3.5 10-3.5-10h7z"/></g><g class="node" stroke="#000" transform="translate(4 230)"><circle cx="67" cy="-13" r="9"/><circle fill="none" cx="67" cy="-13" r="13"/></g><g class="edge" stroke="#000"><path fill="none" d="M71 167.39v26.352"/><path d="m74.5 193.81-3.5 10-3.5-10h7z"/></g></g></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/code-path-analysis/example-whilestatement.svg b/eslint/docs/src/assets/images/code-path-analysis/example-whilestatement.svg new file mode 100644 index 0000000..f039443 --- /dev/null +++ b/eslint/docs/src/assets/images/code-path-analysis/example-whilestatement.svg @@ -0,0 +1 @@ +<svg width="544" height="416pt" viewBox="0 0 408 416" xmlns="http://www.w3.org/2000/svg"><g class="graph"><circle stroke="#000" cx="193" cy="-399" r="9" class="node" transform="translate(4 412)"/><g class="node"><path fill="#fff" stroke="#fff" d="M238.149 58.398h-82.298l-12 12v17.204l12 12h82.298l12-12V70.398l-12-12z"/><path fill="#fff" stroke="#fff" d="M155.851 58.398c-6 0-12 6-12 12m0 17.204c0 6 6 12 12 12m82.298 0c6 0 12-6 12-12m0-17.204c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M238.149 58.398h-82.298m0 0c-6 0-12 6-12 12m0 0v17.204m0 0c0 6 6 12 12 12m0 0h82.298m0 0c6 0 12-6 12-12m0 0V70.398m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="193" y="-337.2" font-family="Times,serif" font-size="14" transform="translate(4 412)">Program</text><text text-anchor="middle" x="193" y="-320.4" font-family="Times,serif" font-size="14" transform="translate(4 412)">WhileStatement</text></g><g class="edge" stroke="#000"><path fill="none" d="M197 22.106V48.06"/><path d="m200.5 48.158-3.5 10-3.5-10h7z"/></g><g class="node" stroke="#000" transform="translate(4 412)"><circle cx="335" cy="-29" r="9"/><circle fill="none" cx="335" cy="-29" r="13"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M228.339 136h-62.678l-12 12v12l12 12h62.678l12-12v-12l-12-12z"/><path fill="#fff" stroke="#fff" d="M165.661 136c-6 0-12 6-12 12m0 12c0 6 6 12 12 12m62.678 0c6 0 12-6 12-12m0-12c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M228.339 136h-62.678m0 0c-6 0-12 6-12 12m0 0v12m0 0c0 6 6 12 12 12m0 0h62.678m0 0c6 0 12-6 12-12m0 0v-12m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="193" y="-253.8" font-family="Times,serif" font-size="14" transform="translate(4 412)">Identifier (a)</text></g><g class="edge" stroke="#000"><path fill="none" d="M197 99.948v25.416"/><path d="m200.5 125.561-3.5 10-3.5-10h7z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M205.147 208.7H94.853l-12 12v84.6l12 12h110.294l12-12v-84.6l-12-12z"/><path fill="#fff" stroke="#fff" d="M94.853 208.7c-6 0-12 6-12 12m0 84.6c0 6 6 12 12 12m110.294 0c6 0 12-6 12-12m0-84.6c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M205.147 208.7H94.853m0 0c-6 0-12 6-12 12m0 0v84.6m0 0c0 6 6 12 12 12m0 0h110.294m0 0c6 0 12-6 12-12m0 0v-84.6m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="146" y="-186.8" font-family="Times,serif" font-size="14" transform="translate(4 412)">BlockStatement</text><text text-anchor="middle" x="146" y="-170" font-family="Times,serif" font-size="14" transform="translate(4 412)">ExpressionStatement</text><text text-anchor="middle" x="146" y="-153.2" font-family="Times,serif" font-size="14" transform="translate(4 412)">CallExpression</text><text text-anchor="middle" x="146" y="-136.4" font-family="Times,serif" font-size="14" transform="translate(4 412)">Identifier (foo)</text><text text-anchor="middle" x="146" y="-119.6" font-family="Times,serif" font-size="14" transform="translate(4 412)">IfStatement</text><text text-anchor="middle" x="146" y="-102.8" font-family="Times,serif" font-size="14" transform="translate(4 412)">Identifier (b)</text></g><g class="edge" stroke="#000"><path fill="none" d="m189.449 172.191-11.832 26.937"/><path d="m180.817 200.546-7.227 7.748.818-10.563 6.409 2.815z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M392.314 242.398H285.686l-12 12v17.204l12 12h106.628l12-12v-17.204l-12-12z"/><path fill="#fff" stroke="#fff" d="M285.686 242.398c-6 0-12 6-12 12m0 17.204c0 6 6 12 12 12m106.628 0c6 0 12-6 12-12m0-17.204c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M392.314 242.398H285.686m0 0c-6 0-12 6-12 12m0 0v17.204m0 0c0 6 6 12 12 12m0 0h106.628m0 0c6 0 12-6 12-12m0 0v-17.204m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="335" y="-153.2" font-family="Times,serif" font-size="14" transform="translate(4 412)">WhileStatement:exit</text><text text-anchor="middle" x="335" y="-136.4" font-family="Times,serif" font-size="14" transform="translate(4 412)">Program:exit</text></g><g class="edge" stroke="#000"><path fill="none" d="m219.815 172.191 84.857 63.942"/><path d="m306.987 233.495 5.88 8.813-10.093-3.222 4.213-5.591z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M114.49 362.398H15.51l-12 12v17.204l12 12h98.98l12-12v-17.204l-12-12z"/><path fill="#fff" stroke="#fff" d="M15.51 362.398c-6 0-12 6-12 12m0 17.204c0 6 6 12 12 12m98.98 0c6 0 12-6 12-12m0-17.204c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M114.49 362.398H15.51m0 0c-6 0-12 6-12 12m0 0v17.204m0 0c0 6 6 12 12 12m0 0h98.98m0 0c6 0 12-6 12-12m0 0v-17.204m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="61" y="-33.2" font-family="Times,serif" font-size="14" transform="translate(4 412)">BlockStatement</text><text text-anchor="middle" x="61" y="-16.4" font-family="Times,serif" font-size="14" transform="translate(4 412)">ContinueStatement</text></g><g class="edge" stroke="#000"><path fill="none" d="m111.479 317.476-26.298 36.508"/><path d="m87.876 356.23-8.685 6.07 3.005-10.16 5.68 4.09z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M286.147 353.599H175.853l-12 12V400.4l12 12h110.294l12-12v-34.8l-12-12z"/><path fill="#fff" stroke="#fff" d="M175.853 353.599c-6 0-12 6-12 12m0 34.802c0 6 6 12 12 12m110.294 0c6 0 12-6 12-12m0-34.802c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M286.147 353.599H175.853m0 0c-6 0-12 6-12 12m0 0V400.4m0 .001c0 6 6 12 12 12m0 0h110.294m0 0c6 0 12-6 12-12m0 0V365.6m0-.001c0-6-6-12-12-12"/><text text-anchor="middle" x="227" y="-41.6" font-family="Times,serif" font-size="14" transform="translate(4 412)">ExpressionStatement</text><text text-anchor="middle" x="227" y="-24.8" font-family="Times,serif" font-size="14" transform="translate(4 412)">CallExpression</text><text text-anchor="middle" x="227" y="-8" font-family="Times,serif" font-size="14" transform="translate(4 412)">Identifier (bar)</text></g><g class="edge" stroke="#000"><path fill="none" d="m186.708 317.476 18.948 27.603"/><path d="m208.696 343.323 2.774 10.225-8.545-6.263 5.771-3.962z"/></g><g class="edge" stroke="#000"><path fill="none" d="M59.818 362.127C52.005 327.406 41.352 254.931 74 208c16.001-23.001 44.192-36.092 69.552-43.506"/><path d="m142.9 161.045 10.566.787-8.751 5.974-1.815-6.761z"/></g><g class="edge" stroke="#000"><path fill="none" d="M339 283.751v76.008"/><path d="m342.5 359.783-3.5 10-3.5-10h7z"/></g><g class="edge" stroke="#000"><path fill="none" d="M234.184 353.687c3.025-34.93 5.336-95.809-8.184-145.687-2.512-9.268-6.936-18.685-11.583-26.959"/><path d="m211.291 182.633-2.126-10.38 8.134 6.789-6.008 3.591z"/></g></g></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/code-path-analysis/helo.svg b/eslint/docs/src/assets/images/code-path-analysis/helo.svg new file mode 100644 index 0000000..cd72a37 --- /dev/null +++ b/eslint/docs/src/assets/images/code-path-analysis/helo.svg @@ -0,0 +1 @@ +<svg width="238pt" height="478pt" viewBox="0 0 238 478" xmlns="http://www.w3.org/2000/svg"><g class="graph"><circle stroke="#000" cx="164" cy="-461" r="9" class="node" transform="translate(4 474)"/><g class="node"><path fill="#fff" stroke="#fff" d="M216.228 58.3h-96.456l-12 12v51.4l12 12h96.456l12-12V70.3l-12-12z"/><path fill="#fff" stroke="#fff" d="M119.772 58.3c-6 0-12 6-12 12m0 51.4c0 6 6 12 12 12m96.456 0c6 0 12-6 12-12m0-51.4c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M216.228 58.3h-96.456m0 0c-6 0-12 6-12 12m0 0v51.4m0 0c0 6 6 12 12 12m0 0h96.456m0 0c6 0 12-6 12-12m0 0V70.3m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="164" y="-399" font-family="Times,serif" font-size="14" transform="translate(4 474)">Program</text><text text-anchor="middle" x="164" y="-382.2" font-family="Times,serif" font-size="14" transform="translate(4 474)">IfStatement</text><text text-anchor="middle" x="164" y="-365.4" font-family="Times,serif" font-size="14" transform="translate(4 474)">LogicalExpression</text><text text-anchor="middle" x="164" y="-348.6" font-family="Times,serif" font-size="14" transform="translate(4 474)">Identifier (a)</text></g><g class="edge" stroke="#000"><path fill="none" d="M168 22.063v26.089"/><path d="m171.5 48.34-3.5 10-3.5-10h7z"/></g><g class="node" stroke="#000" transform="translate(4 474)"><circle cx="162" cy="-13" r="9"/><circle fill="none" cx="162" cy="-13" r="13"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M163.429 170h-62.858l-12 12v12l12 12h62.858l12-12v-12l-12-12z"/><path fill="#fff" stroke="#fff" d="M100.571 170c-6 0-12 6-12 12m0 12c0 6 6 12 12 12m62.858 0c6 0 12-6 12-12m0-12c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M163.429 170h-62.858m0 0c-6 0-12 6-12 12m0 0v12m0 0c0 6 6 12 12 12m0 0h62.858m0 0c6 0 12-6 12-12m0 0v-12m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="128" y="-281.8" font-family="Times,serif" font-size="14" transform="translate(4 474)">Identifier (b)</text></g><g class="edge" stroke="#000"><path fill="none" d="m153.357 133.606-10.592 26.482"/><path d="m145.905 161.662-6.964 7.985.464-10.585 6.5 2.6z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M221.147 353.599H110.853l-12 12v34.802l12 12h110.294l12-12V365.6l-12-12z"/><path fill="#fff" stroke="#fff" d="M110.853 353.599c-6 0-12 6-12 12m0 34.802c0 6 6 12 12 12m110.294 0c6 0 12-6 12-12m0-34.802c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M221.147 353.599H110.853m0 0c-6 0-12 6-12 12m0 0v34.802m0 0c0 6 6 12 12 12m0 0h110.294m0 0c6 0 12-6 12-12m0 0V365.6m0-.001c0-6-6-12-12-12"/><text text-anchor="middle" x="162" y="-103.6" font-family="Times,serif" font-size="14" transform="translate(4 474)">ExpressionStatement</text><text text-anchor="middle" x="162" y="-86.8" font-family="Times,serif" font-size="14" transform="translate(4 474)">CallExpression</text><text text-anchor="middle" x="162" y="-70" font-family="Times,serif" font-size="14" transform="translate(4 474)">Identifier (bar)</text></g><g class="edge" stroke="#000"><path fill="none" d="M177.704 133.882c2.583 11.485 5.011 24.251 6.296 36.118 6.559 60.558-2.801 131.065-10.293 173.575"/><path d="m177.135 344.286-5.233 9.213-1.654-10.465 6.887 1.252z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M126.147 242.3H15.853l-12 12v51.4l12 12h110.294l12-12v-51.4l-12-12z"/><path fill="#fff" stroke="#fff" d="M15.853 242.3c-6 0-12 6-12 12m0 51.4c0 6 6 12 12 12m110.294 0c6 0 12-6 12-12m0-51.4c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M126.147 242.3H15.853m0 0c-6 0-12 6-12 12m0 0v51.4m0 0c0 6 6 12 12 12m0 0h110.294m0 0c6 0 12-6 12-12m0 0v-51.4m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="67" y="-215" font-family="Times,serif" font-size="14" transform="translate(4 474)">BlockStatement</text><text text-anchor="middle" x="67" y="-198.2" font-family="Times,serif" font-size="14" transform="translate(4 474)">ExpressionStatement</text><text text-anchor="middle" x="67" y="-181.4" font-family="Times,serif" font-size="14" transform="translate(4 474)">CallExpression</text><text text-anchor="middle" x="67" y="-164.6" font-family="Times,serif" font-size="14" transform="translate(4 474)">Identifier (foo)</text></g><g class="edge" stroke="#000"><path fill="none" d="m120.239 206.353-18.593 27.431"/><path d="m104.363 236.015-8.508 6.314 2.713-10.242 5.795 3.928z"/></g><g class="edge" stroke="#000"><path fill="none" d="M137.482 206.034c3.155 10.318 6.983 23.796 9.518 35.966 7.074 33.962 12.131 73.129 15.24 101.384"/><path d="m165.754 343.33-2.417 10.315-4.543-9.571 6.96-.744z"/></g><g class="edge" stroke="#000"><path fill="none" d="m105.566 317.749 26.698 28.384"/><path d="m135.053 343.99 4.302 9.682-9.401-4.886 5.099-4.796z"/></g><g class="edge" stroke="#000"><path fill="none" d="M166 412.3v25.642"/><path d="m169.5 437.973-3.5 10-3.5-10h7z"/></g></g></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/code-path-analysis/loop-event-example-for-1.svg b/eslint/docs/src/assets/images/code-path-analysis/loop-event-example-for-1.svg new file mode 100644 index 0000000..727ec12 --- /dev/null +++ b/eslint/docs/src/assets/images/code-path-analysis/loop-event-example-for-1.svg @@ -0,0 +1 @@ +<svg width="136pt" height="344pt" viewBox="0 0 136 344" xmlns="http://www.w3.org/2000/svg"><g class="graph"><circle stroke="#000" cx="64" cy="-327" r="9" class="node" transform="translate(4 340)"/><g class="node"><path fill="#fff" stroke="#fff" d="M120.617 58.7H15.383l-12 12v84.6l12 12h105.234l12-12V70.7l-12-12z"/><path fill="#fff" stroke="#fff" d="M15.383 58.7c-6 0-12 6-12 12m0 84.6c0 6 6 12 12 12m105.234 0c6 0 12-6 12-12m0-84.6c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M120.617 58.7H15.383m0 0c-6 0-12 6-12 12m0 0v84.6m0 0c0 6 6 12 12 12m0 0h105.234m0 0c6 0 12-6 12-12m0 0V70.7m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="64" y="-264.8" font-family="Times,serif" font-size="14" transform="translate(4 340)">Program</text><text text-anchor="middle" x="64" y="-248" font-family="Times,serif" font-size="14" transform="translate(4 340)">ForStatement</text><text text-anchor="middle" x="64" y="-231.2" font-family="Times,serif" font-size="14" transform="translate(4 340)">VariableDeclaration</text><text text-anchor="middle" x="64" y="-214.4" font-family="Times,serif" font-size="14" transform="translate(4 340)">VariableDeclarator</text><text text-anchor="middle" x="64" y="-197.6" font-family="Times,serif" font-size="14" transform="translate(4 340)">Identifier (i)</text><text text-anchor="middle" x="64" y="-180.8" font-family="Times,serif" font-size="14" transform="translate(4 340)">Literal (0)</text></g><g class="edge" stroke="#000"><path fill="none" d="M68 22.02v26.167"/><path d="m71.5 48.414-3.5 10-3.5-10h7z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M114.233 203.599H21.767l-12 12v34.802l12 12h92.466l12-12V215.6l-12-12z"/><path fill="#fff" stroke="#fff" d="M21.767 203.599c-6 0-12 6-12 12m0 34.802c0 6 6 12 12 12m92.466 0c6 0 12-6 12-12m0-34.802c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M114.233 203.599H21.767m0 0c-6 0-12 6-12 12m0 0v34.802m0 0c0 6 6 12 12 12m0 0h92.466m0 0c6 0 12-6 12-12m0 0V215.6m0-.001c0-6-6-12-12-12"/><text text-anchor="middle" x="64" y="-119.6" font-family="Times,serif" font-size="14" transform="translate(4 340)">BinaryExpression</text><text text-anchor="middle" x="64" y="-102.8" font-family="Times,serif" font-size="14" transform="translate(4 340)">Identifier (i)</text><text text-anchor="middle" x="64" y="-86" font-family="Times,serif" font-size="14" transform="translate(4 340)">Literal (10)</text></g><g class="edge" stroke="#000"><path fill="none" d="M68 167.476v25.952"/><path d="m71.5 193.548-3.5 10-3.5-10h7z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M114.977 298.398H21.023l-12 12v17.204l12 12h93.954l12-12v-17.204l-12-12z"/><path fill="#fff" stroke="#fff" d="M21.023 298.398c-6 0-12 6-12 12m0 17.204c0 6 6 12 12 12m93.954 0c6 0 12-6 12-12m0-17.204c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M114.977 298.398H21.023m0 0c-6 0-12 6-12 12m0 0v17.204m0 0c0 6 6 12 12 12m0 0h93.954m0 0c6 0 12-6 12-12m0 0v-17.204m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="64" y="-25.2" font-family="Times,serif" font-size="14" transform="translate(4 340)">UpdateExpression</text><text text-anchor="middle" x="64" y="-8.4" font-family="Times,serif" font-size="14" transform="translate(4 340)">Identifier (i)</text></g><path fill="none" d="M68 262.439v25.77m3.5.123-3.5 10-3.5-10h7z" class="edge"/></g></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/code-path-analysis/loop-event-example-for-2.svg b/eslint/docs/src/assets/images/code-path-analysis/loop-event-example-for-2.svg new file mode 100644 index 0000000..70d762f --- /dev/null +++ b/eslint/docs/src/assets/images/code-path-analysis/loop-event-example-for-2.svg @@ -0,0 +1 @@ +<svg width="278pt" height="394pt" viewBox="0 0 278 394" xmlns="http://www.w3.org/2000/svg"><g class="graph"><circle stroke="#000" cx="139" cy="-377" r="9" class="node" transform="translate(4 390)"/><g class="node"><path fill="#fff" stroke="#fff" d="M195.617 58.7H90.383l-12 12v84.6l12 12h105.234l12-12V70.7l-12-12z"/><path fill="#fff" stroke="#fff" d="M90.383 58.7c-6 0-12 6-12 12m0 84.6c0 6 6 12 12 12m105.234 0c6 0 12-6 12-12m0-84.6c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M195.617 58.7H90.383m0 0c-6 0-12 6-12 12m0 0v84.6m0 0c0 6 6 12 12 12m0 0h105.234m0 0c6 0 12-6 12-12m0 0V70.7m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="139" y="-314.8" font-family="Times,serif" font-size="14" transform="translate(4 390)">Program</text><text text-anchor="middle" x="139" y="-298" font-family="Times,serif" font-size="14" transform="translate(4 390)">ForStatement</text><text text-anchor="middle" x="139" y="-281.2" font-family="Times,serif" font-size="14" transform="translate(4 390)">VariableDeclaration</text><text text-anchor="middle" x="139" y="-264.4" font-family="Times,serif" font-size="14" transform="translate(4 390)">VariableDeclarator</text><text text-anchor="middle" x="139" y="-247.6" font-family="Times,serif" font-size="14" transform="translate(4 390)">Identifier (i)</text><text text-anchor="middle" x="139" y="-230.8" font-family="Times,serif" font-size="14" transform="translate(4 390)">Literal (0)</text></g><g class="edge" stroke="#000"><path fill="none" d="M143 22.02v26.167"/><path d="m146.5 48.414-3.5 10-3.5-10h7z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M189.233 203.599H96.767l-12 12v34.802l12 12h92.466l12-12v-34.802l-12-12z"/><path fill="#fff" stroke="#fff" d="M96.767 203.599c-6 0-12 6-12 12m0 34.802c0 6 6 12 12 12m92.466 0c6 0 12-6 12-12m0-34.802c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M189.233 203.599H96.767m0 0c-6 0-12 6-12 12m0 0v34.802m0 0c0 6 6 12 12 12m0 0h92.466m0 0c6 0 12-6 12-12m0 0v-34.802m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="139" y="-169.6" font-family="Times,serif" font-size="14" transform="translate(4 390)">BinaryExpression</text><text text-anchor="middle" x="139" y="-152.8" font-family="Times,serif" font-size="14" transform="translate(4 390)">Identifier (i)</text><text text-anchor="middle" x="139" y="-136" font-family="Times,serif" font-size="14" transform="translate(4 390)">Literal (10)</text></g><g class="edge" stroke="#000"><path fill="none" d="M143 167.476v25.952"/><path d="m146.5 193.548-3.5 10-3.5-10h7z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M126.147 298H15.853l-12 12v68l12 12h110.294l12-12v-68l-12-12z"/><path fill="#fff" stroke="#fff" d="M15.853 298c-6 0-12 6-12 12m0 68c0 6 6 12 12 12m110.294 0c6 0 12-6 12-12m0-68c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M126.147 298H15.853m0 0c-6 0-12 6-12 12m0 0v68m0 0c0 6 6 12 12 12m0 0h110.294m0 0c6 0 12-6 12-12m0 0v-68m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="67" y="-75.4" font-family="Times,serif" font-size="14" transform="translate(4 390)">BlockStatement</text><text text-anchor="middle" x="67" y="-58.6" font-family="Times,serif" font-size="14" transform="translate(4 390)">ExpressionStatement</text><text text-anchor="middle" x="67" y="-41.8" font-family="Times,serif" font-size="14" transform="translate(4 390)">CallExpression</text><text text-anchor="middle" x="67" y="-25" font-family="Times,serif" font-size="14" transform="translate(4 390)">Identifier (foo)</text><text text-anchor="middle" x="67" y="-8.2" font-family="Times,serif" font-size="14" transform="translate(4 390)">Identifier (i)</text></g><g class="edge" stroke="#000"><path fill="none" d="m124.271 262.354-17.842 27.01"/><path d="m109.226 291.481-8.433 6.415 2.592-10.273 5.841 3.858z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M261.977 323.398h-93.954l-12 12v17.204l12 12h93.954l12-12v-17.204l-12-12z"/><path fill="#fff" stroke="#fff" d="M168.023 323.398c-6 0-12 6-12 12m0 17.204c0 6 6 12 12 12m93.954 0c6 0 12-6 12-12m0-17.204c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M261.977 323.398h-93.954m0 0c-6 0-12 6-12 12m0 0v17.204m0 0c0 6 6 12 12 12m0 0h93.954m0 0c6 0 12-6 12-12m0 0v-17.204m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="211" y="-50.2" font-family="Times,serif" font-size="14" transform="translate(4 390)">UpdateExpression</text><text text-anchor="middle" x="211" y="-33.4" font-family="Times,serif" font-size="14" transform="translate(4 390)">Identifier (i)</text></g><path fill="none" d="m161.729 262.354 34.698 52.528m3.021-1.776 2.591 10.273-8.432-6.415 5.841-3.858z" class="edge"/></g></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/code-path-analysis/loop-event-example-for-3.svg b/eslint/docs/src/assets/images/code-path-analysis/loop-event-example-for-3.svg new file mode 100644 index 0000000..5adea13 --- /dev/null +++ b/eslint/docs/src/assets/images/code-path-analysis/loop-event-example-for-3.svg @@ -0,0 +1 @@ +<svg width="248" height="472pt" viewBox="0 0 186 472" xmlns="http://www.w3.org/2000/svg"><g class="graph"><circle stroke="#000" cx="114" cy="-455" r="9" class="node" transform="translate(4 468)"/><g class="node"><path fill="#fff" stroke="#fff" d="M170.617 58.7H65.383l-12 12v84.6l12 12h105.234l12-12V70.7l-12-12z"/><path fill="#fff" stroke="#fff" d="M65.383 58.7c-6 0-12 6-12 12m0 84.6c0 6 6 12 12 12m105.234 0c6 0 12-6 12-12m0-84.6c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M170.617 58.7H65.383m0 0c-6 0-12 6-12 12m0 0v84.6m0 0c0 6 6 12 12 12m0 0h105.234m0 0c6 0 12-6 12-12m0 0V70.7m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="114" y="-392.8" font-family="Times,serif" font-size="14" transform="translate(4 468)">Program</text><text text-anchor="middle" x="114" y="-376" font-family="Times,serif" font-size="14" transform="translate(4 468)">ForStatement</text><text text-anchor="middle" x="114" y="-359.2" font-family="Times,serif" font-size="14" transform="translate(4 468)">VariableDeclaration</text><text text-anchor="middle" x="114" y="-342.4" font-family="Times,serif" font-size="14" transform="translate(4 468)">VariableDeclarator</text><text text-anchor="middle" x="114" y="-325.6" font-family="Times,serif" font-size="14" transform="translate(4 468)">Identifier (i)</text><text text-anchor="middle" x="114" y="-308.8" font-family="Times,serif" font-size="14" transform="translate(4 468)">Literal (0)</text></g><g class="edge" stroke="#000"><path fill="none" d="M118 22.02v26.167"/><path d="m121.5 48.414-3.5 10-3.5-10h7z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M164.233 203.599H71.767l-12 12v34.802l12 12h92.466l12-12v-34.802l-12-12z"/><path fill="#fff" stroke="#fff" d="M71.767 203.599c-6 0-12 6-12 12m0 34.802c0 6 6 12 12 12m92.466 0c6 0 12-6 12-12m0-34.802c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M164.233 203.599H71.767m0 0c-6 0-12 6-12 12m0 0v34.802m0 0c0 6 6 12 12 12m0 0h92.466m0 0c6 0 12-6 12-12m0 0v-34.802m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="114" y="-247.6" font-family="Times,serif" font-size="14" transform="translate(4 468)">BinaryExpression</text><text text-anchor="middle" x="114" y="-230.8" font-family="Times,serif" font-size="14" transform="translate(4 468)">Identifier (i)</text><text text-anchor="middle" x="114" y="-214" font-family="Times,serif" font-size="14" transform="translate(4 468)">Literal (10)</text></g><g class="edge" stroke="#000"><path fill="none" d="M118 167.476v25.952"/><path d="m121.5 193.548-3.5 10-3.5-10h7z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M126.147 298H15.853l-12 12v68l12 12h110.294l12-12v-68l-12-12z"/><path fill="#fff" stroke="#fff" d="M15.853 298c-6 0-12 6-12 12m0 68c0 6 6 12 12 12m110.294 0c6 0 12-6 12-12m0-68c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M126.147 298H15.853m0 0c-6 0-12 6-12 12m0 0v68m0 0c0 6 6 12 12 12m0 0h110.294m0 0c6 0 12-6 12-12m0 0v-68m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="67" y="-153.4" font-family="Times,serif" font-size="14" transform="translate(4 468)">BlockStatement</text><text text-anchor="middle" x="67" y="-136.6" font-family="Times,serif" font-size="14" transform="translate(4 468)">ExpressionStatement</text><text text-anchor="middle" x="67" y="-119.8" font-family="Times,serif" font-size="14" transform="translate(4 468)">CallExpression</text><text text-anchor="middle" x="67" y="-103" font-family="Times,serif" font-size="14" transform="translate(4 468)">Identifier (foo)</text><text text-anchor="middle" x="67" y="-86.2" font-family="Times,serif" font-size="14" transform="translate(4 468)">Identifier (i)</text></g><g class="edge" stroke="#000"><path fill="none" d="m105.774 262.354-11.277 26.153"/><path d="m97.622 290.099-7.174 7.797.746-10.569 6.428 2.772z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M164.977 426.398H71.023l-12 12v17.204l12 12h93.954l12-12v-17.204l-12-12z"/><path fill="#fff" stroke="#fff" d="M71.023 426.398c-6 0-12 6-12 12m0 17.204c0 6 6 12 12 12m93.954 0c6 0 12-6 12-12m0-17.204c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M164.977 426.398H71.023m0 0c-6 0-12 6-12 12m0 0v17.204m0 0c0 6 6 12 12 12m0 0h93.954m0 0c6 0 12-6 12-12m0 0v-17.204m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="114" y="-25.2" font-family="Times,serif" font-size="14" transform="translate(4 468)">UpdateExpression</text><text text-anchor="middle" x="114" y="-8.4" font-family="Times,serif" font-size="14" transform="translate(4 468)">Identifier (i)</text></g><g class="edge" stroke="red"><path fill="none" d="M92.026 390.183c4.216 9.06 8.54 18.35 12.419 26.689"/><path fill="red" d="m107.718 415.608 1.045 10.543-7.392-7.59 6.347-2.953z"/></g><path fill="none" d="M131.225 426.186C137.324 415.867 143.891 402.765 147 390c9.676-39.727 8.633-52.033 0-92-1.909-8.837-5.143-17.92-8.774-26.368m-3.241 1.33-.98-10.55 7.345 7.636-6.365 2.914z" class="edge"/></g></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/code-path-analysis/loop-event-example-for-4.svg b/eslint/docs/src/assets/images/code-path-analysis/loop-event-example-for-4.svg new file mode 100644 index 0000000..9938975 --- /dev/null +++ b/eslint/docs/src/assets/images/code-path-analysis/loop-event-example-for-4.svg @@ -0,0 +1 @@ +<svg width="248" height="472pt" viewBox="0 0 186 472" xmlns="http://www.w3.org/2000/svg"><g class="graph"><circle stroke="#000" cx="114" cy="-455" r="9" class="node" transform="translate(4 468)"/><g class="node"><path fill="#fff" stroke="#fff" d="M170.617 58.7H65.383l-12 12v84.6l12 12h105.234l12-12V70.7l-12-12z"/><path fill="#fff" stroke="#fff" d="M65.383 58.7c-6 0-12 6-12 12m0 84.6c0 6 6 12 12 12m105.234 0c6 0 12-6 12-12m0-84.6c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M170.617 58.7H65.383m0 0c-6 0-12 6-12 12m0 0v84.6m0 0c0 6 6 12 12 12m0 0h105.234m0 0c6 0 12-6 12-12m0 0V70.7m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="114" y="-392.8" font-family="Times,serif" font-size="14" transform="translate(4 468)">Program</text><text text-anchor="middle" x="114" y="-376" font-family="Times,serif" font-size="14" transform="translate(4 468)">ForStatement</text><text text-anchor="middle" x="114" y="-359.2" font-family="Times,serif" font-size="14" transform="translate(4 468)">VariableDeclaration</text><text text-anchor="middle" x="114" y="-342.4" font-family="Times,serif" font-size="14" transform="translate(4 468)">VariableDeclarator</text><text text-anchor="middle" x="114" y="-325.6" font-family="Times,serif" font-size="14" transform="translate(4 468)">Identifier (i)</text><text text-anchor="middle" x="114" y="-308.8" font-family="Times,serif" font-size="14" transform="translate(4 468)">Literal (0)</text></g><g class="edge" stroke="#000"><path fill="none" d="M118 22.02v26.167"/><path d="m121.5 48.414-3.5 10-3.5-10h7z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M164.233 203.599H71.767l-12 12v34.802l12 12h92.466l12-12v-34.802l-12-12z"/><path fill="#fff" stroke="#fff" d="M71.767 203.599c-6 0-12 6-12 12m0 34.802c0 6 6 12 12 12m92.466 0c6 0 12-6 12-12m0-34.802c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M164.233 203.599H71.767m0 0c-6 0-12 6-12 12m0 0v34.802m0 0c0 6 6 12 12 12m0 0h92.466m0 0c6 0 12-6 12-12m0 0v-34.802m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="114" y="-247.6" font-family="Times,serif" font-size="14" transform="translate(4 468)">BinaryExpression</text><text text-anchor="middle" x="114" y="-230.8" font-family="Times,serif" font-size="14" transform="translate(4 468)">Identifier (i)</text><text text-anchor="middle" x="114" y="-214" font-family="Times,serif" font-size="14" transform="translate(4 468)">Literal (10)</text></g><g class="edge" stroke="#000"><path fill="none" d="M118 167.476v25.952"/><path d="m121.5 193.548-3.5 10-3.5-10h7z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M126.147 298H15.853l-12 12v68l12 12h110.294l12-12v-68l-12-12z"/><path fill="#fff" stroke="#fff" d="M15.853 298c-6 0-12 6-12 12m0 68c0 6 6 12 12 12m110.294 0c6 0 12-6 12-12m0-68c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M126.147 298H15.853m0 0c-6 0-12 6-12 12m0 0v68m0 0c0 6 6 12 12 12m0 0h110.294m0 0c6 0 12-6 12-12m0 0v-68m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="67" y="-153.4" font-family="Times,serif" font-size="14" transform="translate(4 468)">BlockStatement</text><text text-anchor="middle" x="67" y="-136.6" font-family="Times,serif" font-size="14" transform="translate(4 468)">ExpressionStatement</text><text text-anchor="middle" x="67" y="-119.8" font-family="Times,serif" font-size="14" transform="translate(4 468)">CallExpression</text><text text-anchor="middle" x="67" y="-103" font-family="Times,serif" font-size="14" transform="translate(4 468)">Identifier (foo)</text><text text-anchor="middle" x="67" y="-86.2" font-family="Times,serif" font-size="14" transform="translate(4 468)">Identifier (i)</text></g><g class="edge" stroke="#000"><path fill="none" d="m105.774 262.354-11.277 26.153"/><path d="m97.622 290.099-7.174 7.797.746-10.569 6.428 2.772z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M164.977 426.398H71.023l-12 12v17.204l12 12h93.954l12-12v-17.204l-12-12z"/><path fill="#fff" stroke="#fff" d="M71.023 426.398c-6 0-12 6-12 12m0 17.204c0 6 6 12 12 12m93.954 0c6 0 12-6 12-12m0-17.204c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M164.977 426.398H71.023m0 0c-6 0-12 6-12 12m0 0v17.204m0 0c0 6 6 12 12 12m0 0h93.954m0 0c6 0 12-6 12-12m0 0v-17.204m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="114" y="-25.2" font-family="Times,serif" font-size="14" transform="translate(4 468)">UpdateExpression</text><text text-anchor="middle" x="114" y="-8.4" font-family="Times,serif" font-size="14" transform="translate(4 468)">Identifier (i)</text></g><g class="edge" stroke="#000"><path fill="none" d="M92.026 390.183c4.216 9.06 8.54 18.35 12.419 26.689"/><path d="m107.718 415.608 1.045 10.543-7.392-7.59 6.347-2.953z"/></g><g class="edge" stroke="red"><path fill="none" d="M131.225 426.186C137.324 415.867 143.891 402.765 147 390c9.676-39.727 8.633-52.033 0-92-1.909-8.837-5.143-17.92-8.774-26.368"/><path fill="red" d="m134.985 272.962-.98-10.55 7.345 7.636-6.365 2.914z"/></g></g></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/code-path-analysis/loop-event-example-for-5.svg b/eslint/docs/src/assets/images/code-path-analysis/loop-event-example-for-5.svg new file mode 100644 index 0000000..070decb --- /dev/null +++ b/eslint/docs/src/assets/images/code-path-analysis/loop-event-example-for-5.svg @@ -0,0 +1 @@ +<svg width="332pt" height="472pt" viewBox="0 0 332 472" xmlns="http://www.w3.org/2000/svg"><g class="graph"><circle stroke="#000" cx="162" cy="-455" r="9" class="node" transform="translate(4 468)"/><g class="node"><path fill="#fff" stroke="#fff" d="M218.617 58.7H113.383l-12 12v84.6l12 12h105.234l12-12V70.7l-12-12z"/><path fill="#fff" stroke="#fff" d="M113.383 58.7c-6 0-12 6-12 12m0 84.6c0 6 6 12 12 12m105.234 0c6 0 12-6 12-12m0-84.6c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M218.617 58.7H113.383m0 0c-6 0-12 6-12 12m0 0v84.6m0 0c0 6 6 12 12 12m0 0h105.234m0 0c6 0 12-6 12-12m0 0V70.7m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="162" y="-392.8" font-family="Times,serif" font-size="14" transform="translate(4 468)">Program</text><text text-anchor="middle" x="162" y="-376" font-family="Times,serif" font-size="14" transform="translate(4 468)">ForStatement</text><text text-anchor="middle" x="162" y="-359.2" font-family="Times,serif" font-size="14" transform="translate(4 468)">VariableDeclaration</text><text text-anchor="middle" x="162" y="-342.4" font-family="Times,serif" font-size="14" transform="translate(4 468)">VariableDeclarator</text><text text-anchor="middle" x="162" y="-325.6" font-family="Times,serif" font-size="14" transform="translate(4 468)">Identifier (i)</text><text text-anchor="middle" x="162" y="-308.8" font-family="Times,serif" font-size="14" transform="translate(4 468)">Literal (0)</text></g><g class="edge" stroke="#000"><path fill="none" d="M166 22.02v26.167"/><path d="m169.5 48.414-3.5 10-3.5-10h7z"/></g><g class="node" stroke="#000" transform="translate(4 468)"><circle cx="257" cy="-21" r="9"/><circle fill="none" cx="257" cy="-21" r="13"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M212.233 203.599h-92.466l-12 12v34.802l12 12h92.466l12-12v-34.802l-12-12zm-92.466 0c-6 0-12 6-12 12m0 34.802c0 6 6 12 12 12m92.466 0c6 0 12-6 12-12"/><path fill="#fff" stroke="#fff" d="M224.233 215.599c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M212.233 203.599h-92.466m0 0c-6 0-12 6-12 12m0 0v34.802m0 0c0 6 6 12 12 12m0 0h92.466m0 0c6 0 12-6 12-12m0 0v-34.802m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="162" y="-247.6" font-family="Times,serif" font-size="14" transform="translate(4 468)">BinaryExpression</text><text text-anchor="middle" x="162" y="-230.8" font-family="Times,serif" font-size="14" transform="translate(4 468)">Identifier (i)</text><text text-anchor="middle" x="162" y="-214" font-family="Times,serif" font-size="14" transform="translate(4 468)">Literal (10)</text></g><g class="edge" stroke="#000"><path fill="none" d="M166 167.476v25.952"/><path d="m169.5 193.548-3.5 10-3.5-10h7z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M126.147 298H15.853l-12 12v68l12 12h110.294l12-12v-68l-12-12z"/><path fill="#fff" stroke="#fff" d="M15.853 298c-6 0-12 6-12 12m0 68c0 6 6 12 12 12m110.294 0c6 0 12-6 12-12m0-68c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M126.147 298H15.853m0 0c-6 0-12 6-12 12m0 0v68m0 0c0 6 6 12 12 12m0 0h110.294m0 0c6 0 12-6 12-12m0 0v-68m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="67" y="-153.4" font-family="Times,serif" font-size="14" transform="translate(4 468)">BlockStatement</text><text text-anchor="middle" x="67" y="-136.6" font-family="Times,serif" font-size="14" transform="translate(4 468)">ExpressionStatement</text><text text-anchor="middle" x="67" y="-119.8" font-family="Times,serif" font-size="14" transform="translate(4 468)">CallExpression</text><text text-anchor="middle" x="67" y="-103" font-family="Times,serif" font-size="14" transform="translate(4 468)">Identifier (foo)</text><text text-anchor="middle" x="67" y="-86.2" font-family="Times,serif" font-size="14" transform="translate(4 468)">Identifier (i)</text></g><g class="edge" stroke="#000"><path fill="none" d="M141.288 262.354 117 290.221"/><path d="m119.52 292.657-9.209 5.239 3.932-9.838 5.277 4.599z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M316.147 314.599H205.853l-12 12v34.802l12 12h110.294l12-12v-34.802l-12-12z"/><path fill="#fff" stroke="#fff" d="M205.853 314.599c-6 0-12 6-12 12m0 34.802c0 6 6 12 12 12m110.294 0c6 0 12-6 12-12m0-34.802c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M316.147 314.599H205.853m0 0c-6 0-12 6-12 12m0 0v34.802m0 0c0 6 6 12 12 12m0 0h110.294m0 0c6 0 12-6 12-12m0 0v-34.802m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="257" y="-136.6" font-family="Times,serif" font-size="14" transform="translate(4 468)">ExpressionStatement</text><text text-anchor="middle" x="257" y="-119.8" font-family="Times,serif" font-size="14" transform="translate(4 468)">CallExpression</text><text text-anchor="middle" x="257" y="-103" font-family="Times,serif" font-size="14" transform="translate(4 468)">Identifier (bar)</text></g><g class="edge" stroke="#000"><path fill="none" d="m190.712 262.354 38.881 44.611"/><path d="m232.48 304.95 3.932 9.838-9.209-5.239 5.277-4.599z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M164.977 426.398H71.023l-12 12v17.204l12 12h93.954l12-12v-17.204l-12-12z"/><path fill="#fff" stroke="#fff" d="M71.023 426.398c-6 0-12 6-12 12m0 17.204c0 6 6 12 12 12m93.954 0c6 0 12-6 12-12m0-17.204c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M164.977 426.398H71.023m0 0c-6 0-12 6-12 12m0 0v17.204m0 0c0 6 6 12 12 12m0 0h93.954m0 0c6 0 12-6 12-12m0 0v-17.204m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="114" y="-25.2" font-family="Times,serif" font-size="14" transform="translate(4 468)">UpdateExpression</text><text text-anchor="middle" x="114" y="-8.4" font-family="Times,serif" font-size="14" transform="translate(4 468)">Identifier (i)</text></g><g class="edge" stroke="#000"><path fill="none" d="M92.026 390.183c4.216 9.06 8.54 18.35 12.419 26.689"/><path d="m107.718 415.608 1.045 10.543-7.392-7.59 6.347-2.953z"/></g><g class="edge" stroke="#000"><path fill="none" d="M130.427 426.266C136.399 415.86 143.091 402.658 147 390c12.006-38.879 16.472-85.404 18.108-117.471"/><path d="m161.624 272.077 3.937-9.837 3.057 10.145-6.994-.308z"/></g><g class="edge" stroke="#000"><path fill="none" d="M261 373.403v50.245"/><path d="m264.5 423.904-3.5 10-3.5-10h7z"/></g></g></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/code-path-analysis/loop-event-example-while-1.svg b/eslint/docs/src/assets/images/code-path-analysis/loop-event-example-while-1.svg new file mode 100644 index 0000000..7d0c1a0 --- /dev/null +++ b/eslint/docs/src/assets/images/code-path-analysis/loop-event-example-while-1.svg @@ -0,0 +1 @@ +<svg width="152pt" height="322pt" viewBox="0 0 152 322" xmlns="http://www.w3.org/2000/svg"><g class="graph"><circle stroke="#000" cx="72" cy="-305" r="9" class="node" transform="translate(4 318)"/><g class="node"><path fill="#fff" stroke="#fff" d="M117.149 58.398H34.85l-12 12v17.204l12 12h82.299l12-12V70.398l-12-12z"/><path fill="#fff" stroke="#fff" d="M34.85 58.398c-6 0-12 6-12 12m0 17.204c0 6 6 12 12 12m82.299 0c6 0 12-6 12-12m0-17.204c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M117.149 58.398H34.85m0 0c-6 0-12 6-12 12m0 0v17.204m0 0c0 6 6 12 12 12m0 0h82.299m0 0c6 0 12-6 12-12m0 0V70.398m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="72" y="-243.2" font-family="Times,serif" font-size="14" transform="translate(4 318)">Program</text><text text-anchor="middle" x="72" y="-226.4" font-family="Times,serif" font-size="14" transform="translate(4 318)">WhileStatement</text></g><g class="edge" stroke="#000"><path fill="none" d="M76 22.106V48.06"/><path d="m79.5 48.158-3.5 10-3.5-10h7z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M107.339 136H44.661l-12 12v12l12 12h62.678l12-12v-12l-12-12z"/><path fill="#fff" stroke="#fff" d="M44.661 136c-6 0-12 6-12 12m0 12c0 6 6 12 12 12m62.678 0c6 0 12-6 12-12m0-12c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M107.339 136H44.661m0 0c-6 0-12 6-12 12m0 0v12m0 0c0 6 6 12 12 12m0 0h62.678m0 0c6 0 12-6 12-12m0 0v-12m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="72" y="-159.8" font-family="Times,serif" font-size="14" transform="translate(4 318)">Identifier (a)</text></g><g class="edge" stroke="#000"><path fill="none" d="M76 99.948v25.416"/><path d="m79.5 125.561-3.5 10-3.5-10h7z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M136.317 208.7H15.683l-12 12v84.6l12 12h120.634l12-12v-84.6l-12-12z"/><path fill="#fff" stroke="#fff" d="M15.683 208.7c-6 0-12 6-12 12m0 84.6c0 6 6 12 12 12m120.634 0c6 0 12-6 12-12m0-84.6c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M136.317 208.7H15.683m0 0c-6 0-12 6-12 12m0 0v84.6m0 0c0 6 6 12 12 12m0 0h120.634m0 0c6 0 12-6 12-12m0 0v-84.6m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="72" y="-92.8" font-family="Times,serif" font-size="14" transform="translate(4 318)">BlockStatement</text><text text-anchor="middle" x="72" y="-76" font-family="Times,serif" font-size="14" transform="translate(4 318)">ExpressionStatement</text><text text-anchor="middle" x="72" y="-59.2" font-family="Times,serif" font-size="14" transform="translate(4 318)">AssignmentExpression</text><text text-anchor="middle" x="72" y="-42.4" font-family="Times,serif" font-size="14" transform="translate(4 318)">Identifier (a)</text><text text-anchor="middle" x="72" y="-25.6" font-family="Times,serif" font-size="14" transform="translate(4 318)">CallExpression</text><text text-anchor="middle" x="72" y="-8.8" font-family="Times,serif" font-size="14" transform="translate(4 318)">Identifier (foo)</text></g><g class="edge" stroke="#000"><path fill="none" d="M76 172.191v26.03"/><path d="m79.5 198.294-3.5 10-3.5-10h7z"/></g></g></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/code-path-analysis/loop-event-example-while-2.svg b/eslint/docs/src/assets/images/code-path-analysis/loop-event-example-while-2.svg new file mode 100644 index 0000000..d5c31e2 --- /dev/null +++ b/eslint/docs/src/assets/images/code-path-analysis/loop-event-example-while-2.svg @@ -0,0 +1 @@ +<svg width="152pt" height="322pt" viewBox="0 0 152 322" xmlns="http://www.w3.org/2000/svg"><g class="graph"><circle stroke="#000" cx="72" cy="-305" r="9" class="node" transform="translate(4 318)"/><g class="node"><path fill="#fff" stroke="#fff" d="M117.149 58.398H34.85l-12 12v17.204l12 12h82.299l12-12V70.398l-12-12z"/><path fill="#fff" stroke="#fff" d="M34.85 58.398c-6 0-12 6-12 12m0 17.204c0 6 6 12 12 12m82.299 0c6 0 12-6 12-12m0-17.204c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M117.149 58.398H34.85m0 0c-6 0-12 6-12 12m0 0v17.204m0 0c0 6 6 12 12 12m0 0h82.299m0 0c6 0 12-6 12-12m0 0V70.398m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="72" y="-243.2" font-family="Times,serif" font-size="14" transform="translate(4 318)">Program</text><text text-anchor="middle" x="72" y="-226.4" font-family="Times,serif" font-size="14" transform="translate(4 318)">WhileStatement</text></g><g class="edge" stroke="#000"><path fill="none" d="M76 22.106V48.06"/><path d="m79.5 48.158-3.5 10-3.5-10h7z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M107.339 136H44.661l-12 12v12l12 12h62.678l12-12v-12l-12-12z"/><path fill="#fff" stroke="#fff" d="M44.661 136c-6 0-12 6-12 12m0 12c0 6 6 12 12 12m62.678 0c6 0 12-6 12-12m0-12c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M107.339 136H44.661m0 0c-6 0-12 6-12 12m0 0v12m0 0c0 6 6 12 12 12m0 0h62.678m0 0c6 0 12-6 12-12m0 0v-12m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="72" y="-159.8" font-family="Times,serif" font-size="14" transform="translate(4 318)">Identifier (a)</text></g><g class="edge" stroke="#000"><path fill="none" d="M76 99.948v25.416"/><path d="m79.5 125.561-3.5 10-3.5-10h7z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M136.317 208.7H15.683l-12 12v84.6l12 12h120.634l12-12v-84.6l-12-12z"/><path fill="#fff" stroke="#fff" d="M15.683 208.7c-6 0-12 6-12 12m0 84.6c0 6 6 12 12 12m120.634 0c6 0 12-6 12-12m0-84.6c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M136.317 208.7H15.683m0 0c-6 0-12 6-12 12m0 0v84.6m0 0c0 6 6 12 12 12m0 0h120.634m0 0c6 0 12-6 12-12m0 0v-84.6m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="72" y="-92.8" font-family="Times,serif" font-size="14" transform="translate(4 318)">BlockStatement</text><text text-anchor="middle" x="72" y="-76" font-family="Times,serif" font-size="14" transform="translate(4 318)">ExpressionStatement</text><text text-anchor="middle" x="72" y="-59.2" font-family="Times,serif" font-size="14" transform="translate(4 318)">AssignmentExpression</text><text text-anchor="middle" x="72" y="-42.4" font-family="Times,serif" font-size="14" transform="translate(4 318)">Identifier (a)</text><text text-anchor="middle" x="72" y="-25.6" font-family="Times,serif" font-size="14" transform="translate(4 318)">CallExpression</text><text text-anchor="middle" x="72" y="-8.8" font-family="Times,serif" font-size="14" transform="translate(4 318)">Identifier (foo)</text></g><g class="edge" stroke="#000"><path fill="none" d="M70.885 172.191c-.805 7.366-1.312 16.471-1.523 26.03"/><path d="m72.861 198.334-3.611 9.96-3.389-10.038 7 .078z"/></g><g class="edge" stroke="red"><path fill="none" d="M82.75 208.294c-.004-9.004-.263-18.001-.776-25.969"/><path fill="red" d="m78.472 182.451 2.643-10.26 4.332 9.669-6.975.591z"/></g></g></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/code-path-analysis/loop-event-example-while-3.svg b/eslint/docs/src/assets/images/code-path-analysis/loop-event-example-while-3.svg new file mode 100644 index 0000000..3f4e02c --- /dev/null +++ b/eslint/docs/src/assets/images/code-path-analysis/loop-event-example-while-3.svg @@ -0,0 +1 @@ +<svg width="305pt" height="512" viewBox="0 0 305 384" xmlns="http://www.w3.org/2000/svg"><g class="graph"><circle stroke="#000" cx="72" cy="-367" r="9" class="node" transform="translate(4 380)"/><g class="node"><path fill="#fff" stroke="#fff" d="M117.149 58.398H34.85l-12 12v17.204l12 12h82.299l12-12V70.398l-12-12z"/><path fill="#fff" stroke="#fff" d="M34.85 58.398c-6 0-12 6-12 12m0 17.204c0 6 6 12 12 12m82.299 0c6 0 12-6 12-12m0-17.204c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M117.149 58.398H34.85m0 0c-6 0-12 6-12 12m0 0v17.204m0 0c0 6 6 12 12 12m0 0h82.299m0 0c6 0 12-6 12-12m0 0V70.398m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="72" y="-305.2" font-family="Times,serif" font-size="14" transform="translate(4 380)">Program</text><text text-anchor="middle" x="72" y="-288.4" font-family="Times,serif" font-size="14" transform="translate(4 380)">WhileStatement</text></g><g class="edge" stroke="#000"><path fill="none" d="M76 22.106V48.06"/><path d="m79.5 48.158-3.5 10-3.5-10h7z"/></g><g class="node" stroke="#000" transform="translate(4 380)"><circle cx="230" cy="-13" r="9"/><circle fill="none" cx="230" cy="-13" r="13"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M107.339 136H44.661l-12 12v12l12 12h62.678l12-12v-12l-12-12z"/><path fill="#fff" stroke="#fff" d="M44.661 136c-6 0-12 6-12 12m0 12c0 6 6 12 12 12m62.678 0c6 0 12-6 12-12m0-12c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M107.339 136H44.661m0 0c-6 0-12 6-12 12m0 0v12m0 0c0 6 6 12 12 12m0 0h62.678m0 0c6 0 12-6 12-12m0 0v-12m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="72" y="-221.8" font-family="Times,serif" font-size="14" transform="translate(4 380)">Identifier (a)</text></g><g class="edge" stroke="#000"><path fill="none" d="M76 99.948v25.416"/><path d="m79.5 125.561-3.5 10-3.5-10h7z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M136.317 208.7H15.683l-12 12v84.6l12 12h120.634l12-12v-84.6l-12-12z"/><path fill="#fff" stroke="#fff" d="M15.683 208.7c-6 0-12 6-12 12m0 84.6c0 6 6 12 12 12m120.634 0c6 0 12-6 12-12m0-84.6c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M136.317 208.7H15.683m0 0c-6 0-12 6-12 12m0 0v84.6m0 0c0 6 6 12 12 12m0 0h120.634m0 0c6 0 12-6 12-12m0 0v-84.6m0 0c0-6-6-12-12-12"/><text text-anchor="middle" x="72" y="-154.8" font-family="Times,serif" font-size="14" transform="translate(4 380)">BlockStatement</text><text text-anchor="middle" x="72" y="-138" font-family="Times,serif" font-size="14" transform="translate(4 380)">ExpressionStatement</text><text text-anchor="middle" x="72" y="-121.2" font-family="Times,serif" font-size="14" transform="translate(4 380)">AssignmentExpression</text><text text-anchor="middle" x="72" y="-104.4" font-family="Times,serif" font-size="14" transform="translate(4 380)">Identifier (a)</text><text text-anchor="middle" x="72" y="-87.6" font-family="Times,serif" font-size="14" transform="translate(4 380)">CallExpression</text><text text-anchor="middle" x="72" y="-70.8" font-family="Times,serif" font-size="14" transform="translate(4 380)">Identifier (foo)</text></g><g class="edge" stroke="#000"><path fill="none" d="M70.885 172.191c-.805 7.366-1.312 16.471-1.523 26.03"/><path d="m72.861 198.334-3.611 9.96-3.389-10.038 7 .078z"/></g><g class="node"><path fill="#fff" stroke="#fff" d="M289.147 233.599H178.853l-12 12v34.802l12 12h110.294l12-12V245.6l-12-12z"/><path fill="#fff" stroke="#fff" d="M178.853 233.599c-6 0-12 6-12 12m0 34.802c0 6 6 12 12 12m110.294 0c6 0 12-6 12-12m0-34.802c0-6-6-12-12-12"/><path fill="none" stroke="#000" d="M289.147 233.599H178.853m0 0c-6 0-12 6-12 12m0 0v34.802m0 0c0 6 6 12 12 12m0 0h110.294m0 0c6 0 12-6 12-12m0 0V245.6m0-.001c0-6-6-12-12-12"/><text text-anchor="middle" x="230" y="-129.6" font-family="Times,serif" font-size="14" transform="translate(4 380)">ExpressionStatement</text><text text-anchor="middle" x="230" y="-112.8" font-family="Times,serif" font-size="14" transform="translate(4 380)">CallExpression</text><text text-anchor="middle" x="230" y="-96" font-family="Times,serif" font-size="14" transform="translate(4 380)">Identifier (bar)</text></g><g class="edge" stroke="#000"><path fill="none" d="M102.775 172.211C118.624 182.477 139.053 195.84 157 208c9.409 6.375 19.395 13.276 28.947 19.945"/><path d="m188.021 225.125 6.184 8.602-10.199-2.868 4.015-5.734z"/></g><g class="edge" stroke="#000"><path fill="none" d="M82.75 208.294c-.004-9.004-.263-18.001-.776-25.969"/><path d="m78.472 182.451 2.643-10.26 4.332 9.669-6.975.591z"/></g><g class="edge" stroke="#000"><path fill="none" d="M234 292.413v51.158"/><path d="m237.5 343.98-3.5 10-3.5-10h7z"/></g></g></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/icons/arrow-left.svg b/eslint/docs/src/assets/images/icons/arrow-left.svg new file mode 100644 index 0000000..83483a7 --- /dev/null +++ b/eslint/docs/src/assets/images/icons/arrow-left.svg @@ -0,0 +1 @@ +<svg width="24" height="24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M19 12H5m0 0 7 7m-7-7 7-7" stroke="#667085" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/icons/arrow-right.svg b/eslint/docs/src/assets/images/icons/arrow-right.svg new file mode 100644 index 0000000..22bb24f --- /dev/null +++ b/eslint/docs/src/assets/images/icons/arrow-right.svg @@ -0,0 +1 @@ +<svg width="24" height="24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M5 12h14m0 0-7-7m7 7-7 7" stroke="#667085" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/icons/arrow-top-right.svg b/eslint/docs/src/assets/images/icons/arrow-top-right.svg new file mode 100644 index 0000000..58bbed8 --- /dev/null +++ b/eslint/docs/src/assets/images/icons/arrow-top-right.svg @@ -0,0 +1 @@ +<svg width="13" height="12" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="m1.5 11 10-10m0 0h-10m10 0v10" stroke="#101828" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/icons/chevron-down.svg b/eslint/docs/src/assets/images/icons/chevron-down.svg new file mode 100644 index 0000000..b09f7f7 --- /dev/null +++ b/eslint/docs/src/assets/images/icons/chevron-down.svg @@ -0,0 +1 @@ +<svg width="20" height="21" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="m5 7.61 5 5 5-5" stroke="#667085" stroke-width="1.667" stroke-linecap="round" stroke-linejoin="round"/></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/icons/copy.svg b/eslint/docs/src/assets/images/icons/copy.svg new file mode 100644 index 0000000..24fc6af --- /dev/null +++ b/eslint/docs/src/assets/images/icons/copy.svg @@ -0,0 +1 @@ +<svg width="20" height="20" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M4.167 12.5h-.834a1.667 1.667 0 0 1-1.666-1.667v-7.5a1.667 1.667 0 0 1 1.666-1.666h7.5A1.666 1.666 0 0 1 12.5 3.333v.834M9.167 7.5h7.5c.92 0 1.666.746 1.666 1.667v7.5c0 .92-.746 1.666-1.666 1.666h-7.5c-.92 0-1.667-.746-1.667-1.666v-7.5c0-.92.746-1.667 1.667-1.667Z" stroke="#667085" stroke-width="1.667" stroke-linecap="round" stroke-linejoin="round"/></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/icons/correct.svg b/eslint/docs/src/assets/images/icons/correct.svg new file mode 100644 index 0000000..4f58924 --- /dev/null +++ b/eslint/docs/src/assets/images/icons/correct.svg @@ -0,0 +1 @@ +<svg width="45" height="44" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="1.5" y="1" width="42" height="42" rx="21" fill="#ECFDF3"/><path d="m30.5 16-11 11-5-5" stroke="#12B76A" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><rect x="1.5" y="1" width="42" height="42" rx="21" stroke="#fff" stroke-width="2"/></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/icons/discord.svg b/eslint/docs/src/assets/images/icons/discord.svg new file mode 100644 index 0000000..16bae7b --- /dev/null +++ b/eslint/docs/src/assets/images/icons/discord.svg @@ -0,0 +1 @@ +<svg width="24" height="25" fill="none" xmlns="http://www.w3.org/2000/svg"><g clip-path="url(#a)" fill="#98A2B3"><path d="M9.328 10.178a1.337 1.337 0 0 0 0 2.664 1.278 1.278 0 0 0 1.224-1.332 1.272 1.272 0 0 0-1.224-1.332Zm4.38 0a1.337 1.337 0 1 0 1.224 1.332 1.277 1.277 0 0 0-1.224-1.332Z"/><path d="M19.54.11H3.46A2.466 2.466 0 0 0 1 2.582V18.81a2.466 2.466 0 0 0 2.46 2.472h13.608l-.636-2.22 1.536 1.428 1.452 1.34L22 24.11V2.582A2.466 2.466 0 0 0 19.54.11Zm-4.632 15.672s-.432-.516-.792-.972a3.786 3.786 0 0 0 2.172-1.428 6.863 6.863 0 0 1-1.38.708 7.898 7.898 0 0 1-1.74.516 8.406 8.406 0 0 1-3.108-.012 10.086 10.086 0 0 1-1.76-.516 6.847 6.847 0 0 1-1.368-.708 3.732 3.732 0 0 0 2.1 1.416c-.36.456-.8 1-.8 1a4.35 4.35 0 0 1-3.66-1.824 16.07 16.07 0 0 1 1.728-7 5.934 5.934 0 0 1 3.372-1.26l.12.144a8.1 8.1 0 0 0-3.164 1.572s.264-.144.708-.348a9.012 9.012 0 0 1 2.724-.76c.066-.014.133-.022.2-.024a10.153 10.153 0 0 1 2.424-.024A9.782 9.782 0 0 1 16.3 7.418a7.986 7.986 0 0 0-2.988-1.524l.168-.192a5.934 5.934 0 0 1 3.372 1.26 16.07 16.07 0 0 1 1.728 7 4.386 4.386 0 0 1-3.672 1.82Z"/></g><defs><clipPath id="a"><path fill="#fff" transform="translate(0 .11)" d="M0 0h24v24H0z"/></clipPath></defs></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/icons/facebook.svg b/eslint/docs/src/assets/images/icons/facebook.svg new file mode 100644 index 0000000..194c834 --- /dev/null +++ b/eslint/docs/src/assets/images/icons/facebook.svg @@ -0,0 +1 @@ +<svg width="20" height="20" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M20 10c0-5.523-4.477-10-10-10S0 4.477 0 10c0 4.991 3.657 9.128 8.438 9.878v-6.987h-2.54V10h2.54V7.797c0-2.506 1.492-3.89 3.777-3.89 1.093 0 2.238.195 2.238.195v2.46h-1.26c-1.243 0-1.63.771-1.63 1.563V10h2.773l-.443 2.89h-2.33v6.988C16.343 19.128 20 14.991 20 10Z" fill="#98A2B3"/></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/icons/features-list-icon.svg b/eslint/docs/src/assets/images/icons/features-list-icon.svg new file mode 100644 index 0000000..2e576cf --- /dev/null +++ b/eslint/docs/src/assets/images/icons/features-list-icon.svg @@ -0,0 +1 @@ +<svg width="24" height="24" fill="none" xmlns="http://www.w3.org/2000/svg"><rect width="24" height="24" rx="12" fill="#F6F6FE"/><path d="M17.334 8 10 15.333 6.667 12" stroke="#4B32C3" stroke-width="1.333" stroke-linecap="round" stroke-linejoin="round"/></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/icons/github-icon-mono.svg b/eslint/docs/src/assets/images/icons/github-icon-mono.svg new file mode 100644 index 0000000..f73b88b --- /dev/null +++ b/eslint/docs/src/assets/images/icons/github-icon-mono.svg @@ -0,0 +1 @@ +<svg width="21" height="20" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M10.25 0C4.611 0 0 4.612 0 10.25a10.24 10.24 0 0 0 7.004 9.737c.512.085.683-.257.683-.513v-1.708c-2.818.598-3.416-1.367-3.416-1.367-.427-1.196-1.11-1.537-1.11-1.537-1.026-.598 0-.598 0-.598 1.024.085 1.537 1.025 1.537 1.025.94 1.537 2.391 1.11 2.99.854.085-.683.34-1.11.682-1.367-2.306-.256-4.697-1.11-4.697-5.039 0-1.11.427-2.05 1.025-2.733 0-.342-.427-1.367.17-2.733 0 0 .855-.257 2.82 1.025.853-.257 1.707-.342 2.561-.342.855 0 1.709.085 2.563.342C14.776 3.929 15.63 4.27 15.63 4.27c.598 1.452.17 2.477.085 2.733.683.683 1.025 1.623 1.025 2.733 0 3.93-2.392 4.783-4.698 5.04.342.341.684.939.684 1.879v2.818c0 .256.17.598.683.513a10.238 10.238 0 0 0 7.004-9.737C20.499 4.611 15.887 0 10.249 0Z" fill="#fff"/></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/icons/github-img.svg b/eslint/docs/src/assets/images/icons/github-img.svg new file mode 100644 index 0000000..51ad25a --- /dev/null +++ b/eslint/docs/src/assets/images/icons/github-img.svg @@ -0,0 +1 @@ +<svg width="64" height="64" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M32 .8C14.4.8 0 15.2 0 32.8a31.965 31.965 0 0 0 21.867 30.4c1.6.267 2.133-.8 2.133-1.6v-5.333C15.2 58.133 13.333 52 13.333 52 12 48.267 9.867 47.2 9.867 47.2c-3.2-1.867 0-1.867 0-1.867 3.2.267 4.8 3.2 4.8 3.2C17.6 53.333 22.133 52 24 51.2c.267-2.133 1.067-3.467 2.133-4.267-7.2-.8-14.666-3.466-14.666-15.733 0-3.467 1.333-6.4 3.2-8.533 0-1.067-1.334-4.267.533-8.534 0 0 2.667-.8 8.8 3.2 2.667-.8 5.333-1.066 8-1.066s5.333.266 8 1.066c6.133-4.266 8.8-3.2 8.8-3.2 1.867 4.534.533 7.734.267 8.534 2.133 2.133 3.2 5.066 3.2 8.533 0 12.267-7.467 14.933-14.667 15.733 1.067 1.067 2.133 2.934 2.133 5.867v8.8c0 .8.534 1.867 2.134 1.6a31.965 31.965 0 0 0 21.866-30.4C64 15.2 49.6.8 32 .8Z" fill="#101828"/></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/icons/github-large.svg b/eslint/docs/src/assets/images/icons/github-large.svg new file mode 100644 index 0000000..c540e36 --- /dev/null +++ b/eslint/docs/src/assets/images/icons/github-large.svg @@ -0,0 +1 @@ +<svg width="25" height="24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M12.5.147c-6.6 0-12 5.4-12 12 0 5.3 3.4 9.8 8.2 11.4.6.1.8-.3.8-.6v-2c-3.3.7-4-1.6-4-1.6-.5-1.4-1.3-1.8-1.3-1.8-1.2-.7 0-.7 0-.7 1.2.1 1.8 1.2 1.8 1.2 1.1 1.8 2.8 1.3 3.5 1 .1-.8.4-1.3.8-1.6-2.7-.3-5.5-1.3-5.5-5.9 0-1.3.5-2.4 1.2-3.2 0-.4-.5-1.6.2-3.2 0 0 1-.3 3.3 1.2 1-.3 2-.4 3-.4s2 .1 3 .4c2.3-1.6 3.3-1.2 3.3-1.2.7 1.7.2 2.9.1 3.2.8.8 1.2 1.9 1.2 3.2 0 4.6-2.8 5.6-5.5 5.9.4.4.8 1.1.8 2.2v3.3c0 .3.2.7.8.6 4.8-1.6 8.2-6.1 8.2-11.4.1-6.6-5.3-12-11.9-12Z" fill="#98A2B3"/></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/icons/github-small.svg b/eslint/docs/src/assets/images/icons/github-small.svg new file mode 100644 index 0000000..b410d3a --- /dev/null +++ b/eslint/docs/src/assets/images/icons/github-small.svg @@ -0,0 +1 @@ +<svg width="16" height="16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M8 .2c-4.4 0-8 3.6-8 8a7.991 7.991 0 0 0 5.467 7.6c.4.067.533-.2.533-.4v-1.333C3.8 14.533 3.333 13 3.333 13c-.333-.933-.866-1.2-.866-1.2-.8-.467 0-.467 0-.467.8.067 1.2.8 1.2.8C4.4 13.333 5.533 13 6 12.8c.067-.533.267-.867.533-1.067-1.8-.2-3.666-.866-3.666-3.933 0-.867.333-1.6.8-2.133 0-.267-.334-1.067.133-2.134 0 0 .667-.2 2.2.8.667-.2 1.333-.266 2-.266s1.333.066 2 .266c1.533-1.066 2.2-.8 2.2-.8.467 1.134.133 1.934.067 2.134.533.533.8 1.266.8 2.133 0 3.067-1.867 3.733-3.667 3.933.267.267.533.734.533 1.467v2.2c0 .2.134.467.534.4a7.991 7.991 0 0 0 5.466-7.6C16 3.8 12.4.2 8 .2Z" fill="#98A2B3"/></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/icons/github.svg b/eslint/docs/src/assets/images/icons/github.svg new file mode 100644 index 0000000..0f31496 --- /dev/null +++ b/eslint/docs/src/assets/images/icons/github.svg @@ -0,0 +1 @@ +<svg width="20" height="20" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M10 0C4.477 0 0 4.484 0 10.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0 1 10 4.844a9.59 9.59 0 0 1 2.504.337c1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.02 10.02 0 0 0 20 10.017C20 4.484 15.522 0 10 0Z" fill="#98A2B3"/></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/icons/google.svg b/eslint/docs/src/assets/images/icons/google.svg new file mode 100644 index 0000000..8b149df --- /dev/null +++ b/eslint/docs/src/assets/images/icons/google.svg @@ -0,0 +1 @@ +<svg width="24" height="25" fill="none" xmlns="http://www.w3.org/2000/svg"><g clip-path="url(#a)"><path d="M23.507 9.928H12.052v4.909h6.492C17.507 18.11 14.944 19.2 12 19.2a7.09 7.09 0 1 1 4.553-12.52l3.567-3.4A12 12 0 1 0 12 24.11c6.617 0 12.6-4.364 11.507-14.182Z" fill="#98A2B3"/></g><defs><clipPath id="a"><path fill="#fff" transform="translate(0 .11)" d="M0 0h24v24H0z"/></clipPath></defs></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/icons/incorrect.svg b/eslint/docs/src/assets/images/icons/incorrect.svg new file mode 100644 index 0000000..666811e --- /dev/null +++ b/eslint/docs/src/assets/images/icons/incorrect.svg @@ -0,0 +1 @@ +<svg width="45" height="44" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="1.5" y="1" width="42" height="42" rx="21" fill="#FFF1F3"/><path d="m28.5 16-12 12m0-12 12 12" stroke="#F63D68" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><rect x="1.5" y="1" width="42" height="42" rx="21" stroke="#fff" stroke-width="2"/></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/icons/languages.svg b/eslint/docs/src/assets/images/icons/languages.svg new file mode 100644 index 0000000..2653515 --- /dev/null +++ b/eslint/docs/src/assets/images/icons/languages.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><path d="M31.33 23.48a7.06 7.06 0 0 0-4.79 1.87 1.48 1.48 0 0 0-.94-.35 8.13 8.13 0 0 1-3.11-.59 12.28 12.28 0 0 0 2.48-6.3h.66a1.5 1.5 0 0 0 0-3h-4.29v-2.33a1.5 1.5 0 1 0-3 0v2.34h-4.26a1.5 1.5 0 0 0 0 3h7.84A9 9 0 0 1 20 22.67a9.32 9.32 0 0 1-1.76-2.93 1.5 1.5 0 1 0-2.82 1 12.38 12.38 0 0 0 2.11 3.63 9.28 9.28 0 0 1-3.42.6 1.5 1.5 0 1 0 0 3A11.3 11.3 0 0 0 20 26.54 10.42 10.42 0 0 0 24.71 28a7 7 0 0 0-.51 2.63v1.12H13.77a1.5 1.5 0 0 0-1.14.52 1.47 1.47 0 0 0-.34 1.21c0 .1.19 1.23.53 2.82a1 1 0 0 1-1.57 1C8.1 35 4.74 32.2 3.69 30.23a1.82 1.82 0 0 0-.15-.23 4.07 4.07 0 0 1-.74-2.35V11.52a4.13 4.13 0 0 1 4.13-4.13h25.74a4.13 4.13 0 0 1 4.13 4.13v12Zm29.87 7.13V46.7a4 4 0 0 1-.74 2.35 1.17 1.17 0 0 0-.15.27c-1 2-4.41 4.77-7.56 7.09a1 1 0 0 1-1.57-1c.34-1.6.52-2.73.53-2.83a1.49 1.49 0 0 0-1.48-1.73h-18.9a4.13 4.13 0 0 1-4.13-4.15V30.61a4.13 4.13 0 0 1 4.13-4.13h25.74a4.13 4.13 0 0 1 4.13 4.13Zm-10.42 14-1.73-4.31-3.42-8.56a1.3 1.3 0 0 0-.08-.17l-.06-.1-.09-.12-.09-.1-.1-.09-.13-.1L45 31l-.16-.09a.38.38 0 0 0-.1 0l-.16-.05H44l-.17.05a.38.38 0 0 0-.1 0l-.15.09-.11.05-.12.1-.1.09-.09.1-.1.12s0 .07-.05.1l-.09.17-3.5 8.57-1.73 4.32a1.51 1.51 0 0 0 .84 2 1.55 1.55 0 0 0 .56.11 1.51 1.51 0 0 0 1.39-1l1.34-3.35h4.84L48 45.73a1.49 1.49 0 0 0 1.39 1 1.54 1.54 0 0 0 .55-.11 1.5 1.5 0 0 0 .84-2ZM43 39.38h2.44l-1.22-3Z"/></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/icons/learn-more-arrow.svg b/eslint/docs/src/assets/images/icons/learn-more-arrow.svg new file mode 100644 index 0000000..8aab0b9 --- /dev/null +++ b/eslint/docs/src/assets/images/icons/learn-more-arrow.svg @@ -0,0 +1 @@ +<svg width="20" height="20" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M4.167 10h11.666m0 0L10 4.167M15.833 10 10 15.833" stroke="#4B32C3" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/icons/link.svg b/eslint/docs/src/assets/images/icons/link.svg new file mode 100644 index 0000000..6dfe158 --- /dev/null +++ b/eslint/docs/src/assets/images/icons/link.svg @@ -0,0 +1 @@ +<svg width="20" height="20" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8.334 10.833a4.165 4.165 0 0 0 6.283.45l2.5-2.5a4.167 4.167 0 0 0-5.892-5.891L9.792 4.317m1.875 4.85a4.165 4.165 0 0 0-6.284-.45l-2.5 2.5a4.167 4.167 0 0 0 5.892 5.891l1.425-1.425" stroke="#344054" stroke-width="1.67" stroke-linecap="round" stroke-linejoin="round"/></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/icons/linkedin.svg b/eslint/docs/src/assets/images/icons/linkedin.svg new file mode 100644 index 0000000..a7c36f6 --- /dev/null +++ b/eslint/docs/src/assets/images/icons/linkedin.svg @@ -0,0 +1 @@ +<svg width="20" height="20" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M18.52 0H1.477C.66 0 0 .645 0 1.441v17.114C0 19.352.66 20 1.477 20H18.52c.816 0 1.48-.648 1.48-1.441V1.44C20 .645 19.336 0 18.52 0ZM5.934 17.043h-2.97V7.496h2.97v9.547ZM4.449 6.195a1.72 1.72 0 1 1-.006-3.439 1.72 1.72 0 0 1 .006 3.44Zm12.594 10.848h-2.965v-4.64c0-1.106-.02-2.532-1.543-2.532-1.543 0-1.777 1.207-1.777 2.453v4.719H7.797V7.496h2.844v1.305h.039c.394-.75 1.363-1.543 2.804-1.543 3.004 0 3.559 1.976 3.559 4.547v5.238Z" fill="#98A2B3"/></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/icons/menu.svg b/eslint/docs/src/assets/images/icons/menu.svg new file mode 100644 index 0000000..d068dbd --- /dev/null +++ b/eslint/docs/src/assets/images/icons/menu.svg @@ -0,0 +1 @@ +<svg width="20" height="14" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1 7h18M1 1h18M1 13h18" stroke="#101828" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/icons/minus-circle.svg b/eslint/docs/src/assets/images/icons/minus-circle.svg new file mode 100644 index 0000000..f8e8023 --- /dev/null +++ b/eslint/docs/src/assets/images/icons/minus-circle.svg @@ -0,0 +1 @@ +<svg width="24" height="24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8 12h8m6 0c0 5.523-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2s10 4.477 10 10Z" stroke="#98A2B3" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/icons/npm.svg b/eslint/docs/src/assets/images/icons/npm.svg new file mode 100644 index 0000000..c9baf32 --- /dev/null +++ b/eslint/docs/src/assets/images/icons/npm.svg @@ -0,0 +1 @@ +<svg width="16" height="8" fill="none" xmlns="http://www.w3.org/2000/svg"><g clip-path="url(#a)"><path d="M0 .889h16v5.333H8v.89H4.444v-.89H0V.89Zm.889 4.444h1.778V2.667h.889v2.666h.888V1.778H.89v3.555Zm4.444-3.555v4.444h1.778v-.889H8.89V1.778H5.333Zm1.778.889H8v1.777h-.889V2.667Zm2.667-.89v3.556h1.778V2.667h.888v2.666h.89V2.667h.888v2.666h.89V1.778H9.777Z" fill="#98A2B3"/></g><defs><clipPath id="a"><path fill="#fff" transform="translate(0 .889)" d="M0 0h16v6.222H0z"/></clipPath></defs></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/icons/open-collectione-mono.svg b/eslint/docs/src/assets/images/icons/open-collectione-mono.svg new file mode 100644 index 0000000..6604783 --- /dev/null +++ b/eslint/docs/src/assets/images/icons/open-collectione-mono.svg @@ -0,0 +1 @@ +<svg width="21" height="20" fill="none" xmlns="http://www.w3.org/2000/svg"><g clip-path="url(#a)" fill-rule="evenodd" clip-rule="evenodd" fill="#fff"><path d="M16.876 9.974c0 1.26-.366 2.467-.993 3.464l2.561 2.572c1.254-1.68 2.039-3.78 2.039-6.037s-.785-4.356-2.039-6.036l-2.561 2.571c.627.998.993 2.153.993 3.465Z"/><path d="M10.501 16.378c-3.502 0-6.377-2.887-6.377-6.404S7 3.57 10.501 3.57c1.307 0 2.456.368 3.45 1.05l2.561-2.572C14.84.788 12.75 0 10.501 0 5.012 0 .518 4.462.518 10.026.518 15.591 5.012 20 10.5 20c2.3 0 4.39-.788 6.063-2.047l-2.56-2.572a6.515 6.515 0 0 1-3.503.998Z"/></g><defs><clipPath id="a"><path fill="#fff" transform="translate(.5)" d="M0 0h20v20H0z"/></clipPath></defs></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/icons/opencollective-img.svg b/eslint/docs/src/assets/images/icons/opencollective-img.svg new file mode 100644 index 0000000..a3b46dc --- /dev/null +++ b/eslint/docs/src/assets/images/icons/opencollective-img.svg @@ -0,0 +1 @@ +<svg width="64" height="64" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M52.402 31.916c0 4.03-1.17 7.895-3.178 11.087l8.196 8.23c4.014-5.375 6.523-12.094 6.523-19.318 0-7.224-2.51-13.942-6.523-19.318l-8.196 8.23c2.007 3.192 3.178 6.887 3.178 11.087v.002Z" fill="#B8D3F4"/><path fill-rule="evenodd" clip-rule="evenodd" d="M32.004 52.41c-11.207 0-20.406-9.24-20.406-20.493 0-11.253 9.2-20.493 20.406-20.493 4.182 0 7.86 1.176 11.04 3.36l8.196-8.23C45.887 2.52 39.197 0 32.004 0 14.44 0 .057 14.278.057 32.084.057 49.89 14.44 64 32.004 64c7.36 0 14.05-2.52 19.403-6.55l-8.196-8.23c-3.178 2.016-7.025 3.192-11.207 3.192v-.002Z" fill="#3385FF"/></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/icons/plus-circle.svg b/eslint/docs/src/assets/images/icons/plus-circle.svg new file mode 100644 index 0000000..58533a0 --- /dev/null +++ b/eslint/docs/src/assets/images/icons/plus-circle.svg @@ -0,0 +1 @@ +<svg width="24" height="24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M12 8v8m-4-4h8m6 0c0 5.523-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2s10 4.477 10 10Z" stroke="#98A2B3" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/icons/search.svg b/eslint/docs/src/assets/images/icons/search.svg new file mode 100644 index 0000000..6c70237 --- /dev/null +++ b/eslint/docs/src/assets/images/icons/search.svg @@ -0,0 +1 @@ +<svg width="20" height="20" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="m17.5 17.5-3.625-3.625m1.958-4.708a6.667 6.667 0 1 1-13.333 0 6.667 6.667 0 0 1 13.333 0Z" stroke="#667085" stroke-width="1.667" stroke-linecap="round" stroke-linejoin="round"/></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/icons/twitter.svg b/eslint/docs/src/assets/images/icons/twitter.svg new file mode 100644 index 0000000..ffee249 --- /dev/null +++ b/eslint/docs/src/assets/images/icons/twitter.svg @@ -0,0 +1 @@ +<svg width="24" height="25" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M24 4.71c-.9.4-1.8.7-2.8.8 1-.6 1.8-1.6 2.2-2.7-1 .6-2 1-3.1 1.2-.9-1-2.2-1.6-3.6-1.6-2.7 0-4.9 2.2-4.9 4.9 0 .4 0 .8.1 1.1-4.2-.2-7.8-2.2-10.2-5.2-.5.8-.7 1.6-.7 2.5 0 1.7.9 3.2 2.2 4.1-.8 0-1.6-.2-2.2-.6v.1c0 2.4 1.7 4.4 3.9 4.8-.4.1-.8.2-1.3.2-.3 0-.6 0-.9-.1.6 2 2.4 3.4 4.6 3.4-1.7 1.3-3.8 2.1-6.1 2.1-.4 0-.8 0-1.2-.1 2.2 1.4 4.8 2.2 7.5 2.2 9.1 0 14-7.5 14-14v-.6c1-.7 1.8-1.6 2.5-2.5Z" fill="#98A2B3"/></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/images/logo/brand-colors.svg b/eslint/docs/src/assets/images/logo/brand-colors.svg new file mode 100644 index 0000000..2c2048d --- /dev/null +++ b/eslint/docs/src/assets/images/logo/brand-colors.svg @@ -0,0 +1 @@ +<svg width="52" height="12" fill="none" xmlns="http://www.w3.org/2000/svg"><circle cx="6" cy="6" r="6" fill="#F2F4F7"/><circle cx="26" cy="6" r="6" fill="#101828"/><circle cx="46" cy="6" r="6" fill="#4B32C3"/></svg> \ No newline at end of file diff --git a/eslint/docs/src/assets/js/components-index.js b/eslint/docs/src/assets/js/components-index.js new file mode 100644 index 0000000..9e3bc0f --- /dev/null +++ b/eslint/docs/src/assets/js/components-index.js @@ -0,0 +1,35 @@ +(function() { + var index_trigger = document.getElementById("js-index-toggle"), + index = document.getElementById("js-index-list"), + body = document.getElementsByTagName("body")[0], + open = false; + + if (matchMedia) { + const mq = window.matchMedia("(max-width: 1023px)"); + mq.addEventListener('change', WidthChange); + WidthChange(mq); + } + + function WidthChange(mq) { + initIndex(); + } + + function toggleindex(e) { + if (!open) { + this.setAttribute("aria-expanded", "true"); + index.setAttribute("data-open", "true"); + open = true; + } else { + this.setAttribute("aria-expanded", "false"); + index.setAttribute("data-open", "false"); + open = false; + } + } + + function initIndex() { + index_trigger.removeAttribute("hidden"); + index_trigger.setAttribute("aria-expanded", "false"); + index.setAttribute("data-open", "false"); + index_trigger.addEventListener("click", toggleindex, false); + } +})(); diff --git a/eslint/docs/src/assets/js/css-vars-ponyfill@2.js b/eslint/docs/src/assets/js/css-vars-ponyfill@2.js new file mode 100644 index 0000000..3285a57 --- /dev/null +++ b/eslint/docs/src/assets/js/css-vars-ponyfill@2.js @@ -0,0 +1,47 @@ +/*! + * css-vars-ponyfill + * v2.1.2 + * https://jhildenbiddle.github.io/css-vars-ponyfill/ + * (c) 2018-2019 John Hildenbiddle <http://hildenbiddle.com> + * MIT license + */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).cssVars=t()}(this,function(){"use strict";function e(){return(e=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e}).apply(this,arguments)}function t(e){return function(e){if(Array.isArray(e)){for(var t=0,r=new Array(e.length);t<e.length;t++)r[t]=e[t];return r}}(e)||function(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e))return Array.from(e)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}()}function r(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r={mimeType:t.mimeType||null,onBeforeSend:t.onBeforeSend||Function.prototype,onSuccess:t.onSuccess||Function.prototype,onError:t.onError||Function.prototype,onComplete:t.onComplete||Function.prototype},n=Array.isArray(e)?e:[e],o=Array.apply(null,Array(n.length)).map(function(e){return null});function s(){return!("<"===(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").trim().charAt(0))}function a(e,t){r.onError(e,n[t],t)}function c(e,t){var s=r.onSuccess(e,n[t],t);e=!1===s?"":s||e,o[t]=e,-1===o.indexOf(null)&&r.onComplete(o)}var i=document.createElement("a");n.forEach(function(e,t){if(i.setAttribute("href",e),i.href=String(i.href),Boolean(document.all&&!window.atob)&&i.host.split(":")[0]!==location.host.split(":")[0]){if(i.protocol===location.protocol){var n=new XDomainRequest;n.open("GET",e),n.timeout=0,n.onprogress=Function.prototype,n.ontimeout=Function.prototype,n.onload=function(){s(n.responseText)?c(n.responseText,t):a(n,t)},n.onerror=function(e){a(n,t)},setTimeout(function(){n.send()},0)}else console.warn("Internet Explorer 9 Cross-Origin (CORS) requests must use the same protocol (".concat(e,")")),a(null,t)}else{var o=new XMLHttpRequest;o.open("GET",e),r.mimeType&&o.overrideMimeType&&o.overrideMimeType(r.mimeType),r.onBeforeSend(o,e,t),o.onreadystatechange=function(){4===o.readyState&&(200===o.status&&s(o.responseText)?c(o.responseText,t):a(o,t))},o.send()}})}function n(e){var t={cssComments:/\/\*[\s\S]+?\*\//g,cssImports:/(?:@import\s*)(?:url\(\s*)?(?:['"])([^'"]*)(?:['"])(?:\s*\))?(?:[^;]*;)/g},n={rootElement:e.rootElement||document,include:e.include||'style,link[rel="stylesheet"]',exclude:e.exclude||null,filter:e.filter||null,useCSSOM:e.useCSSOM||!1,onBeforeSend:e.onBeforeSend||Function.prototype,onSuccess:e.onSuccess||Function.prototype,onError:e.onError||Function.prototype,onComplete:e.onComplete||Function.prototype},s=Array.apply(null,n.rootElement.querySelectorAll(n.include)).filter(function(e){return t=e,r=n.exclude,!(t.matches||t.matchesSelector||t.webkitMatchesSelector||t.mozMatchesSelector||t.msMatchesSelector||t.oMatchesSelector).call(t,r);var t,r}),a=Array.apply(null,Array(s.length)).map(function(e){return null});function c(){if(-1===a.indexOf(null)){var e=a.join("");n.onComplete(e,a,s)}}function i(e,t,o,s){var i=n.onSuccess(e,o,s);(function e(t,o,s,a){var c=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[];var i=arguments.length>5&&void 0!==arguments[5]?arguments[5]:[];var l=u(t,s,i);l.rules.length?r(l.absoluteUrls,{onBeforeSend:function(e,t,r){n.onBeforeSend(e,o,t)},onSuccess:function(e,t,r){var s=n.onSuccess(e,o,t),a=u(e=!1===s?"":s||e,t,i);return a.rules.forEach(function(t,r){e=e.replace(t,a.absoluteRules[r])}),e},onError:function(r,n,u){c.push({xhr:r,url:n}),i.push(l.rules[u]),e(t,o,s,a,c,i)},onComplete:function(r){r.forEach(function(e,r){t=t.replace(l.rules[r],e)}),e(t,o,s,a,c,i)}}):a(t,c)})(e=void 0!==i&&!1===Boolean(i)?"":i||e,o,s,function(e,r){null===a[t]&&(r.forEach(function(e){return n.onError(e.xhr,o,e.url)}),!n.filter||n.filter.test(e)?a[t]=e:a[t]="",c())})}function u(e,r){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],s={};return s.rules=(e.replace(t.cssComments,"").match(t.cssImports)||[]).filter(function(e){return-1===n.indexOf(e)}),s.urls=s.rules.map(function(e){return e.replace(t.cssImports,"$1")}),s.absoluteUrls=s.urls.map(function(e){return o(e,r)}),s.absoluteRules=s.rules.map(function(e,t){var n=s.urls[t],a=o(s.absoluteUrls[t],r);return e.replace(n,a)}),s}s.length?s.forEach(function(e,t){var s=e.getAttribute("href"),u=e.getAttribute("rel"),l="LINK"===e.nodeName&&s&&u&&"stylesheet"===u.toLowerCase(),f="STYLE"===e.nodeName;if(l)r(s,{mimeType:"text/css",onBeforeSend:function(t,r,o){n.onBeforeSend(t,e,r)},onSuccess:function(r,n,a){var c=o(s,location.href);i(r,t,e,c)},onError:function(r,o,s){a[t]="",n.onError(r,e,o),c()}});else if(f){var d=e.textContent;n.useCSSOM&&(d=Array.apply(null,e.sheet.cssRules).map(function(e){return e.cssText}).join("")),i(d,t,e,location.href)}else a[t]="",c()}):n.onComplete("",[])}function o(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:location.href,r=document.implementation.createHTMLDocument(""),n=r.createElement("base"),o=r.createElement("a");return r.head.appendChild(n),r.body.appendChild(o),n.href=t,o.href=e,o.href}var s=a;function a(e,t,r){e instanceof RegExp&&(e=c(e,r)),t instanceof RegExp&&(t=c(t,r));var n=i(e,t,r);return n&&{start:n[0],end:n[1],pre:r.slice(0,n[0]),body:r.slice(n[0]+e.length,n[1]),post:r.slice(n[1]+t.length)}}function c(e,t){var r=t.match(e);return r?r[0]:null}function i(e,t,r){var n,o,s,a,c,i=r.indexOf(e),u=r.indexOf(t,i+1),l=i;if(i>=0&&u>0){for(n=[],s=r.length;l>=0&&!c;)l==i?(n.push(l),i=r.indexOf(e,l+1)):1==n.length?c=[n.pop(),u]:((o=n.pop())<s&&(s=o,a=u),u=r.indexOf(t,l+1)),l=i<u&&i>=0?i:u;n.length&&(c=[s,a])}return c}function u(t){var r=e({},{preserveStatic:!0,removeComments:!1},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{});function n(e){throw new Error("CSS parse error: ".concat(e))}function o(e){var r=e.exec(t);if(r)return t=t.slice(r[0].length),r}function a(){return o(/^{\s*/)}function c(){return o(/^}/)}function i(){o(/^\s*/)}function u(){if(i(),"/"===t[0]&&"*"===t[1]){for(var e=2;t[e]&&("*"!==t[e]||"/"!==t[e+1]);)e++;if(!t[e])return n("end of comment is missing");var r=t.slice(2,e);return t=t.slice(e+2),{type:"comment",comment:r}}}function l(){for(var e,t=[];e=u();)t.push(e);return r.removeComments?[]:t}function f(){for(i();"}"===t[0];)n("extra closing bracket");var e=o(/^(("(?:\\"|[^"])*"|'(?:\\'|[^'])*'|[^{])+)/);if(e)return e[0].trim().replace(/\/\*([^*]|[\r\n]|(\*+([^*\/]|[\r\n])))*\*\/+/g,"").replace(/"(?:\\"|[^"])*"|'(?:\\'|[^'])*'/g,function(e){return e.replace(/,/g,"‌")}).split(/\s*(?![^(]*\)),\s*/).map(function(e){return e.replace(/\u200C/g,",")})}function d(){o(/^([;\s]*)+/);var e=/\/\*[^*]*\*+([^\/*][^*]*\*+)*\//g,t=o(/^(\*?[-#\/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/);if(t){if(t=t[0].trim(),!o(/^:\s*/))return n("property missing ':'");var r=o(/^((?:\/\*.*?\*\/|'(?:\\'|.)*?'|"(?:\\"|.)*?"|\((\s*'(?:\\'|.)*?'|"(?:\\"|.)*?"|[^)]*?)\s*\)|[^};])+)/),s={type:"declaration",property:t.replace(e,""),value:r?r[0].replace(e,"").trim():""};return o(/^[;\s]*/),s}}function p(){if(!a())return n("missing '{'");for(var e,t=l();e=d();)t.push(e),t=t.concat(l());return c()?t:n("missing '}'")}function m(){i();for(var e,t=[];e=o(/^((\d+\.\d+|\.\d+|\d+)%?|[a-z]+)\s*/);)t.push(e[1]),o(/^,\s*/);if(t.length)return{type:"keyframe",values:t,declarations:p()}}function v(){if(i(),"@"===t[0]){var e=function(){var e=o(/^@([-\w]+)?keyframes\s*/);if(e){var t=e[1];if(!(e=o(/^([-\w]+)\s*/)))return n("@keyframes missing name");var r,s=e[1];if(!a())return n("@keyframes missing '{'");for(var i=l();r=m();)i.push(r),i=i.concat(l());return c()?{type:"keyframes",name:s,vendor:t,keyframes:i}:n("@keyframes missing '}'")}}()||function(){var e=o(/^@supports *([^{]+)/);if(e)return{type:"supports",supports:e[1].trim(),rules:y()}}()||function(){if(o(/^@host\s*/))return{type:"host",rules:y()}}()||function(){var e=o(/^@media([^{]+)*/);if(e)return{type:"media",media:(e[1]||"").trim(),rules:y()}}()||function(){var e=o(/^@custom-media\s+(--[^\s]+)\s*([^{;]+);/);if(e)return{type:"custom-media",name:e[1].trim(),media:e[2].trim()}}()||function(){if(o(/^@page */))return{type:"page",selectors:f()||[],declarations:p()}}()||function(){var e=o(/^@([-\w]+)?document *([^{]+)/);if(e)return{type:"document",document:e[2].trim(),vendor:e[1]?e[1].trim():null,rules:y()}}()||function(){if(o(/^@font-face\s*/))return{type:"font-face",declarations:p()}}()||function(){var e=o(/^@(import|charset|namespace)\s*([^;]+);/);if(e)return{type:e[1],name:e[2].trim()}}();if(e&&!r.preserveStatic){var s=!1;if(e.declarations)s=e.declarations.some(function(e){return/var\(/.test(e.value)});else s=(e.keyframes||e.rules||[]).some(function(e){return(e.declarations||[]).some(function(e){return/var\(/.test(e.value)})});return s?e:{}}return e}}function h(){if(!r.preserveStatic){var e=s("{","}",t);if(e){var o=/:(?:root|host)(?![.:#(])/.test(e.pre)&&/--\S*\s*:/.test(e.body),a=/var\(/.test(e.body);if(!o&&!a)return t=t.slice(e.end+1),{}}}var c=f()||[],i=r.preserveStatic?p():p().filter(function(e){var t=c.some(function(e){return/:(?:root|host)(?![.:#(])/.test(e)})&&/^--\S/.test(e.property),r=/var\(/.test(e.value);return t||r});return c.length||n("selector missing"),{type:"rule",selectors:c,declarations:i}}function y(e){if(!e&&!a())return n("missing '{'");for(var r,o=l();t.length&&(e||"}"!==t[0])&&(r=v()||h());)r.type&&o.push(r),o=o.concat(l());return e||c()?o:n("missing '}'")}return{type:"stylesheet",stylesheet:{rules:y(!0),errors:[]}}}function l(t){var r=e({},{parseHost:!1,store:{},onWarning:function(){}},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}),n=new RegExp(":".concat(r.parseHost?"host":"root","(?![.:#(])"));return"string"==typeof t&&(t=u(t,r)),t.stylesheet.rules.forEach(function(e){"rule"===e.type&&e.selectors.some(function(e){return n.test(e)})&&e.declarations.forEach(function(e,t){var n=e.property,o=e.value;n&&0===n.indexOf("--")&&(r.store[n]=o)})}),r.store}function f(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",r=arguments.length>2?arguments[2]:void 0,n={charset:function(e){return"@charset "+e.name+";"},comment:function(e){return 0===e.comment.indexOf("__CSSVARSPONYFILL")?"/*"+e.comment+"*/":""},"custom-media":function(e){return"@custom-media "+e.name+" "+e.media+";"},declaration:function(e){return e.property+":"+e.value+";"},document:function(e){return"@"+(e.vendor||"")+"document "+e.document+"{"+o(e.rules)+"}"},"font-face":function(e){return"@font-face{"+o(e.declarations)+"}"},host:function(e){return"@host{"+o(e.rules)+"}"},import:function(e){return"@import "+e.name+";"},keyframe:function(e){return e.values.join(",")+"{"+o(e.declarations)+"}"},keyframes:function(e){return"@"+(e.vendor||"")+"keyframes "+e.name+"{"+o(e.keyframes)+"}"},media:function(e){return"@media "+e.media+"{"+o(e.rules)+"}"},namespace:function(e){return"@namespace "+e.name+";"},page:function(e){return"@page "+(e.selectors.length?e.selectors.join(", "):"")+"{"+o(e.declarations)+"}"},rule:function(e){var t=e.declarations;if(t.length)return e.selectors.join(",")+"{"+o(t)+"}"},supports:function(e){return"@supports "+e.supports+"{"+o(e.rules)+"}"}};function o(e){for(var o="",s=0;s<e.length;s++){var a=e[s];r&&r(a);var c=n[a.type](a);c&&(o+=c,c.length&&a.selectors&&(o+=t))}return o}return o(e.stylesheet.rules)}a.range=i;var d="--",p="var";function m(t){var r=e({},{preserveStatic:!0,preserveVars:!1,variables:{},onWarning:function(){}},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{});return"string"==typeof t&&(t=u(t,r)),function e(t,r){t.rules.forEach(function(n){n.rules?e(n,r):n.keyframes?n.keyframes.forEach(function(e){"keyframe"===e.type&&r(e.declarations,n)}):n.declarations&&r(n.declarations,t)})}(t.stylesheet,function(e,t){for(var n=0;n<e.length;n++){var o=e[n],s=o.type,a=o.property,c=o.value;if("declaration"===s)if(r.preserveVars||!a||0!==a.indexOf(d)){if(-1!==c.indexOf(p+"(")){var i=h(c,r);i!==o.value&&(i=v(i),r.preserveVars?(e.splice(n,0,{type:s,property:a,value:i}),n++):o.value=i)}}else e.splice(n,1),n--}}),f(t)}function v(e){return(e.match(/calc\(([^)]+)\)/g)||[]).forEach(function(t){var r="calc".concat(t.split("calc").join(""));e=e.replace(t,r)}),e}function h(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2?arguments[2]:void 0;if(-1===e.indexOf("var("))return e;var n=s("(",")",e);return n?"var"===n.pre.slice(-3)?0===n.body.trim().length?(t.onWarning("var() must contain a non-whitespace string"),e):n.pre.slice(0,-3)+function(e){var n=e.split(",")[0].replace(/[\s\n\t]/g,""),o=(e.match(/(?:\s*,\s*){1}(.*)?/)||[])[1],s=Object.prototype.hasOwnProperty.call(t.variables,n)?String(t.variables[n]):void 0,a=s||(o?String(o):void 0),c=r||e;return s||t.onWarning('variable "'.concat(n,'" is undefined')),a&&"undefined"!==a&&a.length>0?h(a,t,c):"var(".concat(c,")")}(n.body)+h(n.post,t):n.pre+"(".concat(h(n.body,t),")")+h(n.post,t):(-1!==e.indexOf("var(")&&t.onWarning('missing closing ")" in the value "'.concat(e,'"')),e)}var y="undefined"!=typeof window,g=y&&window.CSS&&window.CSS.supports&&window.CSS.supports("(--a: 0)"),S={group:0,job:0},b={rootElement:y?document:null,shadowDOM:!1,include:"style,link[rel=stylesheet]",exclude:"",variables:{},onlyLegacy:!0,preserveStatic:!0,preserveVars:!1,silent:!1,updateDOM:!0,updateURLs:!0,watch:null,onBeforeSend:function(){},onWarning:function(){},onError:function(){},onSuccess:function(){},onComplete:function(){}},E={cssComments:/\/\*[\s\S]+?\*\//g,cssKeyframes:/@(?:-\w*-)?keyframes/,cssMediaQueries:/@media[^{]+\{([\s\S]+?})\s*}/g,cssUrls:/url\((?!['"]?(?:data|http|\/\/):)['"]?([^'")]*)['"]?\)/g,cssVarDeclRules:/(?::(?:root|host)(?![.:#(])[\s,]*[^{]*{\s*[^}]*})/g,cssVarDecls:/(?:[\s;]*)(-{2}\w[\w-]*)(?:\s*:\s*)([^;]*);/g,cssVarFunc:/var\(\s*--[\w-]/,cssVars:/(?:(?::(?:root|host)(?![.:#(])[\s,]*[^{]*{\s*[^;]*;*\s*)|(?:var\(\s*))(--[^:)]+)(?:\s*[:)])/},w={dom:{},job:{},user:{}},C=!1,O=null,A=0,x=null,j=!1;function k(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},o="cssVars(): ",s=e({},b,r);function a(e,t,r,n){!s.silent&&window.console&&console.error("".concat(o).concat(e,"\n"),t),s.onError(e,t,r,n)}function c(e){!s.silent&&window.console&&console.warn("".concat(o).concat(e)),s.onWarning(e)}if(y){if(s.watch)return s.watch=b.watch,function(e){function t(e){return"LINK"===e.tagName&&-1!==(e.getAttribute("rel")||"").indexOf("stylesheet")&&!e.disabled}if(!window.MutationObserver)return;O&&(O.disconnect(),O=null);(O=new MutationObserver(function(r){r.some(function(r){var n,o=!1;return"attributes"===r.type?o=t(r.target):"childList"===r.type&&(n=r.addedNodes,o=Array.apply(null,n).some(function(e){var r=1===e.nodeType&&e.hasAttribute("data-cssvars"),n=function(e){return"STYLE"===e.tagName&&!e.disabled}(e)&&E.cssVars.test(e.textContent);return!r&&(t(e)||n)})||function(t){return Array.apply(null,t).some(function(t){var r=1===t.nodeType,n=r&&"out"===t.getAttribute("data-cssvars"),o=r&&"src"===t.getAttribute("data-cssvars"),s=o;if(o||n){var a=t.getAttribute("data-cssvars-group"),c=e.rootElement.querySelector('[data-cssvars-group="'.concat(a,'"]'));o&&(L(e.rootElement),w.dom={}),c&&c.parentNode.removeChild(c)}return s})}(r.removedNodes)),o})&&k(e)})).observe(document.documentElement,{attributes:!0,attributeFilter:["disabled","href"],childList:!0,subtree:!0})}(s),void k(s);if(!1===s.watch&&O&&(O.disconnect(),O=null),!s.__benchmark){if(C===s.rootElement)return void function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:100;clearTimeout(x),x=setTimeout(function(){e.__benchmark=null,k(e)},t)}(r);if(s.__benchmark=T(),s.exclude=[O?'[data-cssvars]:not([data-cssvars=""])':'[data-cssvars="out"]',s.exclude].filter(function(e){return e}).join(","),s.variables=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=/^-{2}/;return Object.keys(e).reduce(function(r,n){return r[t.test(n)?n:"--".concat(n.replace(/^-+/,""))]=e[n],r},{})}(s.variables),!O)if(Array.apply(null,s.rootElement.querySelectorAll('[data-cssvars="out"]')).forEach(function(e){var t=e.getAttribute("data-cssvars-group");(t?s.rootElement.querySelector('[data-cssvars="src"][data-cssvars-group="'.concat(t,'"]')):null)||e.parentNode.removeChild(e)}),A){var i=s.rootElement.querySelectorAll('[data-cssvars]:not([data-cssvars="out"])');i.length<A&&(A=i.length,w.dom={})}}if("loading"!==document.readyState)if(g&&s.onlyLegacy){if(s.updateDOM){var d=s.rootElement.host||(s.rootElement===document?document.documentElement:s.rootElement);Object.keys(s.variables).forEach(function(e){d.style.setProperty(e,s.variables[e])})}}else!j&&(s.shadowDOM||s.rootElement.shadowRoot||s.rootElement.host)?n({rootElement:b.rootElement,include:b.include,exclude:s.exclude,onSuccess:function(e,t,r){return(e=((e=e.replace(E.cssComments,"").replace(E.cssMediaQueries,"")).match(E.cssVarDeclRules)||[]).join(""))||!1},onComplete:function(e,t,r){l(e,{store:w.dom,onWarning:c}),j=!0,k(s)}}):(C=s.rootElement,n({rootElement:s.rootElement,include:s.include,exclude:s.exclude,onBeforeSend:s.onBeforeSend,onError:function(e,t,r){var n=e.responseURL||_(r,location.href),o=e.statusText?"(".concat(e.statusText,")"):"Unspecified Error"+(0===e.status?" (possibly CORS related)":"");a("CSS XHR Error: ".concat(n," ").concat(e.status," ").concat(o),t,e,n)},onSuccess:function(e,t,r){var n=s.onSuccess(e,t,r);return e=void 0!==n&&!1===Boolean(n)?"":n||e,s.updateURLs&&(e=function(e,t){return(e.replace(E.cssComments,"").match(E.cssUrls)||[]).forEach(function(r){var n=r.replace(E.cssUrls,"$1"),o=_(n,t);e=e.replace(r,r.replace(n,o))}),e}(e,r)),e},onComplete:function(r,n){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],i={},d=s.updateDOM?w.dom:Object.keys(w.job).length?w.job:w.job=JSON.parse(JSON.stringify(w.dom)),p=!1;if(o.forEach(function(e,t){if(E.cssVars.test(n[t]))try{var r=u(n[t],{preserveStatic:s.preserveStatic,removeComments:!0});l(r,{parseHost:Boolean(s.rootElement.host),store:i,onWarning:c}),e.__cssVars={tree:r}}catch(t){a(t.message,e)}}),s.updateDOM&&e(w.user,s.variables),e(i,s.variables),p=Boolean((document.querySelector("[data-cssvars]")||Object.keys(w.dom).length)&&Object.keys(i).some(function(e){return i[e]!==d[e]})),e(d,w.user,i),p)L(s.rootElement),k(s);else{var v=[],h=[],y=!1;if(w.job={},s.updateDOM&&S.job++,o.forEach(function(t){var r=!t.__cssVars;if(t.__cssVars)try{m(t.__cssVars.tree,e({},s,{variables:d,onWarning:c}));var n=f(t.__cssVars.tree);if(s.updateDOM){if(t.getAttribute("data-cssvars")||t.setAttribute("data-cssvars","src"),n.length){var o=t.getAttribute("data-cssvars-group")||++S.group,i=n.replace(/\s/g,""),u=s.rootElement.querySelector('[data-cssvars="out"][data-cssvars-group="'.concat(o,'"]'))||document.createElement("style");y=y||E.cssKeyframes.test(n),u.hasAttribute("data-cssvars")||u.setAttribute("data-cssvars","out"),i===t.textContent.replace(/\s/g,"")?(r=!0,u&&u.parentNode&&(t.removeAttribute("data-cssvars-group"),u.parentNode.removeChild(u))):i!==u.textContent.replace(/\s/g,"")&&([t,u].forEach(function(e){e.setAttribute("data-cssvars-job",S.job),e.setAttribute("data-cssvars-group",o)}),u.textContent=n,v.push(n),h.push(u),u.parentNode||t.parentNode.insertBefore(u,t.nextSibling))}}else t.textContent.replace(/\s/g,"")!==n&&v.push(n)}catch(e){a(e.message,t)}r&&t.setAttribute("data-cssvars","skip"),t.hasAttribute("data-cssvars-job")||t.setAttribute("data-cssvars-job",S.job)}),A=s.rootElement.querySelectorAll('[data-cssvars]:not([data-cssvars="out"])').length,s.shadowDOM)for(var g,b=[s.rootElement].concat(t(s.rootElement.querySelectorAll("*"))),O=0;g=b[O];++O)if(g.shadowRoot&&g.shadowRoot.querySelector("style")){var x=e({},s,{rootElement:g.shadowRoot});k(x)}s.updateDOM&&y&&M(s.rootElement),C=!1,s.onComplete(v.join(""),h,JSON.parse(JSON.stringify(d)),T()-s.__benchmark)}}}));else document.addEventListener("DOMContentLoaded",function e(t){k(r),document.removeEventListener("DOMContentLoaded",e)})}}function M(e){var t=["animation-name","-moz-animation-name","-webkit-animation-name"].filter(function(e){return getComputedStyle(document.body)[e]})[0];if(t){for(var r=e.getElementsByTagName("*"),n=[],o=0,s=r.length;o<s;o++){var a=r[o];"none"!==getComputedStyle(a)[t]&&(a.style[t]+="__CSSVARSPONYFILL-KEYFRAMES__",n.push(a))}document.body.offsetHeight;for(var c=0,i=n.length;c<i;c++){var u=n[c].style;u[t]=u[t].replace("__CSSVARSPONYFILL-KEYFRAMES__","")}}}function _(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:location.href,r=document.implementation.createHTMLDocument(""),n=r.createElement("base"),o=r.createElement("a");return r.head.appendChild(n),r.body.appendChild(o),n.href=t,o.href=e,o.href}function T(){return y&&(window.performance||{}).now?window.performance.now():(new Date).getTime()}function L(e){Array.apply(null,e.querySelectorAll('[data-cssvars="skip"],[data-cssvars="src"]')).forEach(function(e){return e.setAttribute("data-cssvars","")})}return k.reset=function(){for(var e in C=!1,O&&(O.disconnect(),O=null),A=0,x=null,j=!1,w)w[e]={}},k}); + + +// Default values +cssVars({ + // Targets + rootElement: document, + shadowDOM: false, + + // Sources + include: 'link[rel=stylesheet],style', + exclude: '', + variables: {}, + + // Options + onlyLegacy: true, + preserveStatic: true, + preserveVars: false, + silent: false, + updateDOM: true, + updateURLs: true, + watch: false, + + // Callbacks + onBeforeSend(xhr, elm, url) { + // ... + }, + onWarning(message) { + // ... + }, + onError(message, elm, xhr, url) { + // ... + }, + onSuccess(cssText, elm, url) { + // ... + }, + onComplete(cssText, styleElms, cssVariables, benchmark) { + // ... + } +}); diff --git a/eslint/docs/src/assets/js/focus-visible.js b/eslint/docs/src/assets/js/focus-visible.js new file mode 100644 index 0000000..c958451 --- /dev/null +++ b/eslint/docs/src/assets/js/focus-visible.js @@ -0,0 +1,305 @@ + +/** + * Applies the :focus-visible polyfill at the given scope. + * A scope in this case is either the top-level Document or a Shadow Root. + * + * @param {(Document|ShadowRoot)} scope + * @see https://github.com/WICG/focus-visible + */ +function applyFocusVisiblePolyfill(scope) { + var hadKeyboardEvent = true; + var hadFocusVisibleRecently = false; + var hadFocusVisibleRecentlyTimeout = null; + + var inputTypesWhitelist = { + text: true, + search: true, + url: true, + tel: true, + email: true, + password: true, + number: true, + date: true, + month: true, + week: true, + time: true, + datetime: true, + 'datetime-local': true + }; + + /** + * Helper function for legacy browsers and iframes which sometimes focus + * elements like document, body, and non-interactive SVG. + * @param {Element} el + */ + function isValidFocusTarget(el) { + if ( + el && + el !== document && + el.nodeName !== 'HTML' && + el.nodeName !== 'BODY' && + 'classList' in el && + 'contains' in el.classList + ) { + return true; + } + return false; + } + + /** + * Computes whether the given element should automatically trigger the + * `focus-visible` class being added, i.e. whether it should always match + * `:focus-visible` when focused. + * @param {Element} el + * @return {boolean} + */ + function focusTriggersKeyboardModality(el) { + var type = el.type; + var tagName = el.tagName; + + if (tagName === 'INPUT' && inputTypesWhitelist[type] && !el.readOnly) { + return true; + } + + if (tagName === 'TEXTAREA' && !el.readOnly) { + return true; + } + + if (el.isContentEditable) { + return true; + } + + return false; + } + + /** + * Add the `focus-visible` class to the given element if it was not added by + * the author. + * @param {Element} el + */ + function addFocusVisibleClass(el) { + if (el.classList.contains('focus-visible')) { + return; + } + el.classList.add('focus-visible'); + el.setAttribute('data-focus-visible-added', ''); + } + + /** + * Remove the `focus-visible` class from the given element if it was not + * originally added by the author. + * @param {Element} el + */ + function removeFocusVisibleClass(el) { + if (!el.hasAttribute('data-focus-visible-added')) { + return; + } + el.classList.remove('focus-visible'); + el.removeAttribute('data-focus-visible-added'); + } + + /** + * If the most recent user interaction was via the keyboard; + * and the key press did not include a meta, alt/option, or control key; + * then the modality is keyboard. Otherwise, the modality is not keyboard. + * Apply `focus-visible` to any current active element and keep track + * of our keyboard modality state with `hadKeyboardEvent`. + * @param {KeyboardEvent} e + */ + function onKeyDown(e) { + if (e.metaKey || e.altKey || e.ctrlKey) { + return; + } + + if (isValidFocusTarget(scope.activeElement)) { + addFocusVisibleClass(scope.activeElement); + } + + hadKeyboardEvent = true; + } + + /** + * If at any point a user clicks with a pointing device, ensure that we change + * the modality away from keyboard. + * This avoids the situation where a user presses a key on an already focused + * element, and then clicks on a different element, focusing it with a + * pointing device, while we still think we're in keyboard modality. + * @param {Event} e + */ + function onPointerDown(e) { + hadKeyboardEvent = false; + } + + /** + * On `focus`, add the `focus-visible` class to the target if: + * - the target received focus as a result of keyboard navigation, or + * - the event target is an element that will likely require interaction + * via the keyboard (e.g. a text box) + * @param {Event} e + */ + function onFocus(e) { + // Prevent IE from focusing the document or HTML element. + if (!isValidFocusTarget(e.target)) { + return; + } + + if (hadKeyboardEvent || focusTriggersKeyboardModality(e.target)) { + addFocusVisibleClass(e.target); + } + } + + /** + * On `blur`, remove the `focus-visible` class from the target. + * @param {Event} e + */ + function onBlur(e) { + if (!isValidFocusTarget(e.target)) { + return; + } + + if ( + e.target.classList.contains('focus-visible') || + e.target.hasAttribute('data-focus-visible-added') + ) { + // To detect a tab/window switch, we look for a blur event followed + // rapidly by a visibility change. + // If we don't see a visibility change within 100ms, it's probably a + // regular focus change. + hadFocusVisibleRecently = true; + window.clearTimeout(hadFocusVisibleRecentlyTimeout); + hadFocusVisibleRecentlyTimeout = window.setTimeout(function() { + hadFocusVisibleRecently = false; + window.clearTimeout(hadFocusVisibleRecentlyTimeout); + }, 100); + removeFocusVisibleClass(e.target); + } + } + + /** + * If the user changes tabs, keep track of whether or not the previously + * focused element had .focus-visible. + * @param {Event} e + */ + function onVisibilityChange(e) { + if (document.visibilityState === 'hidden') { + // If the tab becomes active again, the browser will handle calling focus + // on the element (Safari actually calls it twice). + // If this tab change caused a blur on an element with focus-visible, + // re-apply the class when the user switches back to the tab. + if (hadFocusVisibleRecently) { + hadKeyboardEvent = true; + } + addInitialPointerMoveListeners(); + } + } + + /** + * Add a group of listeners to detect usage of any pointing devices. + * These listeners will be added when the polyfill first loads, and anytime + * the window is blurred, so that they are active when the window regains + * focus. + */ + function addInitialPointerMoveListeners() { + document.addEventListener('mousemove', onInitialPointerMove); + document.addEventListener('mousedown', onInitialPointerMove); + document.addEventListener('mouseup', onInitialPointerMove); + document.addEventListener('pointermove', onInitialPointerMove); + document.addEventListener('pointerdown', onInitialPointerMove); + document.addEventListener('pointerup', onInitialPointerMove); + document.addEventListener('touchmove', onInitialPointerMove); + document.addEventListener('touchstart', onInitialPointerMove); + document.addEventListener('touchend', onInitialPointerMove); + } + + function removeInitialPointerMoveListeners() { + document.removeEventListener('mousemove', onInitialPointerMove); + document.removeEventListener('mousedown', onInitialPointerMove); + document.removeEventListener('mouseup', onInitialPointerMove); + document.removeEventListener('pointermove', onInitialPointerMove); + document.removeEventListener('pointerdown', onInitialPointerMove); + document.removeEventListener('pointerup', onInitialPointerMove); + document.removeEventListener('touchmove', onInitialPointerMove); + document.removeEventListener('touchstart', onInitialPointerMove); + document.removeEventListener('touchend', onInitialPointerMove); + } + + /** + * When the polyfill first loads, assume the user is in keyboard modality. + * If any event is received from a pointing device (e.g. mouse, pointer, + * touch), turn off keyboard modality. + * This accounts for situations where focus enters the page from the URL bar. + * @param {Event} e + */ + function onInitialPointerMove(e) { + // Work around a Safari quirk that fires a mousemove on <html> whenever the + // window blurs, even if you're tabbing out of the page. ¯\_(ツ)_/¯ + if (e.target.nodeName && e.target.nodeName.toLowerCase() === 'html') { + return; + } + + hadKeyboardEvent = false; + removeInitialPointerMoveListeners(); + } + + // For some kinds of state, we are interested in changes at the global scope + // only. For example, global pointer input, global key presses and global + // visibility change should affect the state at every scope: + document.addEventListener('keydown', onKeyDown, true); + document.addEventListener('mousedown', onPointerDown, true); + document.addEventListener('pointerdown', onPointerDown, true); + document.addEventListener('touchstart', onPointerDown, true); + document.addEventListener('visibilitychange', onVisibilityChange, true); + + addInitialPointerMoveListeners(); + + // For focus and blur, we specifically care about state changes in the local + // scope. This is because focus / blur events that originate from within a + // shadow root are not re-dispatched from the host element if it was already + // the active element in its own scope: + scope.addEventListener('focus', onFocus, true); + scope.addEventListener('blur', onBlur, true); + + // We detect that a node is a ShadowRoot by ensuring that it is a + // DocumentFragment and also has a host property. This check covers native + // implementation and polyfill implementation transparently. If we only cared + // about the native implementation, we could just check if the scope was + // an instance of a ShadowRoot. + if (scope.nodeType === Node.DOCUMENT_FRAGMENT_NODE && scope.host) { + // Since a ShadowRoot is a special kind of DocumentFragment, it does not + // have a root element to add a class to. So, we add this attribute to the + // host element instead: + scope.host.setAttribute('data-js-focus-visible', ''); + } else if (scope.nodeType === Node.DOCUMENT_NODE) { + document.documentElement.classList.add('js-focus-visible'); + } +} + +// It is important to wrap all references to global window and document in +// these checks to support server-side rendering use cases +// @see https://github.com/WICG/focus-visible/issues/199 +if (typeof window !== 'undefined' && typeof document !== 'undefined') { + // Make the polyfill helper globally available. This can be used as a signal + // to interested libraries that wish to coordinate with the polyfill for e.g., + // applying the polyfill to a shadow root: + window.applyFocusVisiblePolyfill = applyFocusVisiblePolyfill; + + // Notify interested libraries of the polyfill's presence, in case the + // polyfill was loaded lazily: + var event; + + try { + event = new CustomEvent('focus-visible-polyfill-ready'); + } catch (error) { + // IE11 does not support using CustomEvent as a constructor directly: + event = document.createEvent('CustomEvent'); + event.initCustomEvent('focus-visible-polyfill-ready', false, false, {}); + } + + window.dispatchEvent(event); +} + +if (typeof document !== 'undefined') { + // Apply the polyfill to the global document, so that no JavaScript + // coordination is required to use the polyfill in the top-level document: + applyFocusVisiblePolyfill(document); +} diff --git a/eslint/docs/src/assets/js/inert-polyfill.js b/eslint/docs/src/assets/js/inert-polyfill.js new file mode 100644 index 0000000..11ae095 --- /dev/null +++ b/eslint/docs/src/assets/js/inert-polyfill.js @@ -0,0 +1,23 @@ +/* inert polyfill + * source: https://cdn.rawgit.com/GoogleChrome/inert-polyfill/v0.1.0/inert-polyfill.min.js + */ +window.addEventListener("load", function () { + function h(a, b, c) { if (0 > b) { if (a.previousElementSibling) { for (a = a.previousElementSibling; a.lastElementChild;)a = a.lastElementChild; return a } return a.parentElement } if (a != c && a.firstElementChild) return a.firstElementChild; for (; null != a;) { if (a.nextElementSibling) return a.nextElementSibling; a = a.parentElement } return null } function g(a) { for (; a && a !== document.documentElement;) { if (a.hasAttribute("inert")) return a; a = a.parentElement } return null } (function (a) { + var b = document.createElement("style"); + b.type = "text/css"; b.styleSheet ? b.styleSheet.cssText = a : b.appendChild(document.createTextNode(a)); document.body.appendChild(b) + })("/*[inert]*/[inert]{position:relative!important;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none}[inert]::before{content:'';display:block;position:absolute;top:0;left:0;right:0;bottom:0}"); var c = 0; document.addEventListener("keydown", function (a) { c = 9 === a.keyCode ? a.shiftKey ? -1 : 1 : 0 }); document.addEventListener("mousedown", + function () { c = 0 }); document.body.addEventListener("focus", function (a) { + var b = a.target, f = g(b); if (f) { + if (document.hasFocus() && 0 !== c) { + var d = document.activeElement, e = new KeyboardEvent("keydown", { keyCode: 9, which: 9, key: "Tab", code: "Tab", keyIdentifier: "U+0009", shiftKey: !!(0 > c), bubbles: !0 }); Object.defineProperty(e, "keyCode", { value: 9 }); document.activeElement.dispatchEvent(e); if (d != document.activeElement) return; for (d = f; ;) { + d = h(d, c, f); if (!d) break; a: { + e = b; if (!(0 > d.tabIndex) && (d.focus(), document.activeElement !== e)) { + e = + !0; break a + } e = !1 + } if (e) return + } + } b.blur(); a.preventDefault(); a.stopPropagation() + } + }, !0); document.addEventListener("click", function (a) { g(a.target) && (a.preventDefault(), a.stopPropagation()) }, !0) +}); \ No newline at end of file diff --git a/eslint/docs/src/assets/js/main.js b/eslint/docs/src/assets/js/main.js new file mode 100644 index 0000000..28ec0e1 --- /dev/null +++ b/eslint/docs/src/assets/js/main.js @@ -0,0 +1,282 @@ +(function() { + var toc_trigger = document.getElementById("js-toc-label"), + toc = document.getElementById("js-toc-panel"), + body = document.getElementsByTagName("body")[0], + open = false; + + if (toc && matchMedia) { + const mq = window.matchMedia("(max-width: 1023px)"); + mq.addEventListener('change', WidthChange); + WidthChange(mq); + } + + // media query change + function WidthChange(mq) { + if (mq.matches && toc_trigger) { + let text = toc_trigger.innerText; + let headingButton = document.createElement("button"); + headingButton.setAttribute("aria-expanded", "false"); + headingButton.innerText = text; + toc_trigger.innerHTML = ""; + + toc_trigger.appendChild(headingButton); + headingButton.innerHTML += `<svg class="toc-trigger-icon" width="12" height="8" aria-hidden="true" focusable="false" viewBox="0 0 12 8"><g fill="none"><path fill="currentColor" d="M1.41.59l4.59 4.58 4.59-4.58 1.41 1.41-6 6-6-6z"/><path d="M-6-8h24v24h-24z"/></g></svg>`; + + toc.setAttribute("data-open", "false"); + toc_trigger.setAttribute("aria-expanded", "false"); + headingButton.addEventListener("click", toggleTOC, true); + } else { + toc_trigger.innerHTML = 'Table of Contents'; + toc.setAttribute("data-open", "true"); + } + + } + + function toggleTOC(e) { + if (!open) { + this.setAttribute("aria-expanded", "true"); + toc.setAttribute("data-open", "true"); + open = true; + } else { + this.setAttribute("aria-expanded", "false"); + toc.setAttribute("data-open", "false"); + open = false; + } + } +})(); + +(function() { + var nav_trigger = document.getElementById("nav-toggle"), + nav = document.getElementById("nav-panel"), + body = document.getElementsByTagName("body")[0], + open = false; + + if (matchMedia) { + const mq = window.matchMedia("(max-width: 1023px)"); + mq.addEventListener('change', WidthChange); + WidthChange(mq); + } + + // media query change + function WidthChange(mq) { + if (mq.matches) { + nav.setAttribute("data-open", "false"); + nav_trigger.removeAttribute("hidden"); + nav_trigger.setAttribute("aria-expanded", "false"); + nav_trigger.addEventListener("click", togglenav, false); + } else { + nav.setAttribute("data-open", "true"); + nav_trigger.setAttribute("hidden", ""); + nav_trigger.setAttribute("aria-expanded", "true"); + } + + } + + function togglenav(e) { + if (!open) { + this.setAttribute("aria-expanded", "true"); + nav.setAttribute("data-open", "true"); + open = true; + } else { + this.setAttribute("aria-expanded", "false"); + nav.setAttribute("data-open", "false"); + open = false; + } + } +})(); + +(function() { + var index_trigger = document.getElementById("js-docs-index-toggle"), + index = document.getElementById("js-docs-index-panel"), + body = document.getElementsByTagName("body")[0], + open = false; + + if (matchMedia) { + const mq = window.matchMedia("(max-width: 1023px)"); + mq.addEventListener('change', WidthChange); + WidthChange(mq); + } + + function WidthChange(mq) { + initIndex(); + } + + function toggleindex(e) { + if (!open) { + this.setAttribute("aria-expanded", "true"); + index.setAttribute("data-open", "true"); + open = true; + } else { + this.setAttribute("aria-expanded", "false"); + index.setAttribute("data-open", "false"); + open = false; + } + } + + function initIndex() { + if(index_trigger) { + + index_trigger.removeAttribute("hidden"); + index_trigger.setAttribute("aria-expanded", "false"); + index.setAttribute("data-open", "false"); + + index.setAttribute("data-open", "false"); + index_trigger.addEventListener("click", toggleindex, false); + } + } +})(); + + + +(function() { + var switchers = document.querySelectorAll('.switcher'), + fallbacks = document.querySelectorAll('.switcher-fallback'); + + if (fallbacks != null) { + fallbacks.forEach(el => { + el.setAttribute('hidden', ''); + }); + } + + if (switchers != null) { + switchers.forEach(element => { + element.removeAttribute('hidden'); + const select = element.querySelector('select'); + + select.addEventListener('change', function() { + var selected = this.options[this.selectedIndex]; + url = selected.getAttribute('data-url'); + + window.location.href = url; + }) + }); + } +})(); + +// add "Open in Playground" button to code blocks +// (function() { +// let blocks = document.querySelectorAll('pre[class*="language-"]'); +// if (blocks) { +// blocks.forEach(function(block) { +// let button = document.createElement("a"); +// button.classList.add('c-btn--playground'); +// button.classList.add('c-btn'); +// button.classList.add('c-btn--secondary'); +// button.setAttribute("href", "#"); +// button.innerText = "Open in Playground"; +// block.appendChild(button); +// }); +// } +// })(); + + + +// add utilities +var util = { + keyCodes: { + UP: 38, + DOWN: 40, + LEFT: 37, + RIGHT: 39, + HOME: 36, + END: 35, + ENTER: 13, + SPACE: 32, + DELETE: 46, + TAB: 9, + }, + + generateID: function(base) { + return base + Math.floor(Math.random() * 999); + }, + + getDirectChildren: function(elm, selector) { + return Array.prototype.filter.call(elm.children, function(child) { + return child.matches(selector); + }); + }, +}; + +(function(w, doc, undefined) { + var CollapsibleIndexOptions = { + allCollapsed: false, + icon: '<svg class="index-icon" width="12" height="8" aria-hidden="true" focusable="false" viewBox="0 0 12 8"><g fill="none"><path fill="currentColor" d="M1.41.59l4.59 4.58 4.59-4.58 1.41 1.41-6 6-6-6z"/><path d="M-6-8h24v24h-24z"/></g></svg>', + }; + var CollapsibleIndex = function(inst, options) { + var _options = Object.assign(CollapsibleIndexOptions, options); + var el = inst; + var indexToggles = el.querySelectorAll(".docs-index .docs__index__panel > ul > .docs-index__item[data-has-children] > a"); // only top-most level + var indexPanels = el.querySelectorAll(".docs-index .docs__index__panel > ul > .docs-index__item>[data-child-list]"); // the list + var accID = util.generateID("c-index-"); + + var init = function() { + el.classList.add("index-js"); + + setupindexToggles(indexToggles); + setupindexPanels(indexPanels); + }; + + + var setupindexToggles = function(indexToggles) { + Array.from(indexToggles).forEach(function(item, index) { + var $this = item; + + $this.setAttribute('role', 'button'); + $this.setAttribute("id", accID + "__item-" + index); + $this.innerHTML += _options.icon; + + if (_options.allCollapsed) $this.setAttribute("aria-expanded", "false"); + else $this.setAttribute("aria-expanded", "true"); + + $this.addEventListener("click", function(e) { + e.preventDefault(); + togglePanel($this); + }); + }); + }; + + var setupindexPanels = function(indexPanels) { + Array.from(indexPanels).forEach(function(item, index) { + let $this = item; + + $this.setAttribute("id", accID + "__list-" + index); + $this.setAttribute( + "aria-labelledby", + accID + "__item-" + index + ); + if (_options.allCollapsed) $this.setAttribute("aria-hidden", "true"); + else $this.setAttribute("aria-hidden", "false"); + }); + }; + + var togglePanel = function(toggleButton) { + var thepanel = toggleButton.nextElementSibling; + + if (toggleButton.getAttribute("aria-expanded") == "true") { + toggleButton.setAttribute("aria-expanded", "false"); + thepanel.setAttribute("aria-hidden", "true"); + } else { + toggleButton.setAttribute("aria-expanded", "true"); + thepanel.setAttribute("aria-hidden", "false"); + } + }; + + + init.call(this); + return this; + }; // CollapsibleIndex() + + w.CollapsibleIndex = CollapsibleIndex; +})(window, document); + +// init +var index = document.getElementById('docs-index'); +if (index) { + index = new CollapsibleIndex(index, { + allCollapsed: false + }); +} + +document.addEventListener("DOMContentLoaded", () => { + anchors.add(".docs-content h2:not(.c-toc__label), .docs-content h3, .docs-content h4"); +}); \ No newline at end of file diff --git a/eslint/docs/src/assets/js/search.js b/eslint/docs/src/assets/js/search.js new file mode 100644 index 0000000..29162c0 --- /dev/null +++ b/eslint/docs/src/assets/js/search.js @@ -0,0 +1,191 @@ +/** + * @fileoverview Search functionality + * @author Nicholas C. Zakas + */ + +//----------------------------------------------------------------------------- +// Imports +//----------------------------------------------------------------------------- + +import algoliasearch from "./algoliasearch.js"; + +//----------------------------------------------------------------------------- +// Initialization +//----------------------------------------------------------------------------- + +// search +const client = algoliasearch('L633P0C2IR', 'bb6bbd2940351f3afc18844a6b06a6e8'); +const index = client.initIndex('eslint'); + +// page +const resultsElement = document.querySelector('#search-results'); +const resultsLiveRegion = document.querySelector('#search-results-announcement'); +const searchInput = document.querySelector('#search'); +const searchClearBtn = document.querySelector('#search__clear-btn'); +let activeIndex = -1; +let searchQuery; + +//----------------------------------------------------------------------------- +// Helpers +//----------------------------------------------------------------------------- + +/** + * Executes a search against the Algolia index. + * @param {string} query The search query to execute. + * @returns {Promise<Array<object>>} The search results. + */ +function fetchSearchResults(query) { + return index.search(query, { + // facetFilters: ["tags:docs"] + }).then(({ hits }) => hits); +} + +/** + * Removes any current search results from the display. + * @returns {void} + */ +function clearSearchResults() { + while (resultsElement.firstChild) { + resultsElement.removeChild(resultsElement.firstChild); + } + resultsElement.innerHTML = ""; + searchClearBtn.setAttribute('hidden', ''); +} + +/** + * Displays the given search results in the page. + * @param {Array<object>} results The search results to display. + * @returns {void} + */ +function displaySearchResults(results) { + + clearSearchResults(); + + if (results.length) { + + const list = document.createElement("ul"); + list.setAttribute('role', 'list'); + list.classList.add('search-results__list'); + resultsElement.append(list); + resultsElement.setAttribute('data-results', 'true'); + activeIndex = -1; + + for (const result of results) { + const listItem = document.createElement('li'); + listItem.classList.add('search-results__item'); + const maxLvl = Math.max(...Object.keys(result._highlightResult.hierarchy).map(k => Number(k.substring(3)))); + listItem.innerHTML = ` + <h2 class="search-results__item__title"><a href="${result.url}">${result.hierarchy.lvl0}</a></h2> + <p class="search-results__item__context">${typeof result._highlightResult.content !== 'undefined' ? result._highlightResult.content.value : result._highlightResult.hierarchy[`lvl${maxLvl}`].value}</p> + `.trim(); + list.append(listItem); + } + searchClearBtn.removeAttribute('hidden'); + + } else { + resultsLiveRegion.innerHTML = "No results found."; + resultsElement.innerHTML = "No results found."; + resultsElement.setAttribute('data-results', 'false'); + searchClearBtn.setAttribute('hidden', ''); + } + +} + + +// Check if an element is currently scrollable +function isScrollable(element) { + return element && element.clientHeight < element.scrollHeight; +} + +// Ensure given child element is within the parent's visible scroll area +function maintainScrollVisibility(activeElement, scrollParent) { + const { offsetHeight, offsetTop } = activeElement; + const { offsetHeight: parentOffsetHeight, scrollTop } = scrollParent; + + const isAbove = offsetTop < scrollTop; + const isBelow = (offsetTop + offsetHeight) > (scrollTop + parentOffsetHeight); + + if (isAbove) { + scrollParent.scrollTo(0, offsetTop); + } + else if (isBelow) { + scrollParent.scrollTo(0, offsetTop - parentOffsetHeight + offsetHeight); + } + +} + + +//----------------------------------------------------------------------------- +// Event Handlers +//----------------------------------------------------------------------------- + +// listen for input changes +if(searchInput) + searchInput.addEventListener('keyup', function (e) { + const query = searchInput.value; + + if(query === searchQuery) return; + + if(query.length) searchClearBtn.removeAttribute('hidden'); + else searchClearBtn.setAttribute('hidden', ''); + + if (query.length > 2) { + fetchSearchResults(query) + .then(displaySearchResults) + .catch(clearSearchResults); + + document.addEventListener('click', function(e) { + if(e.target !== resultsElement) clearSearchResults(); + }); + } else { + clearSearchResults(); + } + + searchQuery = query + + }); + + +if(searchClearBtn) + searchClearBtn.addEventListener('click', function(e) { + searchInput.value = ''; + searchInput.focus(); + clearSearchResults(); + }); + +document.addEventListener('keydown', function (e) { + + if (e.key === 'Escape') { + e.preventDefault(); + clearSearchResults(); + searchInput.focus(); + } + + if ((e.metaKey || e.ctrlKey) && e.key === 'k') { + e.preventDefault(); + searchInput.focus(); + document.querySelector('.search').scrollIntoView({ behaviour: "smooth", block: "start" }); + } + + const searchResults = Array.from(document.querySelectorAll('.search-results__item')); + if (!searchResults.length) return; + + switch (e.key) { + case "ArrowUp": + e.preventDefault(); + activeIndex = activeIndex - 1 < 0 ? searchResults.length - 1 : activeIndex - 1; + break; + case "ArrowDown": + e.preventDefault(); + activeIndex = activeIndex + 1 < searchResults.length ? activeIndex + 1 : 0; + break; + } + + if (activeIndex === -1) return; + const activeSearchResult = searchResults[activeIndex]; + activeSearchResult.querySelector('a').focus(); + if (isScrollable(resultsElement)) { + maintainScrollVisibility(activeSearchResult, resultsElement); + } +}); + \ No newline at end of file diff --git a/eslint/docs/src/assets/js/tabs.js b/eslint/docs/src/assets/js/tabs.js new file mode 100644 index 0000000..a221593 --- /dev/null +++ b/eslint/docs/src/assets/js/tabs.js @@ -0,0 +1,337 @@ +"use strict"; +if (typeof Object.assign != "function") { + // Must be writable: true, enumerable: false, configurable: true + Object.defineProperty(Object, "assign", { + value: function assign(target, varArgs) { + // .length of function is 2 + + if (target == null) { + // TypeError if undefined or null + throw new TypeError( + "Cannot convert undefined or null to object" + ); + } + + var to = Object(target); + + for (var index = 1; index < arguments.length; index++) { + var nextSource = arguments[index]; + + if (nextSource != null) { + // Skip over if undefined or null + for (var nextKey in nextSource) { + // Avoid bugs when hasOwnProperty is shadowed + if ( + Object.prototype.hasOwnProperty.call( + nextSource, + nextKey + ) + ) { + to[nextKey] = nextSource[nextKey]; + } + } + } + } + return to; + }, + writable: true, + configurable: true + }); +} +// add utilities; borrowed from: https://scottaohara.github.io/a11y_tab_widget/ +var util = { + keyCodes: { + UP: 38, + DOWN: 40, + LEFT: 37, + RIGHT: 39, + HOME: 36, + END: 35, + ENTER: 13, + SPACE: 32, + DELETE: 46, + TAB: 9 + }, + + generateID: function (base) { + return base + Math.floor(Math.random() * 999); + }, + + + getUrlHash: function () { + return window.location.hash.replace('#', ''); + }, + + /** + * Use history.replaceState so clicking through Tabs + * does not create dozens of new history entries. + * Browser back should navigate to the previous page + * regardless of how many Tabs were activated. + * + * @param {string} hash + */ + setUrlHash: function (hash) { + if (history.replaceState) { + history.replaceState(null, '', '#' + hash); + } else { + location.hash = hash; + } + } +}; + + + + +(function (w, doc, undefined) { + + var ARIAaccOptions = { + manual: true, + open: 0 + } + + var ARIAtabs = function (inst, options) { + var _options = Object.assign(ARIAaccOptions, options); + var el = inst; + var tablist = el.querySelector("[data-tablist]"); + var tabs = Array.from(el.querySelectorAll("[data-tab]")); + var tabpanels = Array.from(el.querySelectorAll("[data-tabpanel]")); + var tabsID = util.generateID('ps__tabs-'); + var orientation = el.getAttribute('data-tabs-orientation'); + var currentIndex = _options.open; + var selectedTab = currentIndex; + var manual = _options.manual; + + el.setAttribute('id', tabsID); + + var init = function () { + el.classList.add('js-tabs'); + tablist.removeAttribute('hidden'); + setupTabList(); + setupTabs(); + setupTabPanels(); + }; + + var setupTabList = function () { + tablist.setAttribute("role", "tablist"); + if (orientation == 'vertical') tablist.setAttribute("aria-orientation", "vertical"); + } + + var setupTabs = function () { + + tabs.forEach((tab, index) => { + tab.setAttribute('role', 'tab'); + // each tab needs an ID that will be used to label its corresponding panel + tab.setAttribute('id', tabsID + '__tab-' + index); + tab.setAttribute('data-controls', tabpanels[index].getAttribute('id')); + + // first tab is initially active + if (index === currentIndex) { + selectTab(tab); + // updateUrlHash(); + } + + if (tab.getAttribute('data-controls') === util.getUrlHash()) { + currentIndex = index; + selectedTab = index; + selectTab(tab); + } + + tab.addEventListener('click', (e) => { + e.preventDefault(); + currentIndex = index; + selectedTab = index; + focusCurrentTab(); + selectTab(tab); + // updateUrlHash(); + }, false); + + tab.addEventListener('keydown', (e) => { + tabKeyboardRespond(e, tab); + }, false); + }); + } + + var focusCurrentTab = function () { + tabs[currentIndex].focus(); + } + + var updateUrlHash = function () { + var active = tabs[selectedTab]; + util.setUrlHash(active.getAttribute('data-controls')); + }; + + var selectTab = function (tab) { + // unactivate all other tabs + tabs.forEach(tab => { + tab.setAttribute('aria-selected', 'false'); + tab.setAttribute('tabindex', '-1'); + }); + //activate current tab + tab.setAttribute('aria-selected', 'true'); + tab.setAttribute('tabindex', '0'); + + // activate corresponding panel + showTabpanel(tab); + } + + var setupTabPanels = function () { + tabpanels.forEach((tabpanel, index) => { + tabpanel.setAttribute('role', 'tabpanel'); + tabpanel.setAttribute('tabindex', '-1'); + tabpanel.setAttribute('hidden', ''); + + if (index == currentIndex) { + tabpanel.removeAttribute('hidden'); + } + + tabpanel.addEventListener('keydown', (e) => { + panelKeyboardRespond(e); + }, false); + + tabpanel.addEventListener("blur", () => { + tabpanel.setAttribute('tabindex', '-1'); + }, false); + }); + } + + + var panelKeyboardRespond = function (e) { + var keyCode = e.keyCode || e.which; + + switch (keyCode) { + case util.keyCodes.TAB: + tabpanels[currentIndex].setAttribute('tabindex', '-1'); + break; + + default: + break; + } + } + + + var showTabpanel = function (tab) { + tabpanels.forEach((tabpanel, index) => { + tabpanel.setAttribute('hidden', ''); + tabpanel.removeAttribute('tabindex'); + + if (index == currentIndex) { + tabpanel.removeAttribute('hidden'); + tabpanel.setAttribute('aria-labelledby', tabs[currentIndex].getAttribute('id')); + tabpanel.setAttribute('tabindex', '0'); + } + }); + } + + var incrementcurrentIndex = function () { + if (currentIndex < tabs.length - 1) { + return ++currentIndex; + } + else { + currentIndex = 0; + return currentIndex; + } + }; + + + var decrementcurrentIndex = function () { + if (currentIndex > 0) { + return --currentIndex; + } + else { + currentIndex = tabs.length - 1; + return currentIndex; + } + }; + + + + var tabKeyboardRespond = function (e, tab) { + var firstTab = tabs[0]; + var lastTab = tabs[tabs.length - 1]; + + var keyCode = e.keyCode || e.which; + + switch (keyCode) { + case util.keyCodes.UP: + case util.keyCodes.LEFT: + e.preventDefault(); + decrementcurrentIndex(); + focusCurrentTab(); + + if (!manual) { + selectedTab = currentIndex; + selectTab(tabs[selectedTab]); + // updateUrlHash(); + } + + break; + + + case util.keyCodes.DOWN: + case util.keyCodes.RIGHT: + e.preventDefault(); + incrementcurrentIndex(); + focusCurrentTab(); + + if (!manual) { + selectedTab = currentIndex; + selectTab(tabs[selectedTab]); + // updateUrlHash(); + } + + break; + + + case util.keyCodes.ENTER: + case util.keyCodes.SPACE: + e.preventDefault(); + selectedTab = currentIndex; + selectTab(tabs[selectedTab]); + // updateUrlHash(); + + break; + + + case util.keyCodes.TAB: + tabpanels[selectedTab].setAttribute('tabindex', '0'); + currentIndex = selectedTab; + + break; + + + case util.keyCodes.HOME: + e.preventDefault(); + firstTab.focus(); + // updateUrlHash(); + + break; + + + case util.keyCodes.END: + e.preventDefault(); + lastTab.focus(); + // updateUrlHash(); + + break; + } + + } + + init.call(this); + return this; + }; // ARIAtabs() + + w.ARIAtabs = ARIAtabs; + +})(window, document); + + +var tabsInstance = "[data-tabs]"; +var els = document.querySelectorAll(tabsInstance); +var allTabs = []; + +// Generate all tabs instances +for (var i = 0; i < els.length; i++) { + var nTabs = new ARIAtabs(els[i], { manual: true }); // if manual is set to false, the tabs open on focus without needing an ENTER or SPACE press + allTabs.push(nTabs); +} diff --git a/eslint/docs/src/assets/js/themes.js b/eslint/docs/src/assets/js/themes.js new file mode 100644 index 0000000..e6071b2 --- /dev/null +++ b/eslint/docs/src/assets/js/themes.js @@ -0,0 +1,48 @@ +/* theme toggle buttons */ +(function() { + var enableToggle = function(btn) { + btn.setAttribute("aria-pressed", "true"); + } + + var disableToggle = function(btn) { + btn.setAttribute("aria-pressed", "false"); + } + + document.addEventListener('DOMContentLoaded', function() { + var switcher = document.getElementById('js-theme-switcher'); + switcher.removeAttribute('hidden'); + + var light_theme_toggle = document.getElementById('light-theme-toggle'), + dark_theme_toggle = document.getElementById('dark-theme-toggle'); + + // get any previously-chosen themes + var theme = document.documentElement.getAttribute('data-theme'); + + if (theme == "light") { + enableToggle(light_theme_toggle); + disableToggle(dark_theme_toggle); + } else if (theme == "dark") { + enableToggle(dark_theme_toggle); + disableToggle(light_theme_toggle); + } + + light_theme_toggle.addEventListener("click", function() { + enableToggle(light_theme_toggle); + theme = this.getAttribute('data-theme'); + document.documentElement.setAttribute('data-theme', theme); + window.localStorage.setItem("theme", theme); + + disableToggle(dark_theme_toggle); + }, false); + + dark_theme_toggle.addEventListener("click", function() { + enableToggle(dark_theme_toggle); + theme = this.getAttribute('data-theme'); + document.documentElement.setAttribute('data-theme', theme); + window.localStorage.setItem("theme", theme); + + disableToggle(light_theme_toggle); + }, false); + }, false); + +})(); diff --git a/eslint/docs/src/assets/scss/carbon-ads.scss b/eslint/docs/src/assets/scss/carbon-ads.scss new file mode 100644 index 0000000..ccf578e --- /dev/null +++ b/eslint/docs/src/assets/scss/carbon-ads.scss @@ -0,0 +1,115 @@ +.hero-ad { + @media all and (max-width: 800px) { + display: none; + } +} + +#carbonads * { + margin: initial; + padding: initial; +} + +#carbonads { + display: inline-block; + margin: 2rem 0; + padding: .6em; + font-size: 1rem; + overflow: hidden; + border-radius: 4px; + background-color: var(--body-background-color); + border: 1px solid var(--border-color); + border-radius: var(--border-radius); + box-shadow: 0 1px 4px 1px hsla(0, 0%, 0%, 0.1); + + .docs-main & { + margin: 0 0 2rem; + } + + @media all and (max-width: 800px) { + display: none !important; + } +} + +.jumbotron #carbonads { + border: solid 1px hsla(250, 20%, 50%, .6); + background-color: hsla(0, 0%, 70%, .15); +} + +#carbonads a { + font-weight: 500; + color: inherit; + text-decoration: none; +} + +#carbonads a:hover { + text-decoration: none; + color: var(--link-color); +} + +.jumbotron #carbonads a { + color: #eee; +} + +.jumbotron #carbonads a:hover { + color: #ccc; +} + +#carbonads span { + display: block; + position: relative; + overflow: hidden; +} + +#carbonads .carbon-wrap { + display: flex; + flex-direction: column; + max-width: 130px; +} + +#carbonads .carbon-img img { + display: block; +} + +#carbonads .carbon-text { + margin-top: 10px; + line-height: 1rem; + font-size: .7em; + font-weight: 500; + text-align: left; +} + +#carbonads .carbon-poweredby { + display: block; + margin-top: 10px; + font-size: 0.5rem; + font-weight: 500; + line-height: 1; + letter-spacing: .1ch; + text-transform: uppercase; +} + +@media only screen and (min-width: 320px) and (max-width: 759px) { + #carbonads { + margin-top: 0; + font-size: 12px; + } + + #carbonads .carbon-wrap { + display: flex; + flex-direction: row; + max-width: 330px; + } + + #carbonads .carbon-text { + margin: 0 0 14px 10px; + font-size: 14px; + text-align: left; + } + + #carbonads .carbon-poweredby { + position: absolute; + bottom: 0; + left: 142px; + font-size: 8px; + } +} diff --git a/eslint/docs/src/assets/scss/components/alert.scss b/eslint/docs/src/assets/scss/components/alert.scss new file mode 100644 index 0000000..ddd5c69 --- /dev/null +++ b/eslint/docs/src/assets/scss/components/alert.scss @@ -0,0 +1,134 @@ +.alert { + position: relative; + display: grid; + grid-template-columns: auto 1fr; + padding: 1rem; + gap: .75rem; + margin-bottom: 1.5rem; + margin-block-end: 1.5rem; + align-items: start; + font-size: .875rem; + border: 1px solid currentColor; + border-radius: var(--border-radius); + + &.alert--warning { + background-color: var(--color-rose-25); + color: var(--color-rose-600); + + [data-theme="dark"] & { + color: var(--color-rose-300); + background-color: var(--color-rose-900); + } + } + + &.alert--important { + background-color: var(--color-warning-25); + color: var(--color-warning-600); + + [data-theme="dark"] & { + color: var(--color-warning-300); + background-color: var(--color-warning-900); + } + } + + &.alert--tip { + background-color: var(--color-success-25); + color: var(--color-success-600); + + [data-theme="dark"] & { + color: var(--color-success-300); + background-color: var(--color-success-900); + } + } +} + + +[data-theme="dark"] { + .alert { + &.alert--warning { + border: 1px solid var(--color-rose-300); + } + + &.alert--important { + border: 1px solid var(--color-warning-300); + } + + &.alert--tip { + border: 1px solid var(--color-success-300); + } + } +} + +.alert__icon { + color: inherit; + position: relative; + top: 2px; + offset-block-start: 2px; +} + +.alert__text > p { + margin: 0; +} + +.alert__type { + display: block; + font-weight: 500; + margin-bottom: .25rem; + margin-block-end: .25rem; + + .alert--warning & { + color: var(--color-rose-700); + + [data-theme="dark"] & { + color: var(--color-rose-200); + } + } + + .alert--important & { + color: var(--color-warning-700); + + [data-theme="dark"] & { + color: var(--color-warning-200); + } + } + + .alert--tip & { + color: var(--color-success-700); + + [data-theme="dark"] & { + color: var(--color-success-200); + } + } +} + + +.alert__learn-more { + display: block; + font-weight: 500; + margin-top: .75rem; + margin-block-start: .75rem; + + .alert--warning & { + color: var(--color-rose-700); + + [data-theme="dark"] & { + color: var(--color-rose-200); + } + } + + .alert--important & { + color: var(--color-warning-700); + + [data-theme="dark"] & { + color: var(--color-warning-200); + } + } + + .alert--tip & { + color: var(--color-success-700); + + [data-theme="dark"] & { + color: var(--color-success-200); + } + } +} diff --git a/eslint/docs/src/assets/scss/components/buttons.scss b/eslint/docs/src/assets/scss/components/buttons.scss new file mode 100644 index 0000000..bbe6451 --- /dev/null +++ b/eslint/docs/src/assets/scss/components/buttons.scss @@ -0,0 +1,79 @@ +button { + border: none; + background: none; + font: inherit; + cursor: pointer; + line-height: inherit; + display: inline-flex; + align-items: center; + justify-content: center; +} + +.c-btn { + background: none; + border: none; + font: inherit; + font-family: var(--text-font); + cursor: pointer; + line-height: inherit; + font-weight: 500; + font-size: var(--step-0); + display: inline-flex; + padding: .75em 1.125em; + align-items: center; + justify-content: center; + border-radius: var(--border-radius); + + transition: background-color .2s linear, + border-color .2s linear; + + svg { + color: inherit; + } +} + +.c-btn--large { + font-size: 1.125rem; + padding: .88em 1.5em; +} + +.c-btn--block { + display: flex; + width: 100%; +} + +a.c-btn { + text-decoration: none; + display: inline-flex; + flex-wrap: wrap; + gap: .5rem; + align-items: center; +} + +.c-btn--primary { + background-color: var(--primary-button-background-color); + color: var(--primary-button-text-color); + + &:hover { + background-color: var(--primary-button-hover-color); + } +} + +.c-btn--secondary { + background-color: var(--secondary-button-background-color); + color: var(--secondary-button-text-color); + box-shadow: 0 1px 2px rgba(16, 24, 40, 0.1); + + &:hover { + background-color: var(--secondary-button-hover-color); + } +} + +.c-btn--ghost { + color: var(--body-text-color); + border: 1px solid var(--border-color); + + &:hover { + border-color: var(--link-color); + } +} diff --git a/eslint/docs/src/assets/scss/components/docs-index.scss b/eslint/docs/src/assets/scss/components/docs-index.scss new file mode 100644 index 0000000..b9f0452 --- /dev/null +++ b/eslint/docs/src/assets/scss/components/docs-index.scss @@ -0,0 +1,166 @@ +.docs-index .docs-index__list { + a { + border-radius: var(--border-radius); + text-decoration: none; + display: flex; + justify-content: space-between; + align-items: center; + padding: .5rem .75rem; + margin-left: -.75rem; + margin-inline-start: -.75rem; + color: var(--headings-color); + + &:hover, + &[aria-current="true"] { + background-color: var(--docs-lightest-background-color); + color: var(--link-color); + } + + @media all and (max-width: 1023px) { + padding: .5rem 1rem; + margin-left: 0; + margin-inline-start: 0; + } + } +} + +.docs-index__item { + margin: 0; + + ul ul { + padding-left: .75rem; + } + + &[data-has-children] { + margin-bottom: .5rem; + } +} + +.docs-index__list > .docs-index__item { + margin-top: 1.5rem; + margin-block-start: 1.5rem; + + > a { + color: var(--icon-color); + text-transform: uppercase; + letter-spacing: 1px; + font-size: .875rem; + font-weight: 500; + } +} + +/* Styles for the accordion icon */ +.index-js .index-icon { + display: block !important; + width: 0.75rem; + height: 0.5rem; + transform-origin: 50% 50%; + transition: all 0.1s linear; + color: inherit; +} + +.index-js [aria-expanded="true"] .index-icon { + -ms-transform: rotate(180deg); + transform: rotate(180deg); +} + +.index-js ul[aria-hidden="true"] { + display: none; +} + +.index-js ul[aria-hidden="false"] { + display: block; +} + +.docs__index__panel { + &[data-open="false"] { + display: none; + + @media all and (min-width: 1024px) { + display: block; + } + } + + &[data-open="true"] { + display: block; + + @media all and (min-width: 1024px) { + display: block; + } + } +} + +.docs-index-toggle { + cursor: pointer; + display: flex; + width: 100%; + padding: .75rem 1.125rem; + align-items: center; + justify-content: space-between; + gap: .5rem; + font-weight: 500; + border: 1px solid var(--border-color); + border-radius: var(--border-radius); + background-color: var(--secondary-button-background-color); + color: var(--secondary-button-text-color); + box-shadow: 0 1px 2px rgba(16, 24, 40, 0.1); + + &:hover { + background-color: var(--secondary-button-hover-color); + } + + @media all and (min-width: 1024px) { + display: none; + } + + svg { + width: 1.5em; + height: 1.5em; + color: inherit; + fill: none; + stroke-width: 4; + stroke-linecap: round; + stroke-linejoin: round; + } + + #ham-top, + #ham-middle, + #ham-bottom { + transition: all .2s linear; + } + + #ham-top { + transform-origin: 30px 37px; + } + + #ham-bottom { + transform-origin: 30px 63px; + } + + &[aria-expanded="true"] { + #ham-middle { + opacity: 0; + } + + #ham-top { + + transform: rotate(41deg); + } + + #ham-bottom { + transform: rotate(-41deg); + } + } +} + +.eslint-actions { + display: inline-flex; + flex-wrap: wrap; + flex-direction: column; + width: 100%; + gap: 1rem; + + @media all and (min-width: 640px) { + flex-direction: row; + } +} diff --git a/eslint/docs/src/assets/scss/components/docs-navigation.scss b/eslint/docs/src/assets/scss/components/docs-navigation.scss new file mode 100644 index 0000000..1a8ee50 --- /dev/null +++ b/eslint/docs/src/assets/scss/components/docs-navigation.scss @@ -0,0 +1,155 @@ +.docs-site-nav { + display: flex; + flex-direction: column; + flex: 1; + grid-column: 1 / -1; + grid-row: 1; + + ul { + list-style: none; + font-size: var(--step-1); + margin-top: 1rem; + margin-block-start: 1rem; + margin-bottom: 2rem; + margin-block-end: 2rem; + + + @media all and (min-width: 1024px) { + font-size: var(--step-0); + margin-top: 0; + margin-block-start: 0; + margin-bottom: 0; + margin-block-end: 0; + align-items: center; + display: flex; + } + } + + .flexer { + display: flex; + justify-self: flex-end; + align-self: flex-end; + } + + a:not(.c-btn) { + text-decoration: none; + color: inherit; + transition: color .2s linear; + display: block; + + &:hover { + color: var(--link-color); + } + } + + a:not(.c-btn)[aria-current="page"], + a:not(.c-btn)[aria-current="true"] { + color: var(--link-color); + text-decoration: none; + font-weight: 500; + } +} + + +.docs-nav-panel { + @media all and (min-width: 1024px) { + display: flex; + flex-direction: row; + justify-content: center; + } + + &[data-open="false"] { + display: none; + } + + &[data-open="true"] { + @media all and (min-width: 1024px) { + display: flex; + flex-direction: row; + justify-content: center; + } + } +} + +.docs-nav-panel .mobile-only { + @media all and (min-width: 1024px) { + display: none; + } +} + +.docs-site-nav-toggle { + cursor: pointer; + display: inline-flex; + align-items: center; + margin-left: .5rem; + margin-right: -10px; + + margin-inline-start: .5rem; + margin-inline-end: -10px; + + + svg { + width: 40px; + height: 40px; + color: var(--headings-color); + fill: none; + stroke-width: 4; + stroke-linecap: round; + stroke-linejoin: round; + } + + #ham-top, + #ham-middle, + #ham-bottom { + transition: all .2s linear; + } + + #ham-top { + transform-origin: 30px 37px; + } + + #ham-bottom { + transform-origin: 30px 63px; + } + + &[aria-expanded="true"] { + #ham-middle { + opacity: 0; + } + + #ham-top { + + transform: rotate(41deg); + } + + #ham-bottom { + transform: rotate(-41deg); + } + } +} + + + +@media all and (min-width: 1024px) { + .docs-site-nav { + flex-direction: row; + grid-column: auto; + gap: 2rem; + + ul { + display: flex; + gap: 2rem; + font-size: var(--step-0); + + li { + margin-bottom: 0; + margin-block-end: 0; + } + } + + .flexer { + order: 1; + } + } + +} diff --git a/eslint/docs/src/assets/scss/components/hero.scss b/eslint/docs/src/assets/scss/components/hero.scss new file mode 100644 index 0000000..54c303e --- /dev/null +++ b/eslint/docs/src/assets/scss/components/hero.scss @@ -0,0 +1,60 @@ +.hero .grid { + @media all and (min-width: 800px) { + display: grid; + grid-template-columns: 2fr 1fr; + grid-gap: 2rem; + align-items: center; + } + + .span-1-7 { + grid-column: 1 / 2; + } + + .span-10-12 { + grid-column: 2 / 3; + justify-self: end; + } +} + +.hero { + border-bottom: 1px solid var(--divider-color); + border-block-end: 1px solid var(--divider-color); + background-color: var(--hero-background-color); + + @media all and (min-width: 800px) { + // when the ad is displayed + min-height: calc(285px + var(--space-xl-4xl)); + } + + .content-container { + padding: var(--space-xl-4xl) 0; + margin: 0; + } + + >.content-container { + margin: 0 auto; + padding: 0 calc(1rem + 1vw); + padding-bottom: 0; + align-items: center; + } +} + +.hero--homepage { + + .section-title { + margin-bottom: 1.5rem; + margin-block-end: 1.5rem; + } + + .section-supporting-text { + margin: 0; + font-size: var(--step-1); + text-align: left; + } + + .eslint-actions { + font-size: var(--step-1); + margin-top: 3rem; + margin-block-start: 3rem; + } +} diff --git a/eslint/docs/src/assets/scss/components/index.scss b/eslint/docs/src/assets/scss/components/index.scss new file mode 100644 index 0000000..ea9bd3b --- /dev/null +++ b/eslint/docs/src/assets/scss/components/index.scss @@ -0,0 +1,110 @@ +.index { + margin-bottom: 4rem; + margin-block-end: 4rem; +} + +.index__item { + margin: 0; + + a { + display: block; + color: inherit; + text-decoration: none; + padding: .625rem .875rem; + font-size: var(--step-0); + border-radius: var(--border-radius); + + &:hover { + color: var(--link-color); + } + } + + a[aria-current="page"] { + color: var(--link-color); + background-color: var(--lightest-background-color); + font-weight: 500; + } +} + +.index__toggle { + cursor: pointer; + display: flex; + width: 100%; + padding: .75rem 1.125rem; + align-items: center; + justify-content: space-between; + gap: .5rem; + font-weight: 500; + border: 1px solid var(--border-color); + border-radius: var(--border-radius); + background-color: var(--secondary-button-background-color); + color: var(--secondary-button-text-color); + box-shadow: 0 1px 2px rgba(16, 24, 40, 0.1); + + &:hover { + background-color: var(--secondary-button-hover-color); + } + + @media all and (min-width: 1024px) { + display: none; + } + + svg { + width: 1.5em; + height: 1.5em; + color: inherit; + fill: none; + stroke-width: 4; + stroke-linecap: round; + stroke-linejoin: round; + } + + #ham-top, + #ham-middle, + #ham-bottom { + transition: all .2s linear; + } + + #ham-top { + transform-origin: 30px 37px; + } + + #ham-bottom { + transform-origin: 30px 63px; + } + + &[aria-expanded="true"] { + #ham-middle { + opacity: 0; + } + + #ham-top { + + transform: rotate(41deg); + } + + #ham-bottom { + transform: rotate(-41deg); + } + } +} + +.index__list { + display: block; + + &[data-open="false"] { + display: none; + + @media all and (min-width: 1024px) { + display: block; + } + } + + &[data-open="true"] { + display: block; + + @media all and (min-width: 1024px) { + display: block; + } + } +} diff --git a/eslint/docs/src/assets/scss/components/language-switcher.scss b/eslint/docs/src/assets/scss/components/language-switcher.scss new file mode 100644 index 0000000..1aa9b2c --- /dev/null +++ b/eslint/docs/src/assets/scss/components/language-switcher.scss @@ -0,0 +1,32 @@ +.switcher--language { + display: flex; + align-items: center; + justify-content: center; + flex-wrap: wrap; + gap: .25rem .5rem; + position: relative; + width: 100%; + padding: 0; + font-size: inherit; + + @media all and (min-width: 800px) { + justify-content: flex-start; + } +} + +.switcher--language .label__text { + flex: 1 0 10ch; +} + + +.switcher--language .switcher__select { + flex: 1 0 12rem; + + @media all and (max-width: 800px) { + max-width: 250px; + } +} + +.language-switcher { + display: inline-flex; +} diff --git a/eslint/docs/src/assets/scss/components/resources.scss b/eslint/docs/src/assets/scss/components/resources.scss new file mode 100644 index 0000000..cf483cd --- /dev/null +++ b/eslint/docs/src/assets/scss/components/resources.scss @@ -0,0 +1,71 @@ +.resource { + display: flex; + border-radius: var(--border-radius); + border: 1px solid var(--divider-color); + background-color: var(--lightest-background-color); + align-items: stretch; + overflow: hidden; + margin-bottom: .5rem; + margin-block-end: .5rem; + + position: relative; + transition: all .2s linear; + + &:hover { + background-color: var(--lighter-background-color); + } + +} + +.resource__image { + flex: 1 0 5.5rem; + max-width: 5.5rem; + overflow: hidden; + padding: .25rem; + + img { + display: block; + height: 100%; + width: 100%; + // object-fit: cover; + object-fit: contain; + } +} + +.resource__content { + flex: 4; + padding: .75rem; + align-self: center; +} + + +.resource__title { // a + text-decoration: none; + color: var(--headings-color); + font-weight: 500; + margin-bottom: .125rem; + + &::after { + content: ""; + position: absolute; + left: 0; + offset-inline-start: 0; + top: 0; + block-inline-start: 0; + width: 100%; + height: 100%; + } +} + +.resource__domain, +.resource__domain a { + text-decoration: none; + color: var(--body-text-color); + font-size: .875rem; +} + +.resource__icon { + color: var(--headings-color); + margin: 1rem; + align-self: center; +} diff --git a/eslint/docs/src/assets/scss/components/rules.scss b/eslint/docs/src/assets/scss/components/rules.scss new file mode 100644 index 0000000..ec52172 --- /dev/null +++ b/eslint/docs/src/assets/scss/components/rules.scss @@ -0,0 +1,202 @@ +.rule-categories { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); + gap: 0; + margin-bottom: 3rem; + background-color: var(--lightest-background-color); + border: 1px solid var(--divider-color); + border-radius: var(--border-radius); + + .rule-category { + margin: 0; + padding: 1rem; + background: none; + border: none; + + @media screen and (min-width:768px){ + &:not(:first-child)::after { + content: ""; + display: block; + padding: 1px; + border-left: 1px solid var(--divider-color); + left: 0px; + } + } + + @media screen and (min-width:768px) and (max-width:1023px), screen and (min-width:1440px){ + &:not(:first-child)::after { + height: 70%; + position: absolute; + } + } + + @media screen and (min-width:1024px) and (max-width:1439px){ + &:nth-child(2)::after { + height: 70%; + position: absolute; + } + } + } + + .rule-category__description { + flex: 1 1 45ch; + } +} + +.rule-category { + font-size: var(--step--1); + display: flex; + position: relative; + flex-wrap: wrap; + align-items: flex-start; + gap: 1rem; + padding: 1rem; + margin: 1.5rem 0; + border-radius: var(--border-radius); + border: 1px solid var(--divider-color); + background-color: var(--lightest-background-color); + + p { + margin: 0; + } + + .rule-category__description { + flex: 1 1 30ch; + } +} + +.rule { + border-radius: var(--border-radius); + background-color: var(--lightest-background-color); + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 1rem; + padding: 1rem; + margin: .5rem 0; + position: relative; + + p:last-of-type { + margin: 0; + } +} + +.rule--deprecated, +.rule--removed { + // opacity: .5; +} + +.rule__content { + flex: 1 1 35ch; +} + +.rule__name { + font-weight: 500; + font-size: .875rem; + margin-bottom: .25rem; + margin-block-end: .25rem; +} + +a.rule__name { + text-decoration: none; + + &:hover { + text-decoration: underline; + } + + &::after { + position: absolute; + content: ""; + width: 100%; + height: 100%; + top: 0; + offset-block-start: 0; + left: 0; + offset-inline-start: 0; + } +} + +.rule__description { + font-size: var(--step--1); +} + +.rule__categories { + font-size: .875rem; + display: flex; + align-items: center; + gap: 1rem; + border-radius: var(--border-radius); + padding: 2px 4px; + + p { + display: inline-flex; + margin: 0; + align-items: center; + } + + [data-theme="dark"] & { + background: var(--body-background-color); + } +} + +.rule__status { + color: var(--color-rose-500); + background: var(--color-rose-50); + border-radius: var(--border-radius); + display: inline-block; + font-weight: normal; + margin-left: .5rem; + margin-inline-start: .5rem; + font-size: var(--step--1); + padding: 0 .5rem; + + [data-theme="dark"] & { + background: var(--body-background-color); + } +} + +.rule__categories__type { + &[aria-hidden="true"] { + opacity: .25; + } +} + +/* related rules */ + +.related-rules__list { + display: flex; + gap: .5rem; + flex-wrap: wrap; + justify-content: start; +} + +.related-rules__list__item { + + svg { + color: inherit; + } + + a { + text-decoration: none; + color: var(--headings-color); + padding: .625rem; + display: inline-flex; + gap: .5rem; + align-items: center; + border: 1px solid var(--divider-color); + border-radius: var(--border-radius); + background-color: var(--lightest-background-color); + + &:hover { + color: var(--link-color); + background-color: var(--lighter-background-color); + } + } +} + +a.rule-list-item+a.rule-list-item::before { + content: ","; + display: inline-block; + margin-left: 5px; + margin-right: 5px; +} diff --git a/eslint/docs/src/assets/scss/components/search.scss b/eslint/docs/src/assets/scss/components/search.scss new file mode 100644 index 0000000..ff3b412 --- /dev/null +++ b/eslint/docs/src/assets/scss/components/search.scss @@ -0,0 +1,165 @@ +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; + appearance: none; +} + +[type=search]::-ms-clear, +[type=search]::-ms-reveal { + display: none; + width: 0; + height: 0; +} + +.search { + margin: 1rem 0; + position: relative; +} + +.search__input-wrapper, +.search__inner-input-wrapper { + position: relative; +} + +.search__clear-btn { + color: var(--body-text-color); + position: absolute; + display: flex; + top: 50%; + offset-block-start: 50%; + transform: translateY(-50%); + right: 1.5rem; + offset-inline-end: 1.5rem; + z-index: 3; + padding: 0; + + svg { + color: inherit; + width: 1rem; + height: 1rem; + border: 1px solid; + border-radius: 50%; + } +} + +.search__input { + padding-left: 2.5rem; + padding-inline-start: 2.5rem; + outline-offset: 1px; + width: 100%; +} + +.search__icon { + color: var(--body-text-color); + position: absolute; + display: block; + top: 50%; + offset-block-start: 50%; + transform: translateY(-50%); + left: .75rem; + offset-inline-start: .75rem; + z-index: 3; +} + +/* search results */ +.search .search-results { + font-size: .875rem; + background-color: var(--body-background-color); + position: relative; + z-index: 10; + width: 100%; + border-radius: 0 0 var(--border-radius) var(--border-radius); + border: 1px solid var(--divider-color); + position: rekative; + top: .25rem; + max-height: 400px; + overflow-y: auto; + + @media all and (min-width: 1024px) { + box-shadow: var(--shadow-lg); + position: absolute; + top: calc(100% + .25rem); + } + + &[data-results="true"] { + padding: 0; + } + &[data-results="false"] { + padding: 1rem; + } + + &:empty { + display: none; + } +} + +.search-results__list { + list-style: none; + margin: 0; + padding: 0; +} + +.search .search-results__item { + margin: 0; + padding: .875rem; + border-bottom: 1px solid var(--lightest-background-color); + border-block-end: 1px solid var(--lightest-background-color); + position: relative; + + &:hover { + background-color: var(--lightest-background-color); + } + + &:focus-within{ + background-color: var(--lightest-background-color); + } +} + +.search .search-results__item__title { + font-size: var(--step-0); + font-size: .875rem; + margin-bottom: 0; + font-family: var(--text-font); + + + a { + display: block; + text-decoration: none; + color: var(--link-color); + font: inherit; + padding: .25rem .75rem; + + &:hover { + background-color: inherit; + color: var(--link-color); + } + + &::after { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + content: ""; + } + } +} + +.search-results__item__context { + margin: 0; + font-size: .875rem; + padding-left: 1rem; +} + +.algolia-docsearch-suggestion--highlight { + background-color: var(--color-brand); + color: #fff; + display: inline-block; + padding: 0 2px; + border-radius: 2px; + + [data-theme="dark"] & { + background-color: var(--link-color); + color: var(--color-neutral-900); + } +} diff --git a/eslint/docs/src/assets/scss/components/social-icons.scss b/eslint/docs/src/assets/scss/components/social-icons.scss new file mode 100644 index 0000000..37902a9 --- /dev/null +++ b/eslint/docs/src/assets/scss/components/social-icons.scss @@ -0,0 +1,23 @@ +.eslint-social-icons { + margin-bottom: -1rem; + margin-block-end: -1rem; + + ul { + margin: 0; + padding: 0; + margin-left: -1rem; + margin-inline-start: -1rem; + display: inline-flex; + + li { + margin: 0; + display: inline-flex; + align-items: center; + + a { + display: flex; + padding: 1rem .75rem; + } + } + } +} diff --git a/eslint/docs/src/assets/scss/components/tabs.scss b/eslint/docs/src/assets/scss/components/tabs.scss new file mode 100644 index 0000000..f2672a1 --- /dev/null +++ b/eslint/docs/src/assets/scss/components/tabs.scss @@ -0,0 +1,68 @@ +.c-tabs { + pre { + margin-top: 0; + margin-block-start: 0; + } +} + +.c-tabs__tablist { + .js-tabs & { + display: flex; + justify-content: start; + } +} + +.c-tabs__tab { + background: none; + border: none; + margin: 0; + color: inherit; + font: inherit; + cursor: pointer; + line-height: inherit; + font-weight: 500; + font-size: var(--step-0); + display: inline-flex; + padding: .75rem 1.125rem; + align-items: center; + justify-content: center; + border-radius: var(--border-radius) var(--border-radius) 0 0; + + transition: background-color .2s linear, + border-color .2s linear; + + + + &:hover { + color: var(--link-color); + } + + &[aria-selected="true"] { + color: var(--link-color); + background-color: var(--lightest-background-color); + } +} + +.c-tabs__tabpanel { + margin-bottom: 2rem; + margin-block-end: 2rem; + background-color: var(--lightest-background-color); + border-radius: 0 var(--border-radius) var(--border-radius) var(--border-radius); + + .js-tabs & { + margin-bottom: 0; + margin-block-end: 0; + } +} + + +.c-tabs__tabpanel__title { + margin-bottom: 1.5rem; + margin-block-end: 1.5rem; +} + +// when the js is enabled, the tabpanels are labelled by their tabs +// you may choose to hide or keep the headings inside of them visible +.js-tabs .c-tabs__tabpanel__title { + display: none; +} diff --git a/eslint/docs/src/assets/scss/components/theme-switcher.scss b/eslint/docs/src/assets/scss/components/theme-switcher.scss new file mode 100644 index 0000000..0fa59fe --- /dev/null +++ b/eslint/docs/src/assets/scss/components/theme-switcher.scss @@ -0,0 +1,84 @@ +.theme-switcher { + display: inline-flex; + align-items: center; + gap: .5rem; + position: relative; +} + +.theme-switcher-label.theme-switcher-label { + font-size: inherit; + color: inherit; + font: inherit; + font-family: var(--text-font); + margin: 0; +} + +.theme-switcher__buttons { + display: flex; + border: 1px solid var(--border-color); + border-radius: var(--border-radius); + background-color: var(--body-background-color); +} + +.theme-switcher__button { + flex: 0; + box-shadow: var(--shadow-xs); + padding: .625rem .875rem; + display: inline-flex; + align-items: center; + margin: 0; + gap: .25rem; + color: inherit; + + &:first-of-type { + border-right: .5px solid var(--border-color); + border-inline-end: .5px solid var(--border-color); + } + + &:last-of-type { + border-left: .5px solid var(--border-color); + border-inline-start: .5px solid var(--border-color); + } + + .theme-switcher__icon { + color: var(--icon-color); + } + + &:hover { + .theme-switcher__icon { + color: var(--link-color); + } + } +} + +.theme-switcher__button[aria-pressed="true"] { + color: var(--link-color); + + .theme-switcher__icon { + color: var(--link-color); + } + + &:hover { + .theme-switcher__icon { + color: var(--link-color); + } + } +} + +.theme-switcher__button[aria-pressed="false"] { + .theme-switcher__icon { + color: var(--icon-color); + } + + &:hover { + .theme-switcher__icon { + color: var(--link-color); + } + } +} + +.theme-switcher__button:hover { + .theme-switcher__icon { + color: var(--link-color); + } +} diff --git a/eslint/docs/src/assets/scss/components/toc.scss b/eslint/docs/src/assets/scss/components/toc.scss new file mode 100644 index 0000000..d1f47a6 --- /dev/null +++ b/eslint/docs/src/assets/scss/components/toc.scss @@ -0,0 +1,118 @@ +.docs-toc { + margin: 2rem 0; +} + +.docs-toc { + .docs-aside & { + display: none; + } + + @media all and (min-width: 1400px) { + display: none; + } + + .docs-aside & { + @media all and (min-width: 1400px) { + display: block; + } + } +} + +.c-toc { + ol { + margin: 0; + + li { + position: relative; + margin-bottom: .25rem; + margin-block-end: .25rem; + padding-left: 1rem; + padding-inline-start: 1rem; + + >ol { + margin-top: .25rem; + } + } + + li::before { + content: "└"; + color: var(--icon-color); + position: absolute; + left: -.4rem; + offset-inline-start: -.4rem; + } + } + + a { + text-decoration: none; + color: var(--headings-color); + + &:hover { + color: var(--link-color); + } + } +} + +.c-toc__label.c-toc__label { + font-size: var(--step-0); + color: var(--body-text-color); + font-family: var(--text-font); + margin-bottom: .5rem; + margin-block-end: .5rem; +} + +.c-toc__label { + width: fit-content; + + button { + color: var(--link-color); + cursor: pointer; + display: flex; + align-items: center; + justify-content: space-between; + font: inherit; + font-size: inherit; + font-weight: 500; + width: 100%; + height: 100%; + text-align: left; + line-height: 1.5; + padding: 0; + border-radius: 0; + position: relative; + transition: outline 0.1s linear; + + svg { + flex: none; + } + } +} + +/* Styles for the accordion icon */ +.toc-trigger-icon { + display: block !important; // to override aria-hidden + width: 0.75rem; + height: 0.5rem; + transform-origin: 50% 50%; + margin-left: 2rem; + margin-inline-start: 2rem; + transition: all 0.1s linear; + color: var(--color-neutral-400); + + [aria-expanded="true"] & { + -ms-transform: rotate(180deg); + transform: rotate(180deg); + } +} + + + +.c-toc__panel { + &[data-open="false"] { + display: none; + } + + &[data-open="true"] { + display: block; + } +} diff --git a/eslint/docs/src/assets/scss/components/version-switcher.scss b/eslint/docs/src/assets/scss/components/version-switcher.scss new file mode 100644 index 0000000..606b802 --- /dev/null +++ b/eslint/docs/src/assets/scss/components/version-switcher.scss @@ -0,0 +1,4 @@ +.version-switcher { + margin-bottom: .5rem; + margin-block-end: .5rem; +} diff --git a/eslint/docs/src/assets/scss/docs-footer.scss b/eslint/docs/src/assets/scss/docs-footer.scss new file mode 100644 index 0000000..347afd3 --- /dev/null +++ b/eslint/docs/src/assets/scss/docs-footer.scss @@ -0,0 +1,50 @@ +.docs-footer { + display: flex; + flex-direction: column; + gap: 2rem; + justify-content: space-between; + align-items: baseline; + font-size: .875rem; + + @media all and (max-width: 800px) { + padding: 1.5rem 0 4rem; + align-items: center; + } +} + +.copyright p { + margin: 0; +} + +.docs-socials-and-legal { + display: flex; + flex-direction: column; + gap: 1rem; + + @media all and (max-width: 800px) { + text-align: center; + } +} + +.docs-switchers { + display: flex; + flex-wrap: wrap; + gap: 1.5rem; + + .theme-switcher, + .language-switcher { + flex: 1 1 240px; + } + + .theme-switcher { + @media all and (max-width: 800px) { + justify-content: center; + } + } + + .language-switcher { + @media all and (max-width: 800px) { + justify-content: center; + } + } +} diff --git a/eslint/docs/src/assets/scss/docs-header.scss b/eslint/docs/src/assets/scss/docs-header.scss new file mode 100644 index 0000000..6ba51ce --- /dev/null +++ b/eslint/docs/src/assets/scss/docs-header.scss @@ -0,0 +1,40 @@ +.site-header { + padding: .75rem 0; + border-top: 4px solid var(--link-color); + border-bottom: 1px solid var(--divider-color); + border-block-start: 4px solid var(--link-color); + border-block-end: 1px solid var(--divider-color); + + .docs-wrapper { + display: grid; + align-items: start; + padding-top: 0; + padding-bottom: 0; + + padding-block-start: 0; + padding-block-end: 0; + + @media all and (min-width: 1024px) { + justify-content: space-between; + } + } +} + +.logo-link { + display: inline-flex; + justify-self: start; + flex: none; + place-content: center; + grid-column: 1 / -1; + grid-row: 1; + padding: .5rem 0; +} + +.logo svg { + display: inline-block; + margin-bottom: -4px; + margin-block-end: -4px; + width: 100%; + max-width: 100px; + height: auto; +} diff --git a/eslint/docs/src/assets/scss/docs.scss b/eslint/docs/src/assets/scss/docs.scss new file mode 100644 index 0000000..22cde70 --- /dev/null +++ b/eslint/docs/src/assets/scss/docs.scss @@ -0,0 +1,155 @@ +/* docs layout styles */ + +html { + scroll-behavior: smooth; +} + +.docs { + max-width: 1700px; + margin: 0 auto; +} + +.docs-aside__content { + flex: 1; +} + +.docs-wrapper { + padding: 0 var(--space-s-l); + flex: 1; + display: flex; + flex-direction: column; + + @media all and (min-width: 1024px) { + display: grid; + grid-template-columns: minmax(250px, 1fr) minmax(0, 3.5fr); + align-items: stretch; + } +} + +.docs-nav { + grid-column: 1 / 2; + grid-row: 1 / 2; + padding-top: var(--space-l-xl); + padding-block-start: var(--space-l-xl); + font-size: .875rem; + + display: grid; + grid-auto-rows: max-content; + align-items: start; + + @media all and (min-width: 1024px) { + padding: var(--space-l-xl) 0; + padding-right: var(--space-s-l); + padding-inline-end: var(--space-s-l); + + border-right: 1px solid var(--divider-color); + border-inline-end: 1px solid var(--divider-color); + } +} + +.docs-content { + grid-column: 2 / 3; + padding: var(--space-l-xl) 0; + flex: 1; + + @media all and (min-width: 800px) { + display: grid; + grid-template-columns: minmax(0, 4fr) minmax(160px, 1fr); + grid-gap: 1rem; + } + + @media all and (min-width: 1024px) { + padding: 0; + } + + @media all and (min-width: 1300px) { + grid-gap: 2rem; + } +} + +.docs-main { + flex: 1 1 68ch; + + @media all and (min-width: 800px) { + padding-right: var(--space-s-l); + padding-inline-end: var(--space-s-l); + + border-right: 1px solid var(--divider-color); + border-inline-end: 1px solid var(--divider-color); + } + + @media all and (min-width: 1024px) { + padding: var(--space-l-xl) var(--space-l-2xl); + } +} + + +.docs-aside { + grid-column: 2 / 3; + display: flex; + flex-direction: column; + + @media all and (min-width: 800px) { + padding: var(--space-l-xl) 0; + } +} + +.docs-toc { + flex: 1; + align-self: center; +} + +.docs-edit-link { + border-top: 1px solid var(--divider-color); + padding-top: 1.5rem; + padding-block-start: 1.5rem; + margin: 3rem 0; +} + +div.correct, +div.incorrect { + position: relative; + + &::after { + position: absolute; + top: -22px; + right: -22px; + offset-inline-end: -22px; + offset-block-start: -22px; + } +} + +div.correct { + &::after { + content: url("data:image/svg+xml,%3Csvg width='45' height='44' viewBox='0 0 45 44' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='1.5' y='1' width='42' height='42' rx='21' fill='%23ECFDF3'/%3E%3Cpath d='M30.5 16L19.5 27L14.5 22' stroke='%2312B76A' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3Crect x='1.5' y='1' width='42' height='42' rx='21' stroke='white' stroke-width='2'/%3E%3C/svg%3E%0A"); + } +} + +div.incorrect { + &::after { + content: url("data:image/svg+xml,%3Csvg width='45' height='44' viewBox='0 0 45 44' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='1.5' y='1' width='42' height='42' rx='21' fill='%23FFF1F3'/%3E%3Cpath d='M28.5 16L16.5 28M16.5 16L28.5 28' stroke='%23F63D68' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3Crect x='1.5' y='1' width='42' height='42' rx='21' stroke='white' stroke-width='2'/%3E%3C/svg%3E%0A"); + } +} + +pre[class*="language-"] { + position: relative; +} + +.c-btn.c-btn--playground { + position: absolute; + font-size: var(--step--1); + bottom: .5rem; + right: .5rem; + offset-block-end: .5rem; + offset-inline-end: .5rem; + + @media all and (max-width: 768px) { + display: none; + } +} + +@media (hover: none) { + .anchorjs-link { + opacity: 1; + } +} diff --git a/eslint/docs/src/assets/scss/forms.scss b/eslint/docs/src/assets/scss/forms.scss new file mode 100644 index 0000000..e6d830c --- /dev/null +++ b/eslint/docs/src/assets/scss/forms.scss @@ -0,0 +1,54 @@ +.c-custom-select { + -moz-appearance: none; + -webkit-appearance: none; + appearance: none; + box-sizing: border-box; + display: block; + width: 100%; + max-width: 100%; + min-width: 0px; + padding: .625rem .875rem; + padding-right: calc(.875rem * 2.5); + padding-inline-end: calc(.875rem * 2.5); + font: inherit; + color: var(--body-text-color); + line-height: 1.3; + border: 1px solid var(--border-color); + border-radius: var(--border-radius); + box-shadow: var(--shadow-xs); + background-color: var(--body-background-color); + background-image: url("data:image/svg+xml,%3Csvg width='20' height='21' viewBox='0 0 20 21' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5 7.60938L10 12.6094L15 7.60938' stroke='%23667085' stroke-width='1.66667' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A"), linear-gradient(to bottom, var(--body-background-color) 0%, var(--body-background-color) 100%); + background-repeat: no-repeat, repeat; + background-position: right .875rem top 50%, + 0 0; + background-size: 1em auto, 100%; +} + +.label__text.label__text { + display: flex; + font-size: .875rem; + align-items: center; + gap: .5rem; + font-size: .875rem; + font-family: var(--text-font); + color: inherit; + font-weight: 400; + line-height: 1.5; + margin-bottom: .25rem; + margin-block-end: .25rem; +} + +input { + border: 1px solid var(--border-color); + border-radius: var(--border-radius); + padding: .625rem .875rem; + font: inherit; + font-size: 1rem; + display: block; + line-height: 1.3; + min-width: 0; + line-height: 1.3; + max-width: 100%; + background-color: var(--body-background-color); + color: inherit; +} diff --git a/eslint/docs/src/assets/scss/foundations.scss b/eslint/docs/src/assets/scss/foundations.scss new file mode 100644 index 0000000..27849b3 --- /dev/null +++ b/eslint/docs/src/assets/scss/foundations.scss @@ -0,0 +1,444 @@ +::selection { + background-color: var(--color-brand); + color: #fff; +} + +h1:target, +h2:target, +h3:target, +h4:target, +h5:target, +h6:target { + background-color: var(--lighter-background-color); +} + +*:focus { + outline: none; +} + +*:focus-visible { + outline: 2px solid var(--outline-color); + outline-offset: 3px; +} + +*.focus-visible { + outline: 2px solid var(--outline-color); + outline-offset: 3px; +} + +*:focus:not(:focus-visible) { + outline: 1px solid transparent; + box-shadow: none; +} + +.js-focus-visible *:focus:not(.focus-visible) { + outline: 1px solid transparent; + box-shadow: none; +} + +input:focus-visible { + outline: 2px solid var(--link-color); + border-color: var(--border-color); +} + +input:focus { + outline: 2px solid transparent; + box-shadow: 0 0 0 2px var(--link-color); +} + + +*, +*::before, +*::after { + box-sizing: border-box; +} + +html { + accent-color: var(--link-color); + background-color: var(--body-background-color); + height: 100%; + font-family: var(--text-font); + overflow-x: hidden; + caret-color: var(--link-color); +} + +body { + position: relative; + margin: 0 auto; + line-height: 1.5; + display: flex; + flex-direction: column; + min-height: 100%; + background-color: var(--body-background-color); + color: var(--body-text-color); +} + +#skip-link { + position: fixed; + top: -30em; + left: 0; + right: auto; + offset-block-start: -30em; + offset-inline-start: 0; + offset-inline-end: auto; + + z-index: 999; + transition: top .1s linear; + + &:focus { + outline: 2px solid transparent; + top: 2px; + offset-block-start: 2px; + } + + &:focus-visible { + outline: 2px solid transparent; + top: 2px; + offset-block-start: 2px; + } +} + +main { + flex: 1; + + &:focus { + outline: none; + } + + &:target { + outline: none; + } +} + +hr { + border: none; + border-top: 1px solid var(--divider-color); + border-block-start: 1px solid var(--divider-color); + background: none; + height: 0; + margin: 2rem 0; +} + +.content-container { + width: 100%; + margin: 0 auto; + padding: var(--space-xl-3xl) calc(1rem + 1vw); +} + + +.section-head { + .section-supporting-text { + text-align: center; + max-width: 768px; + margin: 0 auto var(--space-l-2xl); + } +} + +.section-foot { + margin-top: var(--space-l-2xl); + margin-block-start: var(--space-l-2xl); + + .section-supporting-text { + text-align: center; + font-size: var(--step--1); + max-width: 768px; + margin: 0 auto; + } +} + +.section-title { + margin-bottom: 1rem; + margin-block-end: 1rem; +} + +.section-supporting-text { + font-size: var(--step-1); +} + + +code, +pre { + font-family: var(--mono-font); + font-variant-ligatures: none; +} + +code { + color: var(--link-color); + + pre & { + color: unset; + } +} + +p:empty { + display: none; + margin: 0; +} + +.c-icon { + color: var(--icon-color); + flex: none; + transition: all .2s linear; + + @media (-ms-high-contrast: active) { + color: windowText; + } + + @media (forced-colors: active) { + color: canvasText; + } +} + +table { + width: 100%; + margin: 2.5rem 0; + border-collapse: collapse; + border: 1px solid var(--divider-color); + + td { + padding: .25rem .5rem; + border: 1px solid var(--divider-color); + } + + th { + background-color: var(--lightest-background-color); + padding: .25rem .5rem; + } +} + +.c-btn, +button, +a { + .c-icon:hover { + color: var(--link-color); + } +} + + +a { + color: var(--link-color); + transition: color .1s linear; + + .side-header & { + color: inherit; + text-decoration: none; + } +} + +svg { + flex: none; + transition: color .1s linear; +} + +p { + margin: 0 0 1.5em; + + :matches(nav, .posts-collection) & { + margin-bottom: .75em; + margin-block-end: .75em; + } +} + +p, +h1, +h2, +h3, +h4, +h5, +h6 { + overflow-wrap: break-word; +} + + +ul, +ol { + margin-top: 0; + margin-block-start: 0; + + li { + margin: 0 0 .75em; + } + + .person__bio & { + padding-left: 1.5rem; + padding-inline-start: 1.5rem; + } +} + +.docs-main ul, +.post-main ul, +.docs-main ol, +.post-main ol { + margin: 1rem 0; +} + +ul[role="list"] { + list-style: none; + margin: 0; + padding: 0; + + li { + margin: 0; + } +} + +ol { + list-style: decimal; + + li::marker { + color: var(--link-color); + } +} + +p:empty { + margin: 0; + display: none; +} + +figure { + margin-bottom: 4rem; + margin-block-end: 4rem; + + img { + margin-bottom: 1rem; + margin-block-end: 1rem; + } + + figcaption { + color: var(--grey); + } +} + +img { + display: block; + position: relative; + max-width: 100%; + height: auto; +} + +nav { + /* rarely do we display bullets for lists in navigation */ + ol, + ul { + list-style: none; + margin: 0; + padding: 0; + } +} + + +.video { + width: 90%; + max-width: 1400px; + margin: 2em auto; + + iframe { + aspect-ratio: 16 / 9; + width: 100%; + height: auto; + } +} + +@media (prefers-reduced-motion: no-preference) { + *:focus-visible, + *.focus-visible { + transition: outline-offset .15s linear; + outline-offset: 3px; + } +} + + +/* typography */ +body { + font-size: var(--step-0); + line-height: 1.5; +} + +.eyebrow { + color: var(--link-color); + font-size: 1rem; + font-weight: 500; + display: block; + margin-bottom: 1.5rem; + margin-block-end: 1.5rem; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + font-family: var(--display-font); + color: var(--headings-color); + font-weight: 500; + margin-top: 0; + margin-block-start: 0; + +} + +h2, +h3, +h4, +h5, +h6 { + + .docs-main &, + .components-main & { + margin-top: 3rem; + margin-bottom: 1.5rem; + margin-block-start: 3rem; + margin-block-end: 1.5rem; + + &:first-child { + margin-top: 0; + margin-block-start: 0; + } + } +} + + +small, +caption, +cite, +figcaption { + font-size: var(--step--1); +} + +h6, +.h6 { + font-size: var(--step-0); +} + +h5, +.h5 { + font-size: var(--step-0); // 20 +} + +h4, +.h4 { + font-size: var(--step-1); // 24 +} + +h3, +.h3 { + font-size: var(--step-2); + line-height: 1.2; +} + +h2, +.h2 { + font-size: var(--step-3); + line-height: 1.2; +} + +h1, +.h1 { + font-size: var(--step-4); + line-height: 1.2; +} + +.h0 { + font-size: var(--step-6); + line-height: 1.2; +} diff --git a/eslint/docs/src/assets/scss/languages.scss b/eslint/docs/src/assets/scss/languages.scss new file mode 100644 index 0000000..b3872e4 --- /dev/null +++ b/eslint/docs/src/assets/scss/languages.scss @@ -0,0 +1,52 @@ +.languages-list { + margin: 0; + padding: 0; + font-size: var(--step-0); + + li { + margin: 0; + + &:last-of-type a { + border-bottom: 0; + } + } + + a { + color: inherit; + display: block; + width: 100%; + padding: .75rem .1rem; + text-decoration: none; + display: flex; + align-items: center; + border-bottom: 1px solid var(--divider-color); + border-block-end: 1px solid var(--divider-color); + + &[aria-current="true"] { + font-weight: 500; + color: var(--link-color); + + &::after { + content: "✔️"; + } + } + + &:hover { + color: var(--link-color); + } + } +} + +.languages-section .flag { + font-size: 2em; + margin-right: .5rem; + margin-inline-end: .5rem; +} + +.languages-section .languages-list { + font-size: var(--step-1); + border-left: 4px solid var(--tab-border-color); + padding-left: 1rem; + border-inline-start: 4px solid var(--tab-border-color); + padding-inline-start: 1rem; +} diff --git a/eslint/docs/src/assets/scss/print.scss b/eslint/docs/src/assets/scss/print.scss new file mode 100644 index 0000000..446c585 --- /dev/null +++ b/eslint/docs/src/assets/scss/print.scss @@ -0,0 +1,207 @@ +*, +*:before, +*:after, +*:first-letter, +p:first-line, +div:first-line, +blockquote:first-line, +li:first-line { + background: transparent !important; + color: #000 !important; + box-shadow: none !important; + text-shadow: none !important; +} + +body { + width: 100% !important; + margin: 0 !important; + padding: 0 !important; + line-height: 1.45; + font-family: Helvetica, sans-serif; + color: #000; + background: none; + font-size: 14pt; +} + +.grid { + display: block; +} + +main, +.docs-content, +.docs-wrapper { + display: block; + width: 100%; + max-width: 75ch; + margin: 1cm auto; +} + +/* Headings */ +h1, +h2, +h3, +h4, +h5, +h6 { + page-break-after: avoid; +} + +h1 { + font-size: 19pt; +} + +h2 { + font-size: 17pt; +} + +h3 { + font-size: 15pt; +} + +h4, +h5, +h6 { + font-size: 14pt; +} + + +p, +h2, +h3 { + orphans: 3; + widows: 3; +} + +code { + font: 12pt Courier, monospace; +} + +blockquote { + margin: 1.2em; + padding: 1em; + font-size: 12pt; +} + +hr { + background-color: #ccc; +} + +/* Images */ +img { + max-width: 100% !important; +} + +a img { + border: none; +} + +/* Links */ +a:link, +a:visited { + background: transparent; + font-weight: 700; + text-decoration: underline; + color: #333; +} + +// a:link[href^="http://"]:after, +// a[href^="http://"]:visited:after { +// content: " ("attr(href) ") "; +// font-size: 90%; +// } + +abbr[title]:after { + content: " ("attr(title) ")"; +} + +/* Don't show linked images */ +a[href^="http://"] { + color: #000; +} + +a[href$=".jpg"]:after, +a[href$=".jpeg"]:after, +a[href$=".gif"]:after, +a[href$=".png"]:after { + content: " ("attr(href) ") "; + display: none; +} + +/* Don't show links that are fragment identifiers, or use the `javascript:` pseudo protocol .. taken from html5boilerplate */ +a[href^="#"]:after, +a[href^="javascript:"]:after { + content: ""; +} + +/* Table */ +table { + margin: 1px; + text-align: left; +} + +th { + border-bottom: 1px solid #333; + font-weight: bold; +} + +td { + border-bottom: 1px solid #333; +} + +th, +td { + padding: 4px 10px 4px 0; +} + +tfoot { + font-style: italic; +} + +caption { + background: #fff; + margin-bottom: 2em; + text-align: left; +} + +thead { + display: table-header-group; +} + +img, +tr { + page-break-inside: avoid; +} + +body>*:not(main), +aside, +*[class*="sidebar"] { + display: none; +} + +button, +.c-btn.c-btn--playground, +.docs-edit-link { + display: none; +} + +a[href^='http']:not([href*='mywebsite.com'])::after { + content: ' ('attr(href) ')'; +} + +.resource a::after { + display: none; +} + +ul { + page-break-inside: avoid; +} + +.docs-toc, .docs-index, .docs-aside, #skip-link{ + display: none; +} + +@media print { + @page { + margin: 1cm; + } +} diff --git a/eslint/docs/src/assets/scss/styles.scss b/eslint/docs/src/assets/scss/styles.scss new file mode 100644 index 0000000..e07b280 --- /dev/null +++ b/eslint/docs/src/assets/scss/styles.scss @@ -0,0 +1,37 @@ + +@import "tokens/themes.scss"; +@import "tokens/spacing.scss"; +@import "tokens/typography.scss"; +@import "tokens/ui.scss"; + +@import "foundations.scss"; +@import "syntax-highlighter.scss"; +@import "docs-header.scss"; +@import "docs-footer.scss"; +@import "eslint-site-footer.scss"; +@import "eslint-site-header.scss"; +@import "forms.scss"; +@import "docs.scss"; +@import "versions.scss"; +@import "languages.scss"; + +@import "components/buttons.scss"; +@import "components/docs-navigation.scss"; +@import "components/toc.scss"; +@import "components/search.scss"; +@import "components/alert.scss"; +@import "components/rules.scss"; +@import "components/social-icons.scss"; +@import "components/hero.scss"; +@import "components/theme-switcher.scss"; +@import "components/version-switcher.scss"; +@import "components/language-switcher.scss"; +@import "components/docs-index.scss"; // docs index on the main docs pages +@import "components/index.scss"; // used in component library +@import "components/tabs.scss"; +@import "components/index.scss"; +@import "components/resources.scss"; + +@import "carbon-ads.scss"; + +@import "utilities.scss"; diff --git a/eslint/docs/src/assets/scss/syntax-highlighter.scss b/eslint/docs/src/assets/scss/syntax-highlighter.scss new file mode 100644 index 0000000..b0160f7 --- /dev/null +++ b/eslint/docs/src/assets/scss/syntax-highlighter.scss @@ -0,0 +1,130 @@ +code[class*="language-"], +pre[class*="language-"] { + font-family: var(--mono-font), Consolas, + Monaco, + 'Andale Mono', + 'Ubuntu Mono', + monospace; + font-size: 1em; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + font-variant-ligatures: none; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} + +@media print { + + code[class*="language-"], + pre[class*="language-"] { + text-shadow: none; + } +} + +/* Code blocks */ +pre[class*="language-"] { + padding: 1.5rem; + margin: 1.5rem 0; + overflow: auto; + background-color: var(--color-neutral-50); + border-radius: var(--border-radius); + + background-color: var(--lightest-background-color); + color: var(--color-neutral-900); + + [data-theme="dark"] & { + color: var(--color-neutral-100); + } +} + +:not(pre)>code[class*="language-"], +pre[class*="language-"] { + background-color: var(--lightest-background-color); +} + +/* Inline code */ +:not(pre)>code[class*="language-"] { + padding: .1em; + border-radius: .3em; + white-space: normal; +} + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: #6E7F8E; + + [data-theme="dark"] & { + color: #8E9FAE; + } +} + + +.token.namespace { + opacity: .7; +} + + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: var(--link-color); +} + + +.token.atrule, +.token.attr-value, +.token.keyword { + color: var(--link-color); +} + +.token.important, +.token.bold { + font-weight: bold; +} + +.token.italic { + font-style: italic; +} + +.token.entity { + cursor: help; +} + +pre { + counter-reset: lineNumber; +} + +code .highlight-line { + font-variant-ligatures: none; +} + +code .highlight-line:before { + -webkit-user-select: none; + color: var(--icon-color); + content: counter(lineNumber); + counter-increment: lineNumber; + display: inline-block; + font-variant-numeric: tabular-nums; + margin-right: 1.2em; + padding-right: 1.2em; + margin-inline-end: 1.2em; + padding-inline-end: 1.2em; + text-align: right; + width: 2.4em; +} diff --git a/eslint/docs/src/assets/scss/tokens/spacing.scss b/eslint/docs/src/assets/scss/tokens/spacing.scss new file mode 100644 index 0000000..1f5549b --- /dev/null +++ b/eslint/docs/src/assets/scss/tokens/spacing.scss @@ -0,0 +1,77 @@ +/* @link https://utopia.fyi/space/calculator?c=320,16,1.125,1023,16,1.25,6,2,&s=0.75|0.5|0.25,1.5|2|3|4|6|8,l-2xl|xl-3xl|xl-4xl|l-3xl|s-l */ + +:root { + --fluid-min-width: 320; + --fluid-max-width: 1023; + + --fluid-screen: 100vw; + --fluid-bp: calc((var(--fluid-screen) - var(--fluid-min-width) / 16 * 1rem) / (var(--fluid-max-width) - var(--fluid-min-width))); +} + +@media screen and (min-width: 1024px) { + :root { + --fluid-screen: calc(var(--fluid-max-width) * 1px); + } +} + +:root { + --fc-3xs-min: (var(--fc-s-min) * 0.25); + --fc-3xs-max: (var(--fc-s-max) * 0.25); + + --fc-2xs-min: (var(--fc-s-min) * 0.5); + --fc-2xs-max: (var(--fc-s-max) * 0.5); + + --fc-xs-min: (var(--fc-s-min) * 0.75); + --fc-xs-max: (var(--fc-s-max) * 0.75); + + --fc-s-min: (var(--f-0-min, 16)); + --fc-s-max: (var(--f-0-max, 16)); + + --fc-m-min: (var(--fc-s-min) * 1.5); + --fc-m-max: (var(--fc-s-max) * 1.5); + + --fc-l-min: (var(--fc-s-min) * 2); + --fc-l-max: (var(--fc-s-max) * 2); + + --fc-xl-min: (var(--fc-s-min) * 3); + --fc-xl-max: (var(--fc-s-max) * 3); + + --fc-2xl-min: (var(--fc-s-min) * 4); + --fc-2xl-max: (var(--fc-s-max) * 4); + + --fc-3xl-min: (var(--fc-s-min) * 6); + --fc-3xl-max: (var(--fc-s-max) * 6); + + --fc-4xl-min: (var(--fc-s-min) * 8); + --fc-4xl-max: (var(--fc-s-max) * 8); + + /* T-shirt sizes */ + --space-3xs: calc(((var(--fc-3xs-min) / 16) * 1rem) + (var(--fc-3xs-max) - var(--fc-3xs-min)) * var(--fluid-bp)); + --space-2xs: calc(((var(--fc-2xs-min) / 16) * 1rem) + (var(--fc-2xs-max) - var(--fc-2xs-min)) * var(--fluid-bp)); + --space-xs: calc(((var(--fc-xs-min) / 16) * 1rem) + (var(--fc-xs-max) - var(--fc-xs-min)) * var(--fluid-bp)); + --space-s: calc(((var(--fc-s-min) / 16) * 1rem) + (var(--fc-s-max) - var(--fc-s-min)) * var(--fluid-bp)); + --space-m: calc(((var(--fc-m-min) / 16) * 1rem) + (var(--fc-m-max) - var(--fc-m-min)) * var(--fluid-bp)); + --space-l: calc(((var(--fc-l-min) / 16) * 1rem) + (var(--fc-l-max) - var(--fc-l-min)) * var(--fluid-bp)); + --space-xl: calc(((var(--fc-xl-min) / 16) * 1rem) + (var(--fc-xl-max) - var(--fc-xl-min)) * var(--fluid-bp)); + --space-2xl: calc(((var(--fc-2xl-min) / 16) * 1rem) + (var(--fc-2xl-max) - var(--fc-2xl-min)) * var(--fluid-bp)); + --space-3xl: calc(((var(--fc-3xl-min) / 16) * 1rem) + (var(--fc-3xl-max) - var(--fc-3xl-min)) * var(--fluid-bp)); + --space-4xl: calc(((var(--fc-4xl-min) / 16) * 1rem) + (var(--fc-4xl-max) - var(--fc-4xl-min)) * var(--fluid-bp)); + + /* One-up pairs */ + --space-3xs-2xs: calc(((var(--fc-3xs-min) / 16) * 1rem) + (var(--fc-2xs-max) - var(--fc-3xs-min)) * var(--fluid-bp)); + --space-2xs-xs: calc(((var(--fc-2xs-min) / 16) * 1rem) + (var(--fc-xs-max) - var(--fc-2xs-min)) * var(--fluid-bp)); + --space-xs-s: calc(((var(--fc-xs-min) / 16) * 1rem) + (var(--fc-s-max) - var(--fc-xs-min)) * var(--fluid-bp)); + --space-s-m: calc(((var(--fc-s-min) / 16) * 1rem) + (var(--fc-m-max) - var(--fc-s-min)) * var(--fluid-bp)); + --space-m-l: calc(((var(--fc-m-min) / 16) * 1rem) + (var(--fc-l-max) - var(--fc-m-min)) * var(--fluid-bp)); + --space-l-xl: calc(((var(--fc-l-min) / 16) * 1rem) + (var(--fc-xl-max) - var(--fc-l-min)) * var(--fluid-bp)); + --space-xl-2xl: calc(((var(--fc-xl-min) / 16) * 1rem) + (var(--fc-2xl-max) - var(--fc-xl-min)) * var(--fluid-bp)); + --space-2xl-3xl: calc(((var(--fc-2xl-min) / 16) * 1rem) + (var(--fc-3xl-max) - var(--fc-2xl-min)) * var(--fluid-bp)); + --space-3xl-4xl: calc(((var(--fc-3xl-min) / 16) * 1rem) + (var(--fc-4xl-max) - var(--fc-3xl-min)) * var(--fluid-bp)); + + /* Custom pairs */ + --space-l-2xl: calc(((var(--fc-l-min) / 16) * 1rem) + (var(--fc-2xl-max) - var(--fc-l-min)) * var(--fluid-bp)); + --space-xl-3xl: calc(((var(--fc-xl-min) / 16) * 1rem) + (var(--fc-3xl-max) - var(--fc-xl-min)) * var(--fluid-bp)); + --space-xl-4xl: calc(((var(--fc-xl-min) / 16) * 1rem) + (var(--fc-4xl-max) - var(--fc-xl-min)) * var(--fluid-bp)); + --space-l-3xl: calc(((var(--fc-l-min) / 16) * 1rem) + (var(--fc-3xl-max) - var(--fc-l-min)) * var(--fluid-bp)); + --space-s-l: calc(((var(--fc-s-min) / 16) * 1rem) + (var(--fc-l-max) - var(--fc-s-min)) * var(--fluid-bp)); +} diff --git a/eslint/docs/src/assets/scss/tokens/themes.scss b/eslint/docs/src/assets/scss/tokens/themes.scss new file mode 100644 index 0000000..11ced7f --- /dev/null +++ b/eslint/docs/src/assets/scss/tokens/themes.scss @@ -0,0 +1,158 @@ +:root { + /* Tier 1 variables */ + // colors + --color-neutral-25: #FCFCFD; + --color-neutral-50: #F9FAFB; + --color-neutral-100: #F2F4F7; + --color-neutral-200: #E4E7EC; + --color-neutral-300: #D0D5DD; + --color-neutral-400: #98A2B3; + --color-neutral-500: #667085; + --color-neutral-600: #475467; + --color-neutral-700: #344054; + --color-neutral-800: #1D2939; + --color-neutral-900: #101828; + + --color-primary-25: #FBFBFF; + --color-primary-50: #F6F6FE; + --color-primary-100: #ECECFD; + --color-primary-200: #DEDEFF; + --color-primary-300: #CCCCFA; + --color-primary-400: #B7B7FF; + --color-primary-500: #A0A0F5; + --color-primary-600: #8080F2; + --color-primary-700: #6358D4; + --color-primary-800: #4B32C3; + --color-primary-900: #341BAB; + + --color-warning-25: #FFFCF5; + --color-warning-50: #FFFAEB; + --color-warning-100: #FEF0C7; + --color-warning-200: #FEDF89; + --color-warning-300: #FEC84B; + --color-warning-400: #FDB022; + --color-warning-500: #F79009; + --color-warning-600: #DC6803; + --color-warning-700: #B54708; + --color-warning-800: #93370D; + --color-warning-900: #7A2E0E; + + --color-success-25: #F6FEF9; + --color-success-50: #ECFDF3; + --color-success-100: #D1FADF; + --color-success-200: #A6F4C5; + --color-success-300: #6CE9A6; + --color-success-400: #32D583; + --color-success-500: #12B76A; + --color-success-600: #039855; + --color-success-700: #027A48; + --color-success-800: #05603A; + --color-success-900: #054F31; + + --color-rose-25: #FFF5F6; + --color-rose-50: #FFF1F3; + --color-rose-100: #FFE4E8; + --color-rose-200: #FECDD6; + --color-rose-300: #FEA3B4; + --color-rose-400: #FD6F8E; + --color-rose-500: #F63D68; + --color-rose-600: #E31B54; + --color-rose-700: #C01048; + --color-rose-800: #A11043; + --color-rose-900: #89123E; + + /* Tier 2 variables */ + --primary-button-background-color: var(--color-primary-800); + --primary-button-hover-color: var(--color-primary-900); + --primary-button-text-color: #fff; + --secondary-button-background-color: var(--color-primary-50); + --secondary-button-hover-color: var(--color-primary-100); + --secondary-button-text-color: var(--color-brand); + --ghost-button-background-color: var(--color-primary-50); + --ghost-button-text-color: var(--color-brand); + + --color-brand: var(--color-primary-800); + --body-background-color: #fff; + --body-text-color: var(--color-neutral-500); + --headings-color: var(--color-neutral-900); + + --border-color: var(--color-neutral-300); + --divider-color: var(--color-neutral-200); + + + --icon-color: var(--color-neutral-400); + --dark-icon-color: var(--color-neutral-500); + --link-color: var(--color-primary-800); + + --lighter-background-color: var(--color-neutral-100); + --lightest-background-color: var(--color-neutral-50); + --docs-lightest-background-color: var(--color-primary-50); + --hero-background-color: var(--color-neutral-25); + --footer-background-color: var(--color-neutral-25); + --outline-color: var(--color-brand); +} + +@media (prefers-color-scheme: dark) { + :root { + --body-background-color: var(--color-neutral-900); + --body-text-color: var(--color-neutral-300); + --headings-color: #fff; + + --divider-color: var(--color-neutral-600); + --border-color: var(--color-neutral-500); + + --icon-color: var(--body-text-color); + --dark-icon-color: #fff; + --link-color: var(--color-primary-400); + + --lighter-background-color: var(--color-neutral-800); + --lightest-background-color: var(--color-neutral-800); + --docs-lightest-background-color: var(--color-neutral-800); + --hero-background-color: var(--color-neutral-800); + --footer-background-color: var(--color-neutral-800); + --outline-color: #fff; + } +} + + + +html[data-theme="light"] { + --body-background-color: #fff; + --body-text-color: var(--color-neutral-500); + --headings-color: var(--color-neutral-900); + + --border-color: var(--color-neutral-300); + --divider-color: var(--color-neutral-200); + + + --icon-color: var(--color-neutral-400); + --dark-icon-color: var(--color-neutral-500); + --link-color: var(--color-primary-800); + + --lighter-background-color: var(--color-neutral-100); + --lightest-background-color: var(--color-neutral-50); + --docs-lightest-background-color: var(--color-primary-50); + --hero-background-color: var(--color-neutral-25); + --footer-background-color: var(--color-neutral-25); + --outline-color: var(--color-brand); +} + +html[data-theme="dark"] { + --body-background-color: var(--color-neutral-900); + --body-text-color: var(--color-neutral-300); + --headings-color: #fff; + + --divider-color: var(--color-neutral-600); + --border-color: var(--color-neutral-500); + + --icon-color: var(--body-text-color); + --dark-icon-color: #fff; + --link-color: var(--color-primary-400); + + --lighter-background-color: var(--color-neutral-800); + --lightest-background-color: var(--color-neutral-800); + --docs-lightest-background-color: var(--color-neutral-800); + --hero-background-color: var(--color-neutral-800); + --footer-background-color: var(--color-neutral-800); + --outline-color: #fff; +} diff --git a/eslint/docs/src/assets/scss/tokens/typography.scss b/eslint/docs/src/assets/scss/tokens/typography.scss new file mode 100644 index 0000000..8c178b5 --- /dev/null +++ b/eslint/docs/src/assets/scss/tokens/typography.scss @@ -0,0 +1,79 @@ +/* @link https://utopia.fyi/type/calculator?c=320,16,1.125,1280,16,1.25,6,2,&s=0.75|0.5|0.25,1.5|2|3|4|6,s-l */ + +:root { + --fluid-min-width: 320; + --fluid-max-width: 1280; + + --fluid-screen: 100vw; + --fluid-bp: calc((var(--fluid-screen) - var(--fluid-min-width) / 16 * 1rem) / (var(--fluid-max-width) - var(--fluid-min-width))); +} + +@media screen and (min-width: 1280px) { + :root { + --fluid-screen: calc(var(--fluid-max-width) * 1px); + } +} + +:root { + --f--2-min: 12.64; + --f--2-max: 10.24; + --step--2: calc(((var(--f--2-min) / 16) * 1rem) + (var(--f--2-max) - var(--f--2-min)) * var(--fluid-bp)); + + --f--1-min: 14.22; + --f--1-max: 12.80; + --step--1: calc(((var(--f--1-min) / 16) * 1rem) + (var(--f--1-max) - var(--f--1-min)) * var(--fluid-bp)); + + --f-0-min: 16.00; + --f-0-max: 16.00; + --step-0: calc(((var(--f-0-min) / 16) * 1rem) + (var(--f-0-max) - var(--f-0-min)) * var(--fluid-bp)); + + --f-1-min: 18.00; + --f-1-max: 20.00; + --step-1: calc(((var(--f-1-min) / 16) * 1rem) + (var(--f-1-max) - var(--f-1-min)) * var(--fluid-bp)); + + --f-2-min: 20.25; + --f-2-max: 25.00; + --step-2: calc(((var(--f-2-min) / 16) * 1rem) + (var(--f-2-max) - var(--f-2-min)) * var(--fluid-bp)); + + --f-3-min: 22.78; + --f-3-max: 31.25; + --step-3: calc(((var(--f-3-min) / 16) * 1rem) + (var(--f-3-max) - var(--f-3-min)) * var(--fluid-bp)); + + --f-4-min: 25.63; + --f-4-max: 39.06; + --step-4: calc(((var(--f-4-min) / 16) * 1rem) + (var(--f-4-max) - var(--f-4-min)) * var(--fluid-bp)); + + --f-5-min: 28.83; + --f-5-max: 48.83; + --step-5: calc(((var(--f-5-min) / 16) * 1rem) + (var(--f-5-max) - var(--f-5-min)) * var(--fluid-bp)); + + --f-6-min: 32.44; + --f-6-max: 61.04; + --step-6: calc(((var(--f-6-min) / 16) * 1rem) + (var(--f-6-max) - var(--f-6-min)) * var(--fluid-bp)); +} + +:root { + --mono-font: "Mono Punctuators", "Space Mono", monospace; + --text-font: "Inter", + -apple-system, + BlinkMacSystemFont, + "Segoe UI", + Roboto, + Helvetica, + Arial, + sans-serif, + "Apple Color Emoji", + "Segoe UI Emoji", + "Segoe UI Symbol"; + --display-font: "Space Grotesk", + -apple-system, + BlinkMacSystemFont, + "Segoe UI", + Roboto, + Helvetica, + Arial, + sans-serif, + "Apple Color Emoji", + "Segoe UI Emoji", + "Segoe UI Symbol"; +} diff --git a/eslint/docs/src/assets/scss/tokens/ui.scss b/eslint/docs/src/assets/scss/tokens/ui.scss new file mode 100644 index 0000000..08759db --- /dev/null +++ b/eslint/docs/src/assets/scss/tokens/ui.scss @@ -0,0 +1,8 @@ +:root { + // elevations + --shadow-lg: 0px 12px 16px -4px rgba(16, 24, 40, 0.1), + 0px 4px 6px -2px rgba(16, 24, 40, 0.05); + --shadow-xs: 0px 1px 2px rgba(16, 24, 40, 0.05); + + --border-radius: .5rem; +} diff --git a/eslint/docs/src/assets/scss/utilities.scss b/eslint/docs/src/assets/scss/utilities.scss new file mode 100644 index 0000000..ac40064 --- /dev/null +++ b/eslint/docs/src/assets/scss/utilities.scss @@ -0,0 +1,174 @@ +.grid { + @media all and (min-width: 1024px) { + display: grid; + grid-template-columns: repeat(12, 1fr); + grid-gap: 2rem; + align-items: start; + } +} + +.visually-hidden { + clip: rect(0 0 0 0); + clip-path: inset(100%); + height: 1px; + overflow: + hidden; + position: absolute; + width: 1px; + white-space: nowrap; +} + +[hidden] { + display: none !important; +} + +.mobile-only { + @media all and (min-width: 1024px) { + display: none; + } +} + +.desktop-only { + @media all and (max-width: 1023px) { + display: none; + } +} + +.text.text { + font-size: inherit; + color: inherit; + font: inherit; + font-family: var(--text-font); + margin: 0; +} + +.color-brand { + color: var(--link-color); +} + +.font-weight-medium { + font-weight: 500; +} + +.center-text { + text-align: center; + grid-column: 1 / -1; +} + +.text-dark { + color: var(--headings-color); +} + +.divider { + border-bottom: 1px solid var(--divider-color); + border-block-end: 1px solid var(--divider-color); +} + +.fs-step--1 { + font-size: .875rem; +} + +.fs-step-0 { + font-size: var(--step-0); +} + +.fs-step-1 { + font-size: var(--step-1); +} + +.fs-step-2 { + font-size: var(--step-2); +} + +.fs-step-3 { + font-size: var(--step-3); +} + +.fs-step-4 { + font-size: var(--step-4); +} + +.fs-step-5 { + font-size: var(--step-5); +} + +.fs-step-6 { + font-size: var(--step-6); +} + +.grid--center-items { + align-items: center; +} + +.span-1-3 { + grid-column: 1 / 4; +} + +.span-1-4 { + grid-column: 1 / 5; +} + +.span-1-5 { + grid-column: 1 / 6; +} + +.span-1-6 { + grid-column: 1 / 7; +} + +.span-1-7 { + grid-column: 1 / 8; +} + + +.span-1-12 { + grid-column: 1 / -1; +} + +.span-4-12 { + grid-column: 4 / 13; +} + +.span-6-12 { + grid-column: 6 / 13; +} + +.span-7-12 { + grid-column: 7 / 13; +} + +.span-8-12 { + grid-column: 8 / 13; +} + +.span-10-12 { + grid-column: 10 / 13; +} + +.span-11-12 { + grid-column: 11 / 13; +} + +.span-4-9 { + grid-column: 4 / 10; +} + +.span-4-11 { + grid-column: 4 / 11; +} + +.span-5-12 { + grid-column: 5 / 12; +} + +.span-3-10 { + grid-column: 3 / 11; +} + +.span-6-7 { + grid-column: 6 / 8; +} + +.span-5-8 { + grid-column: 5 / 9; +} diff --git a/eslint/docs/src/assets/scss/versions.scss b/eslint/docs/src/assets/scss/versions.scss new file mode 100644 index 0000000..2a5ba4f --- /dev/null +++ b/eslint/docs/src/assets/scss/versions.scss @@ -0,0 +1,47 @@ +.versions-list { + margin: 0; + padding: 0; + font-size: var(--step-1); + + li { + margin: 0; + + &:last-of-type a { + border-bottom: 0; + border-block-end: 0; + } + } + + a { + color: var(--link-color); + display: block; + width: 100%; + padding: 1rem .5rem; + text-decoration: none; + display: flex; + align-items: center; + border-bottom: 1px solid var(--divider-color); + border-block-end: 1px solid var(--divider-color); + + &[data-current="true"] { + font-weight: 500; + color: var(--link-color); + + &::after { + content: "✔️"; + } + } + + &:hover { + background-color: var(--lightest-background-color); + } + } +} + +.versions-section .versions-list { + font-size: var(--step-1); + border-left: 4px solid var(--tab-border-color); + padding-left: 1rem; + border-inline-start: 4px solid var(--tab-border-color); + padding-inline-start: 1rem; +} diff --git a/eslint/docs/developer-guide/architecture.md b/eslint/docs/src/developer-guide/architecture/index.md similarity index 96% rename from eslint/docs/developer-guide/architecture.md rename to eslint/docs/src/developer-guide/architecture/index.md index 6531c28..71e4469 100644 --- a/eslint/docs/developer-guide/architecture.md +++ b/eslint/docs/src/developer-guide/architecture/index.md @@ -1,13 +1,20 @@ -# Architecture - -<center><img alt="dependency graph" src="./architecture/dependency.svg"></center> +--- +title: Architecture +layout: doc +eleventyNavigation: + key: architecture + parent: developer guide + title: Architecture + order: 1 +--- + +<center><img alt="dependency graph" src="../../assets/images/architecture/dependency.svg"></center> At a high level, there are a few key parts to ESLint: * `bin/eslint.js` - this is the file that actually gets executed with the command line utility. It's a dumb wrapper that does nothing more than bootstrap ESLint, passing the command line arguments to `cli`. This is intentionally small so as not to require heavy testing. * `lib/api.js` - this is the entry point of `require("eslint")`. This file exposes an object that contains public classes `Linter`, `ESLint`, `RuleTester`, and `SourceCode`. * `lib/cli.js` - this is the heart of the ESLint CLI. It takes an array of arguments and then uses `eslint` to execute the commands. By keeping this as a separate utility, it allows others to effectively call ESLint from within another Node.js program as if it were done on the command line. The main call is `cli.execute()`. This is also the part that does all the file reading, directory traversing, input, and output. -* `lib/init/` - this module contains `--init` functionality that set up a configuration file for end users. * `lib/cli-engine/` - this module is `CLIEngine` class that finds source code files and configuration files then does code verifying with the `Linter` class. This includes the loading logic of configuration files, parsers, plugins, and formatters. * `lib/linter/` - this module is the core `Linter` class that does code verifying based on configuration options. This file does no file I/O and does not interact with the `console` at all. For other Node.js programs that have JavaScript text to verify, they would be able to use this interface directly. * `lib/rule-tester/` - this module is `RuleTester` class that is a wrapper around Mocha so that rules can be unit tested. This class lets us write consistently formatted tests for each rule that is implemented and be confident that each of the rules work. The RuleTester interface was modeled after Mocha and works with Mocha's global testing methods. RuleTester can also be modified to work with other testing frameworks. diff --git a/eslint/docs/developer-guide/code-conventions.md b/eslint/docs/src/developer-guide/code-conventions.md similarity index 71% rename from eslint/docs/developer-guide/code-conventions.md rename to eslint/docs/src/developer-guide/code-conventions.md index 0c1cbe6..18b7274 100644 --- a/eslint/docs/developer-guide/code-conventions.md +++ b/eslint/docs/src/developer-guide/code-conventions.md @@ -1,4 +1,7 @@ -# Code Conventions +--- +title: Code Conventions +layout: doc +--- Code conventions for ESLint are determined by [eslint-config-eslint](https://www.npmjs.com/package/eslint-config-eslint). @@ -7,3 +10,6 @@ The rationales for the specific rules in use can be found by looking to the project documentation for any given rule. If the rule is one of our own, see our own [rule documentation](https://eslint.org/docs/rules/) and otherwise, see the documentation of the plugin in which the rule can be found. + +If you need to make changes to a `package.json` file, please see the +[package.json conventions](./package-json-conventions). diff --git a/eslint/docs/developer-guide/code-path-analysis.md b/eslint/docs/src/developer-guide/code-path-analysis.md similarity index 83% rename from eslint/docs/developer-guide/code-path-analysis.md rename to eslint/docs/src/developer-guide/code-path-analysis.md index 2b01bc7..5433f27 100644 --- a/eslint/docs/developer-guide/code-path-analysis.md +++ b/eslint/docs/src/developer-guide/code-path-analysis.md @@ -1,4 +1,8 @@ -# Code Path Analysis Details +--- +title: Code Path Analysis Details +layout: doc + +--- ESLint's rules can use code paths. The code path is execution routes of programs. @@ -11,7 +15,7 @@ if (a && b) { bar(); ``` -![Code Path Example](./code-path-analysis/helo.svg) +![Code Path Example](../assets/images/code-path-analysis/helo.svg) ## Objects @@ -95,10 +99,10 @@ module.exports = function(context) { }, /** - * This is called when a code path segment was leaved. + * This is called when a code path segment was left. * In this time, the segment does not have the next segments yet. * - * @param {CodePathSegment} segment - The leaved code path segment. + * @param {CodePathSegment} segment - The left code path segment. * @param {ASTNode} node - The current node. * @returns {void} */ @@ -140,17 +144,17 @@ bar(); 1. First, the analysis advances to the end of loop. - ![Loop Event's Example 1](./code-path-analysis/loop-event-example-while-1.svg) + ![Loop Event's Example 1](../assets/images/code-path-analysis/loop-event-example-while-1.svg) 2. Second, it creates the looping path. At this time, the next segment has existed already, so the `onCodePathSegmentStart` event is not fired. It fires `onCodePathSegmentLoop` instead. - ![Loop Event's Example 2](./code-path-analysis/loop-event-example-while-2.svg) + ![Loop Event's Example 2](../assets/images/code-path-analysis/loop-event-example-while-2.svg) 3. Last, it advances to the end. - ![Loop Event's Example 3](./code-path-analysis/loop-event-example-while-3.svg) + ![Loop Event's Example 3](../assets/images/code-path-analysis/loop-event-example-while-3.svg) For example 2: @@ -165,29 +169,29 @@ bar(); First, the analysis advances to `ForStatement.update`. The `update` segment is hovered at first. - ![Loop Event's Example 1](./code-path-analysis/loop-event-example-for-1.svg) + ![Loop Event's Example 1](../assets/images/code-path-analysis/loop-event-example-for-1.svg) 2. Second, it advances to `ForStatement.body`. Of course the `body` segment is preceded by the `test` segment. It keeps the `update` segment hovering. - ![Loop Event's Example 2](./code-path-analysis/loop-event-example-for-2.svg) + ![Loop Event's Example 2](../assets/images/code-path-analysis/loop-event-example-for-2.svg) 3. Third, it creates the looping path from `body` segment to `update` segment. At this time, the next segment has existed already, so the `onCodePathSegmentStart` event is not fired. It fires `onCodePathSegmentLoop` instead. - ![Loop Event's Example 3](./code-path-analysis/loop-event-example-for-3.svg) + ![Loop Event's Example 3](../assets/images/code-path-analysis/loop-event-example-for-3.svg) 4. Fourth, also it creates the looping path from `update` segment to `test` segment. At this time, the next segment has existed already, so the `onCodePathSegmentStart` event is not fired. It fires `onCodePathSegmentLoop` instead. - ![Loop Event's Example 4](./code-path-analysis/loop-event-example-for-4.svg) + ![Loop Event's Example 4](../assets/images/code-path-analysis/loop-event-example-for-4.svg) 5. Last, it advances to the end. - ![Loop Event's Example 5](./code-path-analysis/loop-event-example-for-5.svg) + ![Loop Event's Example 5](../assets/images/code-path-analysis/loop-event-example-for-5.svg) ## Usage Examples @@ -333,7 +337,7 @@ See Also: console.log("Hello world!"); ``` -![Hello World](./code-path-analysis/example-hello-world.svg) +![Hello World](../assets/images/code-path-analysis/example-hello-world.svg) ### `IfStatement` @@ -345,7 +349,7 @@ if (a) { } ``` -![`IfStatement`](./code-path-analysis/example-ifstatement.svg) +![`IfStatement`](../assets/images/code-path-analysis/example-ifstatement.svg) ### `IfStatement` (chain) @@ -359,7 +363,7 @@ if (a) { } ``` -![`IfStatement` (chain)](./code-path-analysis/example-ifstatement-chain.svg) +![`IfStatement` (chain)](../assets/images/code-path-analysis/example-ifstatement-chain.svg) ### `SwitchStatement` @@ -380,7 +384,7 @@ switch (a) { } ``` -![`SwitchStatement`](./code-path-analysis/example-switchstatement.svg) +![`SwitchStatement`](../assets/images/code-path-analysis/example-switchstatement.svg) ### `SwitchStatement` (has `default`) @@ -405,7 +409,7 @@ switch (a) { } ``` -![`SwitchStatement` (has `default`)](./code-path-analysis/example-switchstatement-has-default.svg) +![`SwitchStatement` (has `default`)](../assets/images/code-path-analysis/example-switchstatement-has-default.svg) ### `TryStatement` (try-catch) @@ -428,7 +432,7 @@ It creates the paths from `try` block to `catch` block at: * The first throwable node (e.g. a function call) in the `try` block. * The end of the `try` block. -![`TryStatement` (try-catch)](./code-path-analysis/example-trystatement-try-catch.svg) +![`TryStatement` (try-catch)](../assets/images/code-path-analysis/example-trystatement-try-catch.svg) ### `TryStatement` (try-finally) @@ -446,7 +450,7 @@ If there is not `catch` block, `finally` block has two current segments. At this time, `CodePath.currentSegments.length` is `2`. One is the normal path, and another is the leaving path (`throw` or `return`). -![`TryStatement` (try-finally)](./code-path-analysis/example-trystatement-try-finally.svg) +![`TryStatement` (try-finally)](../assets/images/code-path-analysis/example-trystatement-try-finally.svg) ### `TryStatement` (try-catch-finally) @@ -462,7 +466,7 @@ try { last(); ``` -![`TryStatement` (try-catch-finally)](./code-path-analysis/example-trystatement-try-catch-finally.svg) +![`TryStatement` (try-catch-finally)](../assets/images/code-path-analysis/example-trystatement-try-catch-finally.svg) ### `WhileStatement` @@ -476,7 +480,7 @@ while (a) { } ``` -![`WhileStatement`](./code-path-analysis/example-whilestatement.svg) +![`WhileStatement`](../assets/images/code-path-analysis/example-whilestatement.svg) ### `DoWhileStatement` @@ -487,7 +491,7 @@ do { } while (a); ``` -![`DoWhileStatement`](./code-path-analysis/example-dowhilestatement.svg) +![`DoWhileStatement`](../assets/images/code-path-analysis/example-dowhilestatement.svg) ### `ForStatement` @@ -501,7 +505,7 @@ for (let i = 0; i < 10; ++i) { } ``` -![`ForStatement`](./code-path-analysis/example-forstatement.svg) +![`ForStatement`](../assets/images/code-path-analysis/example-forstatement.svg) ### `ForStatement` (for ever) @@ -512,7 +516,7 @@ for (;;) { bar(); ``` -![`ForStatement` (for ever)](./code-path-analysis/example-forstatement-for-ever.svg) +![`ForStatement` (for ever)](../assets/images/code-path-analysis/example-forstatement-for-ever.svg) ### `ForInStatement` @@ -522,7 +526,7 @@ for (let key in obj) { } ``` -![`ForInStatement`](./code-path-analysis/example-forinstatement.svg) +![`ForInStatement`](../assets/images/code-path-analysis/example-forinstatement.svg) ### When there is a function @@ -541,8 +545,8 @@ It creates two code paths. * The global's - ![When there is a function](./code-path-analysis/example-when-there-is-a-function-g.svg) + ![When there is a function](../assets/images/code-path-analysis/example-when-there-is-a-function-g.svg) * The function's - ![When there is a function](./code-path-analysis/example-when-there-is-a-function-f.svg) + ![When there is a function](../assets/images/code-path-analysis/example-when-there-is-a-function-f.svg) diff --git a/eslint/docs/developer-guide/contributing/changes.md b/eslint/docs/src/developer-guide/contributing/changes.md similarity index 77% rename from eslint/docs/developer-guide/contributing/changes.md rename to eslint/docs/src/developer-guide/contributing/changes.md index 3c13051..264d1a9 100644 --- a/eslint/docs/developer-guide/contributing/changes.md +++ b/eslint/docs/src/developer-guide/contributing/changes.md @@ -1,10 +1,14 @@ -# Change Requests +--- +title: Change Requests +layout: doc -If you'd like to request a change to ESLint, please [create a new issue](https://github.com/eslint/eslint/issues/new?template=CHANGE.md) on GitHub. Be sure to include the following information: +--- + +If you'd like to request a change to ESLint, please [create a new issue](https://github.com/eslint/eslint/issues/new/choose) on GitHub. Be sure to include the following information: 1. The version of ESLint you are using. -1. The problem you want to solve. -1. Your take on the correct solution to problem. +2. The problem you want to solve. +3. Your take on the correct solution to problem. If you're requesting a change to a rule, it's helpful to include this information as well: diff --git a/eslint/docs/developer-guide/contributing/README.md b/eslint/docs/src/developer-guide/contributing/index.md similarity index 72% rename from eslint/docs/developer-guide/contributing/README.md rename to eslint/docs/src/developer-guide/contributing/index.md index 25a8894..a5dfce7 100644 --- a/eslint/docs/developer-guide/contributing/README.md +++ b/eslint/docs/src/developer-guide/contributing/index.md @@ -1,4 +1,13 @@ -# Contributing +--- +title: Contributing +layout: doc +eleventyNavigation: + key: contributing + parent: developer guide + title: Contributing + order: 10 + +--- One of the great things about open source projects is that anyone can contribute in any number of meaningful ways. ESLint couldn't exist without the help of the many contributors it's had since the project began, and we want you to feel like you can contribute and make a difference as well. @@ -8,23 +17,19 @@ This guide is intended for anyone who wants to contribute to an ESLint project. ESLint welcomes contributions from everyone and adheres to the [OpenJS Foundation Code of Conduct](https://eslint.org/conduct). We kindly request that you read over our code of conduct before contributing. -## [Signing the CLA](https://openjsf.org/about/the-openjs-foundation-cla/) - -In order to submit code or documentation to an ESLint project, you will need to electronically sign our [Contributor License Agreement](https://github.com/openjs-foundation/easycla). The CLA is the commonly used Apache-style template, and is you giving us permission to use your contribution. You only need to sign the CLA once for any OpenJS Foundation projects that use EasyCLA. - ## [Bug Reporting](reporting-bugs) Think you found a problem? We'd love to hear about it. This section explains how to submit a bug, the type of information we need to properly verify it, and the overall process. -## Proposing a [New Rule](new-rules.md) +## Proposing a [New Rule](new-rules) We get a lot of proposals for new rules in ESLint. This section explains how we determine which rules are accepted and what information you should provide to help us evaluate your proposal. -## Proposing a [Rule Change](rule-changes.md) +## Proposing a [Rule Change](rule-changes) Want to make a change to an existing rule? This section explains the process and how we evaluate such proposals. -## Requesting a [Change](changes.md) +## Requesting a [Change](changes) If you'd like to request a change other than a bug fix or new rule, this section explains that process. @@ -32,10 +37,14 @@ If you'd like to request a change other than a bug fix or new rule, this section To report a security vulnerability in ESLint, please use our [HackerOne program](https://hackerone.com/eslint). -## [Working on Issues](working-on-issues.md) +## [Working on Issues](working-on-issues) Have some extra time and want to contribute? This section talks about the process of working on issues. -## Submitting a [Pull Request](pull-requests.md) +## Submitting a [Pull Request](pull-requests) We're always looking for contributions from the community. This section explains the requirements for pull requests and the process of contributing code. + +## Signing the CLA + +In order to submit code or documentation to an ESLint project, you will need to electronically sign our Contributor License Agreement. The CLA is the commonly used Apache-style template, and is you giving us permission to use your contribution. You only need to sign the CLA once for any OpenJS Foundation projects that use EasyCLA. You will be asked to sign the CLA in the first pull request you open. diff --git a/eslint/docs/developer-guide/contributing/new-rules.md b/eslint/docs/src/developer-guide/contributing/new-rules.md similarity index 94% rename from eslint/docs/developer-guide/contributing/new-rules.md rename to eslint/docs/src/developer-guide/contributing/new-rules.md index e4a19e4..f3c859a 100644 --- a/eslint/docs/developer-guide/contributing/new-rules.md +++ b/eslint/docs/src/developer-guide/contributing/new-rules.md @@ -1,4 +1,8 @@ -# New Rules +--- +title: New Rules +layout: doc + +--- ESLint is all about rules. For most of the project's lifetime, we've had over 200 rules, and that list continues to grow. However, we can't just accept any proposed rule because all rules need to work cohesively together. As such, we have some guidelines around which rules can be part of the ESLint core and which are better off as custom rules and plugins. @@ -19,7 +23,7 @@ Even though these are the formal criteria for inclusion, each rule is evaluated ## Proposing a Rule -If you want to propose a new rule, please see how to [create a pull request](/docs/developer-guide/contributing/pull-requests) or submit an issue by filling out a [new rule template](https://github.com/eslint/eslint/issues/new?template=NEW_RULE.md). +If you want to propose a new rule, please see how to [create a pull request](/docs/developer-guide/contributing/pull-requests) or submit an issue by filling out a [new rule template](https://github.com/eslint/eslint/issues/new/choose). We need all of this information in order to determine whether or not the rule is a good core rule candidate. @@ -39,4 +43,4 @@ The ESLint team doesn't implement new rules that are suggested by users because ## Alternative: Creating Your Own Rules -Remember that ESLint is completely pluggable, which means you can create your own rules and distribute them using plugins. We did this on purpose because we don't want to be the gatekeepers for all possible rules. Even if we don't accept a rule into the core, that doesn't mean you can't have the exact rule that you want. See the [working with rules](../working-with-rules.md) and [working with plugins](../working-with-plugins.md) documentation for more information. +Remember that ESLint is completely pluggable, which means you can create your own rules and distribute them using plugins. We did this on purpose because we don't want to be the gatekeepers for all possible rules. Even if we don't accept a rule into the core, that doesn't mean you can't have the exact rule that you want. See the [working with rules](../working-with-rules) and [working with plugins](../working-with-plugins) documentation for more information. diff --git a/eslint/docs/developer-guide/contributing/pull-requests.md b/eslint/docs/src/developer-guide/contributing/pull-requests.md similarity index 88% rename from eslint/docs/developer-guide/contributing/pull-requests.md rename to eslint/docs/src/developer-guide/contributing/pull-requests.md index 58fe6f9..2eece34 100644 --- a/eslint/docs/developer-guide/contributing/pull-requests.md +++ b/eslint/docs/src/developer-guide/contributing/pull-requests.md @@ -1,4 +1,8 @@ -# Pull Requests +--- +title: Pull Requests +layout: doc + +--- If you want to contribute to an ESLint repo, please use a GitHub pull request. This is the fastest way for us to evaluate your code and to merge it into the code base. Please don't file an issue with snippets of code. Doing so means that we need to manually merge the changes in and update any appropriate tests. That decreases the likelihood that your code is going to get included in a timely manner. Please use pull requests. @@ -6,9 +10,8 @@ If you want to contribute to an ESLint repo, please use a GitHub pull request. T If you'd like to work on a pull request and you've never submitted code before, follow these steps: -1. Sign our [Contributor License Agreement](https://cla.js.foundation/eslint/eslint). -1. Set up a [development environment](../development-environment.md). -1. If you want to implement a breaking change or a change to the core, ensure there's an issue that describes what you're doing and the issue has been accepted. You can create a new issue or just indicate you're [working on an existing issue](working-on-issues.md). Bug fixes, documentation changes, and other pull requests do not require an issue. +1. Set up a [development environment](../development-environment). +1. If you want to implement a breaking change or a change to the core, ensure there's an issue that describes what you're doing and the issue has been accepted. You can create a new issue or just indicate you're [working on an existing issue](working-on-issues). Bug fixes, documentation changes, and other pull requests do not require an issue. After that, you're ready to start working on code. @@ -30,8 +33,8 @@ Details about each step are found below. The first step to sending a pull request is to create a new branch in your ESLint fork. Give the branch a descriptive name that describes what it is you're fixing, such as: -```sh -$ git checkout -b issue1234 +```shell +git checkout -b issue1234 ``` You should do all of your development for the issue in this branch. @@ -40,16 +43,16 @@ You should do all of your development for the issue in this branch. ### Step 2: Make your changes<a name="step2"></a> -Make the changes to the code and tests, following the [code conventions](../code-conventions.md) as you go. Once you have finished, commit the changes to your branch: +Make the changes to the code and tests, following the [code conventions](../code-conventions) as you go. Once you have finished, commit the changes to your branch: -```sh -$ git add -A -$ git commit +```shell +git add -A +git commit ``` All ESLint projects follow [Conventional Commits](https://www.conventionalcommits.org/) for our commit messages. Here's an example commit message: -```pt +```txt tag: Short description of what you did Longer description here if necessary @@ -73,13 +76,13 @@ The `tag` is one of the following: * `ci` - changes to our CI configuration files and scripts. * `perf` - a code change that improves performance. -Use the [labels of the issue you are working on](working-on-issues.md#issue-labels) to determine the best tag. +Use the [labels of the issue you are working on](working-on-issues#issue-labels) to determine the best tag. The message summary should be a one-sentence description of the change, and it must be 72 characters in length or shorter. If the pull request addresses an issue, then the issue number should be mentioned in the body of the commit message in the format `Fixes #1234`. If the commit doesn't completely fix the issue, then use `Refs #1234` instead of `Fixes #1234`. Here are some good commit message summary examples: -```pt +```txt build: Update Travis to only test Node 0.10 fix: Semi rule incorrectly flagging extra semicolon chore: Upgrade Esprima to 1.2, switch to using comment attachment @@ -91,7 +94,7 @@ The commit message format is important because these messages are used to create Before you send the pull request, be sure to rebase onto the upstream source. This ensures your code is running on the latest available code. -```sh +```shell git fetch upstream git rebase upstream/main ``` @@ -100,7 +103,7 @@ git rebase upstream/main After rebasing, be sure to run all of the tests once again to make sure nothing broke: -```sh +```shell npm test ``` @@ -117,19 +120,19 @@ With your code ready to go, this is a good time to double-check your submission * Make separate pull requests for unrelated changes. Large pull requests with multiple unrelated changes may be closed without merging. * All changes must be accompanied by tests, even if the feature you're working on previously had no tests. * All user-facing changes must be accompanied by appropriate documentation. -* Follow the [Code Conventions](../code-conventions.md). +* Follow the [Code Conventions](../code-conventions). ### Step 6: Push your changes<a name="step6"></a> Next, push your changes to your clone: -```sh +```shell git push origin issue1234 ``` If you are unable to push because some references are old, do a forced push instead: -```sh +```shell git push -f origin issue1234 ``` @@ -137,6 +140,8 @@ git push -f origin issue1234 Now you're ready to send the pull request. Go to your ESLint fork and then follow the [GitHub documentation](https://help.github.com/articles/creating-a-pull-request) on how to send a pull request. +In order to submit code or documentation to an ESLint project, you’ll be asked to sign our CLA when you send your first pull request. (Read more about the Open JS Foundation CLA process at <https://cla.openjsf.org/>.) + ## Following Up Once your pull request is sent, it's time for the team to review it. As such, please make sure to: @@ -149,24 +154,24 @@ Once your pull request is sent, it's time for the team to review it. As such, pl If your commit message is in the incorrect format, you'll be asked to update it. You can do so via: -```sh -$ git commit --amend +```shell +git commit --amend ``` This will open up your editor so you can make changes. After that, you'll need to do a forced push to your branch: -```sh -$ git push origin issue1234 -f +```shell +git push origin issue1234 -f ``` ### Updating the Code If we ask you to make code changes, there's no need to close the pull request and create a new one. Just go back to the branch on your fork and make your changes. Then, when you're ready, you can add your changes into the branch: -```sh -$ git add -A -$ git commit -$ git push origin issue1234 +```shell +git add -A +git commit +git push origin issue1234 ``` When updating the code, it's usually better to add additional commits to your branch rather than amending the original commit, because reviewers can easily tell which changes were made in response to a particular review. When we merge pull requests, we will squash all the commits from your branch into a single commit on the `main` branch. @@ -175,15 +180,15 @@ The commit messages in subsequent commits do not need to be in any specific form ### Rebasing -If your code is out-of-date, we might ask you to rebase. That means we want you to apply your changes on top of the latest upstream code. Make sure you have set up a [development environment](../development-environment.md) and then you can rebase using these commands: +If your code is out-of-date, we might ask you to rebase. That means we want you to apply your changes on top of the latest upstream code. Make sure you have set up a [development environment](../development-environment) and then you can rebase using these commands: -```sh -$ git fetch upstream -$ git rebase upstream/main +```shell +git fetch upstream +git rebase upstream/main ``` You might find that there are merge conflicts when you attempt to rebase. Please [resolve the conflicts](https://help.github.com/articles/resolving-merge-conflicts-after-a-git-rebase/) and then do a forced push to your branch: -```sh -$ git push origin issue1234 -f +```shell +git push origin issue1234 -f ``` diff --git a/eslint/docs/developer-guide/contributing/reporting-bugs.md b/eslint/docs/src/developer-guide/contributing/reporting-bugs.md similarity index 77% rename from eslint/docs/developer-guide/contributing/reporting-bugs.md rename to eslint/docs/src/developer-guide/contributing/reporting-bugs.md index 4dd0da0..fb6ae0f 100644 --- a/eslint/docs/developer-guide/contributing/reporting-bugs.md +++ b/eslint/docs/src/developer-guide/contributing/reporting-bugs.md @@ -1,6 +1,10 @@ -# Reporting Bugs +--- +title: Reporting Bugs +layout: doc -If you think you've found a bug in ESLint, please [create a new issue](https://github.com/eslint/eslint/issues/new) or a [pull request](/docs/developer-guide/contributing/pull-requests.md) on GitHub. +--- + +If you think you've found a bug in ESLint, please [create a new issue](https://github.com/eslint/eslint/issues/new/choose) or a [pull request](/docs/developer-guide/contributing/pull-requests) on GitHub. Please include as much detail as possible to help us properly address your issue. If we need to triage issues and constantly ask people for more detail, that's time taken away from actually fixing issues. Help us be as efficient as possible by including a lot of detail in your issues. diff --git a/eslint/docs/developer-guide/contributing/rule-changes.md b/eslint/docs/src/developer-guide/contributing/rule-changes.md similarity index 81% rename from eslint/docs/developer-guide/contributing/rule-changes.md rename to eslint/docs/src/developer-guide/contributing/rule-changes.md index d45ddbe..b96d668 100644 --- a/eslint/docs/developer-guide/contributing/rule-changes.md +++ b/eslint/docs/src/developer-guide/contributing/rule-changes.md @@ -1,10 +1,14 @@ -# Rule Changes +--- +title: Rule Changes +layout: doc + +--- Occasionally, a core ESLint rule needs to be changed. This is not necessarily a bug, but rather, an enhancement that makes a rule more configurable. In those situations, we will consider making changes to rules. ## Proposing a Rule Change -To propose a change to an existing rule, [create a pull request](/docs/developer-guide/contributing/pull-requests.md) or [new issue](https://github.com/eslint/eslint/issues/new?template=RULE_CHANGE.md) and fill out the template. +To propose a change to an existing rule, [create a pull request](/docs/developer-guide/contributing/pull-requests) or [new issue](https://github.com/eslint/eslint/issues/new/choose) and fill out the template. We need all of this information in order to determine whether or not the change is a good candidate for inclusion. @@ -12,7 +16,7 @@ We need all of this information in order to determine whether or not the change In order for a rule change to be accepted into ESLint, it must: -1. Adhere to the [Core Rule Guidelines](new-rules.md#core-rule-guidelines) +1. Adhere to the [Core Rule Guidelines](new-rules#core-rule-guidelines) 1. Have an ESLint team member champion the change 1. Be important enough that rule is deemed incomplete without this change diff --git a/eslint/docs/developer-guide/contributing/working-on-issues.md b/eslint/docs/src/developer-guide/contributing/working-on-issues.md similarity index 98% rename from eslint/docs/developer-guide/contributing/working-on-issues.md rename to eslint/docs/src/developer-guide/contributing/working-on-issues.md index 9e666d6..75322e2 100644 --- a/eslint/docs/developer-guide/contributing/working-on-issues.md +++ b/eslint/docs/src/developer-guide/contributing/working-on-issues.md @@ -1,4 +1,8 @@ -# Working on Issues +--- +title: Working on Issues +layout: doc + +--- Our public [issues tracker](https://github.com/eslint/eslint/issues) lists all of the things we plan on doing as well as suggestions from the community. Before starting to work on an issue, be sure you read through the rest of this page. diff --git a/eslint/docs/developer-guide/development-environment.md b/eslint/docs/src/developer-guide/development-environment.md similarity index 89% rename from eslint/docs/developer-guide/development-environment.md rename to eslint/docs/src/developer-guide/development-environment.md index 4828476..ad21740 100644 --- a/eslint/docs/developer-guide/development-environment.md +++ b/eslint/docs/src/developer-guide/development-environment.md @@ -1,4 +1,13 @@ -# Development Environment +--- +title: Development Environment +layout: doc +eleventyNavigation: + key: set up a development environment + parent: developer guide + title: Set Up a Development Environment + order: 2 + +--- ESLint has a very lightweight development environment that makes updating code fast and easy. This is a step-by-step guide to setting up a local development environment that will let you contribute back to the project. @@ -14,9 +23,9 @@ Go to <https://github.com/eslint/eslint> and click the "Fork" button. Follow the Once you've cloned the repository, run `npm install` to get all the necessary dependencies: -```sh -$ cd eslint -$ npm install +```shell +cd eslint +npm install ``` You must be connected to the Internet for this step to work. You'll see a lot of utilities being downloaded. @@ -27,7 +36,7 @@ The *upstream source* is the main ESLint repository where active development hap To add the upstream source for ESLint, run the following in your repository: -```sh +```shell git remote add upstream git@github.com:eslint/eslint.git ``` @@ -37,11 +46,15 @@ Now, the remote `upstream` points to the upstream source. [Yeoman](http://yeoman.io) is a scaffold generator that ESLint uses to help streamline development of new rules. If you don't already have Yeoman installed, you can install it via npm: - npm install -g yo +```shell +npm install -g yo +``` Then, you can install the ESLint Yeoman generator: - npm install -g generator-eslint +```shell +npm install -g generator-eslint +``` Please see the [generator documentation](https://github.com/eslint/generator-eslint) for instructions on how to use it. @@ -49,7 +62,7 @@ Please see the [generator documentation](https://github.com/eslint/generator-esl Running the tests is the best way to ensure you have correctly set up your development environment. Make sure you're in the `eslint` directory and run: -```sh +```shell npm test ``` @@ -59,7 +72,7 @@ The testing takes a few minutes to complete. If any tests fail, that likely mean ### Workflow -Once you have your development environment installed, you can make and submit changes to the ESLint source files. Doing this successfully requires careful adherence to our [pull-request submission workflow](contributing/pull-requests.md). +Once you have your development environment installed, you can make and submit changes to the ESLint source files. Doing this successfully requires careful adherence to our [pull-request submission workflow](contributing/pull-requests). ### Build Scripts diff --git a/eslint/docs/developer-guide/README.md b/eslint/docs/src/developer-guide/index.md similarity index 82% rename from eslint/docs/developer-guide/README.md rename to eslint/docs/src/developer-guide/index.md index a5e6592..a682ac2 100644 --- a/eslint/docs/developer-guide/README.md +++ b/eslint/docs/src/developer-guide/index.md @@ -1,4 +1,12 @@ -# Developer Guide +--- +title: Developer Guide +layout: doc +eleventyNavigation: + key: developer guide + title: Developer Guide + order: 2 + +--- This guide is intended for those who wish to: @@ -14,31 +22,31 @@ In order to work with ESLint as a developer, it's recommended that: If that sounds like you, then continue reading to get started. -## Section 1: Get the [Source Code](source-code.md) +## Section 1: Get the [Source Code](source-code) Before you can get started, you'll need to get a copy of the ESLint source code. This section explains how to do that and a little about the source code structure. -## Section 2: Set up a [Development Environment](development-environment.md) +## Section 2: Set up a [Development Environment](development-environment) Developing for ESLint is a bit different than running it on the command line. This section shows you how to set up a development environment and get you ready to write code. -## Section 3: Run the [Unit Tests](unit-tests.md) +## Section 3: Run the [Unit Tests](unit-tests) There are a lot of unit tests included with ESLint to make sure that we're keeping on top of code quality. This section explains how to run the unit tests. -## Section 4: [Working with Rules](working-with-rules.md) +## Section 4: [Working with Rules](working-with-rules) You're finally ready to start working with rules. You may want to fix an existing rule or create a new one. This section explains how to do all of that. -## Section 5: [Working with Plugins](working-with-plugins.md) +## Section 5: [Working with Plugins](working-with-plugins) You've developed library-specific rules for ESLint and you want to share them with the community. You can publish an ESLint plugin on npm. -## Section 6: [Working with Custom Parsers](working-with-custom-parsers.md) +## Section 6: [Working with Custom Parsers](working-with-custom-parsers) If you aren't going to use the default parser of ESLint, this section explains about using custom parsers. -## Section 7: [Node.js API](nodejs-api.md) +## Section 7: [Node.js API](nodejs-api) If you're interested in writing a tool that uses ESLint, then you can use the Node.js API to get programmatic access to functionality. diff --git a/eslint/docs/developer-guide/nodejs-api.md b/eslint/docs/src/developer-guide/nodejs-api.md similarity index 91% rename from eslint/docs/developer-guide/nodejs-api.md rename to eslint/docs/src/developer-guide/nodejs-api.md index ca07415..0b8d842 100644 --- a/eslint/docs/developer-guide/nodejs-api.md +++ b/eslint/docs/src/developer-guide/nodejs-api.md @@ -1,41 +1,18 @@ -# Node.js API +--- +title: Node.js API +layout: doc +eleventyNavigation: + key: node.js api + parent: developer guide + title: Node.js API + order: 9 + +--- While ESLint is designed to be run on the command line, it's possible to use ESLint programmatically through the Node.js API. The purpose of the Node.js API is to allow plugin and tool authors to use the ESLint functionality directly, without going through the command line interface. **Note:** Use undocumented parts of the API at your own risk. Only those parts that are specifically mentioned in this document are approved for use and will remain stable and reliable. Anything left undocumented is unstable and may change or be removed at any point. -## Table of Contents - -* [ESLint] - * [constructor()][eslint-constructor] - * [lintFiles()][eslint-lintfiles] - * [lintText()][eslint-linttext] - * [getRulesMetaForResults()][eslint-getrulesmetaforresults] - * [calculateConfigForFile()][eslint-calculateconfigforfile] - * [isPathIgnored()][eslint-ispathignored] - * [loadFormatter()][eslint-loadformatter] - * [static version][eslint-version] - * [static outputFixes()][eslint-outputfixes] - * [static getErrorResults()][eslint-geterrorresults] - * [LintResult type][lintresult] - * [LintMessage type][lintmessage] - * [EditInfo type][editinfo] - * [Formatter type][formatter] -* [SourceCode](#sourcecode) - * [splitLines()](#sourcecodesplitlines) -* [Linter](#linter) - * [verify()](#linterverify) - * [verifyAndFix()](#linterverifyandfix) - * [defineRule()](#linterdefinerule) - * [defineRules()](#linterdefinerules) - * [getRules()](#lintergetrules) - * [defineParser()](#linterdefineparser) - * [version](#linterversionlinterversion) -* [RuleTester](#ruletester) - * [Customizing RuleTester](#customizing-ruletester) - ---- - ## ESLint class The `ESLint` class is the primary class to use in Node.js applications. @@ -278,7 +255,7 @@ This method loads a formatter. Formatters convert lint results to a human- or ma The path to the file you want to check. The following values are allowed: * `undefined`. In this case, loads the `"stylish"` built-in formatter. * A name of [built-in formatters][builtin-formatters]. - * A name of [third-party formatters][thirdparty-formatters]. For examples: + * A name of [third-party formatters][third-party-formatters]. For examples: * `"foo"` will load `eslint-formatter-foo`. * `"@foo"` will load `@foo/eslint-formatter`. * `"@foo/bar"` will load `@foo/eslint-formatter-bar`. @@ -286,8 +263,8 @@ This method loads a formatter. Formatters convert lint results to a human- or ma #### Return Value -* (`Promise<Formatter>`)<br> - The promise that will be fulfilled with a [Formatter] object. +* (`Promise<LoadedFormatter>`)<br> + The promise that will be fulfilled with a [LoadedFormatter] object. ### ◆ ESLint.version @@ -347,6 +324,8 @@ The `LintResult` value is the information of the linting result of each file. Th The absolute path to the file of this result. This is the string `"<text>"` if the file path is unknown (when you didn't pass the `options.filePath` option to the [`eslint.lintText()`][eslint-linttext] method). * `messages` (`LintMessage[]`)<br> The array of [LintMessage] objects. +* `suppressedMessages` (`SuppressedLintMessage[]`)<br> + The array of [SuppressedLintMessage] objects. * `fixableErrorCount` (`number`)<br> The number of errors that can be fixed automatically by the `fix` constructor option. * `fixableWarningCount` (`number`)<br> @@ -389,6 +368,33 @@ The `LintMessage` value is the information of each linting error. The `messages` * `suggestions` (`{ desc: string; fix: EditInfo }[] | undefined`)<br> The list of suggestions. Each suggestion is the pair of a description and an [EditInfo] object to fix code. API users such as editor integrations can choose one of them to fix the problem of this message. This property is undefined if this message doesn't have any suggestions. +### ◆ SuppressedLintMessage type + +The `SuppressedLintMessage` value is the information of each suppressed linting error. The `suppressedMessages` property of the [LintResult] type contains it. It has the following properties: + +* `ruleId` (`string` | `null`)<br> + Same as `ruleId` in [LintMessage] type. +* `severity` (`1 | 2`)<br> + Same as `severity` in [LintMessage] type. +* `fatal` (`boolean | undefined`)<br> + Same as `fatal` in [LintMessage] type. +* `message` (`string`)<br> + Same as `message` in [LintMessage] type. +* `line` (`number | undefined`)<br> + Same as `line` in [LintMessage] type. +* `column` (`number | undefined`)<br> + Same as `column` in [LintMessage] type. +* `endLine` (`number | undefined`)<br> + Same as `endLine` in [LintMessage] type. +* `endColumn` (`number | undefined`)<br> + Same as `endColumn` in [LintMessage] type. +* `fix` (`EditInfo | undefined`)<br> + Same as `fix` in [LintMessage] type. +* `suggestions` (`{ desc: string; fix: EditInfo }[] | undefined`)<br> + Same as `suggestions` in [LintMessage] type. +* `suppressions` (`{ kind: string; justification: string}[]`)<br> + The list of suppressions. Each suppression is the pair of a kind and a justification. + ### ◆ EditInfo type The `EditInfo` value is information to edit text. The `fix` and `suggestions` properties of [LintMessage] type contain it. It has following properties: @@ -400,9 +406,9 @@ The `EditInfo` value is information to edit text. The `fix` and `suggestions` pr This edit information means replacing the range of the `range` property by the `text` property value. It's like `sourceCodeText.slice(0, edit.range[0]) + edit.text + sourceCodeText.slice(edit.range[1])`. Therefore, it's an add if the `range[0]` and `range[1]` property values are the same value, and it's removal if the `text` property value is empty string. -### ◆ Formatter type +### ◆ LoadedFormatter type -The `Formatter` value is the object to convert the [LintResult] objects to text. The [eslint.loadFormatter()][eslint-loadformatter] method returns it. It has the following method: +The `LoadedFormatter` value is the object to convert the [LintResult] objects to text. The [eslint.loadFormatter()][eslint-loadformatter] method returns it. It has the following method: * `format` (`(results: LintResult[]) => string | Promise<string>`)<br> The method to convert the [LintResult] objects to text. @@ -462,7 +468,7 @@ The `Linter` object does the actual evaluation of the JavaScript code. It doesn' The `Linter` is a constructor, and you can create a new instance by passing in the options you want to use. The available options are: -* `cwd` - Path to a directory that should be considered as the current working directory. It is accessible to rules by calling `context.getCwd()` (see [The Context Object](./working-with-rules.md#the-context-object)). If `cwd` is `undefined`, it will be normalized to `process.cwd()` if the global `process` object is defined (for example, in the Node.js runtime) , or `undefined` otherwise. +* `cwd` - Path to a directory that should be considered as the current working directory. It is accessible to rules by calling `context.getCwd()` (see [The Context Object](./working-with-rules#the-context-object)). If `cwd` is `undefined`, it will be normalized to `process.cwd()` if the global `process` object is defined (for example, in the Node.js runtime) , or `undefined` otherwise. For example: @@ -484,8 +490,8 @@ The most important method on `Linter` is `verify()`, which initiates linting of * **Note**: If you want to lint text and have your configuration be read and processed, use [`ESLint#lintFiles()`][eslint-lintfiles] or [`ESLint#lintText()`][eslint-linttext] instead. * `options` - (optional) Additional options for this run. * `filename` - (optional) the filename to associate with the source code. - * `preprocess` - (optional) A function that [Processors in Plugins](/docs/developer-guide/working-with-plugins.md#processors-in-plugins) documentation describes as the `preprocess` method. - * `postprocess` - (optional) A function that [Processors in Plugins](/docs/developer-guide/working-with-plugins.md#processors-in-plugins) documentation describes as the `postprocess` method. + * `preprocess` - (optional) A function that [Processors in Plugins](/docs/developer-guide/working-with-plugins#processors-in-plugins) documentation describes as the `preprocess` method. + * `postprocess` - (optional) A function that [Processors in Plugins](/docs/developer-guide/working-with-plugins#processors-in-plugins) documentation describes as the `postprocess` method. * `filterCodeBlock` - (optional) A function that decides which code blocks the linter should adopt. The function receives two arguments. The first argument is the virtual filename of a code block. The second argument is the text of the code block. If the function returned `true` then the linter adopts the code block. If the function was omitted, the linter adopts only `*.js` code blocks. If you provided a `filterCodeBlock` function, it overrides this default behavior, so the linter doesn't adopt `*.js` code blocks automatically. * `disableFixes` - (optional) when set to `true`, the linter doesn't make either the `fix` or `suggestions` property of the lint result. * `allowInlineConfig` - (optional) set to `false` to disable inline comments from changing ESLint rules. @@ -549,7 +555,23 @@ The information available for each linting message is: * `endColumn` - the end column of the range on which the error occurred (this property is omitted if it's not range). * `endLine` - the end line of the range on which the error occurred (this property is omitted if it's not range). * `fix` - an object describing the fix for the problem (this property is omitted if no fix is available). -* `suggestions` - an array of objects describing possible lint fixes for editors to programmatically enable (see details in the [Working with Rules docs](./working-with-rules.md#providing-suggestions)). +* `suggestions` - an array of objects describing possible lint fixes for editors to programmatically enable (see details in the [Working with Rules docs](./working-with-rules#providing-suggestions)). + +You can get the suppressed messages from the previous run by `getSuppressedMessages()` method. If there is not a previous run, `getSuppressedMessage()` will return an empty list. + +```js +const Linter = require("eslint").Linter; +const linter = new Linter(); + +const messages = linter.verify("var foo = bar; // eslint-disable-line -- Need to suppress", { + rules: { + semi: ["error", "never"] + } +}, { filename: "foo.js" }); +const suppressedMessages = linter.getSuppressedMessages(); + +console.log(suppressedMessages[0].suppressions); // [{ "kind": "directive", "justification": "Need to suppress" }] +``` Linting message objects have a deprecated `source` property. This property **will be removed** from linting messages in an upcoming breaking release. If you depend on this property, you should now use the `SourceCode` instance provided by the linter. @@ -665,7 +687,7 @@ Map { ### Linter#defineParser Each instance of `Linter` holds a map of custom parsers. If you want to define a parser programmatically, you can add this function -with the name of the parser as first argument and the [parser object](/docs/developer-guide/working-with-custom-parsers.md) as second argument. The default `"espree"` parser will already be loaded for every `Linter` instance. +with the name of the parser as first argument and the [parser object](/docs/developer-guide/working-with-custom-parsers) as second argument. The default `"espree"` parser will already be loaded for every `Linter` instance. ```js const Linter = require("eslint").Linter; @@ -896,9 +918,9 @@ ruleTester.run("my-rule", myRule, { --- -[configuration object]: ../user-guide/configuring +[configuration object]: ../user-guide/configuring/ [builtin-formatters]: https://eslint.org/docs/user-guide/formatters/ -[thirdparty-formatters]: https://www.npmjs.com/search?q=eslintformatter +[third-party-formatters]: https://www.npmjs.com/search?q=eslintformatter [eslint]: #eslint-class [eslint-constructor]: #-new-eslintoptions [eslint-lintfiles]: #-eslintlintfilespatterns @@ -912,6 +934,7 @@ ruleTester.run("my-rule", myRule, { [eslint-geterrorresults]: #-eslintgeterrorresultsresults [lintresult]: #-lintresult-type [lintmessage]: #-lintmessage-type +[suppressedlintmessage]: #-suppressedlintmessage-type [editinfo]: #-editinfo-type -[formatter]: #-formatter-type +[loadedformatter]: #-loadedformatter-type [linter]: #linter diff --git a/eslint/docs/src/developer-guide/package-json-conventions.md b/eslint/docs/src/developer-guide/package-json-conventions.md new file mode 100644 index 0000000..4733b42 --- /dev/null +++ b/eslint/docs/src/developer-guide/package-json-conventions.md @@ -0,0 +1,89 @@ +--- +title: Package.json Conventions +layout: doc +edit_link: https://github.com/eslint/eslint/edit/main/docs/src/developer-guide/package-json-conventions.md +--- + +The following applies to the "scripts" section of `package.json` files. + +## Names + +npm script names MUST contain only lower case letters, `:` to separate parts, `-` to separate words, and `+` to separate file extensions. Each part name SHOULD be either a full English word (e.g. `coverage` not `cov`) or a well-known initialism in all lowercase (e.g. `wasm`). + +Here is a summary of the proposal in EBNF. + +```ebnf +name = life-cycle | main ":fix"? target? option* ":watch"? + +life-cycle = prepare | preinstall | install | postinstall | prepublish | preprepare | prepare | postprepare | prepack | postpack | prepublishOnly; + +main = "build" | "lint" | "start" | "test"; + +target = ":" word ("-" word)* | extension ("+" extension)*; + +option = ":" word ("-" word)*; + +word = [a-z]+; + +extension = [a-z0-9]+; +``` + +## Order + +The script names MUST appear in the package.json file in alphabetical order. The other conventions outlined in this document ensure that alphabetical order will coincide with logical groupings. + +## Main Script Names + +With the exception of [npm life cycle scripts](https://docs.npmjs.com/cli/v8/using-npm/scripts#life-cycle-scripts) all script names MUST begin with one of the following names. + +### Build + +Scripts that generate a set of files from source code and / or data MUST have names that begin with `build`. + +If a package contains any `build:*` scripts, there MAY be a script named `build`. If so, SHOULD produce the same output as running each of the `build` scripts individually. It MUST produce a subset of the output from running those scripts. + +### Lint + +Scripts that statically analyze files (mostly, but not limited to running `eslint` itself) MUST have names that begin with `lint`. + +If a package contains any `lint:*` scripts, there SHOULD be a script named `lint` and it MUST run all of the checks that would have been run if each `lint:*` script was called individually. + +If fixing is available, a linter MUST NOT apply fixes UNLESS the script contains the `:fix` modifier (see below). + +### Start + +A `start` script is used to start a server. As of this writing, no ESLint package has more than one `start` script, so there's no need `start` to have any modifiers. + +### Test + +Scripts that execute code in order to ensure the actual behavior matches expected behavior MUST have names that begin with `test`. + +If a package contains any `test:*` scripts, there SHOULD be a script named `test` and it MUST run of all of the tests that would have been run if each `test:*` script was called individually. + +A test script SHOULD NOT include linting. + +A test script SHOULD report test coverage when possible. + +## Modifiers + +One or more of the following modifiers MAY be appended to the standard script names above. If a target has modifiers, they MUST be in the order in which they appear below (e.g. `lint:fix:js:watch` not `lint:watch:js:fix`) + +### Fix + +If it's possible for a linter to fix problems that it finds, add a copy of the script with `:fix` appended to the end that also fixes. + +### Target + +The name of the target of the action being run. In the case of a `build` script, it SHOULD identify the build artifact(s), e.g. "javascript" or "css" or "website". In the case of a `lint` or `test` script, it SHOULD identify the item(s) being linted or tested. In the case of a `start` script, it SHOULD identify which server is starting. + +A target MAY refer to a list of affected file extensions (such as `cjs` or `less`) delimited by a `+`. If there is more than one extension, the list SHOULD be alphabetized. When a file extension has variants (such as `cjs` for CommonJS and `mjs` for ESM), the common part of the extension MAY be used instead of explicitly listing out all of the variants (e.g. `js` instead of `cjs+jsx+mjs`). + +The target SHOULD NOT refer to name of the name of the tool that's performing the action (`eleventy`, `webpack`, etc.) + +### Options + +Additional options that don't fit under the other modifiers. + +### Watch + +If a script watches the filesystem and responds to changes, add `:watch` to the script name. diff --git a/eslint/docs/developer-guide/scope-manager-interface.md b/eslint/docs/src/developer-guide/scope-manager-interface.md similarity index 98% rename from eslint/docs/developer-guide/scope-manager-interface.md rename to eslint/docs/src/developer-guide/scope-manager-interface.md index 2762f74..c864aba 100644 --- a/eslint/docs/developer-guide/scope-manager-interface.md +++ b/eslint/docs/src/developer-guide/scope-manager-interface.md @@ -1,4 +1,8 @@ -# ScopeManager +--- +title: ScopeManager +layout: doc + +--- This document was written based on the implementation of [eslint-scope](https://github.com/eslint/eslint-scope), a fork of [escope](https://github.com/estools/escope), and deprecates some members ESLint is not using. @@ -204,6 +208,11 @@ Those members are defined but not used in ESLint. * **Type:** `string` * **Description:** The name of this variable. +#### scope + +* **Type:** `Scope` +* **Description:** The scope in which this variable is defined. + #### identifiers * **Type:** `ASTNode[]` diff --git a/eslint/docs/developer-guide/selectors.md b/eslint/docs/src/developer-guide/selectors.md similarity index 94% rename from eslint/docs/developer-guide/selectors.md rename to eslint/docs/src/developer-guide/selectors.md index 78bb260..4f286c4 100644 --- a/eslint/docs/developer-guide/selectors.md +++ b/eslint/docs/src/developer-guide/selectors.md @@ -1,10 +1,14 @@ -# Selectors +--- +title: Selectors +layout: doc + +--- Some rules and APIs allow the use of selectors to query an AST. This page is intended to: 1. Explain what selectors are -1. Describe the syntax for creating selectors -1. Describe what selectors can be used for +2. Describe the syntax for creating selectors +3. Describe what selectors can be used for ## What is a selector? @@ -90,7 +94,7 @@ If multiple selectors have equal specificity, their listeners will be called in ### Restricting syntax with selectors -With the [no-restricted-syntax](/docs/rules/no-restricted-syntax.md) rule, you can restrict the usage of particular syntax in your code. For example, you can use the following configuration to disallow using `if` statements that do not have block statements as their body: +With the [no-restricted-syntax](/docs/rules/no-restricted-syntax) rule, you can restrict the usage of particular syntax in your code. For example, you can use the following configuration to disallow using `if` statements that do not have block statements as their body: ```json { diff --git a/eslint/docs/developer-guide/shareable-configs.md b/eslint/docs/src/developer-guide/shareable-configs.md similarity index 97% rename from eslint/docs/developer-guide/shareable-configs.md rename to eslint/docs/src/developer-guide/shareable-configs.md index 15032d9..a6ef597 100644 --- a/eslint/docs/developer-guide/shareable-configs.md +++ b/eslint/docs/src/developer-guide/shareable-configs.md @@ -1,4 +1,13 @@ -# Shareable Configs +--- +title: Shareable Configs +layout: doc +eleventyNavigation: + key: shareable configs + parent: developer guide + title: Shareable Configs + order: 8 + +--- The configuration that you have in your `.eslintrc` file is an important part of your project, and as such, you may want to share it with other projects or people. Shareable configs allow you to publish your configuration settings on [npm](https://www.npmjs.com/) and have others download and use it in their ESLint projects. diff --git a/eslint/docs/developer-guide/source-code.md b/eslint/docs/src/developer-guide/source-code.md similarity index 87% rename from eslint/docs/developer-guide/source-code.md rename to eslint/docs/src/developer-guide/source-code.md index a6b7fa5..ec3d3ce 100644 --- a/eslint/docs/developer-guide/source-code.md +++ b/eslint/docs/src/developer-guide/source-code.md @@ -1,10 +1,21 @@ -# Source Code +--- +title: Source Code +layout: doc +eleventyNavigation: + key: getting the source code + parent: developer guide + title: Getting the Source Code + order: 1 + +--- ESLint is hosted at [GitHub](https://github.com/eslint/eslint) and uses [Git](https://git-scm.com/) for source control. In order to obtain the source code, you must first install Git on your system. Instructions for installing and setting up Git can be found at [https://help.github.com/articles/set-up-git/](https://help.github.com/articles/set-up-git/). If you simply want to create a local copy of the source to play with, you can clone the main repository using this command: - git clone git://github.com/eslint/eslint.git +```shell +git clone git://github.com/eslint/eslint.git +``` If you're planning on contributing to ESLint, then it's a good idea to fork the repository. You can find instructions for forking a repository at [https://help.github.com/articles/fork-a-repo/](https://help.github.com/articles/fork-a-repo/). After forking the ESLint repository, you'll want to create a local copy of your fork. @@ -17,8 +28,10 @@ Before you can get started developing, you'll need to have a couple of things in Once you have a local copy and have Node.JS and npm installed, you'll need to install the ESLint dependencies: - cd eslint - npm install +```shell +cd eslint +npm install +``` Now when you run `eslint`, it will be running your local copy and showing your changes. diff --git a/eslint/docs/developer-guide/unit-tests.md b/eslint/docs/src/developer-guide/unit-tests.md similarity index 79% rename from eslint/docs/developer-guide/unit-tests.md rename to eslint/docs/src/developer-guide/unit-tests.md index 46d77b5..0c8426f 100644 --- a/eslint/docs/developer-guide/unit-tests.md +++ b/eslint/docs/src/developer-guide/unit-tests.md @@ -1,10 +1,21 @@ -# Unit Tests +--- +title: Unit Tests +layout: doc +eleventyNavigation: + key: run the tests + parent: developer guide + title: Run the Tests + order: 3 + +--- Most parts of ESLint have unit tests associated with them. Unit tests are written using [Mocha](https://mochajs.org/) and are required when making contributions to ESLint. You'll find all of the unit tests in the `tests` directory. When you first get the source code, you need to run `npm install` once initially to set ESLint for development. Once you've done that, you can run the tests via: - npm test +```shell +npm test +``` This automatically starts Mocha and runs all tests in the `tests` directory. You need only add yours and it will automatically be picked up when running tests. @@ -12,7 +23,9 @@ This automatically starts Mocha and runs all tests in the `tests` directory. You If you want to quickly run just one test file, you can do so by running Mocha directly and passing in the filename. For example: - npm run test:cli tests/lib/rules/no-wrap-func.js +```shell +npm run test:cli tests/lib/rules/no-undef.js +``` If you want to run just one or a subset of `RuleTester` test cases, add `only: true` to each test case or wrap the test case in `RuleTester.only(...)` to add it automatically: @@ -37,3 +50,9 @@ Running individual tests is useful when you're working on a specific bug and ite ## More Control on Unit Testing `npm run test:cli` is an alias of the Mocha cli in `./node_modules/.bin/mocha`. [Options](https://mochajs.org/#command-line-usage) are available to be provided to help to better control the test to run. + +The default timeout for tests in `npm test` is 10000ms. You may change the timeout by providing `ESLINT_MOCHA_TIMEOUT` environment variable, for example: + +```shell +ESLINT_MOCHA_TIMEOUT=20000 npm test +``` diff --git a/eslint/docs/developer-guide/working-with-custom-formatters.md b/eslint/docs/src/developer-guide/working-with-custom-formatters.md similarity index 86% rename from eslint/docs/developer-guide/working-with-custom-formatters.md rename to eslint/docs/src/developer-guide/working-with-custom-formatters.md index 54db663..1d970ea 100644 --- a/eslint/docs/developer-guide/working-with-custom-formatters.md +++ b/eslint/docs/src/developer-guide/working-with-custom-formatters.md @@ -1,8 +1,17 @@ -# Working with Custom Formatters +--- +title: Working with Custom Formatters +layout: doc +eleventyNavigation: + key: working with custom formatters + parent: developer guide + title: Working with Custom Formatters + order: 6 + +--- While ESLint has some built-in formatters available to format the linting results, it's also possible to create and distribute your own custom formatters. You can include custom formatters in your project directly or create an npm package to distribute them separately. -Each formatter is just a function that receives a `results` object and returns a string. For example, the following is how the `json` built-in formatter is implemented: +Each formatter is just a function that receives a `results` object and a `context` and returns a string. For example, the following is how the `json` built-in formatter is implemented: ```js //my-awesome-formatter.js @@ -11,7 +20,7 @@ module.exports = function(results, context) { }; ``` -Formatter can also be an async function (from ESLint v8.4.0), the following shows a simple example: +A formatter can also be an async function (from ESLint v8.4.0), the following shows a simple example: ```js //my-awesome-formatter.js @@ -100,30 +109,30 @@ also be manually applied to that page. --> Each object in the `results` array is a `result` object. Each `result` object contains the path of the file that was linted and information about linting issues that were encountered. Here are the properties available on each `result` object: -* **filePath**: The absolute path to the file that was linted. -* **messages**: An array of `message` objects. See below for more info about messages. -* **errorCount**: The number of errors for the given file. -* **warningCount**: The number of warnings for the given file. -* **source**: The source code for the given file. This property is omitted if this file has no errors/warnings or if the `output` property is present. -* **output**: The source code for the given file with as many fixes applied as possible. This property is omitted if no fix is available. +* **filePath**: The absolute path to the file that was linted. +* **messages**: An array of `message` objects. See below for more info about messages. +* **errorCount**: The number of errors for the given file. +* **warningCount**: The number of warnings for the given file. +* **source**: The source code for the given file. This property is omitted if this file has no errors/warnings or if the `output` property is present. +* **output**: The source code for the given file with as many fixes applied as possible. This property is omitted if no fix is available. ### The `message` Object Each `message` object contains information about the ESLint rule that was triggered by some source code. The properties available on each `message` object are: -* **ruleId**: the ID of the rule that produced the error or warning. -* **severity**: the severity of the failure, `1` for warnings and `2` for errors. -* **message**: the human readable description of the error. -* **line**: the line where the issue is located. -* **column**: the column where the issue is located. -* **nodeType**: the type of the node in the [AST](https://github.com/estree/estree/blob/master/spec.md#node-objects) +* **ruleId**: the ID of the rule that produced the error or warning. +* **severity**: the severity of the failure, `1` for warnings and `2` for errors. +* **message**: the human readable description of the error. +* **line**: the line where the issue is located. +* **column**: the column where the issue is located. +* **nodeType**: the type of the node in the [AST](https://github.com/estree/estree/blob/master/spec.md#node-objects) ## The `context` Argument The formatter function receives an object as the second argument. The object has two properties: -* `cwd` ... The current working directory. This value comes from the `cwd` constructor option of the [ESLint](nodejs-api.md#-new-eslintoptions) class. -* `rulesMeta` ... The `meta` property values of rules. See the [Working with Rules](working-with-rules.md) page for more information about rules. +* `cwd` ... The current working directory. This value comes from the `cwd` constructor option of the [ESLint](nodejs-api#-new-eslintoptions) class. +* `rulesMeta` ... The `meta` property values of rules. See the [Working with Rules](working-with-rules) page for more information about rules. For example, here's what the object would look like if one rule, `no-extra-semi`, had been run: @@ -280,7 +289,7 @@ warning no-unused-vars (https://eslint.org/docs/rules/no-unused-vars) ## Passing Arguments to Formatters -While custom formatter do not receive arguments in addition to the results object, it is possible to pass additional data into formatters. +While formatter functions do not receive arguments in addition to the results object and the context, it is possible to pass additional data into custom formatters using the methods described below. ## Using Environment Variables diff --git a/eslint/docs/developer-guide/working-with-custom-parsers.md b/eslint/docs/src/developer-guide/working-with-custom-parsers.md similarity index 91% rename from eslint/docs/developer-guide/working-with-custom-parsers.md rename to eslint/docs/src/developer-guide/working-with-custom-parsers.md index 6387b84..62707b3 100644 --- a/eslint/docs/developer-guide/working-with-custom-parsers.md +++ b/eslint/docs/src/developer-guide/working-with-custom-parsers.md @@ -1,10 +1,19 @@ -# Working with Custom Parsers +--- +title: Working with Custom Parsers +layout: doc +eleventyNavigation: + key: working with custom parsers + parent: developer guide + title: Working with Custom Parsers + order: 7 + +--- If you want to use your own parser and provide additional capabilities for your rules, you can specify your own custom parser. If a `parseForESLint` method is exposed on the parser, this method will be used to parse the code. Otherwise, the `parse` method will be used. Both methods should take in the source code as the first argument, and an optional configuration object as the second argument (provided as `parserOptions` in a config file). The `parse` method should simply return the AST. The `parseForESLint` method should return an object that contains the required property `ast` and optional properties `services`, `scopeManager`, and `visitorKeys`. * `ast` should contain the AST. * `services` can contain any parser-dependent services (such as type checkers for nodes). The value of the `services` property is available to rules as `context.parserServices`. Default is an empty object. -* `scopeManager` can be a [ScopeManager](./scope-manager-interface.md) object. Custom parsers can use customized scope analysis for experimental/enhancement syntaxes. Default is the `ScopeManager` object which is created by [eslint-scope](https://github.com/eslint/eslint-scope). +* `scopeManager` can be a [ScopeManager](./scope-manager-interface) object. Custom parsers can use customized scope analysis for experimental/enhancement syntaxes. Default is the `ScopeManager` object which is created by [eslint-scope](https://github.com/eslint/eslint-scope). * Support for `scopeManager` was added in ESLint v4.14.0. ESLint versions which support `scopeManager` will provide an `eslintScopeManager: true` property in `parserOptions`, which can be used for feature detection. * `visitorKeys` can be an object to customize AST traversal. The keys of the object are the type of AST nodes. Each value is an array of the property names which should be traversed. Default is [KEYS of `eslint-visitor-keys`](https://github.com/eslint/eslint-visitor-keys#evkkeys). * Support for `visitorKeys` was added in ESLint v4.14.0. ESLint versions which support `visitorKeys` will provide an `eslintVisitorKeys: true` property in `parserOptions`, which can be used for feature detection. diff --git a/eslint/docs/developer-guide/working-with-plugins.md b/eslint/docs/src/developer-guide/working-with-plugins.md similarity index 94% rename from eslint/docs/developer-guide/working-with-plugins.md rename to eslint/docs/src/developer-guide/working-with-plugins.md index bea4702..cec3f88 100644 --- a/eslint/docs/developer-guide/working-with-plugins.md +++ b/eslint/docs/src/developer-guide/working-with-plugins.md @@ -1,4 +1,13 @@ -# Working with Plugins +--- +title: Working with Plugins +layout: doc +eleventyNavigation: + key: working with plugings + parent: developer guide + title: Working with Plugins + order: 5 + +--- Each plugin is an npm module with a name in the format of `eslint-plugin-<plugin-name>`, such as `eslint-plugin-jquery`. You can also use scoped packages in the format of `@<scope>/eslint-plugin-<plugin-name>` such as `@jquery/eslint-plugin-jquery` or even `@<scope>/eslint-plugin` such as `@jquery/eslint-plugin`. @@ -84,7 +93,7 @@ module.exports = { **The `preprocess` method** takes the file contents and filename as arguments, and returns an array of code blocks to lint. The code blocks will be linted separately but still be registered to the filename. -A code block has two properties `text` and `filename`; the `text` property is the content of the block and the `filename` property is the name of the block. Name of the block can be anything, but should include the file extension, that would tell the linter how to process the current block. The linter will check [`--ext` CLI option](../user-guide/command-line-interface.md#--ext) to see if the current block should be linted, and resolve `overrides` configs to check how to process the current block. +A code block has two properties `text` and `filename`; the `text` property is the content of the block and the `filename` property is the name of the block. Name of the block can be anything, but should include the file extension, that would tell the linter how to process the current block. The linter will check [`--ext` CLI option](../user-guide/command-line-interface#--ext) to see if the current block should be linted, and resolve `overrides` configs to check how to process the current block. It's up to the plugin to decide if it needs to return just one part, or multiple pieces. For example in the case of processing `.html` files, you might want to return just one item in the array by combining all scripts, but for `.md` file where each JavaScript block might be independent, you can return multiple items. @@ -136,7 +145,7 @@ overrides: processor: a-plugin/markdown ``` -See [Specifying Processor](../user-guide/configuring/plugins.md#specifying-processor) for details. +See [Specifying Processor](../user-guide/configuring/plugins#specifying-processor) for details. #### File Extension-named Processor @@ -197,7 +206,7 @@ If the example plugin above were called `eslint-plugin-myPlugin`, the `myConfig` ``` -**Note:** Please note that configuration will not enable any of the plugin's rules by default, and instead should be treated as a standalone config. This means that you must specify your plugin name in the `plugins` array as well as any rules you want to enable that are part of the plugin. Any plugin rules must be prefixed with the short or long plugin name. See [Configuring Plugins](../user-guide/configuring/plugins.md#configuring-plugins) for more information. +**Note:** Please note that configuration will not enable any of the plugin's rules by default, and instead should be treated as a standalone config. This means that you must specify your plugin name in the `plugins` array as well as any rules you want to enable that are part of the plugin. Any plugin rules must be prefixed with the short or long plugin name. See [Configuring Plugins](../user-guide/configuring/plugins#configuring-plugins) for more information. ### Peer Dependency @@ -214,7 +223,7 @@ The plugin support was introduced in ESLint version `0.8.0`. Ensure the `peerDep ### Testing -ESLint provides the [`RuleTester`](/docs/developer-guide/nodejs-api.md#ruletester) utility to make it easy to test the rules of your plugin. +ESLint provides the [`RuleTester`](/docs/developer-guide/nodejs-api#ruletester) utility to make it easy to test the rules of your plugin. ### Linting diff --git a/eslint/docs/developer-guide/working-with-rules-deprecated.md b/eslint/docs/src/developer-guide/working-with-rules-deprecated.md similarity index 98% rename from eslint/docs/developer-guide/working-with-rules-deprecated.md rename to eslint/docs/src/developer-guide/working-with-rules-deprecated.md index 63d7bb2..bd3fd77 100644 --- a/eslint/docs/developer-guide/working-with-rules-deprecated.md +++ b/eslint/docs/src/developer-guide/working-with-rules-deprecated.md @@ -1,6 +1,10 @@ -# Working with Rules (Deprecated) +--- +title: Working with Rules (Deprecated) +layout: doc -**Note:** This page covers the deprecated rule format for ESLint <= 2.13.1. [This is the most recent rule format](./working-with-rules.md). +--- + +**Note:** This page covers the deprecated rule format for ESLint <= 2.13.1. [This is the most recent rule format](./working-with-rules). Each rule in ESLint has two files named with its identifier (for example, `no-extra-semi`). @@ -34,17 +38,17 @@ module.exports.schema = []; // no options ## Rule Basics -`schema` (array) specifies the [options](#options-schemas) so ESLint can prevent invalid [rule configurations](../user-guide/configuring/rules.md#configuring-rules) +`schema` (array) specifies the [options](#options-schemas) so ESLint can prevent invalid [rule configurations](../user-guide/configuring/rules#configuring-rules) `create` (function) returns an object with methods that ESLint calls to "visit" nodes while traversing the abstract syntax tree (AST as defined by [ESTree](https://github.com/estree/estree)) of JavaScript code: * if a key is a node type, ESLint calls that **visitor** function while going **down** the tree * if a key is a node type plus `:exit`, ESLint calls that **visitor** function while going **up** the tree -* if a key is an event name, ESLint calls that **handler** function for [code path analysis](./code-path-analysis.md) +* if a key is an event name, ESLint calls that **handler** function for [code path analysis](./code-path-analysis) A rule can use the current node and its surrounding tree to report or fix problems. -Here are methods for the [array-callback-return](../rules/array-callback-return.md) rule: +Here are methods for the [array-callback-return](../rules/array-callback-return) rule: ```js function checkLastSegment (node) { @@ -74,7 +78,7 @@ module.exports = function(context) { The `context` object contains additional functionality that is helpful for rules to do their jobs. As the name implies, the `context` object contains information that is relevant to the context of the rule. The `context` object has the following properties: -* `parserOptions` - the parser options configured for this run (more details [here](../user-guide/configuring/language-options.md#specifying-parser-options)). +* `parserOptions` - the parser options configured for this run (more details [here](../user-guide/configuring/language-options#specifying-parser-options)). * `id` - the rule ID. * `options` - an array of rule options. * `settings` - the `settings` from configuration. @@ -87,7 +91,7 @@ Additionally, the `context` object has the following methods: * `getFilename()` - returns the filename associated with the source. * `getScope()` - returns the current scope. * `getSourceCode()` - returns a `SourceCode` object that you can use to work with the source that was passed to ESLint -* `markVariableAsUsed(name)` - marks the named variable in scope as used. This affects the [no-unused-vars](../rules/no-unused-vars.md) rule. +* `markVariableAsUsed(name)` - marks the named variable in scope as used. This affects the [no-unused-vars](../rules/no-unused-vars) rule. * `report(descriptor)` - reports a problem in the code. **Deprecated:** The following methods on the `context` object are deprecated. Please use the corresponding methods on `SourceCode` instead: @@ -324,7 +328,7 @@ Keep in mind that comments are technically not a part of the AST and are only at ESLint analyzes code paths while traversing AST. You can access that code path objects with five events related to code paths. -[details here](./code-path-analysis.md) +[details here](./code-path-analysis) ## Rule Unit Tests @@ -478,7 +482,7 @@ valid: [ ] ``` -The options available and the expected syntax for `parserOptions` is the same as those used in [configuration](../user-guide/configuring/language-options.md#specifying-parser-options). +The options available and the expected syntax for `parserOptions` is the same as those used in [configuration](../user-guide/configuring/language-options#specifying-parser-options). ### Write Several Tests @@ -574,4 +578,4 @@ Runtime rules are written in the same format as all other rules. Create your rul 1. Place all of your runtime rules in the same directory (i.e., `eslint_rules`). 2. Create a [configuration file](../user-guide/configuring/) and specify your rule ID error level under the `rules` key. Your rule will not run unless it has a value of `1` or `2` in the configuration file. -3. Run the [command line interface](../user-guide/command-line-interface.md) using the `--rulesdir` option to specify the location of your runtime rules. +3. Run the [command line interface](../user-guide/command-line-interface) using the `--rulesdir` option to specify the location of your runtime rules. diff --git a/eslint/docs/developer-guide/working-with-rules.md b/eslint/docs/src/developer-guide/working-with-rules.md similarity index 94% rename from eslint/docs/developer-guide/working-with-rules.md rename to eslint/docs/src/developer-guide/working-with-rules.md index 697b7ed..16412b5 100644 --- a/eslint/docs/developer-guide/working-with-rules.md +++ b/eslint/docs/src/developer-guide/working-with-rules.md @@ -1,12 +1,21 @@ -# Working with Rules +--- +title: Working with Rules +layout: doc +eleventyNavigation: + key: working with rules + parent: developer guide + title: Working with Rules + order: 4 -**Note:** This page covers the most recent rule format for ESLint >= 3.0.0. There is also a [deprecated rule format](./working-with-rules-deprecated.md). +--- + +**Note:** This page covers the most recent rule format for ESLint >= 3.0.0. There is also a [deprecated rule format](./working-with-rules-deprecated). Each rule in ESLint has three files named with its identifier (for example, `no-extra-semi`). * in the `lib/rules` directory: a source file (for example, `no-extra-semi.js`) * in the `tests/lib/rules` directory: a test file (for example, `no-extra-semi.js`) -* in the `docs/rules` directory: a Markdown documentation file (for example, `no-extra-semi.md`) +* in the `docs/src/rules` directory: a Markdown documentation file (for example, `no-extra-semi.md`) **Important:** If you submit a **core** rule to the ESLint repository, you **must** follow some conventions explained below. @@ -31,7 +40,6 @@ module.exports = { docs: { description: "disallow unnecessary semicolons", - category: "Possible Errors", recommended: true, url: "https://eslint.org/docs/rules/no-extra-semi" }, @@ -60,13 +68,12 @@ The source file for a rule exports an object with the following properties. * `docs` (object) is required for core rules of ESLint: * `description` (string) provides the short description of the rule in the [rules index](../rules/) - * `category` (string) specifies the heading under which the rule is listed in the [rules index](../rules/) - * `recommended` (boolean) is whether the `"extends": "eslint:recommended"` property in a [configuration file](../user-guide/configuring/configuration-files.md#extending-configuration-files) enables the rule + * `recommended` (boolean) is whether the `"extends": "eslint:recommended"` property in a [configuration file](../user-guide/configuring/configuration-files#extending-configuration-files) enables the rule * `url` (string) specifies the URL at which the full documentation can be accessed (enabling code editors to provide a helpful link on highlighted rule violations) In a custom rule or plugin, you can omit `docs` or include any properties that you need in it. -* `fixable` (string) is either `"code"` or `"whitespace"` if the `--fix` option on the [command line](../user-guide/command-line-interface.md#--fix) automatically fixes problems reported by the rule +* `fixable` (string) is either `"code"` or `"whitespace"` if the `--fix` option on the [command line](../user-guide/command-line-interface#--fix) automatically fixes problems reported by the rule **Important:** the `fixable` property is mandatory for fixable rules. If this property isn't specified, ESLint will throw an error whenever the rule attempts to produce a fix. Omit the `fixable` property if the rule is not fixable. @@ -74,7 +81,7 @@ The source file for a rule exports an object with the following properties. **Important:** the `hasSuggestions` property is mandatory for rules that provide suggestions. If this property isn't set to `true`, ESLint will throw an error whenever the rule attempts to produce a suggestion. Omit the `hasSuggestions` property if the rule does not provide suggestions. -* `schema` (array) specifies the [options](#options-schemas) so ESLint can prevent invalid [rule configurations](../user-guide/configuring/rules.md#configuring-rules) +* `schema` (array) specifies the [options](#options-schemas) so ESLint can prevent invalid [rule configurations](../user-guide/configuring/rules#configuring-rules) * `deprecated` (boolean) indicates whether the rule has been deprecated. You may omit the `deprecated` property if the rule has not been deprecated. @@ -82,13 +89,13 @@ The source file for a rule exports an object with the following properties. `create` (function) returns an object with methods that ESLint calls to "visit" nodes while traversing the abstract syntax tree (AST as defined by [ESTree](https://github.com/estree/estree)) of JavaScript code: -* if a key is a node type or a [selector](./selectors.md), ESLint calls that **visitor** function while going **down** the tree -* if a key is a node type or a [selector](./selectors.md) plus `:exit`, ESLint calls that **visitor** function while going **up** the tree -* if a key is an event name, ESLint calls that **handler** function for [code path analysis](./code-path-analysis.md) +* if a key is a node type or a [selector](./selectors), ESLint calls that **visitor** function while going **down** the tree +* if a key is a node type or a [selector](./selectors) plus `:exit`, ESLint calls that **visitor** function while going **up** the tree +* if a key is an event name, ESLint calls that **handler** function for [code path analysis](./code-path-analysis) A rule can use the current node and its surrounding tree to report or fix problems. -Here are methods for the [array-callback-return](../rules/array-callback-return.md) rule: +Here are methods for the [array-callback-return](../rules/array-callback-return) rule: ```js function checkLastSegment (node) { @@ -121,18 +128,18 @@ module.exports = { The `context` object contains additional functionality that is helpful for rules to do their jobs. As the name implies, the `context` object contains information that is relevant to the context of the rule. The `context` object has the following properties: -* `parserOptions` - the parser options configured for this run (more details [here](../user-guide/configuring/language-options.md#specifying-parser-options)). +* `parserOptions` - the parser options configured for this run (more details [here](../user-guide/configuring/language-options#specifying-parser-options)). * `id` - the rule ID. -* `options` - an array of the [configured options](/docs/user-guide/configuring/rules.md#configuring-rules) for this rule. This array does not include the rule severity. For more information, see [here](#contextoptions). -* `settings` - the [shared settings](/docs/user-guide/configuring/configuration-files.md#adding-shared-settings) from configuration. +* `options` - an array of the [configured options](/docs/user-guide/configuring/rules#configuring-rules) for this rule. This array does not include the rule severity. For more information, see [here](#contextoptions). +* `settings` - the [shared settings](/docs/user-guide/configuring/configuration-files#adding-shared-settings) from configuration. * `parserPath` - the name of the `parser` from configuration. * `parserServices` - an object containing parser-provided services for rules. The default parser does not provide any services. However, if a rule is intended to be used with a custom parser, it could use `parserServices` to access anything provided by that parser. (For example, a TypeScript parser could provide the ability to get the computed type of a given node.) Additionally, the `context` object has the following methods: * `getAncestors()` - returns an array of the ancestors of the currently-traversed node, starting at the root of the AST and continuing through the direct parent of the current node. This array does not include the currently-traversed node itself. -* `getCwd()` - returns the `cwd` passed to [Linter](./nodejs-api.md#linter). It is a path to a directory that should be considered as the current working directory. -* `getDeclaredVariables(node)` - returns a list of [variables](./scope-manager-interface.md#variable-interface) declared by the given node. This information can be used to track references to variables. +* `getCwd()` - returns the `cwd` passed to [Linter](./nodejs-api#linter). It is a path to a directory that should be considered as the current working directory. +* `getDeclaredVariables(node)` - returns a list of [variables](./scope-manager-interface#variable-interface) declared by the given node. This information can be used to track references to variables. * If the node is a `VariableDeclaration`, all variables declared in the declaration are returned. * If the node is a `VariableDeclarator`, all variables declared in the declarator are returned. * If the node is a `FunctionDeclaration` or `FunctionExpression`, the variable for the function name is returned, in addition to variables for the function parameters. @@ -144,9 +151,9 @@ Additionally, the `context` object has the following methods: * Otherwise, if the node does not declare any variables, an empty array is returned. * `getFilename()` - returns the filename associated with the source. * `getPhysicalFilename()` - when linting a file, it returns the full path of the file on disk without any code block information. When linting text, it returns the value passed to `—stdin-filename` or `<text>` if not specified. -* `getScope()` - returns the [scope](./scope-manager-interface.md#scope-interface) of the currently-traversed node. This information can be used to track references to variables. +* `getScope()` - returns the [scope](./scope-manager-interface#scope-interface) of the currently-traversed node. This information can be used to track references to variables. * `getSourceCode()` - returns a [`SourceCode`](#contextgetsourcecode) object that you can use to work with the source that was passed to ESLint. -* `markVariableAsUsed(name)` - marks a variable with the given name in the current scope as used. This affects the [no-unused-vars](../rules/no-unused-vars.md) rule. Returns `true` if a variable with the given name was found and marked as used, otherwise `false`. +* `markVariableAsUsed(name)` - marks a variable with the given name in the current scope as used. This affects the [no-unused-vars](../rules/no-unused-vars) rule. Returns `true` if a variable with the given name was found and marked as used, otherwise `false`. * `report(descriptor)` - reports a problem in the code (see the [dedicated section](#contextreport)). **Note:** Earlier versions of ESLint supported additional methods on the `context` object. Those methods were removed in the new format and should not be relied upon. @@ -176,7 +183,7 @@ This method returns the scope which has the following types: **※2** Only if the `for` statement defines the iteration variable as a block-scoped variable (E.g., `for (let i = 0;;) {}`).<br> **※3** The scope of the closest ancestor node which has own scope. If the closest ancestor node has multiple scopes then it chooses the innermost scope (E.g., the `Program` node has a `global` scope and a `module` scope if `Program#sourceType` is `"module"`. The innermost scope is the `module` scope.). -The returned value is a [`Scope` object](scope-manager-interface.md) defined by the `eslint-scope` package. The `Variable` objects of global variables have some additional properties. +The returned value is a [`Scope` object](scope-manager-interface) defined by the `eslint-scope` package. The `Variable` objects of global variables have some additional properties. * `variable.writeable` (`boolean | undefined`) ... If `true`, this global variable can be assigned arbitrary value. If `false`, this global variable is read-only. * `variable.eslintExplicitGlobal` (`boolean | undefined`) ... If `true`, this global variable was defined by a `/* globals */` directive comment in the source code file. @@ -350,7 +357,7 @@ Best practices for fixes: ({ "foo": 1 }) ``` - * This fixer can just select a quote type arbitrarily. If it guesses wrong, the resulting code will be automatically reported and fixed by the [`quotes`](/docs/rules/quotes.md) rule. + * This fixer can just select a quote type arbitrarily. If it guesses wrong, the resulting code will be automatically reported and fixed by the [`quotes`](/docs/rules/quotes) rule. Note: Making fixes as small as possible is a best practice, but in some cases it may be correct to extend the range of the fix in order to intentionally prevent other rules from making fixes in a surrounding range in the same pass. For instance, if replacement text declares a new variable, it can be useful to prevent other changes in the scope of the variable as they might cause name collisions. @@ -536,7 +543,6 @@ Once you have an instance of `SourceCode`, you can use the following methods on * `getCommentsBefore(nodeOrToken)` - returns an array of comment tokens that occur directly before the given node or token. * `getCommentsAfter(nodeOrToken)` - returns an array of comment tokens that occur directly after the given node or token. * `getCommentsInside(node)` - returns an array of all comment tokens inside a given node. -* `getJSDocComment(node)` - returns the JSDoc comment for a given node or `null` if there is none. * `isSpaceBetween(nodeOrToken, nodeOrToken)` - returns true if there is a whitespace character between the two tokens or, if given a node, the last token of the first node and the first token of the second node. * `getFirstToken(node, skipOptions)` - returns the first token representing the given node. * `getFirstTokens(node, countOptions)` - returns the first `count` tokens representing the given node. @@ -579,7 +585,7 @@ There are also some properties you can access: * `hasBOM` - the flag to indicate whether or not the source code has Unicode BOM. * `text` - the full text of the code being linted. Unicode BOM has been stripped from this text. * `ast` - the `Program` node of the AST for the code being linted. -* `scopeManager` - the [ScopeManager](./scope-manager-interface.md#scopemanager-interface) object of the code. +* `scopeManager` - the [ScopeManager](./scope-manager-interface#scopemanager-interface) object of the code. * `visitorKeys` - the visitor keys to traverse this AST. * `lines` - an array of lines, split according to the specification's definition of line breaks. @@ -593,6 +599,7 @@ Please note that the following methods have been deprecated and will be removed * `getTokenOrCommentBefore()` - replaced by `getTokenBefore()` with the `{ includeComments: true }` option * `getTokenOrCommentAfter()` - replaced by `getTokenAfter()` with the `{ includeComments: true }` option * `isSpaceBetweenTokens()` - replaced by `isSpaceBetween()` +* `getJSDocComment()` ### Options Schemas @@ -678,13 +685,13 @@ Shebangs are represented by tokens of type `"Shebang"`. They are treated as comm ESLint analyzes code paths while traversing AST. You can access that code path objects with five events related to code paths. -[details here](./code-path-analysis.md) +[details here](./code-path-analysis) ## Rule Unit Tests Each bundled rule for ESLint core must have a set of unit tests submitted with it to be accepted. The test file is named the same as the source file but lives in `tests/lib/`. For example, if the rule source file is `lib/rules/foo.js` then the test file should be `tests/lib/rules/foo.js`. -ESLint provides the [`RuleTester`](/docs/developer-guide/nodejs-api.md#ruletester) utility to make it easy to write tests for rules. +ESLint provides the [`RuleTester`](/docs/developer-guide/nodejs-api#ruletester) utility to make it easy to write tests for rules. ## Performance Testing @@ -722,7 +729,7 @@ Performance budget ok: 1443.736547ms (limit: 3409.090909090909ms) ### Per-rule Performance -ESLint has a built-in method to track performance of individual rules. Setting the `TIMING` environment variable will trigger the display, upon linting completion, of the ten longest-running rules, along with their individual running time and relative performance impact as a percentage of total rule processing time. +ESLint has a built-in method to track performance of individual rules. Setting the `TIMING` environment variable will trigger the display, upon linting completion, of the ten longest-running rules, along with their individual running time (rule creation + rule execution) and relative performance impact as a percentage of total rule processing time (rule creation + rule execution). ```bash $ TIMING=1 eslint lib @@ -767,4 +774,4 @@ Runtime rules are written in the same format as all other rules. Create your rul 1. Place all of your runtime rules in the same directory (e.g., `eslint_rules`). 2. Create a [configuration file](../user-guide/configuring/) and specify your rule ID error level under the `rules` key. Your rule will not run unless it has a value of `"warn"` or `"error"` in the configuration file. -3. Run the [command line interface](../user-guide/command-line-interface.md) using the `--rulesdir` option to specify the location of your runtime rules. +3. Run the [command line interface](../user-guide/command-line-interface) using the `--rulesdir` option to specify the location of your runtime rules. diff --git a/eslint/docs/src/library/alert.md b/eslint/docs/src/library/alert.md new file mode 100644 index 0000000..cefd830 --- /dev/null +++ b/eslint/docs/src/library/alert.md @@ -0,0 +1,23 @@ +--- +title: alert +--- + +The alert message comes in three different types: a warning, a tip, and an important note. + +## Usage + +There is a shortcode for each type of alert. The shortcode expects you to provide the text and URL for the “Learn more” link. + +```html +{ % warning "This rule has been removed in version x.xx", "/link/to/learn/more" % } + +{ % tip "Kind reminder to do something maybe", "/link/to/learn/more" % } + +{ % important "This rule has been deprecated in version x.xx", "/link/to/learn/more" % } +``` + +## Examples + +{% warning "warning text", "/" %} +{% tip "tip text", "/" %} +{% important "text", "/" %} diff --git a/eslint/docs/src/library/buttons.md b/eslint/docs/src/library/buttons.md new file mode 100644 index 0000000..45bf205 --- /dev/null +++ b/eslint/docs/src/library/buttons.md @@ -0,0 +1,36 @@ +--- +title: Buttons +--- + +{% from 'components/button.macro.html' import button %} + +There are three types of buttons: primary, secondary, and "ghost". The button styles can be applied to buttons and/or links that look like buttons. + +To render the proper semantic element, provide the kind of behavior that is expected: `action` or `link` value. If the button performs an action, it is rendered as a `button`. If the button links somewhere, it renders as a `<a>`. + +The button macro will default to `link`, which will render an <code>&lt;a&gt;</code> tag that looks like a button. If you provide `action` as a value for `behavior`, it indicates that it is a button _that performs an action_ and is therefore rendered as a `<button type="button">`. + +## Usage + +```html + +<!-- import the macro in the page(s) you want to render the button(s) in --> +{% from 'components/button.macro.html' import button %} + +<!-- use the macro --> + +{ { button({ behavior: "action", type: "primary", text: "Do Something" }) } } + +<!-- defaults to behavior: link --> +{ { button({ type: "primary", text: "Go somewhere", url: "/url/to/somewhere/" }) } } +``` + +## Examples + +{{ button({ behavior: "action", type: "primary" }) }} +{{ button({ behavior: "action", text: "I perform an action", type: "secondary" }) }} +{{ button({ behavior: "action", text: "I perform an action", type: "ghost" }) }} + +{{ button({ type: "primary", text: "I link somewhere", url: "#" }) }} +{{ button({ type: "secondary", text: "Secondary Button", url:"#" }) }} +{{ button({ type: "ghost", text: "Ghost Button", url:"#" }) }} diff --git a/eslint/docs/src/library/code-blocks.md b/eslint/docs/src/library/code-blocks.md new file mode 100644 index 0000000..222d3e6 --- /dev/null +++ b/eslint/docs/src/library/code-blocks.md @@ -0,0 +1,95 @@ +--- +title: Correct and incorrect code usage +--- + +To indicate correct and incorrect code usage, some code blocks can have correct and incorrect icons added to them, respectively. + +## Usage + +To indicate that a code block is correct or incorrect, wrap the code block in a container labeled either `correct` or `incorrect`. + +Make sure to leave space above and below the markdown code block to ensure it is rendered correctly. + +```text +::: correct + +`` `js +function() { + const another = []; +} +`` ` +::: + +::: incorrect + +`` `js +function() { + const another = []; +} +`` ` +::: +``` + +## Examples + +Correct usage: + +::: correct + +```js +const { ESLint } = require("eslint"); + +(async function main() { + // 1. Create an instance with the `fix` option. + const eslint = new ESLint({ fix: true }); + + // 2. Lint files. This doesn't modify target files. + const results = await eslint.lintFiles(["lib/**/*.js"]); + + // 3. Modify the files with the fixed code. + await ESLint.outputFixes(results); + + // 4. Format the results. + const formatter = await eslint.loadFormatter("stylish"); + const resultText = formatter.format(results); + + // 5. Output it. + console.log(resultText); +})().catch((error) => { + process.exitCode = 1; + console.error(error); +}); +``` + +::: + +Incorrect usage: + +::: incorrect + +```js +const { ESLint } = require("eslint"); + +(async function main() { + // 1. Create an instance with the `fix` option. + const eslint = new ESLint({ fix: true }); + + // 2. Lint files. This doesn't modify target files. + const results = await eslint.lintFiles(["lib/**/*.js"]); + + // 3. Modify the files with the fixed code. + await ESLint.outputFixes(results); + + // 4. Format the results. + const formatter = await eslint.loadFormatter("stylish"); + const resultText = formatter.format(results); + + // 5. Output it. + console.log(resultText); +})().catch((error) => { + process.exitCode = 1; + console.error(error); +}); +``` + +::: diff --git a/eslint/docs/src/library/code-tabs.md b/eslint/docs/src/library/code-tabs.md new file mode 100644 index 0000000..d035647 --- /dev/null +++ b/eslint/docs/src/library/code-tabs.md @@ -0,0 +1,9 @@ +--- +title: Code block tabs +--- + +This component is a partial found in `/components/code-tabs.html`. To use this component, copy the code for the tabs from the partial and replace the code blocks with the ones you want to render. + +## Example + +{% include 'components/code-tabs.html' %} diff --git a/eslint/docs/src/library/language-switcher.md b/eslint/docs/src/library/language-switcher.md new file mode 100644 index 0000000..745afda --- /dev/null +++ b/eslint/docs/src/library/language-switcher.md @@ -0,0 +1,5 @@ +--- +title: Language Switcher +--- + +{% include 'components/language-switcher.html' %} diff --git a/eslint/docs/src/library/library.json b/eslint/docs/src/library/library.json new file mode 100644 index 0000000..dd622a7 --- /dev/null +++ b/eslint/docs/src/library/library.json @@ -0,0 +1,4 @@ +{ + "layout": "components.html", + "permalink": "/component-library/{{ page.fileSlug }}.html" +} diff --git a/eslint/docs/src/library/link-card.md b/eslint/docs/src/library/link-card.md new file mode 100644 index 0000000..db400f3 --- /dev/null +++ b/eslint/docs/src/library/link-card.md @@ -0,0 +1,15 @@ +--- +title: Link Card +--- + +Links can be rendered as cards by using the `link` shortcode. The only required parameter is the URL you wish to scrape for metadata. + +```html +{ % link "https://thesiteurl.com" % } +``` + +## Examples + +{% link "https://blog.izs.me/2010/12/an-open-letter-to-javascript-leaders-regarding/" %} + +{% link "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get" %} diff --git a/eslint/docs/src/library/related-rules.md b/eslint/docs/src/library/related-rules.md new file mode 100644 index 0000000..21003b1 --- /dev/null +++ b/eslint/docs/src/library/related-rules.md @@ -0,0 +1,17 @@ +--- +title: Related rules +--- + +The `related_rules` shortcode is used to add one or more related rules to a rule. + +## Usage + +The shortcode expects an array of rule names. + +```html +{ % related_rules ["no-extra-semi", "no-unexpected-multiline", "semi-spacing"] % } +``` + +## Example + +{% related_rules ["no-extra-semi", "no-unexpected-multiline", "semi-spacing"] %} diff --git a/eslint/docs/src/library/rule-categories.md b/eslint/docs/src/library/rule-categories.md new file mode 100644 index 0000000..9f6688f --- /dev/null +++ b/eslint/docs/src/library/rule-categories.md @@ -0,0 +1,43 @@ +--- +title: Rule categories +--- + +## Rule categories + +The rule categories—namely “recommended”, “fixable”, and “hasSuggestions”—are shown in the [rules page](/rules/). They are rendered using the `ruleCategories` macro (imported from `/components/rule-categories.macro.html`). There is also an individual macro for each category type. + +```html +{ % from 'components/rule-categories.macro.html' import ruleCategories % } + +{ { ruleCategories({ + recommended: true, + fixable: true, + hasSuggestions: true +}) } } +``` + +### Example + +{% from 'components/rule-categories.macro.html' import ruleCategories, recommended, fixable, hasSuggestions %} + +{{ ruleCategories({ + recommended: true, + fixable: true, + hasSuggestions: true +}) }} + +## A rule category + +For every rule, you can render the category it belongs to using the corresponding category shortcode: + +```html +{ % recommended % } +{ % fixable % } +{ % hasSuggestions % } +``` + +## Examples + +{% recommended %} +{% fixable %} +{% hasSuggestions %} diff --git a/eslint/docs/src/library/rule-list.md b/eslint/docs/src/library/rule-list.md new file mode 100644 index 0000000..635e6b4 --- /dev/null +++ b/eslint/docs/src/library/rule-list.md @@ -0,0 +1,25 @@ +--- +title: Rule list +--- + +The rule list is a macro defined in `components/rule-list.macro.html`. The macro accepts a list of rule names and renders comma-separated links. + +## Usage + +{% raw %} + +```html +<!-- import the macro --> +{% from 'components/rule-list.macro.html' import ruleList %} + +<!-- use the macro --> +{{ ruleList({ rules: ['accessor-pairs', 'no-undef'] }) }} +``` + +{% endraw %} + +## Examples + +{% from 'components/rule-list.macro.html' import ruleList %} + +{{ ruleList({ rules: ['accessor-pairs', 'no-undef'] }) }} diff --git a/eslint/docs/src/library/rule.md b/eslint/docs/src/library/rule.md new file mode 100644 index 0000000..45bccea --- /dev/null +++ b/eslint/docs/src/library/rule.md @@ -0,0 +1,72 @@ +--- +title: Rule +--- + +The rule component is a macro defined in `/components/rule.macro.html`. The macro accepts a set of parameters used to render the rule. + +A rule has a: + +* name +* description +* a flag to indicate whether it's deprecated or removed: `deprecated` and `removed` respectively +* a replacedBy value indicating the rule it has been replaced with (if applicable) +* a categories object indicating the rule's category + +## Usage + +```html +<!-- import the macro --> +{ % from 'components/rule.macro.html' import rule % } + +<!-- use the macro --> + { { rule({ + name: "rule-name", + deprecated: true, // or removed: true + replacedBy: "name-of-replacement-rule" + description: 'Example: Enforce `return` statements in getters.', + categories: { + recommended: true, + fixable: true, + hasSuggestions: false + } +}) } } +``` + +## Examples + +{% from 'components/rule.macro.html' import rule %} + + {{ rule({ + name: "getter-return", + deprecated: true, + description: 'Enforce `return` statements in getters.', + categories: { + recommended: true, + fixable: true, + hasSuggestions: false + } +}) }} + + {{ rule({ + name: "getter-return", + removed: true, + description: 'Enforce `return` statements in getters.', + replacedBy: "other-rule-here", + categories: { + recommended: true, + fixable: true, + hasSuggestions: false + } +}) }} + +{{ rule({ + name: "getter-return", + deprecated: false, + description: 'Enforce `return` statements in getters.', + categories: { + recommended: true, + fixable: false, + hasSuggestions: false + } + +}) }} diff --git a/eslint/docs/src/library/social-icons.md b/eslint/docs/src/library/social-icons.md new file mode 100644 index 0000000..b76f726 --- /dev/null +++ b/eslint/docs/src/library/social-icons.md @@ -0,0 +1,5 @@ +--- +title: Social Icons +--- + +{% include 'components/social-icons.html' %} diff --git a/eslint/docs/src/library/theme-switcher.md b/eslint/docs/src/library/theme-switcher.md new file mode 100644 index 0000000..1289998 --- /dev/null +++ b/eslint/docs/src/library/theme-switcher.md @@ -0,0 +1,5 @@ +--- +title: Theme Switcher +--- + +{% include 'components/theme-switcher.html' %} diff --git a/eslint/docs/src/library/version-switcher.md b/eslint/docs/src/library/version-switcher.md new file mode 100644 index 0000000..5b72f4a --- /dev/null +++ b/eslint/docs/src/library/version-switcher.md @@ -0,0 +1,5 @@ +--- +title: Version Switcher +--- + +{% include 'components/version-switcher.html' %} diff --git a/eslint/docs/maintainer-guide/governance.md b/eslint/docs/src/maintainer-guide/governance.md similarity index 80% rename from eslint/docs/maintainer-guide/governance.md rename to eslint/docs/src/maintainer-guide/governance.md index 2c75411..0705b64 100644 --- a/eslint/docs/maintainer-guide/governance.md +++ b/eslint/docs/src/maintainer-guide/governance.md @@ -1,4 +1,13 @@ -# Governance +--- +title: Governance +layout: doc +eleventyNavigation: + key: governance + parent: maintainer guide + title: Governance + order: 4 + +--- ESLint is an open source project that depends on contributions from the community. Anyone may contribute to the project at any time by submitting code, participating in discussions, making suggestions, or any other contribution they see fit. This document describes how various types of contributors work within the ESLint project. @@ -16,11 +25,34 @@ Contributors are community members who contribute in concrete ways to the projec Contributors have read-only access to source code and so submit changes via pull requests. Contributor pull requests have their contribution reviewed and merged by a TSC member. TSC members and Committers work with Contributors to review their code and prepare it for merging. -As Contributors gain experience and familiarity with the project, their profile within, and commitment to, the community will increase. At some stage, they may find themselves being nominated for committership by an existing Committer. +As Contributors gain experience and familiarity with the project, their profile within, and commitment to, the community will increase. At some stage, they may find themselves being nominated as either a Website Team Member or Committer by an existing Website Team Member or Committer. + +### Website Team Member + +Website Team Members are community members who have shown that they are committed to the continued maintenance of [eslint.org](https://eslint.org/) through ongoing engagement with the community. Website Team Members are given push access to the `eslint.org` GitHub repository and must abide by the project's [Contribution Guidelines](../developer-guide/contributing/). + + Website Team Members: + +* Are expected to work on public branches of the source repository and submit pull requests from that branch to the master branch. +* Are expected to delete their public branches when they are no longer necessary. +* Must submit pull requests for all changes. +* Have their work reviewed by Reviewers and TSC members before acceptance into the repository. +* May label and close website-related issues (see [Managing Issues](issues.html)) +* May merge some pull requests (see [Managing Pull Requests](pullrequests.html)) + +To become a Website Team Member: + +* One must have shown a willingness and ability to participate in the maintenance of [eslint.org](https://eslint.org/) as a team player. Typically, a potential Website Team Member will need to show that they have an understanding of the structure of the website and how it fits into the larger ESLint project's objectives and strategy. +* Website Team Members are expected to be respectful of every community member and to work collaboratively in the spirit of inclusion. +* Have submitted a minimum of 10 website-related pull requests. What's a website-related pull request? One that is made to the `eslint.org` repository or the `docs` directory in the `eslint` repository and requires little effort to accept because it's well documented and tested. + +New Website Team Members can be nominated by any existing Website Team Member or Committer. Once they have been nominated, there will be a vote by the TSC members. + +It is important to recognize that membership on the website team is a privilege, not a right. That privilege must be earned and once earned it can be removed by the TSC members by a standard TSC motion. However, under normal circumstances Website Team Members remain for as long as they wish to continue engaging with the project. ### Committers -Committers are community members who have shown that they are committed to the continued development of the project through ongoing engagement with the community. Committers are given push access to the project's GitHub repos and must abide by the project's [Contribution Guidelines](../developer-guide/contributing). +Committers are community members who have shown that they are committed to the continued development of the project through ongoing engagement with the community. Committers are given push access to the project's GitHub repos and must abide by the project's [Contribution Guidelines](../developer-guide/contributing/). Committers: @@ -112,7 +144,7 @@ A Reviewer is invited to become a TSC member by existing TSC members. A nominati 1. Add the GitHub user to the "ESLint TSC" GitHub team 1. Set the GitHub user to be have the "Owner" role for the ESLint organization -1. Send a welcome email with a link to the [maintainer guide](./) and the [npm 2FA guide](./npm-2fa). +1. Send a welcome email with a link to the [maintainer guide](./) and instructions for npm 2FA. 1. Invite to the Discord TSC channel 1. Make the TSC member an admin on the ESLint team mailing list 1. Add the TSC member to the recurring TSC meeting event on Google Calendar diff --git a/eslint/docs/maintainer-guide/README.md b/eslint/docs/src/maintainer-guide/index.md similarity index 62% rename from eslint/docs/maintainer-guide/README.md rename to eslint/docs/src/maintainer-guide/index.md index 941ad55..ecac32f 100644 --- a/eslint/docs/maintainer-guide/README.md +++ b/eslint/docs/src/maintainer-guide/index.md @@ -1,23 +1,31 @@ -# Maintainer Guide +--- +title: Maintainer Guide +layout: doc +eleventyNavigation: + key: maintainer guide + title: Maintainer Guide + order: 3 + +--- This guide is intended for those who work as part of the ESLint project team. -## [Managing Issues](issues.md) +## [Managing Issues](issues) Describes how to deal with issues when they're opened, when interacting with users, and how to close them effectively. -## [Reviewing Pull Requests](pullrequests.md) +## [Reviewing Pull Requests](pullrequests) Describes how to review incoming pull requests. -## [Managing Releases](releases.md) +## [Managing Releases](releases) Describes how to do an ESLint project release. -## [Governance](governance.md) +## [Governance](governance) Describes the governance policy for ESLint, including the rights and privileges of individuals inside the project. -## [Working Groups](working-groups.md) +## [Working Groups](working-groups) Describes how working groups are created and how they function within the ESLint project. diff --git a/eslint/docs/maintainer-guide/issues.md b/eslint/docs/src/maintainer-guide/issues.md similarity index 98% rename from eslint/docs/maintainer-guide/issues.md rename to eslint/docs/src/maintainer-guide/issues.md index 2624a4b..ca6abf3 100644 --- a/eslint/docs/maintainer-guide/issues.md +++ b/eslint/docs/src/maintainer-guide/issues.md @@ -1,4 +1,13 @@ -# Managing Issues +--- +title: Managing Issues +layout: doc +eleventyNavigation: + key: managing issues + parent: maintainer guide + title: Managing Issues + order: 1 + +--- New issues are filed frequently, and how we respond to those issues directly affects the success of the project. Being part of the project team means helping to triage and address issues as they come in so the project can continue to run smoothly. diff --git a/eslint/docs/maintainer-guide/pullrequests.md b/eslint/docs/src/maintainer-guide/pullrequests.md similarity index 91% rename from eslint/docs/maintainer-guide/pullrequests.md rename to eslint/docs/src/maintainer-guide/pullrequests.md index 2d3b13b..3c0b064 100644 --- a/eslint/docs/maintainer-guide/pullrequests.md +++ b/eslint/docs/src/maintainer-guide/pullrequests.md @@ -1,4 +1,13 @@ -# Reviewing Pull Requests +--- +title: Reviewing Pull Requests +layout: doc +eleventyNavigation: + key: reviewing pull requests + parent: maintainer guide + title: Reviewing Pull Requests + order: 2 + +--- Pull requests are submitted frequently and represent our best opportunity to interact with the community. As such, it's important that pull requests are well-reviewed before being merged and that interactions on pull requests are positive. @@ -31,7 +40,13 @@ Once the bot checks have been satisfied, you check the following: ## Who Can Merge a Pull Request -TSC members and committers may merge pull requests, depending on the contents of the pull request. +TSC members, Reviewers, Committers, and Website Team Members may merge pull requests, depending on the contents of the pull request. + +Website Team Members may merge a pull request in the `eslint.org` repository if it is: + +1. A documentation change +1. A dependency upgrade +1. A chore Committers may merge a pull request if it is a non-breaking change and is: diff --git a/eslint/docs/maintainer-guide/releases.md b/eslint/docs/src/maintainer-guide/releases.md similarity index 95% rename from eslint/docs/maintainer-guide/releases.md rename to eslint/docs/src/maintainer-guide/releases.md index d406475..975717d 100644 --- a/eslint/docs/maintainer-guide/releases.md +++ b/eslint/docs/src/maintainer-guide/releases.md @@ -1,4 +1,13 @@ -# Managing Releases +--- +title: Managing Releases +layout: doc +eleventyNavigation: + key: managing releases + parent: maintainer guide + title: Managing Releases + order: 3 + +--- Releases are when a project formally publishes a new version so the community can use it. There are two types of releases: @@ -16,7 +25,7 @@ A two-person release team is assigned to each scheduled release. This two-person The two-person team should seek input from the whole team on the Monday following a release to double-check if a patch release is necessary. -At least one member of the release team needs to have access to [eslint's two-factor authentication for npm](./npm-2fa) in order to do a release. +At least one member of the release team needs to have access to eslint's two-factor authentication for npm in order to do a release. ## Release Communication diff --git a/eslint/docs/maintainer-guide/working-groups.md b/eslint/docs/src/maintainer-guide/working-groups.md similarity index 96% rename from eslint/docs/maintainer-guide/working-groups.md rename to eslint/docs/src/maintainer-guide/working-groups.md index d6d22fb..4a79ff4 100644 --- a/eslint/docs/maintainer-guide/working-groups.md +++ b/eslint/docs/src/maintainer-guide/working-groups.md @@ -1,4 +1,8 @@ -# Working Groups +--- +title: Working Groups +layout: doc + +--- The ESLint TSC may form working groups to focus on a specific area of the project. diff --git a/eslint/docs/src/pages/404.html b/eslint/docs/src/pages/404.html new file mode 100644 index 0000000..ee6413c --- /dev/null +++ b/eslint/docs/src/pages/404.html @@ -0,0 +1,29 @@ +--- +layout: main.html +permalink: /404.html +eleventyExcludeFromCollections: true +hook: "404_page" +--- + +<section class="404 section"> + <div class="content-container grid"> + <div class="span-1-5"> + <h1 class="section-title h0"> + <span class="eyebrow">{{ site.404_page.title }}</span> + {{ site.404_page.subtitle }} + </h1> + <p class="section-supporting-text"> + {{ site.404_page.description }} + </p> + <div class="eslint-actions"> + <a href="/" class="c-btn c-btn--primary c-btn--large">{{ site.404_page.actions.back_to_home }}</a> + <a href="{{ links.docs }}" class="c-btn c-btn--secondary c-btn--large">{{ + site.404_page.actions.browse_docs }}</a> + </div> + </div> + + <div class="content-container span-7-12"> + <img width="480" height="366" src="{{ '/assets/images/404.png' | url }}" alt=""> + </div> + </div> +</section> diff --git a/eslint/docs/src/pages/component-library.html b/eslint/docs/src/pages/component-library.html new file mode 100644 index 0000000..555698e --- /dev/null +++ b/eslint/docs/src/pages/component-library.html @@ -0,0 +1,9 @@ +--- +layout: components.html +permalink: /component-library/index.html +hook: "component-library" +--- + +The list of components on the left includes shortcodes, macros and partials used across the Docs. + +Most of the components are shortcodes used in individual doc pages. Usage notes are included for each component. diff --git a/eslint/docs/src/pages/index.md b/eslint/docs/src/pages/index.md new file mode 100644 index 0000000..43c7954 --- /dev/null +++ b/eslint/docs/src/pages/index.md @@ -0,0 +1,21 @@ +--- +title: Documentation +layout: doc +permalink: /index.html +--- + +Welcome to our documentation pages! What would you like to view? + +## [User Guide](user-guide/) + +Intended for end users of ESLint. Contains information about core rules, configuration, command line options, formatters, and integrations, +as well as guides for migrating from earlier versions of ESLint. + +## [Developer Guide](developer-guide/) + +Intended for contributors to ESLint and people who wish to extend ESLint. Contains information about contributing to ESLint; creating custom +rules, configurations, plugins, and formatters; and information about our architecture and Node.js API. + +## [Maintainer Guide](maintainer-guide/) + +Intended for maintainers of ESLint. diff --git a/eslint/docs/src/pages/languages.md b/eslint/docs/src/pages/languages.md new file mode 100644 index 0000000..9491e24 --- /dev/null +++ b/eslint/docs/src/pages/languages.md @@ -0,0 +1,21 @@ +--- +layout: main.html +title: Languages +permalink: /languages/ +hook: "languages-page" +--- + +{%- from 'components/hero.macro.html' import hero %} + +{{ hero({ + title: "Languages", + supporting_text: "Choose your language" +}) }} + +<section class="languages-section section"> + <div class="content-container"> + <nav aria-labelledby="languages-label"> + {% include 'partials/languages-list.html' %} + </nav> + </div> +</section> diff --git a/eslint/docs/src/pages/pages.11tydata.json b/eslint/docs/src/pages/pages.11tydata.json new file mode 100644 index 0000000..228d99b --- /dev/null +++ b/eslint/docs/src/pages/pages.11tydata.json @@ -0,0 +1,3 @@ +{ + "hook": "page" +} diff --git a/eslint/docs/src/pages/rules.md b/eslint/docs/src/pages/rules.md new file mode 100644 index 0000000..7ede8bf --- /dev/null +++ b/eslint/docs/src/pages/rules.md @@ -0,0 +1,88 @@ +--- +title: Rules +layout: doc +permalink: /rules/index.html +eleventyNavigation: + key: rules + parent: user guide + title: Rules + order: 4 +--- + +{% from 'components/rule-categories.macro.html' import ruleCategories, recommended, fixable, hasSuggestions %} +{% from 'components/rule.macro.html' import rule %} + +Rules in ESLint are grouped by type to help you understand their purpose. Each rule has emojis denoting: + +{{ ruleCategories({ + index: true, + recommended: true, + fixable: true, + hasSuggestions: true +}) }} + +{%- for type in rules.types -%} + +<h2 id="{{ type.displayName | slugify }}"> {{ type.displayName }} </h2> + +{{ type.description | safe }} + + {%- for the_rule in type.rules -%} + {%- if type.displayName == 'deprecated' -%}{%- set deprecated_value = true -%}{%- endif -%} + + {%- set name_value = the_rule.name -%} + {%- set description_value = the_rule.description -%} + {%- set isRecommended = the_rule.recommended -%} + {%- set isFixable = the_rule.fixable -%} + {%- set isHasSuggestions = the_rule.hasSuggestions -%} + + {{ rule({ + name: name_value, + deprecated: deprecated_value, + description: description_value, + categories: { + recommended: isRecommended, + fixable: isFixable, + hasSuggestions: isHasSuggestions + } + }) }} + {%- endfor -%} +{%- endfor -%} + +{%- if rules.deprecated -%} + +<h2 id="{{ rules.deprecated.name | slugify }}">{{ rules.deprecated.name }}</h2> + +{{ rules.deprecated.description | safe }} + +{%- for the_rule in rules.deprecated.rules -%} + {%- set name_value = the_rule.name -%} + {%- set isReplacedBy = the_rule.replacedBy -%} + + {{ rule({ + name: name_value, + deprecated: true, + replacedBy: isReplacedBy + }) }} +{%- endfor -%} +{%- endif -%} + +{%- if rules.removed -%} + +<h2 id="{{ rules.removed.name | slugify }}">{{ rules.removed.name }}</h2> + +{{ rules.removed.description | safe }} + +{%- for the_rule in rules.removed.rules -%} + {%- set name_value = the_rule.removed -%} + {%- set isReplacedBy = the_rule.replacedBy -%} + + {{ rule({ + name: name_value, + removed: true, + replacedBy: isReplacedBy + }) }} +{%- endfor -%} +{%- endif -%} + +{# <!-- markdownlint-disable-file MD046 --> #} diff --git a/eslint/docs/src/pages/versions.md b/eslint/docs/src/pages/versions.md new file mode 100644 index 0000000..ce92a8e --- /dev/null +++ b/eslint/docs/src/pages/versions.md @@ -0,0 +1,21 @@ +--- +layout: main.html +title: Versions +permalink: /versions/ +hook: "versions-page" +--- + +{%- from 'components/hero.macro.html' import hero %} + +{{ hero({ + title: "ESLint Versions", + supporting_text: "Choose the documentation version" +}) }} + +<section class="versions-section section"> + <div class="content-container"> + <nav aria-labelledby="versions-label"> + {% include 'partials/versions-list.html' %} + </nav> + </div> +</section> diff --git a/eslint/docs/rules/accessor-pairs.md b/eslint/docs/src/rules/accessor-pairs.md similarity index 88% rename from eslint/docs/rules/accessor-pairs.md rename to eslint/docs/src/rules/accessor-pairs.md index 22cf28a..638bbc8 100644 --- a/eslint/docs/rules/accessor-pairs.md +++ b/eslint/docs/src/rules/accessor-pairs.md @@ -1,4 +1,16 @@ -# Enforces getter/setter pairs in objects and classes (accessor-pairs) +--- +title: accessor-pairs +layout: doc +rule_type: suggestion +related_rules: +- no-dupe-keys +- no-dupe-class-members +further_reading: +- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/set +- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get +- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects +--- + It's a common mistake in JavaScript to create an object with just a setter for a property but never have a corresponding getter defined for it. Without a getter, you cannot read the property, so it ends up not being used. @@ -12,6 +24,7 @@ var o = { } }; + // Good var o = { set a(value) { @@ -44,6 +57,8 @@ This rule always checks object literals and property descriptors. By default, it Examples of **incorrect** code for the default `{ "setWithoutGet": true }` option: +:::incorrect + ```js /*eslint accessor-pairs: "error"*/ @@ -53,6 +68,7 @@ var o = { } }; + var o = {d: 1}; Object.defineProperty(o, 'c', { set: function(value) { @@ -61,8 +77,12 @@ Object.defineProperty(o, 'c', { }); ``` +::: + Examples of **correct** code for the default `{ "setWithoutGet": true }` option: +:::correct + ```js /*eslint accessor-pairs: "error"*/ @@ -87,10 +107,14 @@ Object.defineProperty(o, 'c', { ``` +::: + ### getWithoutSet Examples of **incorrect** code for the `{ "getWithoutSet": true }` option: +:::incorrect + ```js /*eslint accessor-pairs: ["error", { "getWithoutSet": true }]*/ @@ -121,8 +145,12 @@ Object.defineProperty(o, 'c', { }); ``` +::: + Examples of **correct** code for the `{ "getWithoutSet": true }` option: +:::correct + ```js /*eslint accessor-pairs: ["error", { "getWithoutSet": true }]*/ var o = { @@ -146,6 +174,8 @@ Object.defineProperty(o, 'c', { ``` +::: + ### enforceForClassMembers When `enforceForClassMembers` is set to `true` (default): @@ -155,6 +185,8 @@ When `enforceForClassMembers` is set to `true` (default): Examples of **incorrect** code for `{ "getWithoutSet": true, "enforceForClassMembers": true }`: +:::incorrect + ```js /*eslint accessor-pairs: ["error", { "getWithoutSet": true, "enforceForClassMembers": true }]*/ @@ -180,8 +212,12 @@ const Baz = class { } ``` +::: + Examples of **incorrect** code for `{ "setWithoutGet": true, "enforceForClassMembers": true }`: +:::incorrect + ```js /*eslint accessor-pairs: ["error", { "setWithoutGet": true, "enforceForClassMembers": true }]*/ @@ -198,10 +234,14 @@ const Bar = class { } ``` +::: + When `enforceForClassMembers` is set to `false`, this rule ignores classes. Examples of **correct** code for `{ "getWithoutSet": true, "setWithoutGet": true, "enforceForClassMembers": false }`: +:::correct + ```js /*eslint accessor-pairs: ["error", { "getWithoutSet": true, "setWithoutGet": true, "enforceForClassMembers": false @@ -232,6 +272,8 @@ const Quux = class { } ``` +::: + ## Known Limitations Due to the limits of static analysis, this rule does not account for possible side effects and in certain cases @@ -273,16 +315,10 @@ var o = { The code above creates an object with just a setter for the property `"a"`. -See [no-dupe-keys](no-dupe-keys.md) if you also want to disallow duplicate keys in object literals. +See [no-dupe-keys](no-dupe-keys) if you also want to disallow duplicate keys in object literals. -See [no-dupe-class-members](no-dupe-class-members.md) if you also want to disallow duplicate names in class definitions. +See [no-dupe-class-members](no-dupe-class-members) if you also want to disallow duplicate names in class definitions. ## When Not To Use It You can turn this rule off if you are not concerned with the simultaneous presence of setters and getters on objects. - -## Further Reading - -* [Object Setters](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/set) -* [Object Getters](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get) -* [Working with Objects](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects) diff --git a/eslint/docs/rules/array-bracket-newline.md b/eslint/docs/src/rules/array-bracket-newline.md similarity index 93% rename from eslint/docs/rules/array-bracket-newline.md rename to eslint/docs/src/rules/array-bracket-newline.md index bb990c7..16e80e1 100644 --- a/eslint/docs/rules/array-bracket-newline.md +++ b/eslint/docs/src/rules/array-bracket-newline.md @@ -1,4 +1,12 @@ -# enforce line breaks after opening and before closing array brackets (array-bracket-newline) +--- +title: array-bracket-newline +layout: doc +rule_type: layout +related_rules: +- array-bracket-spacing +--- + + A number of style guides require or disallow line breaks inside of array brackets. @@ -23,6 +31,8 @@ Or an object option (Requires line breaks if any of properties is satisfied. Oth Examples of **incorrect** code for this rule with the `"always"` option: +:::incorrect + ```js /*eslint array-bracket-newline: ["error", "always"]*/ @@ -36,8 +46,12 @@ var e = [function foo() { }]; ``` +::: + Examples of **correct** code for this rule with the `"always"` option: +:::correct + ```js /*eslint array-bracket-newline: ["error", "always"]*/ @@ -60,10 +74,14 @@ var e = [ ]; ``` +::: + ### never Examples of **incorrect** code for this rule with the `"never"` option: +:::incorrect + ```js /*eslint array-bracket-newline: ["error", "never"]*/ @@ -86,8 +104,12 @@ var e = [ ]; ``` +::: + Examples of **correct** code for this rule with the `"never"` option: +:::correct + ```js /*eslint array-bracket-newline: ["error", "never"]*/ @@ -101,10 +123,14 @@ var e = [function foo() { }]; ``` +::: + ### consistent Examples of **incorrect** code for this rule with the `"consistent"` option: +:::incorrect + ```js /*eslint array-bracket-newline: ["error", "consistent"]*/ @@ -122,8 +148,12 @@ var d = [ }] ``` +::: + Examples of **correct** code for this rule with the `"consistent"` option: +:::correct + ```js /*eslint array-bracket-newline: ["error", "consistent"]*/ @@ -144,10 +174,14 @@ var f = [ ]; ``` +::: + ### multiline Examples of **incorrect** code for this rule with the default `{ "multiline": true }` option: +:::incorrect + ```js /*eslint array-bracket-newline: ["error", { "multiline": true }]*/ @@ -166,8 +200,12 @@ var e = [function foo() { }]; ``` +::: + Examples of **correct** code for this rule with the default `{ "multiline": true }` option: +:::correct + ```js /*eslint array-bracket-newline: ["error", { "multiline": true }]*/ @@ -185,10 +223,14 @@ var e = [ ]; ``` +::: + ### minItems Examples of **incorrect** code for this rule with the `{ "minItems": 2 }` option: +:::incorrect + ```js /*eslint array-bracket-newline: ["error", { "minItems": 2 }]*/ @@ -207,8 +249,12 @@ var e = [ ]; ``` +::: + Examples of **correct** code for this rule with the `{ "minItems": 2 }` option: +:::correct + ```js /*eslint array-bracket-newline: ["error", { "minItems": 2 }]*/ @@ -226,10 +272,14 @@ var e = [function foo() { }]; ``` +::: + ### multiline and minItems Examples of **incorrect** code for this rule with the `{ "multiline": true, "minItems": 2 }` options: +:::incorrect + ```js /*eslint array-bracket-newline: ["error", { "multiline": true, "minItems": 2 }]*/ @@ -246,8 +296,12 @@ var e = [function foo() { }]; ``` +::: + Examples of **correct** code for this rule with the `{ "multiline": true, "minItems": 2 }` options: +:::correct + ```js /*eslint array-bracket-newline: ["error", { "multiline": true, "minItems": 2 }]*/ @@ -267,6 +321,8 @@ var e = [ ]; ``` +::: + ## When Not To Use It If you don't want to enforce line breaks after opening and before closing array brackets, don't enable this rule. @@ -274,7 +330,3 @@ If you don't want to enforce line breaks after opening and before closing array ## Compatibility * **JSCS:** [validateNewlineAfterArrayElements](https://jscs-dev.github.io/rule/validateNewlineAfterArrayElements) - -## Related Rules - -* [array-bracket-spacing](array-bracket-spacing.md) diff --git a/eslint/docs/rules/array-bracket-spacing.md b/eslint/docs/src/rules/array-bracket-spacing.md similarity index 94% rename from eslint/docs/rules/array-bracket-spacing.md rename to eslint/docs/src/rules/array-bracket-spacing.md index a8c745f..275b32f 100644 --- a/eslint/docs/rules/array-bracket-spacing.md +++ b/eslint/docs/src/rules/array-bracket-spacing.md @@ -1,4 +1,14 @@ -# Disallow or enforce spaces inside of brackets (array-bracket-spacing) +--- +title: array-bracket-spacing +layout: doc +rule_type: layout +related_rules: +- space-in-parens +- object-curly-spacing +- computed-property-spacing +--- + + A number of style guides require or disallow spaces between array brackets and other tokens. This rule applies to both array literals and destructuring assignments (ECMAScript 6). @@ -45,6 +55,8 @@ This rule has built-in exceptions: Examples of **incorrect** code for this rule with the default `"never"` option: +:::incorrect + ```js /*eslint array-bracket-spacing: ["error", "never"]*/ /*eslint-env es6*/ @@ -62,8 +74,12 @@ var [ x, ...y ] = z; var [ ,,x, ] = z; ``` +::: + Examples of **correct** code for this rule with the default `"never"` option: +:::correct + ```js /*eslint array-bracket-spacing: ["error", "never"]*/ /*eslint-env es6*/ @@ -89,10 +105,14 @@ var [x, ...y] = z; var [,,x,] = z; ``` +::: + ### always Examples of **incorrect** code for this rule with the `"always"` option: +:::incorrect + ```js /*eslint array-bracket-spacing: ["error", "always"]*/ /*eslint-env es6*/ @@ -113,8 +133,12 @@ var [x, ...y] = z; var [,,x,] = z; ``` +::: + Examples of **correct** code for this rule with the `"always"` option: +:::correct + ```js /*eslint array-bracket-spacing: ["error", "always"]*/ /*eslint-env es6*/ @@ -140,10 +164,14 @@ var [ x, ...y ] = z; var [ ,,x, ] = z; ``` +::: + ### singleValue Examples of **incorrect** code for this rule with the `"always", { "singleValue": false }` options: +:::incorrect + ```js /*eslint array-bracket-spacing: ["error", "always", { "singleValue": false }]*/ @@ -157,8 +185,12 @@ var foo = [ [ 1, 2 ] ]; var foo = [ { 'foo': 'bar' } ]; ``` +::: + Examples of **correct** code for this rule with the `"always", { "singleValue": false }` options: +:::correct + ```js /*eslint array-bracket-spacing: ["error", "always", { "singleValue": false }]*/ @@ -168,10 +200,14 @@ var foo = [[ 1, 1 ]]; var foo = [{ 'foo': 'bar' }]; ``` +::: + ### objectsInArrays Examples of **incorrect** code for this rule with the `"always", { "objectsInArrays": false }` options: +:::incorrect + ```js /*eslint array-bracket-spacing: ["error", "always", { "objectsInArrays": false }]*/ @@ -181,8 +217,12 @@ var arr = [ { } ] ``` +::: + Examples of **correct** code for this rule with the `"always", { "objectsInArrays": false }` options: +:::correct + ```js /*eslint array-bracket-spacing: ["error", "always", { "objectsInArrays": false }]*/ @@ -192,10 +232,14 @@ var arr = [{ }]; ``` +::: + ### arraysInArrays Examples of **incorrect** code for this rule with the `"always", { "arraysInArrays": false }` options: +:::incorrect + ```js /*eslint array-bracket-spacing: ["error", "always", { "arraysInArrays": false }]*/ @@ -203,8 +247,12 @@ var arr = [ [ 1, 2 ], 2, 3, 4 ]; var arr = [ [ 1, 2 ], 2, [ 3, 4 ] ]; ``` +::: + Examples of **correct** code for this rule with the `"always", { "arraysInArrays": false }` options: +:::correct + ```js /*eslint array-bracket-spacing: ["error", "always", { "arraysInArrays": false }]*/ @@ -212,12 +260,8 @@ var arr = [[ 1, 2 ], 2, 3, 4 ]; var arr = [[ 1, 2 ], 2, [ 3, 4 ]]; ``` +::: + ## When Not To Use It You can turn this rule off if you are not concerned with the consistency of spacing between array brackets. - -## Related Rules - -* [space-in-parens](space-in-parens.md) -* [object-curly-spacing](object-curly-spacing.md) -* [computed-property-spacing](computed-property-spacing.md) diff --git a/eslint/docs/rules/array-callback-return.md b/eslint/docs/src/rules/array-callback-return.md similarity index 95% rename from eslint/docs/rules/array-callback-return.md rename to eslint/docs/src/rules/array-callback-return.md index 568e014..b3b0fba 100644 --- a/eslint/docs/rules/array-callback-return.md +++ b/eslint/docs/src/rules/array-callback-return.md @@ -1,4 +1,9 @@ -# Enforces return statements in callbacks of array's methods (array-callback-return) +--- +title: array-callback-return +layout: doc +rule_type: problem +--- + `Array` has several methods for filtering, mapping, and folding. If we forget to write `return` statement in a callback of those, it's probably a mistake. If you don't want to use a return or don't need the returned results, consider using [.forEach](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach) instead. @@ -13,7 +18,7 @@ var indexMap = myArray.reduce(function(memo, item, index) { ## Rule Details This rule enforces usage of `return` statement in callbacks of array's methods. -Additionally, it may also enforce the `forEach` array method callback to __not__ return a value by using the `checkForEach` option. +Additionally, it may also enforce the `forEach` array method callback to **not** return a value by using the `checkForEach` option. This rule finds callback functions of the following methods, then checks usage of `return` statement. @@ -33,6 +38,8 @@ This rule finds callback functions of the following methods, then checks usage o Examples of **incorrect** code for this rule: +:::incorrect + ```js /*eslint array-callback-return: "error"*/ @@ -55,8 +62,12 @@ var bar = foo.filter(function(x) { }); ``` +::: + Examples of **correct** code for this rule: +:::correct + ```js /*eslint array-callback-return: "error"*/ @@ -75,6 +86,8 @@ var foo = Array.from(nodes, function(node) { var bar = foo.map(node => node.getAttribute("id")); ``` +::: + ## Options This rule accepts a configuration object with two options: @@ -86,6 +99,8 @@ This rule accepts a configuration object with two options: Examples of **correct** code for the `{ "allowImplicit": true }` option: +:::correct + ```js /*eslint array-callback-return: ["error", { allowImplicit: true }]*/ var undefAllTheThings = myArray.map(function(item) { @@ -93,10 +108,14 @@ var undefAllTheThings = myArray.map(function(item) { }); ``` +::: + ### checkForEach Examples of **incorrect** code for the `{ "checkForEach": true }` option: +:::incorrect + ```js /*eslint array-callback-return: ["error", { checkForEach: true }]*/ @@ -118,8 +137,12 @@ myArray.forEach(item => { }); ``` +::: + Examples of **correct** code for the `{ "checkForEach": true }` option: +:::correct + ```js /*eslint array-callback-return: ["error", { checkForEach: true }]*/ @@ -144,6 +167,8 @@ myArray.forEach(item => { }); ``` +::: + ## Known Limitations This rule checks callback functions of methods with the given names, *even if* the object which has the method is *not* an array. diff --git a/eslint/docs/rules/array-element-newline.md b/eslint/docs/src/rules/array-element-newline.md similarity index 91% rename from eslint/docs/rules/array-element-newline.md rename to eslint/docs/src/rules/array-element-newline.md index cee739d..73b545a 100644 --- a/eslint/docs/rules/array-element-newline.md +++ b/eslint/docs/src/rules/array-element-newline.md @@ -1,4 +1,19 @@ -# enforce line breaks between array elements (array-element-newline) +--- +title: array-element-newline +layout: doc +rule_type: layout +related_rules: +- array-bracket-spacing +- array-bracket-newline +- object-property-newline +- object-curly-spacing +- object-curly-newline +- max-statements-per-line +- block-spacing +- brace-style +--- + + A number of style guides require or disallow line breaks between array elements. @@ -37,12 +52,19 @@ Alternatively, different configurations can be specified for array expressions a Examples of **incorrect** code for this rule with the default `"always"` option: +:::incorrect + ```js /*eslint array-element-newline: ["error", "always"]*/ var c = [1, 2]; var d = [1, 2, 3]; -var e = [ +var e = [1, 2, 3 +]; +var f = [ + 1, 2, 3 +]; +var g = [ function foo() { dosomething(); }, function bar() { @@ -51,8 +73,12 @@ var e = [ ]; ``` +::: + Examples of **correct** code for this rule with the default `"always"` option: +:::correct + ```js /*eslint array-element-newline: ["error", "always"]*/ @@ -63,6 +89,11 @@ var c = [1, var d = [1, 2, 3]; +var d = [ + 1, + 2, + 3 +]; var e = [ function foo() { dosomething(); @@ -73,10 +104,14 @@ var e = [ ]; ``` +::: + ### never Examples of **incorrect** code for this rule with the `"never"` option: +:::incorrect + ```js /*eslint array-element-newline: ["error", "never"]*/ @@ -99,8 +134,12 @@ var e = [ ]; ``` +::: + Examples of **correct** code for this rule with the `"never"` option: +:::correct + ```js /*eslint array-element-newline: ["error", "never"]*/ @@ -109,6 +148,11 @@ var b = [1]; var c = [1, 2]; var d = [1, 2, 3]; var e = [ + 1, 2, 3]; +var f = [ + 1, 2, 3 +]; +var g = [ function foo() { dosomething(); }, function bar() { @@ -117,10 +161,14 @@ var e = [ ]; ``` +::: + ### consistent Examples of **incorrect** code for this rule with the `"consistent"` option: +:::incorrect + ```js /*eslint array-element-newline: ["error", "consistent"]*/ @@ -140,8 +188,12 @@ var b = [ ]; ``` +::: + Examples of **correct** code for this rule with the `"consistent"` option: +:::correct + ```js /*eslint array-element-newline: ["error", "consistent"]*/ @@ -180,10 +232,14 @@ var h = [ ]; ``` +::: + ### multiline Examples of **incorrect** code for this rule with the `{ "multiline": true }` option: +:::incorrect + ```js /*eslint array-element-newline: ["error", { "multiline": true }]*/ @@ -198,8 +254,12 @@ var e = [ ]; ``` +::: + Examples of **correct** code for this rule with the `{ "multiline": true }` option: +:::correct + ```js /*eslint array-element-newline: ["error", { "multiline": true }]*/ @@ -217,10 +277,14 @@ var e = [ ]; ``` +::: + ### minItems Examples of **incorrect** code for this rule with the `{ "minItems": 3 }` option: +:::incorrect + ```js /*eslint array-element-newline: ["error", { "minItems": 3 }]*/ @@ -237,8 +301,12 @@ var e = [ ]; ``` +::: + Examples of **correct** code for this rule with the `{ "minItems": 3 }` option: +:::correct + ```js /*eslint array-element-newline: ["error", { "minItems": 3 }]*/ @@ -257,10 +325,14 @@ var e = [ ]; ``` +::: + ### multiline and minItems Examples of **incorrect** code for this rule with the `{ "multiline": true, "minItems": 3 }` options: +:::incorrect + ```js /*eslint array-element-newline: ["error", { "multiline": true, "minItems": 3 }]*/ @@ -276,8 +348,12 @@ var e = [ ]; ``` +::: + Examples of **correct** code for this rule with the `{ "multiline": true, "minItems": 3 }` options: +:::correct + ```js /*eslint array-element-newline: ["error", { "multiline": true, "minItems": 3 }]*/ @@ -297,10 +373,14 @@ var e = [ ]; ``` +::: + ### ArrayExpression and ArrayPattern Examples of **incorrect** code for this rule with the `{ "ArrayExpression": "always", "ArrayPattern": "never" }` options: +:::incorrect + ```js /*eslint array-element-newline: ["error", { "ArrayExpression": "always", "ArrayPattern": "never" }]*/ @@ -327,8 +407,12 @@ j = function bar() { }] = arr ``` +::: + Examples of **correct** code for this rule with the `{ "ArrayExpression": "always", "ArrayPattern": "never" }` options: +:::correct + ```js /*eslint array-element-newline: ["error", { "ArrayExpression": "always", "ArrayPattern": "never" }]*/ @@ -355,6 +439,8 @@ var [i = function foo() { }] = arr ``` +::: + ## When Not To Use It If you don't want to enforce linebreaks between array elements, don't enable this rule. @@ -362,14 +448,3 @@ If you don't want to enforce linebreaks between array elements, don't enable thi ## Compatibility * **JSCS:** [validateNewlineAfterArrayElements](https://jscs-dev.github.io/rule/validateNewlineAfterArrayElements) - -## Related Rules - -* [array-bracket-spacing](array-bracket-spacing.md) -* [array-bracket-newline](array-bracket-newline.md) -* [object-property-newline](object-property-newline.md) -* [object-curly-spacing](object-curly-spacing.md) -* [object-curly-newline](object-curly-newline.md) -* [max-statements-per-line](max-statements-per-line.md) -* [block-spacing](block-spacing.md) -* [brace-style](brace-style.md) diff --git a/eslint/docs/rules/arrow-body-style.md b/eslint/docs/src/rules/arrow-body-style.md similarity index 94% rename from eslint/docs/rules/arrow-body-style.md rename to eslint/docs/src/rules/arrow-body-style.md index 31c0cfe..1964b1a 100644 --- a/eslint/docs/rules/arrow-body-style.md +++ b/eslint/docs/src/rules/arrow-body-style.md @@ -1,4 +1,8 @@ -# Require braces in arrow function body (arrow-body-style) +--- +title: arrow-body-style +layout: doc +rule_type: suggestion +--- Arrow functions have two syntactic forms for their function bodies. They may be defined with a *block* body (denoted by curly braces) `() => { ... }` or with a single expression `() => ...`, whose value is implicitly returned. @@ -24,14 +28,20 @@ The second one is an object for more fine-grained configuration when the first o Examples of **incorrect** code for this rule with the `"always"` option: +:::incorrect + ```js /*eslint arrow-body-style: ["error", "always"]*/ /*eslint-env es6*/ let foo = () => 0; ``` +::: + Examples of **correct** code for this rule with the `"always"` option: +:::correct + ```js let foo = () => { return 0; @@ -42,10 +52,14 @@ let foo = (retv, name) => { }; ``` +::: + ### as-needed Examples of **incorrect** code for this rule with the default `"as-needed"` option: +:::incorrect + ```js /*eslint arrow-body-style: ["error", "as-needed"]*/ /*eslint-env es6*/ @@ -63,8 +77,12 @@ let foo = () => { }; ``` +::: + Examples of **correct** code for this rule with the default `"as-needed"` option: +:::correct + ```js /*eslint arrow-body-style: ["error", "as-needed"]*/ /*eslint-env es6*/ @@ -89,12 +107,16 @@ let foo = () => { let foo = () => ({ bar: 0 }); ``` +::: + #### requireReturnForObjectLiteral > This option is only applicable when used in conjunction with the `"as-needed"` option. Examples of **incorrect** code for this rule with the `{ "requireReturnForObjectLiteral": true }` option: +:::incorrect + ```js /*eslint arrow-body-style: ["error", "as-needed", { "requireReturnForObjectLiteral": true }]*/ /*eslint-env es6*/ @@ -102,8 +124,12 @@ let foo = () => ({}); let foo = () => ({ bar: 0 }); ``` +::: + Examples of **correct** code for this rule with the `{ "requireReturnForObjectLiteral": true }` option: +:::correct + ```js /*eslint arrow-body-style: ["error", "as-needed", { "requireReturnForObjectLiteral": true }]*/ /*eslint-env es6*/ @@ -112,10 +138,14 @@ let foo = () => {}; let foo = () => { return { bar: 0 }; }; ``` +::: + ### never Examples of **incorrect** code for this rule with the `"never"` option: +:::incorrect + ```js /*eslint arrow-body-style: ["error", "never"]*/ /*eslint-env es6*/ @@ -129,8 +159,12 @@ let foo = (retv, name) => { }; ``` +::: + Examples of **correct** code for this rule with the `"never"` option: +:::correct + ```js /*eslint arrow-body-style: ["error", "never"]*/ /*eslint-env es6*/ @@ -138,3 +172,5 @@ Examples of **correct** code for this rule with the `"never"` option: let foo = () => 0; let foo = () => ({ foo: 0 }); ``` + +::: diff --git a/eslint/docs/rules/arrow-parens.md b/eslint/docs/src/rules/arrow-parens.md similarity index 94% rename from eslint/docs/rules/arrow-parens.md rename to eslint/docs/src/rules/arrow-parens.md index 8a133cd..b3214ce 100644 --- a/eslint/docs/rules/arrow-parens.md +++ b/eslint/docs/src/rules/arrow-parens.md @@ -1,4 +1,12 @@ -# Require parens in arrow function arguments (arrow-parens) +--- +title: arrow-parens +layout: doc +rule_type: layout +further_reading: +- https://github.com/airbnb/javascript#arrows--one-arg-parens +--- + + Arrow functions can omit parentheses when they have exactly one parameter. In all other cases the parameter(s) must be wrapped in parentheses. This rule enforces the consistent use of parentheses in arrow functions. @@ -61,6 +69,8 @@ Object properties for variants of the `"as-needed"` option: Examples of **incorrect** code for this rule with the default `"always"` option: +:::incorrect + ```js /*eslint arrow-parens: ["error", "always"]*/ /*eslint-env es6*/ @@ -73,8 +83,12 @@ a.then(foo => a); a(foo => { if (true) {} }); ``` +::: + Examples of **correct** code for this rule with the default `"always"` option: +:::correct + ```js /*eslint arrow-parens: ["error", "always"]*/ /*eslint-env es6*/ @@ -87,6 +101,8 @@ a.then((foo) => {}); a.then((foo) => { if (true) {} }); ``` +::: + #### If Statements One of the benefits of this option is that it prevents the incorrect use of arrow functions in conditionals: @@ -148,6 +164,8 @@ var f = (a) => b ? c: d; Examples of **incorrect** code for this rule with the `"as-needed"` option: +:::incorrect + ```js /*eslint arrow-parens: ["error", "as-needed"]*/ /*eslint-env es6*/ @@ -163,8 +181,12 @@ const g = /* comment */ (a) => a + a; const h = (a) /* comment */ => a + a; ``` +::: + Examples of **correct** code for this rule with the `"as-needed"` option: +:::correct + ```js /*eslint arrow-parens: ["error", "as-needed"]*/ /*eslint-env es6*/ @@ -184,10 +206,14 @@ const g = (/* comment */ a) => a + a; const h = (a /* comment */) => a + a; ``` +::: + ### requireForBlockBody Examples of **incorrect** code for the `{ "requireForBlockBody": true }` option: +:::incorrect + ```js /*eslint arrow-parens: [2, "as-needed", { "requireForBlockBody": true }]*/ /*eslint-env es6*/ @@ -202,8 +228,12 @@ a.map(x => { a.then(foo => {}); ``` +::: + Examples of **correct** code for the `{ "requireForBlockBody": true }` option: +:::correct + ```js /*eslint arrow-parens: [2, "as-needed", { "requireForBlockBody": true }]*/ /*eslint-env es6*/ @@ -222,7 +252,4 @@ a((foo) => { if (true) {} }); ({a, b}) => a; ``` -## Further Reading - -* The `"as-needed", { "requireForBlockBody": true }` rule is directly inspired by the Airbnb - [JS Style Guide](https://github.com/airbnb/javascript#arrows--one-arg-parens). +::: diff --git a/eslint/docs/rules/arrow-spacing.md b/eslint/docs/src/rules/arrow-spacing.md similarity index 91% rename from eslint/docs/rules/arrow-spacing.md rename to eslint/docs/src/rules/arrow-spacing.md index d0cea1b..e24b168 100644 --- a/eslint/docs/rules/arrow-spacing.md +++ b/eslint/docs/src/rules/arrow-spacing.md @@ -1,4 +1,10 @@ -# Require space before/after arrow function's arrow (arrow-spacing) +--- +title: arrow-spacing +layout: doc +rule_type: layout +--- + + This rule normalize style of spacing before/after an arrow function's arrow(`=>`). @@ -22,6 +28,8 @@ The default configuration is `{ "before": true, "after": true }`. Examples of **incorrect** code for this rule with the default `{ "before": true, "after": true }` option: +:::incorrect + ```js /*eslint arrow-spacing: "error"*/ /*eslint-env es6*/ @@ -36,8 +44,12 @@ a=> a; () =>{'\n'}; ``` +::: + Examples of **correct** code for this rule with the default `{ "before": true, "after": true }` option: +:::correct + ```js /*eslint arrow-spacing: "error"*/ /*eslint-env es6*/ @@ -48,8 +60,12 @@ a => a; () => {'\n'}; ``` +::: + Examples of **incorrect** code for this rule with the `{ "before": false, "after": false }` option: +:::incorrect + ```js /*eslint arrow-spacing: ["error", { "before": false, "after": false }]*/ /*eslint-env es6*/ @@ -59,8 +75,12 @@ Examples of **incorrect** code for this rule with the `{ "before": false, "after ()=> {'\n'}; ``` +::: + Examples of **correct** code for this rule with the `{ "before": false, "after": false }` option: +:::correct + ```js /*eslint arrow-spacing: ["error", { "before": false, "after": false }]*/ /*eslint-env es6*/ @@ -70,8 +90,12 @@ Examples of **correct** code for this rule with the `{ "before": false, "after": ()=>{'\n'}; ``` +::: + Examples of **incorrect** code for this rule with the `{ "before": false, "after": true }` option: +:::incorrect + ```js /*eslint arrow-spacing: ["error", { "before": false, "after": true }]*/ /*eslint-env es6*/ @@ -81,8 +105,12 @@ Examples of **incorrect** code for this rule with the `{ "before": false, "after ()=>{'\n'}; ``` +::: + Examples of **correct** code for this rule with the `{ "before": false, "after": true }` option: +:::correct + ```js /*eslint arrow-spacing: ["error", { "before": false, "after": true }]*/ /*eslint-env es6*/ @@ -91,3 +119,5 @@ Examples of **correct** code for this rule with the `{ "before": false, "after": (a)=> {}; ()=> {'\n'}; ``` + +::: diff --git a/eslint/docs/rules/block-scoped-var.md b/eslint/docs/src/rules/block-scoped-var.md similarity index 85% rename from eslint/docs/rules/block-scoped-var.md rename to eslint/docs/src/rules/block-scoped-var.md index 9c308fe..566d602 100644 --- a/eslint/docs/rules/block-scoped-var.md +++ b/eslint/docs/src/rules/block-scoped-var.md @@ -1,4 +1,12 @@ -# Treat var as Block Scoped (block-scoped-var) +--- +title: block-scoped-var +layout: doc +rule_type: suggestion +further_reading: +- https://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html +- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var#var_hoisting +--- + The `block-scoped-var` rule generates warnings when variables are used outside of the block in which they were defined. This emulates C-style block scope. @@ -8,6 +16,8 @@ This rule aims to reduce the usage of variables outside of their binding context Examples of **incorrect** code for this rule: +:::incorrect + ```js /*eslint block-scoped-var: "error"*/ @@ -52,8 +62,12 @@ class C { } ``` +::: + Examples of **correct** code for this rule: +:::correct + ```js /*eslint block-scoped-var: "error"*/ @@ -105,7 +119,4 @@ class C { } ``` -## Further Reading - -* [JavaScript Scoping and Hoisting](http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html) -* [var Hoisting](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var#var_hoisting) +::: diff --git a/eslint/docs/rules/block-spacing.md b/eslint/docs/src/rules/block-spacing.md similarity index 88% rename from eslint/docs/rules/block-spacing.md rename to eslint/docs/src/rules/block-spacing.md index 04c7aeb..99b3540 100644 --- a/eslint/docs/rules/block-spacing.md +++ b/eslint/docs/src/rules/block-spacing.md @@ -1,4 +1,13 @@ -# Disallow or enforce spaces inside of blocks after opening block and before closing block (block-spacing) +--- +title: block-spacing +layout: doc +rule_type: layout +related_rules: +- space-before-blocks +- brace-style +--- + + ## Rule Details @@ -15,6 +24,8 @@ This rule has a string option: Examples of **incorrect** code for this rule with the default `"always"` option: +:::incorrect + ```js /*eslint block-spacing: "error"*/ @@ -29,8 +40,12 @@ class C { } ``` +::: + Examples of **correct** code for this rule with the default `"always"` option: +:::correct + ```js /*eslint block-spacing: "error"*/ @@ -42,10 +57,14 @@ class C { } ``` +::: + ### never Examples of **incorrect** code for this rule with the `"never"` option: +:::incorrect + ```js /*eslint block-spacing: ["error", "never"]*/ @@ -57,8 +76,12 @@ class C { } ``` +::: + Examples of **correct** code for this rule with the `"never"` option: +:::correct + ```js /*eslint block-spacing: ["error", "never"]*/ @@ -70,6 +93,8 @@ class C { } ``` +::: + ## When Not To Use It If you don't want to be notified about spacing style inside of blocks, you can safely disable this rule. diff --git a/eslint/docs/rules/brace-style.md b/eslint/docs/src/rules/brace-style.md similarity index 94% rename from eslint/docs/rules/brace-style.md rename to eslint/docs/src/rules/brace-style.md index c22c790..ccca32f 100644 --- a/eslint/docs/rules/brace-style.md +++ b/eslint/docs/src/rules/brace-style.md @@ -1,4 +1,15 @@ -# Require Brace Style (brace-style) +--- +title: brace-style +layout: doc +rule_type: layout +related_rules: +- block-spacing +- space-before-blocks +further_reading: +- https://en.wikipedia.org/wiki/Indent_style +--- + + Brace style is closely related to [indent style](https://en.wikipedia.org/wiki/Indent_style) in programming and describes the placement of braces relative to their control statement and body. There are probably a dozen, if not more, brace styles in the world. @@ -58,6 +69,8 @@ This rule has an object option for an exception: Examples of **incorrect** code for this rule with the default `"1tbs"` option: +:::incorrect + ```js /*eslint brace-style: "error"*/ @@ -95,8 +108,12 @@ class C } ``` +::: + Examples of **correct** code for this rule with the default `"1tbs"` option: +:::correct + ```js /*eslint brace-style: "error"*/ @@ -131,8 +148,12 @@ if (foo) bar(); else if (baz) boom(); ``` +::: + Examples of **correct** code for this rule with the `"1tbs", { "allowSingleLine": true }` options: +:::correct + ```js /*eslint brace-style: ["error", "1tbs", { "allowSingleLine": true }]*/ @@ -172,10 +193,14 @@ class C { class D { static { foo(); } } ``` +::: + ### stroustrup Examples of **incorrect** code for this rule with the `"stroustrup"` option: +:::incorrect + ```js /*eslint brace-style: ["error", "stroustrup"]*/ @@ -212,8 +237,12 @@ if (foo) { } ``` +::: + Examples of **correct** code for this rule with the `"stroustrup"` option: +:::correct + ```js /*eslint brace-style: ["error", "stroustrup"]*/ @@ -250,8 +279,12 @@ if (foo) bar(); else if (baz) boom(); ``` +::: + Examples of **correct** code for this rule with the `"stroustrup", { "allowSingleLine": true }` options: +:::correct + ```js /*eslint brace-style: ["error", "stroustrup", { "allowSingleLine": true }]*/ @@ -272,10 +305,14 @@ class C { class D { static { foo(); } } ``` +::: + ### allman Examples of **incorrect** code for this rule with the `"allman"` option: +:::incorrect + ```js /*eslint brace-style: ["error", "allman"]*/ @@ -308,8 +345,12 @@ if (foo) { } ``` +::: + Examples of **correct** code for this rule with the `"allman"` option: +:::correct + ```js /*eslint brace-style: ["error", "allman"]*/ @@ -354,8 +395,12 @@ if (foo) bar(); else if (baz) boom(); ``` +::: + Examples of **correct** code for this rule with the `"allman", { "allowSingleLine": true }` options: +:::correct + ```js /*eslint brace-style: ["error", "allman", { "allowSingleLine": true }]*/ @@ -380,10 +425,8 @@ class C class D { static { foo(); } } ``` +::: + ## When Not To Use It If you don't want to enforce a particular brace style, don't enable this rule. - -## Further Reading - -* [Indent style](https://en.wikipedia.org/wiki/Indent_style) diff --git a/eslint/docs/rules/callback-return.md b/eslint/docs/src/rules/callback-return.md similarity index 92% rename from eslint/docs/rules/callback-return.md rename to eslint/docs/src/rules/callback-return.md index c4e7277..2b7ded0 100644 --- a/eslint/docs/rules/callback-return.md +++ b/eslint/docs/src/rules/callback-return.md @@ -1,4 +1,14 @@ -# Enforce Return After Callback (callback-return) +--- +title: callback-return +layout: doc +rule_type: suggestion +related_rules: +- handle-callback-err +further_reading: +- https://github.com/maxogden/art-of-node#callbacks +- https://web.archive.org/web/20171224042620/https://docs.nodejitsu.com/articles/errors/what-are-the-error-conventions/ +--- + This rule was **deprecated** in ESLint v7.0.0. Please use the corresponding rule in [`eslint-plugin-node`](https://github.com/mysticatea/eslint-plugin-node). @@ -32,6 +42,8 @@ The rule takes a single option - an array of possible callback names - which may Examples of **incorrect** code for this rule with the default `["callback", "cb", "next"]` option: +:::incorrect + ```js /*eslint callback-return: "error"*/ @@ -43,8 +55,12 @@ function foo(err, callback) { } ``` +::: + Examples of **correct** code for this rule with the default `["callback", "cb", "next"]` option: +:::correct + ```js /*eslint callback-return: "error"*/ @@ -56,10 +72,14 @@ function foo(err, callback) { } ``` +::: + ### Supplied callback names Examples of **incorrect** code for this rule with the option `["done", "send.error", "send.success"]`: +:::incorrect + ```js /*eslint callback-return: ["error", ["done", "send.error", "send.success"]]*/ @@ -78,8 +98,12 @@ function bar(err, send) { } ``` +::: + Examples of **correct** code for this rule with the option `["done", "send.error", "send.success"]`: +:::correct + ```js /*eslint callback-return: ["error", ["done", "send.error", "send.success"]]*/ @@ -98,6 +122,8 @@ function bar(err, send) { } ``` +::: + ## Known Limitations Because it is difficult to understand the meaning of a program through static analysis, this rule has limitations: @@ -164,12 +190,3 @@ function foo(err, callback) { There are some cases where you might want to call a callback function more than once. In those cases this rule may lead to incorrect behavior. In those cases you may want to reserve a special name for those callbacks and not include that in the list of callbacks that trigger warnings. - -## Further Reading - -* [The Art Of Node: Callbacks](https://github.com/maxogden/art-of-node#callbacks) -* [Nodejitsu: What are the error conventions?](https://docs.nodejitsu.com/articles/errors/what-are-the-error-conventions/) - -## Related Rules - -* [handle-callback-err](handle-callback-err.md) diff --git a/eslint/docs/rules/camelcase.md b/eslint/docs/src/rules/camelcase.md similarity index 95% rename from eslint/docs/rules/camelcase.md rename to eslint/docs/src/rules/camelcase.md index 164dfab..7678aab 100644 --- a/eslint/docs/rules/camelcase.md +++ b/eslint/docs/src/rules/camelcase.md @@ -1,4 +1,9 @@ -# Require CamelCase (camelcase) +--- +title: camelcase +layout: doc +rule_type: suggestion +--- + When it comes to naming variables, style guides generally fall into one of two camps: camelcase (`variableName`) and underscores (`variable_name`). This rule focuses on using the camelcase approach. If your style guide calls for camelCasing your variable names, then this rule is for you! @@ -24,6 +29,8 @@ This rule has an object option: Examples of **incorrect** code for this rule with the default `{ "properties": "always" }` option: +:::incorrect + ```js /*eslint camelcase: "error"*/ @@ -62,8 +69,12 @@ var { foo: no_camelcased } = bar; var { foo: bar_baz = 1 } = quz; ``` +::: + Examples of **correct** code for this rule with the default `{ "properties": "always" }` option: +:::correct + ```js /*eslint camelcase: "error"*/ @@ -102,10 +113,14 @@ var { foo: isCamelCased = 1 } = quz; ``` +::: + ### properties: "never" Examples of **correct** code for this rule with the `{ "properties": "never" }` option: +:::correct + ```js /*eslint camelcase: ["error", {properties: "never"}]*/ @@ -114,10 +129,14 @@ var obj = { }; ``` +::: + ### ignoreDestructuring: false Examples of **incorrect** code for this rule with the default `{ "ignoreDestructuring": false }` option: +:::incorrect + ```js /*eslint camelcase: "error"*/ @@ -132,10 +151,14 @@ var { category_id: category_alias } = query; var { category_id: categoryId, ...other_props } = query; ``` +::: + ### ignoreDestructuring: true Examples of **incorrect** code for this rule with the `{ "ignoreDestructuring": true }` option: +:::incorrect + ```js /*eslint camelcase: ["error", {ignoreDestructuring: true}]*/ @@ -144,8 +167,12 @@ var { category_id: category_alias } = query; var { category_id, ...other_props } = query; ``` +::: + Examples of **correct** code for this rule with the `{ "ignoreDestructuring": true }` option: +:::correct + ```js /*eslint camelcase: ["error", {ignoreDestructuring: true}]*/ @@ -156,10 +183,14 @@ var { category_id = 1 } = query; var { category_id: category_id } = query; ``` +::: + Please note that this option applies only to identifiers inside destructuring patterns. It doesn't additionally allow any particular use of the created variables later in the code apart from the use that is already allowed by default or by other options. Examples of additional **incorrect** code for this rule with the `{ "ignoreDestructuring": true }` option: +:::incorrect + ```js /*eslint camelcase: ["error", {ignoreDestructuring: true}]*/ @@ -167,10 +198,14 @@ var { some_property } = obj; // allowed by {ignoreDestructuring: true} var foo = some_property + 1; // error, ignoreDestructuring does not apply to this statement ``` +::: + A common use case for this option is to avoid useless renaming when the identifier is not intended to be used later in the code. Examples of additional **correct** code for this rule with the `{ "ignoreDestructuring": true }` option: +:::correct + ```js /*eslint camelcase: ["error", {ignoreDestructuring: true}]*/ @@ -178,10 +213,14 @@ var { some_property, ...rest } = obj; // do something with 'rest', nothing with 'some_property' ``` +::: + Another common use case for this option is in combination with `{ "properties": "never" }`, when the identifier is intended to be used only as a property shorthand. Examples of additional **correct** code for this rule with the `{ "properties": "never", "ignoreDestructuring": true }` options: +:::correct + ```js /*eslint camelcase: ["error", {"properties": "never", ignoreDestructuring: true}]*/ @@ -189,20 +228,28 @@ var { some_property } = obj; doSomething({ some_property }); ``` +::: + ### ignoreImports: false Examples of **incorrect** code for this rule with the default `{ "ignoreImports": false }` option: +:::incorrect + ```js /*eslint camelcase: "error"*/ import { snake_cased } from 'mod'; ``` +::: + ### ignoreImports: true Examples of **incorrect** code for this rule with the `{ "ignoreImports": true }` option: +:::incorrect + ```js /*eslint camelcase: ["error", {ignoreImports: true}]*/ @@ -211,18 +258,26 @@ import default_import from 'mod'; import * as namespaced_import from 'mod'; ``` +::: + Examples of **correct** code for this rule with the `{ "ignoreImports": true }` option: +:::correct + ```js /*eslint camelcase: ["error", {ignoreImports: true}]*/ import { snake_cased } from 'mod'; ``` +::: + ### ignoreGlobals: false Examples of **incorrect** code for this rule with the default `{ "ignoreGlobals": false }` option: +:::incorrect + ```js /*eslint camelcase: ["error", {ignoreGlobals: false}]*/ /* global no_camelcased */ @@ -230,10 +285,14 @@ Examples of **incorrect** code for this rule with the default `{ "ignoreGlobals" const foo = no_camelcased; ``` +::: + ### ignoreGlobals: true Examples of **correct** code for this rule with the `{ "ignoreGlobals": true }` option: +:::correct + ```js /*eslint camelcase: ["error", {ignoreGlobals: true}]*/ /* global no_camelcased */ @@ -241,10 +300,14 @@ Examples of **correct** code for this rule with the `{ "ignoreGlobals": true }` const foo = no_camelcased; ``` -## allow +::: + +### allow Examples of **correct** code for this rule with the `allow` option: +:::correct + ```js /*eslint camelcase: ["error", {allow: ["UNSAFE_componentWillMount"]}]*/ @@ -253,6 +316,10 @@ function UNSAFE_componentWillMount() { } ``` +::: + +::: correct + ```js /*eslint camelcase: ["error", {allow: ["^UNSAFE_"]}]*/ @@ -265,6 +332,8 @@ function UNSAFE_componentWillMount() { } ``` +::: + ## When Not To Use It If you have established coding standards using a different naming convention (separating words with underscores), turn this rule off. diff --git a/eslint/docs/rules/capitalized-comments.md b/eslint/docs/src/rules/capitalized-comments.md similarity index 96% rename from eslint/docs/rules/capitalized-comments.md rename to eslint/docs/src/rules/capitalized-comments.md index ec3253b..8c62ae5 100644 --- a/eslint/docs/rules/capitalized-comments.md +++ b/eslint/docs/src/rules/capitalized-comments.md @@ -1,4 +1,10 @@ -# enforce or disallow capitalization of the first letter of a comment (capitalized-comments) +--- +title: capitalized-comments +layout: doc +rule_type: suggestion +--- + + Comments are useful for leaving information for future developers. In order for that information to be useful and not distracting, it is sometimes desirable for comments to follow a particular style. One element of comment formatting styles is whether the first word of a comment should be capitalized or lowercase. @@ -12,6 +18,8 @@ By default, this rule will require a non-lowercase letter at the beginning of co Examples of **incorrect** code for this rule: +:::incorrect + ```js /* eslint capitalized-comments: ["error"] */ @@ -19,8 +27,12 @@ Examples of **incorrect** code for this rule: ``` +::: + Examples of **correct** code for this rule: +:::correct + ```js // Capitalized comment @@ -45,6 +57,8 @@ Examples of **correct** code for this rule: ``` +::: + ### Options This rule has two options: a string value `"always"` or `"never"` which determines whether capitalization of the first word of a comment should be required or forbidden, and optionally an object containing more configuration parameters for the rule. @@ -79,6 +93,8 @@ Note that configuration comments and comments which start with URLs are never re Examples of **incorrect** code for this rule: +:::incorrect + ```js /* eslint capitalized-comments: ["error", "always"] */ @@ -86,8 +102,12 @@ Examples of **incorrect** code for this rule: ``` +::: + Examples of **correct** code for this rule: +:::correct + ```js /* eslint capitalized-comments: ["error", "always"] */ @@ -113,12 +133,16 @@ Examples of **correct** code for this rule: ``` +::: + #### `"never"` Using the `"never"` option means that this rule will report any comments which start with an uppercase letter. Examples of **incorrect** code with the `"never"` option: +:::incorrect + ```js /* eslint capitalized-comments: ["error", "never"] */ @@ -126,8 +150,12 @@ Examples of **incorrect** code with the `"never"` option: ``` +::: + Examples of **correct** code with the `"never"` option: +:::correct + ```js /* eslint capitalized-comments: ["error", "never"] */ @@ -139,12 +167,16 @@ Examples of **correct** code with the `"never"` option: ``` +::: + #### `ignorePattern` The `ignorePattern` object takes a string value, which is used as a regular expression applied to the first word of a comment. Examples of **correct** code with the `"ignorePattern"` option set to `"pragma"`: +:::correct + ```js /* eslint capitalized-comments: ["error", "always", { "ignorePattern": "pragma" }] */ @@ -154,12 +186,16 @@ function foo() { ``` +::: + #### `ignoreInlineComments` Setting the `ignoreInlineComments` option to `true` means that comments in the middle of code (with a token on the same line as the beginning of the comment, and another token on the same line as the end of the comment) will not be reported by this rule. Examples of **correct** code with the `"ignoreInlineComments"` option set to `true`: +:::correct + ```js /* eslint capitalized-comments: ["error", "always", { "ignoreInlineComments": true }] */ @@ -168,12 +204,16 @@ function foo(/* ignored */ a) { ``` +::: + #### `ignoreConsecutiveComments` If the `ignoreConsecutiveComments` option is set to `true`, then comments which otherwise violate the rule will not be reported as long as they immediately follow another comment. This can be applied more than once. Examples of **correct** code with `ignoreConsecutiveComments` set to `true`: +:::correct + ```js /* eslint capitalized-comments: ["error", "always", { "ignoreConsecutiveComments": true }] */ @@ -188,8 +228,12 @@ Examples of **correct** code with `ignoreConsecutiveComments` set to `true`: */ ``` +::: + Examples of **incorrect** code with `ignoreConsecutiveComments` set to `true`: +:::incorrect + ```js /* eslint capitalized-comments: ["error", "always", { "ignoreConsecutiveComments": true }] */ @@ -197,6 +241,8 @@ Examples of **incorrect** code with `ignoreConsecutiveComments` set to `true`: // this comment does NOT get reported, since it is a consecutive comment. ``` +::: + ### Using Different Options for Line and Block Comments If you wish to have a different configuration for line comments and block comments, you can do so by using two different object configurations (note that the capitalization option will be enforced consistently for line and block comments): @@ -221,6 +267,8 @@ If you wish to have a different configuration for line comments and block commen Examples of **incorrect** code with different line and block comment configuration: +:::incorrect + ```js /* eslint capitalized-comments: ["error", "always", { "block": { "ignorePattern": "blockignore" } }] */ @@ -229,8 +277,12 @@ Examples of **incorrect** code with different line and block comment configurati ``` +::: + Examples of **correct** code with different line and block comment configuration: +:::correct + ```js /* eslint capitalized-comments: ["error", "always", { "block": { "ignorePattern": "blockignore" } }] */ @@ -239,6 +291,8 @@ Examples of **correct** code with different line and block comment configuration ``` +::: + ## When Not To Use It This rule can be disabled if you do not care about the grammatical style of comments in your codebase. diff --git a/eslint/docs/rules/class-methods-use-this.md b/eslint/docs/src/rules/class-methods-use-this.md similarity index 90% rename from eslint/docs/rules/class-methods-use-this.md rename to eslint/docs/src/rules/class-methods-use-this.md index 7e25b06..49c74e6 100644 --- a/eslint/docs/rules/class-methods-use-this.md +++ b/eslint/docs/src/rules/class-methods-use-this.md @@ -1,4 +1,12 @@ -# Enforce that class methods utilize `this` (class-methods-use-this) +--- +title: class-methods-use-this +layout: doc +rule_type: suggestion +further_reading: +- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes +- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/static +--- + If a class method does not use `this`, it can *sometimes* be made into a static function. If you do convert the method into a static function, instances of the class that call that particular method have to be converted to a static call as well (`MyClass.callStaticMethod()`) @@ -51,6 +59,8 @@ This rule is aimed to flag class methods that do not use `this`. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint class-methods-use-this: "error"*/ /*eslint-env es6*/ @@ -62,8 +72,12 @@ class A { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint class-methods-use-this: "error"*/ /*eslint-env es6*/ @@ -90,6 +104,8 @@ class A { } ``` +::: + ## Options This rule has two options: @@ -107,6 +123,8 @@ The `exceptMethods` option allows you to pass an array of method names for which Examples of **incorrect** code for this rule when used without exceptMethods: +::: incorrect + ```js /*eslint class-methods-use-this: "error"*/ @@ -116,8 +134,12 @@ class A { } ``` +::: + Examples of **correct** code for this rule when used with exceptMethods: +::: correct + ```js /*eslint class-methods-use-this: ["error", { "exceptMethods": ["foo", "#bar"] }] */ @@ -129,7 +151,9 @@ class A { } ``` -## enforceForClassFields +::: + +### enforceForClassFields ```js "class-methods-use-this": [<enabled>, { "enforceForClassFields": true | false }] @@ -139,6 +163,8 @@ The `enforceForClassFields` option enforces that arrow functions and function ex Examples of **incorrect** code for this rule with the `{ "enforceForClassFields": true }` option (default): +::: incorrect + ```js /*eslint class-methods-use-this: ["error", { "enforceForClassFields": true }] */ @@ -147,8 +173,12 @@ class A { } ``` +::: + Examples of **correct** code for this rule with the `{ "enforceForClassFields": true }` option (default): +::: correct + ```js /*eslint class-methods-use-this: ["error", { "enforceForClassFields": true }] */ @@ -157,8 +187,12 @@ class A { } ``` +::: + Examples of **correct** code for this rule with the `{ "enforceForClassFields": false }` option: +::: correct + ```js /*eslint class-methods-use-this: ["error", { "enforceForClassFields": false }] */ @@ -167,7 +201,4 @@ class A { } ``` -## Further Reading - -* [Classes](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes) -* [Static Methods](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/static) +::: diff --git a/eslint/docs/rules/comma-dangle.md b/eslint/docs/src/rules/comma-dangle.md similarity index 95% rename from eslint/docs/rules/comma-dangle.md rename to eslint/docs/src/rules/comma-dangle.md index ef92342..b3f27a2 100644 --- a/eslint/docs/rules/comma-dangle.md +++ b/eslint/docs/src/rules/comma-dangle.md @@ -1,4 +1,10 @@ -# require or disallow trailing commas (comma-dangle) +--- +title: comma-dangle +layout: doc +rule_type: layout +--- + + Trailing commas in object literals are valid according to the ECMAScript 5 (and ECMAScript 3!) spec. However, IE8 (when not in IE8 document mode) and below will throw an error when it encounters trailing commas in JavaScript. @@ -73,6 +79,8 @@ The default for each option is `"never"` unless otherwise specified. Examples of **incorrect** code for this rule with the default `"never"` option: +:::incorrect + ```js /*eslint comma-dangle: ["error", "never"]*/ @@ -89,8 +97,12 @@ foo({ }); ``` +::: + Examples of **correct** code for this rule with the default `"never"` option: +:::correct + ```js /*eslint comma-dangle: ["error", "never"]*/ @@ -107,10 +119,14 @@ foo({ }); ``` +::: + ### always Examples of **incorrect** code for this rule with the `"always"` option: +:::incorrect + ```js /*eslint comma-dangle: ["error", "always"]*/ @@ -127,8 +143,12 @@ foo({ }); ``` +::: + Examples of **correct** code for this rule with the `"always"` option: +:::correct + ```js /*eslint comma-dangle: ["error", "always"]*/ @@ -145,10 +165,14 @@ foo({ }); ``` +::: + ### always-multiline Examples of **incorrect** code for this rule with the `"always-multiline"` option: +:::incorrect + ```js /*eslint comma-dangle: ["error", "always-multiline"]*/ @@ -175,8 +199,12 @@ foo({ }); ``` +::: + Examples of **correct** code for this rule with the `"always-multiline"` option: +:::correct + ```js /*eslint comma-dangle: ["error", "always-multiline"]*/ @@ -202,10 +230,14 @@ foo({ }); ``` +::: + ### only-multiline Examples of **incorrect** code for this rule with the `"only-multiline"` option: +:::incorrect + ```js /*eslint comma-dangle: ["error", "only-multiline"]*/ @@ -218,8 +250,12 @@ var arr = [1, ``` +::: + Examples of **correct** code for this rule with the `"only-multiline"` option: +:::correct + ```js /*eslint comma-dangle: ["error", "only-multiline"]*/ @@ -260,10 +296,14 @@ foo({ }); ``` +::: + ### functions Examples of **incorrect** code for this rule with the `{"functions": "never"}` option: +:::incorrect + ```js /*eslint comma-dangle: ["error", {"functions": "never"}]*/ @@ -274,8 +314,12 @@ foo(a, b,); new foo(a, b,); ``` +::: + Examples of **correct** code for this rule with the `{"functions": "never"}` option: +:::correct + ```js /*eslint comma-dangle: ["error", {"functions": "never"}]*/ @@ -286,8 +330,12 @@ foo(a, b); new foo(a, b); ``` +::: + Examples of **incorrect** code for this rule with the `{"functions": "always"}` option: +:::incorrect + ```js /*eslint comma-dangle: ["error", {"functions": "always"}]*/ @@ -298,8 +346,12 @@ foo(a, b); new foo(a, b); ``` +::: + Examples of **correct** code for this rule with the `{"functions": "always"}` option: +:::correct + ```js /*eslint comma-dangle: ["error", {"functions": "always"}]*/ @@ -310,6 +362,8 @@ foo(a, b,); new foo(a, b,); ``` +::: + ## When Not To Use It You can turn this rule off if you are not concerned with dangling commas. diff --git a/eslint/docs/rules/comma-spacing.md b/eslint/docs/src/rules/comma-spacing.md similarity index 59% rename from eslint/docs/rules/comma-spacing.md rename to eslint/docs/src/rules/comma-spacing.md index 3160f86..169077d 100644 --- a/eslint/docs/rules/comma-spacing.md +++ b/eslint/docs/src/rules/comma-spacing.md @@ -1,4 +1,23 @@ -# Enforces spacing around commas (comma-spacing) +--- +title: comma-spacing +layout: doc +rule_type: layout +related_rules: +- array-bracket-spacing +- comma-style +- object-curly-spacing +- space-in-brackets +- space-in-parens +- space-infix-ops +- space-after-keywords +- space-unary-ops +- space-return-throw-case +further_reading: +- https://www.crockford.com/code.html +- https://dojotoolkit.org/reference-guide/1.9/developer/styleguide.html +--- + + Spacing around commas improves readability of a list of items. Although most of the style guidelines for languages prescribe adding a space after a comma and not before it, it is subjective to the preferences of a project. @@ -11,10 +30,13 @@ var foo = 1 ,bar = 2; This rule enforces consistent spacing before and after commas in variable declarations, array literals, object literals, function parameters, and sequences. -This rule does not apply in an `ArrayExpression` or `ArrayPattern` in either of the following cases: +This rule does not apply in either of the following cases: -* adjacent null elements -* an initial null element, to avoid conflicts with the [`array-bracket-spacing`](array-bracket-spacing.md) rule +* between two commas +* between opening bracket `[` and comma, to avoid conflicts with the [`array-bracket-spacing`](array-bracket-spacing) rule +* between comma and closing bracket `]`, to avoid conflicts with the [`array-bracket-spacing`](array-bracket-spacing) rule +* between comma and closing brace `}`, to avoid conflicts with the [`object-curly-spacing`](object-curly-spacing) rule +* between comma and closing parentheses `)`, to avoid conflicts with the [`space-in-parens`](space-in-parens) rule ## Options @@ -29,6 +51,8 @@ This rule has an object option: Examples of **incorrect** code for this rule with the default `{ "before": false, "after": true }` options: +:::incorrect + ```js /*eslint comma-spacing: ["error", { "before": false, "after": true }]*/ @@ -41,8 +65,12 @@ function foo(a ,b){} a ,b ``` +::: + Examples of **correct** code for this rule with the default `{ "before": false, "after": true }` options: +:::correct + ```js /*eslint comma-spacing: ["error", { "before": false, "after": true }]*/ @@ -57,19 +85,46 @@ function foo(a, b){} a, b ``` -Example of **correct** code for this rule with initial null element for the default `{ "before": false, "after": true }` options: +::: + +Additional examples of **correct** code for this rule with the default `{ "before": false, "after": true }` options: + +:::correct ```js /*eslint comma-spacing: ["error", { "before": false, "after": true }]*/ -/*eslint array-bracket-spacing: ["error", "always"]*/ -var arr = [ , 2, 3 ] +// this rule does not enforce spacing between two commas +var arr = [ + ,, + , , +]; + +// this rule does not enforce spacing after `[` and before `]` +var arr = [,]; +var arr = [ , ]; +var arr = [a, b,]; +[,] = arr; +[ , ] = arr; +[a, b,] = arr; + +// this rule does not enforce spacing before `}` +var obj = {x, y,}; +var {z, q,} = obj; +import {foo, bar,} from "mod"; + +// this rule does not enforce spacing before `)` +foo(a, b,) ``` +::: + ### before Examples of **incorrect** code for this rule with the `{ "before": true, "after": false }` options: +:::incorrect + ```js /*eslint comma-spacing: ["error", { "before": true, "after": false }]*/ @@ -81,8 +136,12 @@ function foo(a,b){} a, b ``` +::: + Examples of **correct** code for this rule with the `{ "before": true, "after": false }` options: +:::correct + ```js /*eslint comma-spacing: ["error", { "before": true, "after": false }]*/ @@ -97,31 +156,8 @@ function foo(a ,b){} a ,b ``` -Examples of **correct** code for this rule with initial null element for the `{ "before": true, "after": false }` options: - -```js -/*eslint comma-spacing: ["error", { "before": true, "after": false }]*/ -/*eslint array-bracket-spacing: ["error", "never"]*/ - -var arr = [,2 ,3] -``` +::: ## When Not To Use It If your project will not be following a consistent comma-spacing pattern, turn this rule off. - -## Further Reading - -* [JavaScript](http://javascript.crockford.com/code.html) -* [Dojo Style Guide](https://dojotoolkit.org/reference-guide/1.9/developer/styleguide.html) - -## Related Rules - -* [array-bracket-spacing](array-bracket-spacing.md) -* [comma-style](comma-style.md) -* [space-in-brackets](space-in-brackets.md) (deprecated) -* [space-in-parens](space-in-parens.md) -* [space-infix-ops](space-infix-ops.md) -* [space-after-keywords](space-after-keywords.md) -* [space-unary-ops](space-unary-ops.md) -* [space-return-throw-case](space-return-throw-case.md) diff --git a/eslint/docs/rules/comma-style.md b/eslint/docs/src/rules/comma-style.md similarity index 92% rename from eslint/docs/rules/comma-style.md rename to eslint/docs/src/rules/comma-style.md index f71e310..ef3b358 100644 --- a/eslint/docs/rules/comma-style.md +++ b/eslint/docs/src/rules/comma-style.md @@ -1,4 +1,14 @@ -# Comma style (comma-style) +--- +title: comma-style +layout: doc +rule_type: layout +related_rules: +- operator-linebreak +further_reading: +- https://gist.github.com/isaacs/357981 +--- + + The Comma Style rule enforces styles for comma-separated lists. There are two comma styles primarily used in JavaScript: @@ -45,6 +55,8 @@ A way to determine the node types as defined by [ESTree](https://github.com/estr Examples of **incorrect** code for this rule with the default `"last"` option: +:::incorrect + ```js /*eslint comma-style: ["error", "last"]*/ @@ -66,8 +78,12 @@ function bar() { } ``` +::: + Examples of **correct** code for this rule with the default `"last"` option: +:::correct + ```js /*eslint comma-style: ["error", "last"]*/ @@ -87,10 +103,14 @@ function bar() { } ``` +::: + ### first Examples of **incorrect** code for this rule with the `"first"` option: +:::incorrect + ```js /*eslint comma-style: ["error", "first"]*/ @@ -108,8 +128,12 @@ function bar() { } ``` +::: + Examples of **correct** code for this rule with the `"first"` option: +:::correct + ```js /*eslint comma-style: ["error", "first"]*/ @@ -129,12 +153,16 @@ function bar() { } ``` +::: + ### exceptions An example use case is to enforce comma style *only* in var statements. Examples of **incorrect** code for this rule with sample `"first", { "exceptions": { … } }` options: +:::incorrect + ```js /*eslint comma-style: ["error", "first", { "exceptions": { "ArrayExpression": true, "ObjectExpression": true } }]*/ @@ -142,8 +170,12 @@ var o = {}, a = []; ``` +::: + Examples of **correct** code for this rule with sample `"first", { "exceptions": { … } }` options: +:::correct + ```js /*eslint comma-style: ["error", "first", { "exceptions": { "ArrayExpression": true, "ObjectExpression": true } }]*/ @@ -153,17 +185,8 @@ var o = {fst:1, , a = []; ``` +::: + ## When Not To Use It This rule can safely be turned off if your project does not care about enforcing a consistent comma style. - -## Further Reading - -For more information on the Comma First style: - -* [A better coding convention for lists and object literals in JavaScript by isaacs](https://gist.github.com/isaacs/357981) -* [npm coding style guideline](https://docs.npmjs.com/misc/coding-style) - -## Related Rules - -* [operator-linebreak](operator-linebreak.md) diff --git a/eslint/docs/rules/complexity.md b/eslint/docs/src/rules/complexity.md similarity index 76% rename from eslint/docs/rules/complexity.md rename to eslint/docs/src/rules/complexity.md index 7955d1a..33b367b 100644 --- a/eslint/docs/rules/complexity.md +++ b/eslint/docs/src/rules/complexity.md @@ -1,4 +1,23 @@ -# Limit Cyclomatic Complexity (complexity) +--- +title: complexity +layout: doc +rule_type: suggestion +related_rules: +- max-depth +- max-len +- max-lines +- max-lines-per-function +- max-nested-callbacks +- max-params +- max-statements +further_reading: +- https://en.wikipedia.org/wiki/Cyclomatic_complexity +- https://ariya.io/2012/12/complexity-analysis-of-javascript-code +- https://craftsmanshipforsoftware.com/2015/05/25/complexity-for-javascript/ +- https://web.archive.org/web/20160808115119/http://jscomplexity.org/complexity +- https://github.com/eslint/eslint/issues/4808#issuecomment-167795140 +--- + Cyclomatic complexity measures the number of linearly independent paths through a program's source code. This rule allows setting a cyclomatic complexity threshold. @@ -20,6 +39,8 @@ This rule is aimed at reducing code complexity by capping the amount of cyclomat Examples of **incorrect** code for a maximum of 2: +::: incorrect + ```js /*eslint complexity: ["error", 2]*/ @@ -39,8 +60,12 @@ function b() { } ``` +::: + Examples of **correct** code for a maximum of 2: +::: correct + ```js /*eslint complexity: ["error", 2]*/ @@ -57,10 +82,14 @@ function b() { } ``` +::: + Class field initializers and class static blocks are implicit functions. Therefore, their complexity is calculated separately for each initializer and each static block, and it doesn't contribute to the complexity of the enclosing code. Examples of additional **incorrect** code for a maximum of 2: +::: incorrect + ```js /*eslint complexity: ["error", 2]*/ @@ -77,8 +106,12 @@ class D { // this static block has complexity = 3 } ``` +::: + Examples of additional **correct** code for a maximum of 2: +::: correct + ```js /*eslint complexity: ["error", 2]*/ @@ -104,6 +137,8 @@ function foo() { // this function has complexity = 1 } ``` +::: + ## Options Optionally, you may specify a `max` object property: @@ -123,21 +158,3 @@ is equivalent to ## When Not To Use It If you can't determine an appropriate complexity limit for your code, then it's best to disable this rule. - -## Further Reading - -* [Cyclomatic Complexity](https://en.wikipedia.org/wiki/Cyclomatic_complexity) -* [Complexity Analysis of JavaScript Code](https://ariya.io/2012/12/complexity-analysis-of-javascript-code) -* [More about Complexity in JavaScript](https://craftsmanshipforsoftware.com/2015/05/25/complexity-for-javascript/) -* [About Complexity](https://web.archive.org/web/20160808115119/http://jscomplexity.org/complexity) -* [Discussion about Complexity in ESLint and more links](https://github.com/eslint/eslint/issues/4808#issuecomment-167795140) - -## Related Rules - -* [max-depth](max-depth.md) -* [max-len](max-len.md) -* [max-lines](max-lines.md) -* [max-lines-per-function](max-lines-per-function.md) -* [max-nested-callbacks](max-nested-callbacks.md) -* [max-params](max-params.md) -* [max-statements](max-statements.md) diff --git a/eslint/docs/rules/computed-property-spacing.md b/eslint/docs/src/rules/computed-property-spacing.md similarity index 83% rename from eslint/docs/rules/computed-property-spacing.md rename to eslint/docs/src/rules/computed-property-spacing.md index 3fdd70c..58849da 100644 --- a/eslint/docs/rules/computed-property-spacing.md +++ b/eslint/docs/src/rules/computed-property-spacing.md @@ -1,4 +1,14 @@ -# Disallow or enforce spaces inside of computed properties (computed-property-spacing) +--- +title: computed-property-spacing +layout: doc +rule_type: layout +related_rules: +- array-bracket-spacing +- comma-spacing +- space-in-parens +--- + + While formatting preferences are very personal, a number of style guides require or disallow spaces between computed properties in the following situations: @@ -14,6 +24,10 @@ var a = "prop"; var obj = { [a]: "value" // computed property key in object literal (ECMAScript 6) }; + +var obj = { prop: "value" }; +var a = "prop"; +var { [a]: x } = obj; // computed property key in object destructuring pattern (ECMAScript 6) ``` ## Rule Details @@ -40,6 +54,8 @@ Object option: Examples of **incorrect** code for this rule with the default `"never"` option: +::: incorrect + ```js /*eslint computed-property-spacing: ["error", "never"]*/ /*eslint-env es6*/ @@ -48,10 +64,17 @@ obj[foo ] obj[ 'foo'] var x = {[ b ]: a} obj[foo[ bar ]] + +const { [ a ]: someProp } = obj; +({ [ b ]: anotherProp } = anotherObj); ``` +::: + Examples of **correct** code for this rule with the default `"never"` option: +::: correct + ```js /*eslint computed-property-spacing: ["error", "never"]*/ /*eslint-env es6*/ @@ -60,12 +83,19 @@ obj[foo] obj['foo'] var x = {[b]: a} obj[foo[bar]] + +const { [a]: someProp } = obj; +({ [b]: anotherProp } = anotherObj); ``` +::: + ### always Examples of **incorrect** code for this rule with the `"always"` option: +::: incorrect + ```js /*eslint computed-property-spacing: ["error", "always"]*/ /*eslint-env es6*/ @@ -76,10 +106,16 @@ obj[ foo] obj['foo' ] obj[foo[ bar ]] var x = {[ b]: a} +const { [a]: someProp } = obj; +({ [b ]: anotherProp } = anotherObj); ``` +::: + Examples of **correct** code for this rule with the `"always"` option: +::: correct + ```js /*eslint computed-property-spacing: ["error", "always"]*/ /*eslint-env es6*/ @@ -88,14 +124,20 @@ obj[ foo ] obj[ 'foo' ] var x = {[ b ]: a} obj[ foo[ bar ] ] +const { [ a ]: someProp } = obj; +({ [ b ]: anotherProp } = anotherObj); ``` +::: + #### enforceForClassMembers With `enforceForClassMembers` set to `true` (default), the rule also disallows/enforces spaces inside of computed keys of class methods, getters and setters. Examples of **incorrect** code for this rule with `"never"` and `{ "enforceForClassMembers": true }` (default): +::: incorrect + ```js /*eslint computed-property-spacing: ["error", "never", { "enforceForClassMembers": true }]*/ /*eslint-env es6*/ @@ -114,8 +156,12 @@ const Bar = class { } ``` +::: + Examples of **correct** code for this rule with `"never"` and `{ "enforceForClassMembers": true }` (default): +::: correct + ```js /*eslint computed-property-spacing: ["error", "never", { "enforceForClassMembers": true }]*/ /*eslint-env es6*/ @@ -134,8 +180,12 @@ const Bar = class { } ``` +::: + Examples of **correct** code for this rule with `"never"` and `{ "enforceForClassMembers": false }`: +::: correct + ```js /*eslint computed-property-spacing: ["error", "never", { "enforceForClassMembers": false }]*/ /*eslint-env es6*/ @@ -154,12 +204,8 @@ const Bar = class { } ``` +::: + ## When Not To Use It You can turn this rule off if you are not concerned with the consistency of computed properties. - -## Related Rules - -* [array-bracket-spacing](array-bracket-spacing.md) -* [comma-spacing](comma-spacing.md) -* [space-in-parens](space-in-parens.md) diff --git a/eslint/docs/rules/consistent-return.md b/eslint/docs/src/rules/consistent-return.md similarity index 95% rename from eslint/docs/rules/consistent-return.md rename to eslint/docs/src/rules/consistent-return.md index bf4b470..068d3b9 100644 --- a/eslint/docs/rules/consistent-return.md +++ b/eslint/docs/src/rules/consistent-return.md @@ -1,4 +1,9 @@ -# require `return` statements to either always or never specify values (consistent-return) +--- +title: consistent-return +layout: doc +rule_type: suggestion +--- + Unlike statically-typed languages which enforce that a function returns a specified type of value, JavaScript allows different code paths in a function to return different types of values. @@ -31,6 +36,8 @@ This rule requires `return` statements to either always or never specify values. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint consistent-return: "error"*/ @@ -49,8 +56,12 @@ function doSomething(condition) { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint consistent-return: "error"*/ @@ -71,6 +82,8 @@ function Foo() { } ``` +::: + ## Options This rule has an object option: @@ -82,6 +95,8 @@ This rule has an object option: Examples of **incorrect** code for this rule with the default `{ "treatUndefinedAsUnspecified": false }` option: +::: incorrect + ```js /*eslint consistent-return: ["error", { "treatUndefinedAsUnspecified": false }]*/ @@ -100,8 +115,12 @@ function bar(condition) { } ``` +::: + Examples of **incorrect** code for this rule with the `{ "treatUndefinedAsUnspecified": true }` option: +::: incorrect + ```js /*eslint consistent-return: ["error", { "treatUndefinedAsUnspecified": true }]*/ @@ -120,8 +139,12 @@ function bar(condition) { } ``` +::: + Examples of **correct** code for this rule with the `{ "treatUndefinedAsUnspecified": true }` option: +::: correct + ```js /*eslint consistent-return: ["error", { "treatUndefinedAsUnspecified": true }]*/ @@ -140,6 +163,8 @@ function bar(condition) { } ``` +::: + ## When Not To Use It If you want to allow functions to have different `return` behavior depending on code branching, then it is safe to disable this rule. diff --git a/eslint/docs/rules/consistent-this.md b/eslint/docs/src/rules/consistent-this.md similarity index 93% rename from eslint/docs/rules/consistent-this.md rename to eslint/docs/src/rules/consistent-this.md index 3921232..8a5a56b 100644 --- a/eslint/docs/rules/consistent-this.md +++ b/eslint/docs/src/rules/consistent-this.md @@ -1,4 +1,9 @@ -# Require Consistent This (consistent-this) +--- +title: consistent-this +layout: doc +rule_type: suggestion +--- + It is often necessary to capture the current execution context in order to make it available subsequently. A prominent example of this are jQuery callbacks: @@ -27,6 +32,8 @@ This rule has one or more string options: Examples of **incorrect** code for this rule with the default `"that"` option: +::: incorrect + ```js /*eslint consistent-this: ["error", "that"]*/ @@ -39,8 +46,12 @@ that = 42; self = this; ``` +::: + Examples of **correct** code for this rule with the default `"that"` option: +::: correct + ```js /*eslint consistent-this: ["error", "that"]*/ @@ -55,8 +66,12 @@ that = this; foo.bar = this; ``` +::: + Examples of **incorrect** code for this rule with the default `"that"` option, if the variable is not initialized: +::: incorrect + ```js /*eslint consistent-this: ["error", "that"]*/ @@ -66,8 +81,12 @@ function f() { } ``` +::: + Examples of **correct** code for this rule with the default `"that"` option, if the variable is not initialized: +::: correct + ```js /*eslint consistent-this: ["error", "that"]*/ @@ -79,6 +98,8 @@ foo = 42; that = this; ``` +::: + ## When Not To Use It If you need to capture nested context, `consistent-this` is going to be problematic. Code of that nature is usually difficult to read and maintain and you should consider refactoring it. diff --git a/eslint/docs/rules/constructor-super.md b/eslint/docs/src/rules/constructor-super.md similarity index 92% rename from eslint/docs/rules/constructor-super.md rename to eslint/docs/src/rules/constructor-super.md index bf43888..c3cf06e 100644 --- a/eslint/docs/rules/constructor-super.md +++ b/eslint/docs/src/rules/constructor-super.md @@ -1,4 +1,8 @@ -# Verify calls of `super()` in constructors (constructor-super) +--- +title: constructor-super +layout: doc +rule_type: problem +--- Constructors of derived classes must call `super()`. Constructors of non derived classes must not call `super()`. @@ -12,6 +16,8 @@ This rule is aimed to flag invalid/missing `super()` calls. Examples of **incorrect** code for this rule: +:::incorrect + ```js /*eslint constructor-super: "error"*/ /*eslint-env es6*/ @@ -38,8 +44,12 @@ class A extends null { } ``` +::: + Examples of **correct** code for this rule: +:::correct + ```js /*eslint constructor-super: "error"*/ /*eslint-env es6*/ @@ -55,6 +65,8 @@ class A extends B { } ``` +::: + ## When Not To Use It If you don't want to be notified about invalid/missing `super()` callings in constructors, you can safely disable this rule. diff --git a/eslint/docs/rules/curly.md b/eslint/docs/src/rules/curly.md similarity index 94% rename from eslint/docs/rules/curly.md rename to eslint/docs/src/rules/curly.md index aecbca5..fe48feb 100644 --- a/eslint/docs/rules/curly.md +++ b/eslint/docs/src/rules/curly.md @@ -1,4 +1,10 @@ -# Require Following Curly Brace Conventions (curly) +--- +title: curly +layout: doc +rule_type: suggestion +--- + + JavaScript allows the omission of curly braces when a block contains only one statement. However, it is considered by many to be best practice to _never_ omit curly braces around blocks, even when they are optional, because it can lead to bugs and reduces code clarity. So the following: @@ -26,6 +32,8 @@ This rule is aimed at preventing bugs and increasing code clarity by ensuring th Examples of **incorrect** code for the default `"all"` option: +::: incorrect + ```js /*eslint curly: "error"*/ @@ -39,8 +47,12 @@ if (foo) { } else qux(); ``` +::: + Examples of **correct** code for the default `"all"` option: +::: correct + ```js /*eslint curly: "error"*/ @@ -59,12 +71,16 @@ if (foo) { } ``` +::: + ### multi By default, this rule warns whenever `if`, `else`, `for`, `while`, or `do` are used without block statements as their body. However, you can specify that block statements should be used only when there are multiple statements in the block and warn when there is only one statement in the block. Examples of **incorrect** code for the `"multi"` option: +::: incorrect + ```js /*eslint curly: ["error", "multi"]*/ @@ -86,8 +102,12 @@ for (var i=0; i < items.length; i++) { } ``` +::: + Examples of **correct** code for the `"multi"` option: +::: correct + ```js /*eslint curly: ["error", "multi"]*/ @@ -101,12 +121,16 @@ while (true) { } ``` +::: + ### multi-line Alternatively, you can relax the rule to allow brace-less single-line `if`, `else if`, `else`, `for`, `while`, or `do`, while still enforcing the use of curly braces for other instances. Examples of **incorrect** code for the `"multi-line"` option: +::: incorrect + ```js /*eslint curly: ["error", "multi-line"]*/ @@ -120,8 +144,12 @@ if (foo) foo( baz); ``` +::: + Examples of **correct** code for the `"multi-line"` option: +::: correct + ```js /*eslint curly: ["error", "multi-line"]*/ @@ -149,12 +177,16 @@ while (true) { } ``` +::: + ### multi-or-nest You can use another configuration that forces brace-less `if`, `else if`, `else`, `for`, `while`, or `do` if their body contains only one single-line statement. And forces braces in all other cases. Examples of **incorrect** code for the `"multi-or-nest"` option: +::: incorrect + ```js /*eslint curly: ["error", "multi-or-nest"]*/ @@ -183,8 +215,12 @@ for (var i = 0; foo; i++) { } ``` +::: + Examples of **correct** code for the `"multi-or-nest"` option: +::: correct + ```js /*eslint curly: ["error", "multi-or-nest"]*/ @@ -212,10 +248,14 @@ for (var i = 0; foo; i++) doSomething(); ``` +::: + For single-line statements preceded by a comment, braces are allowed but not required. Examples of additional **correct** code for the `"multi-or-nest"` option: +::: correct + ```js /*eslint curly: ["error", "multi-or-nest"]*/ @@ -229,6 +269,8 @@ if (foo) { } ``` +::: + ### consistent When using any of the `multi*` options, you can add an option to enforce all bodies of a `if`, @@ -236,6 +278,8 @@ When using any of the `multi*` options, you can add an option to enforce all bod Examples of **incorrect** code for the `"multi", "consistent"` options: +::: incorrect + ```js /*eslint curly: ["error", "multi", "consistent"]*/ @@ -265,8 +309,12 @@ if (foo) { } ``` +::: + Examples of **correct** code for the `"multi", "consistent"` options: +::: correct + ```js /*eslint curly: ["error", "multi", "consistent"]*/ @@ -296,6 +344,8 @@ if (foo) ``` +::: + ## When Not To Use It If you have no strict conventions about when to use block statements and when not to, you can safely disable this rule. diff --git a/eslint/docs/rules/default-case-last.md b/eslint/docs/src/rules/default-case-last.md similarity index 86% rename from eslint/docs/rules/default-case-last.md rename to eslint/docs/src/rules/default-case-last.md index c9eedbe..2502a83 100644 --- a/eslint/docs/rules/default-case-last.md +++ b/eslint/docs/src/rules/default-case-last.md @@ -1,4 +1,13 @@ -# Enforce default clauses in switch statements to be last (default-case-last) +--- +title: default-case-last +layout: doc +rule_type: suggestion +related_rules: +- default-case +further_reading: +- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/switch +--- + A `switch` statement can optionally have a `default` clause. @@ -14,10 +23,12 @@ This rule enforces `default` clauses in `switch` statements to be last. It applies only to `switch` statements that already have a `default` clause. -This rule does not enforce the existence of `default` clauses. See [default-case](default-case.md) if you also want to enforce the existence of `default` clauses in `switch` statements. +This rule does not enforce the existence of `default` clauses. See [default-case](default-case) if you also want to enforce the existence of `default` clauses in `switch` statements. Examples of **incorrect** code for this rule: +:::incorrect + ```js /*eslint default-case-last: "error"*/ @@ -68,8 +79,12 @@ switch (foo) { } ``` +::: + Examples of **correct** code for this rule: +:::correct + ```js /*eslint default-case-last: "error"*/ @@ -116,10 +131,4 @@ if (foo !== 0) { doSomethingAnyway(); ``` -## Further Reading - -* [MDN switch statement](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/switch) - -## Related Rules - -* [default-case](default-case.md) +::: diff --git a/eslint/docs/rules/default-case.md b/eslint/docs/src/rules/default-case.md similarity index 93% rename from eslint/docs/rules/default-case.md rename to eslint/docs/src/rules/default-case.md index ba13407..f05ae44 100644 --- a/eslint/docs/rules/default-case.md +++ b/eslint/docs/src/rules/default-case.md @@ -1,4 +1,11 @@ -# Require Default Case in Switch Statements (default-case) +--- +title: default-case +layout: doc +rule_type: suggestion +related_rules: +- no-fallthrough +--- + Some code conventions require that all `switch` statements have a `default` case, even if the default case is empty, such as: @@ -13,7 +20,7 @@ switch (foo) { break; default: - // do nothing + // do nothing } ``` @@ -43,6 +50,8 @@ This rule aims to require `default` case in `switch` statements. You may optiona Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint default-case: "error"*/ @@ -54,8 +63,12 @@ switch (a) { ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint default-case: "error"*/ @@ -69,7 +82,6 @@ switch (a) { break; } - switch (a) { case 1: /* code */ @@ -87,6 +99,8 @@ switch (a) { } ``` +::: + ## Options This rule accepts a single options argument: @@ -97,6 +111,8 @@ This rule accepts a single options argument: Examples of **correct** code for the `{ "commentPattern": "^skip\\sdefault" }` option: +::: correct + ```js /*eslint default-case: ["error", { "commentPattern": "^skip\\sdefault" }]*/ @@ -117,10 +133,8 @@ switch(a) { } ``` +::: + ## When Not To Use It If you don't want to enforce a `default` case for `switch` statements, you can safely disable this rule. - -## Related Rules - -* [no-fallthrough](no-fallthrough.md) diff --git a/eslint/docs/rules/default-param-last.md b/eslint/docs/src/rules/default-param-last.md similarity index 86% rename from eslint/docs/rules/default-param-last.md rename to eslint/docs/src/rules/default-param-last.md index 97bba70..0343ce7 100644 --- a/eslint/docs/rules/default-param-last.md +++ b/eslint/docs/src/rules/default-param-last.md @@ -1,4 +1,8 @@ -# enforce default parameters to be last (default-param-last) +--- +title: default-param-last +layout: doc +rule_type: suggestion +--- Putting default parameter at last allows function calls to omit optional tail arguments. @@ -18,6 +22,8 @@ This rule enforces default parameters to be the last of parameters. Examples of **incorrect** code for this rule: +::: incorrect + ```js /* eslint default-param-last: ["error"] */ @@ -26,10 +32,16 @@ function f(a = 0, b) {} function f(a, b = 0, c) {} ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /* eslint default-param-last: ["error"] */ function f(a, b = 0) {} ``` + +::: diff --git a/eslint/docs/rules/dot-location.md b/eslint/docs/src/rules/dot-location.md similarity index 90% rename from eslint/docs/rules/dot-location.md rename to eslint/docs/src/rules/dot-location.md index 82f0d94..34ab8c5 100644 --- a/eslint/docs/rules/dot-location.md +++ b/eslint/docs/src/rules/dot-location.md @@ -1,4 +1,13 @@ -# Enforce newline before and after dot (dot-location) +--- +title: dot-location +layout: doc +rule_type: layout +related_rules: +- newline-after-var +- dot-notation +--- + + JavaScript allows you to place newlines before or after a dot in a member expression. @@ -29,6 +38,8 @@ The default `"object"` option requires the dot to be on the same line as the obj Examples of **incorrect** code for the default `"object"` option: +::: incorrect + ```js /*eslint dot-location: ["error", "object"]*/ @@ -36,8 +47,12 @@ var foo = object .property; ``` +::: + Examples of **correct** code for the default `"object"` option: +::: correct + ```js /*eslint dot-location: ["error", "object"]*/ @@ -52,12 +67,16 @@ property; var baz = object.property; ``` +::: + ### property The `"property"` option requires the dot to be on the same line as the property. Examples of **incorrect** code for the `"property"` option: +::: incorrect + ```js /*eslint dot-location: ["error", "property"]*/ @@ -65,8 +84,12 @@ var foo = object. property; ``` +::: + Examples of **correct** code for the `"property"` option: +::: correct + ```js /*eslint dot-location: ["error", "property"]*/ @@ -75,11 +98,8 @@ var foo = object var bar = object.property; ``` +::: + ## When Not To Use It You can turn this rule off if you are not concerned with the consistency of newlines before or after dots in member expressions. - -## Related Rules - -* [newline-after-var](newline-after-var.md) -* [dot-notation](dot-notation.md) diff --git a/eslint/docs/rules/dot-notation.md b/eslint/docs/src/rules/dot-notation.md similarity index 94% rename from eslint/docs/rules/dot-notation.md rename to eslint/docs/src/rules/dot-notation.md index 26c7775..7637004 100644 --- a/eslint/docs/rules/dot-notation.md +++ b/eslint/docs/src/rules/dot-notation.md @@ -1,4 +1,10 @@ -# Require Dot Notation (dot-notation) +--- +title: dot-notation +layout: doc +rule_type: suggestion +--- + + In JavaScript, one can access properties using the dot notation (`foo.bar`) or square-bracket notation (`foo["bar"]`). However, the dot notation is often preferred because it is easier to read, less verbose, and works better with aggressive JavaScript minimizers. @@ -12,14 +18,20 @@ This rule is aimed at maintaining code consistency and improving code readabilit Examples of **incorrect** code for this rule: +:::incorrect + ```js /*eslint dot-notation: "error"*/ var x = foo["bar"]; ``` +::: + Examples of **correct** code for this rule: +:::correct + ```js /*eslint dot-notation: "error"*/ @@ -28,6 +40,8 @@ var x = foo.bar; var x = foo[bar]; // Property name is a variable, square-bracket notation required ``` +::: + ## Options This rule accepts a single options argument: @@ -39,6 +53,8 @@ This rule accepts a single options argument: Examples of **correct** code for the `{ "allowKeywords": false }` option: +:::correct + ```js /*eslint dot-notation: ["error", { "allowKeywords": false }]*/ @@ -46,8 +62,12 @@ var foo = { "class": "CS 101" } var x = foo["class"]; // Property name is a reserved word, square-bracket notation required ``` +::: + Examples of additional **correct** code for the `{ "allowKeywords": false }` option: +:::correct + ```js /*eslint dot-notation: ["error", { "allowKeywords": false }]*/ @@ -59,12 +79,16 @@ class C { } ``` +::: + ### allowPattern For example, when preparing data to be sent to an external API, it is often required to use property names that include underscores. If the `camelcase` rule is in effect, these [snake case](https://en.wikipedia.org/wiki/Snake_case) properties would not be allowed. By providing an `allowPattern` to the `dot-notation` rule, these snake case properties can be accessed with bracket notation. Examples of **correct** code for the sample `{ "allowPattern": "^[a-z]+(_[a-z]+)+$" }` option: +:::correct + ```js /*eslint camelcase: "error"*/ /*eslint dot-notation: ["error", { "allowPattern": "^[a-z]+(_[a-z]+)+$" }]*/ @@ -78,3 +102,5 @@ data["fooBar"] = 42; var data = {}; data["foo_bar"] = 42; // no warning ``` + +::: diff --git a/eslint/docs/rules/eol-last.md b/eslint/docs/src/rules/eol-last.md similarity index 82% rename from eslint/docs/rules/eol-last.md rename to eslint/docs/src/rules/eol-last.md index ce6203b..4e7dbc0 100644 --- a/eslint/docs/rules/eol-last.md +++ b/eslint/docs/src/rules/eol-last.md @@ -1,4 +1,10 @@ -# require or disallow newline at the end of files (eol-last) +--- +title: eol-last +layout: doc +rule_type: layout +--- + + Trailing newlines in non-empty files are a common UNIX idiom. Benefits of trailing newlines include the ability to concatenate or append to files as well @@ -11,29 +17,37 @@ of non-empty files. Prior to v0.16.0 this rule also enforced that there was only a single line at the end of the file. If you still want this behavior, consider enabling -[no-multiple-empty-lines](no-multiple-empty-lines.md) with `maxEOF` and/or -[no-trailing-spaces](no-trailing-spaces.md). +[no-multiple-empty-lines](no-multiple-empty-lines) with `maxEOF` and/or +[no-trailing-spaces](no-trailing-spaces). Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint eol-last: ["error", "always"]*/ -function doSmth() { +function doSomething() { var foo = 2; } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint eol-last: ["error", "always"]*/ -function doSmth() { +function doSomething() { var foo = 2; }\n ``` +::: + ## Options This rule has a string option: diff --git a/eslint/docs/rules/eqeqeq.md b/eslint/docs/src/rules/eqeqeq.md similarity index 95% rename from eslint/docs/rules/eqeqeq.md rename to eslint/docs/src/rules/eqeqeq.md index 4849f99..f89c303 100644 --- a/eslint/docs/rules/eqeqeq.md +++ b/eslint/docs/src/rules/eqeqeq.md @@ -1,4 +1,10 @@ -# Require === and !== (eqeqeq) +--- +title: eqeqeq +layout: doc +rule_type: suggestion +--- + + It is considered good practice to use the type-safe equality operators `===` and `!==` instead of their regular counterparts `==` and `!=`. @@ -17,6 +23,8 @@ This rule is aimed at eliminating the type-unsafe equality operators. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint eqeqeq: "error"*/ @@ -27,6 +35,8 @@ if ("" == text) { } if (obj.getStuff() != undefined) { } ``` +::: + The `--fix` option on the command line automatically fixes some problems reported by this rule. A problem is only fixed if one of the operands is a `typeof` expression, or if both operands are literals with the same type. ## Options @@ -37,6 +47,8 @@ The `"always"` option (default) enforces the use of `===` and `!==` in every sit Examples of **incorrect** code for the `"always"` option: +::: incorrect + ```js /*eslint eqeqeq: ["error", "always"]*/ @@ -52,8 +64,12 @@ foo == null ``` +::: + Examples of **correct** code for the `"always"` option: +::: correct + ```js /*eslint eqeqeq: ["error", "always"]*/ @@ -69,6 +85,8 @@ foo === null ``` +::: + This rule optionally takes a second argument, which should be an object with the following supported properties: * `"null"`: Customize how this rule treats `null` literals. Possible values: @@ -86,6 +104,8 @@ The `"smart"` option enforces the use of `===` and `!==` except for these cases: Examples of **incorrect** code for the `"smart"` option: +::: incorrect + ```js /*eslint eqeqeq: ["error", "smart"]*/ @@ -100,8 +120,12 @@ bananas != 1 value == undefined ``` +::: + Examples of **correct** code for the `"smart"` option: +::: correct + ```js /*eslint eqeqeq: ["error", "smart"]*/ @@ -112,6 +136,8 @@ true == true foo == null ``` +::: + ### allow-null **Deprecated:** Instead of using this option use "always" and pass a "null" option property with value "ignore". This will tell ESLint to always enforce strict equality except when comparing with the `null` literal. diff --git a/eslint/docs/rules/for-direction.md b/eslint/docs/src/rules/for-direction.md similarity index 82% rename from eslint/docs/rules/for-direction.md rename to eslint/docs/src/rules/for-direction.md index be24f7f..352ed84 100644 --- a/eslint/docs/rules/for-direction.md +++ b/eslint/docs/src/rules/for-direction.md @@ -1,4 +1,10 @@ -# Enforce "for" loop update clause moving the counter in the right direction. (for-direction) +--- +title: for-direction +layout: doc +rule_type: problem +--- + + ## Rule Details @@ -6,6 +12,8 @@ A `for` loop with a stop condition that can never be reached, such as one with a Examples of **incorrect** code for this rule: +:::incorrect + ```js /*eslint for-direction: "error"*/ for (var i = 0; i < 10; i--) { @@ -13,12 +21,21 @@ for (var i = 0; i < 10; i--) { for (var i = 10; i >= 0; i++) { } + +for (var i = 0; i > 10; i++) { +} ``` +::: + Examples of **correct** code for this rule: +:::correct + ```js /*eslint for-direction: "error"*/ for (var i = 0; i < 10; i++) { } ``` + +::: diff --git a/eslint/docs/rules/func-call-spacing.md b/eslint/docs/src/rules/func-call-spacing.md similarity index 81% rename from eslint/docs/rules/func-call-spacing.md rename to eslint/docs/src/rules/func-call-spacing.md index 0982915..542ac8b 100644 --- a/eslint/docs/rules/func-call-spacing.md +++ b/eslint/docs/src/rules/func-call-spacing.md @@ -1,4 +1,12 @@ -# require or disallow spacing between function identifiers and their invocations (func-call-spacing) +--- +title: func-call-spacing +layout: doc +rule_type: layout +related_rules: +- no-spaced-func +--- + + When calling a function, developers may insert optional whitespace between the function's name and the parentheses that invoke it. The following pairs of function calls are equivalent: @@ -17,12 +25,12 @@ new Date (); This rule requires or disallows spaces between the function name and the opening parenthesis that calls it. -## options +## Options This rule has a string option: -- `"never"` (default) disallows space between the function name and the opening parenthesis. -- `"always"` requires space between the function name and the opening parenthesis. +* `"never"` (default) disallows space between the function name and the opening parenthesis. +* `"always"` requires space between the function name and the opening parenthesis. Further, in `"always"` mode, a second object option is available that contains a single boolean `allowNewlines` property. @@ -30,6 +38,8 @@ Further, in `"always"` mode, a second object option is available that contains a Examples of **incorrect** code for this rule with the default `"never"` option: +::: incorrect + ```js /*eslint func-call-spacing: ["error", "never"]*/ @@ -39,18 +49,26 @@ fn (); ``` +::: + Examples of **correct** code for this rule with the default `"never"` option: +::: correct + ```js /*eslint func-call-spacing: ["error", "never"]*/ fn(); ``` +::: + ### always Examples of **incorrect** code for this rule with the `"always"` option: +::: incorrect + ```js /*eslint func-call-spacing: ["error", "always"]*/ @@ -60,28 +78,40 @@ fn (); ``` +::: + Examples of **correct** code for this rule with the `"always"` option: +::: correct + ```js /*eslint func-call-spacing: ["error", "always"]*/ fn (); ``` +::: + #### allowNewlines By default, `"always"` does not allow newlines. To permit newlines when in `"always"` mode, set the `allowNewlines` option to `true`. Newlines are never required. Examples of **incorrect** code for this rule with `allowNewlines` option enabled: +::: incorrect + ```js /*eslint func-call-spacing: ["error", "always", { "allowNewlines": true }]*/ fn(); ``` +::: + Examples of **correct** code for this rule with the `allowNewlines` option enabled: +::: correct + ```js /*eslint func-call-spacing: ["error", "always", { "allowNewlines": true }]*/ @@ -91,15 +121,13 @@ fn (); ``` +::: + ## When Not To Use It This rule can safely be turned off if your project does not care about enforcing a consistent style for spacing within function calls. -## Related Rules - -- [no-spaced-func](no-spaced-func.md) (deprecated) - ## Compatibility -- **JSCS**: [disallowSpacesInCallExpression](https://jscs-dev.github.io/rule/disallowSpacesInCallExpression) -- **JSCS**: [requireSpacesInCallExpression](https://jscs-dev.github.io/rule/requireSpacesInCallExpression) +* **JSCS**: [disallowSpacesInCallExpression](https://jscs-dev.github.io/rule/disallowSpacesInCallExpression) +* **JSCS**: [requireSpacesInCallExpression](https://jscs-dev.github.io/rule/requireSpacesInCallExpression) diff --git a/eslint/docs/rules/func-name-matching.md b/eslint/docs/src/rules/func-name-matching.md similarity index 96% rename from eslint/docs/rules/func-name-matching.md rename to eslint/docs/src/rules/func-name-matching.md index 39ee411..d42db46 100644 --- a/eslint/docs/rules/func-name-matching.md +++ b/eslint/docs/src/rules/func-name-matching.md @@ -1,4 +1,9 @@ -# require function names to match the name of the variable or property to which they are assigned (func-name-matching) +--- +title: func-name-matching +layout: doc +rule_type: suggestion +--- + ## Rule Details @@ -6,6 +11,8 @@ This rule requires function names to match the name of the variable or property Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint func-name-matching: "error"*/ @@ -21,6 +28,10 @@ class C { } ``` +::: + +::: incorrect + ```js /*eslint func-name-matching: ["error", "never"] */ @@ -36,8 +47,12 @@ class C { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint func-name-matching: "error"*/ /*eslint func-name-matching: ["error", "always"]*/ // these are equivalent @@ -81,6 +96,10 @@ module.exports = function foo(name) {}; module['exports'] = function foo(name) {}; ``` +::: + +::: correct + ```js /*eslint func-name-matching: ["error", "never"] */ /*eslint-env es6*/ @@ -123,6 +142,8 @@ module.exports = function foo(name) {}; module['exports'] = function foo(name) {}; ``` +::: + ## Options This rule takes an optional string of "always" or "never" (when omitted, it defaults to "always"), and an optional options object with two properties `considerPropertyDescriptor` and `includeCommonJSModuleExports`. @@ -133,6 +154,8 @@ A boolean value that defaults to `false`. If `considerPropertyDescriptor` is set Examples of **correct** code for the `{ considerPropertyDescriptor: true }` option: +::: correct + ```js /*eslint func-name-matching: ["error", { "considerPropertyDescriptor": true }]*/ /*eslint func-name-matching: ["error", "always", { "considerPropertyDescriptor": true }]*/ // these are equivalent @@ -143,8 +166,12 @@ Object.defineProperties(obj, {baz:{value: function baz() {} }}); Reflect.defineProperty(obj, 'foo', {value: function foo() {}}); ``` +::: + Examples of **incorrect** code for the `{ considerPropertyDescriptor: true }` option: +::: incorrect + ```js /*eslint func-name-matching: ["error", { "considerPropertyDescriptor": true }]*/ /*eslint func-name-matching: ["error", "always", { "considerPropertyDescriptor": true }]*/ // these are equivalent @@ -155,12 +182,16 @@ Object.defineProperties(obj, {baz:{value: function foo() {} }}); Reflect.defineProperty(obj, 'foo', {value: function value() {}}); ``` +::: + ### includeCommonJSModuleExports A boolean value that defaults to `false`. If `includeCommonJSModuleExports` is set to true, `module.exports` and `module["exports"]` will be checked by this rule. Examples of **incorrect** code for the `{ includeCommonJSModuleExports: true }` option: +::: incorrect + ```js /*eslint func-name-matching: ["error", { "includeCommonJSModuleExports": true }]*/ /*eslint func-name-matching: ["error", "always", { "includeCommonJSModuleExports": true }]*/ // these are equivalent @@ -169,6 +200,8 @@ module.exports = function foo(name) {}; module['exports'] = function foo(name) {}; ``` +::: + ## When Not To Use It Do not use this rule if you want to allow named functions to have different names from the variable or property to which they are assigned. diff --git a/eslint/docs/rules/func-names.md b/eslint/docs/src/rules/func-names.md similarity index 91% rename from eslint/docs/rules/func-names.md rename to eslint/docs/src/rules/func-names.md index ea1ba61..ceb575e 100644 --- a/eslint/docs/rules/func-names.md +++ b/eslint/docs/src/rules/func-names.md @@ -1,4 +1,12 @@ -# Require or disallow named `function` expressions (func-names) +--- +title: func-names +layout: doc +rule_type: suggestion +further_reading: +- https://web.archive.org/web/20201112040809/http://markdaggett.com/blog/2013/02/15/functions-explained/ +- https://2ality.com/2015/09/function-names-es6.html +--- + A pattern that's becoming more common is to give function expressions names to aid in debugging. For example: @@ -35,6 +43,8 @@ Please note that `"always"` and `"as-needed"` require function expressions and f Examples of **incorrect** code for this rule with the default `"always"` option: +::: incorrect + ```js /*eslint func-names: ["error", "always"]*/ @@ -51,8 +61,12 @@ const cat = { export default function() {} ``` +::: + Examples of **correct** code for this rule with the default `"always"` option: +::: correct + ```js /*eslint func-names: ["error", "always"]*/ @@ -69,12 +83,16 @@ const cat = { export default function foo() {} ``` +::: + ### as-needed ECMAScript 6 introduced a `name` property on all functions. The value of `name` is determined by evaluating the code around the function to see if a name can be inferred. For example, a function assigned to a variable will automatically have a `name` property equal to the name of the variable. The value of `name` is then used in stack traces for easier debugging. Examples of **incorrect** code for this rule with the `"as-needed"` option: +::: incorrect + ```js /*eslint func-names: ["error", "as-needed"]*/ @@ -87,8 +105,12 @@ Foo.prototype.bar = function() {}; export default function() {} ``` +::: + Examples of **correct** code for this rule with the `"as-needed"` option: +::: correct + ```js /*eslint func-names: ["error", "as-needed"]*/ @@ -112,10 +134,14 @@ quux ??= function() {}; export default function foo() {} ``` +::: + ### never Examples of **incorrect** code for this rule with the `"never"` option: +::: incorrect + ```js /*eslint func-names: ["error", "never"]*/ @@ -126,8 +152,12 @@ Foo.prototype.bar = function bar() {}; }()) ``` +::: + Examples of **correct** code for this rule with the `"never"` option: +::: correct + ```js /*eslint func-names: ["error", "never"]*/ @@ -138,10 +168,14 @@ Foo.prototype.bar = function() {}; }()) ``` +::: + ### generators Examples of **incorrect** code for this rule with the `"always", { "generators": "as-needed" }` options: +::: incorrect + ```js /*eslint func-names: ["error", "always", { "generators": "as-needed" }]*/ @@ -150,66 +184,91 @@ Examples of **incorrect** code for this rule with the `"always", { "generators": }()) ``` +::: + Examples of **correct** code for this rule with the `"always", { "generators": "as-needed" }` options: +::: correct + ```js /*eslint func-names: ["error", "always", { "generators": "as-needed" }]*/ var foo = function*() {}; ``` +::: + Examples of **incorrect** code for this rule with the `"always", { "generators": "never" }` options: +::: incorrect + ```js /*eslint func-names: ["error", "always", { "generators": "never" }]*/ var foo = bar(function *baz() {}); ``` +::: + Examples of **correct** code for this rule with the `"always", { "generators": "never" }` options: +::: correct + ```js /*eslint func-names: ["error", "always", { "generators": "never" }]*/ var foo = bar(function *() {}); ``` +::: + Examples of **incorrect** code for this rule with the `"as-needed", { "generators": "never" }` options: +::: incorrect + ```js /*eslint func-names: ["error", "as-needed", { "generators": "never" }]*/ var foo = bar(function *baz() {}); ``` +::: + Examples of **correct** code for this rule with the `"as-needed", { "generators": "never" }` options: +::: correct + ```js /*eslint func-names: ["error", "as-needed", { "generators": "never" }]*/ var foo = bar(function *() {}); ``` +::: + Examples of **incorrect** code for this rule with the `"never", { "generators": "always" }` options: +::: incorrect + ```js /*eslint func-names: ["error", "never", { "generators": "always" }]*/ var foo = bar(function *() {}); ``` +::: + Examples of **correct** code for this rule with the `"never", { "generators": "always" }` options: +::: correct + ```js /*eslint func-names: ["error", "never", { "generators": "always" }]*/ var foo = bar(function *baz() {}); ``` -## Further Reading - -* [Functions Explained](http://markdaggett.com/blog/2013/02/15/functions-explained/) -* [Function Names in ES6](http://2ality.com/2015/09/function-names-es6.html) +::: ## Compatibility diff --git a/eslint/docs/rules/func-style.md b/eslint/docs/src/rules/func-style.md similarity index 93% rename from eslint/docs/rules/func-style.md rename to eslint/docs/src/rules/func-style.md index c197403..56a9fca 100644 --- a/eslint/docs/rules/func-style.md +++ b/eslint/docs/src/rules/func-style.md @@ -1,4 +1,11 @@ -# enforce the consistent use of either `function` declarations or expressions (func-style) +--- +title: func-style +layout: doc +rule_type: suggestion +further_reading: +- https://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html +--- + There are two ways of defining functions in JavaScript: `function` declarations and `function` expressions. Declarations contain the `function` keyword first, followed by a name and then its arguments and the function body, for example: @@ -61,6 +68,8 @@ This rule has an object option for an exception: Examples of **incorrect** code for this rule with the default `"expression"` option: +::: incorrect + ```js /*eslint func-style: ["error", "expression"]*/ @@ -69,8 +78,12 @@ function foo() { } ``` +::: + Examples of **correct** code for this rule with the default `"expression"` option: +::: correct + ```js /*eslint func-style: ["error", "expression"]*/ @@ -83,10 +96,14 @@ var foo = () => {}; // allowed as allowArrowFunctions : false is applied only for declaration ``` +::: + ### declaration Examples of **incorrect** code for this rule with the `"declaration"` option: +::: incorrect + ```js /*eslint func-style: ["error", "declaration"]*/ @@ -97,8 +114,12 @@ var foo = function() { var foo = () => {}; ``` +::: + Examples of **correct** code for this rule with the `"declaration"` option: +::: correct + ```js /*eslint func-style: ["error", "declaration"]*/ @@ -112,20 +133,22 @@ SomeObject.foo = function() { }; ``` +::: + ### allowArrowFunctions Examples of additional **correct** code for this rule with the `"declaration", { "allowArrowFunctions": true }` options: +::: correct + ```js /*eslint func-style: ["error", "declaration", { "allowArrowFunctions": true }]*/ var foo = () => {}; ``` +::: + ## When Not To Use It If you want to allow developers to each decide how they want to write functions on their own, then you can disable this rule. - -## Further Reading - -* [JavaScript Scoping and Hoisting](http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html) diff --git a/eslint/docs/rules/function-call-argument-newline.md b/eslint/docs/src/rules/function-call-argument-newline.md similarity index 89% rename from eslint/docs/rules/function-call-argument-newline.md rename to eslint/docs/src/rules/function-call-argument-newline.md index abe0d49..baba38c 100644 --- a/eslint/docs/rules/function-call-argument-newline.md +++ b/eslint/docs/src/rules/function-call-argument-newline.md @@ -1,4 +1,15 @@ -# enforce line breaks between arguments of a function call (function-call-argument-newline) +--- +title: function-call-argument-newline +layout: doc +rule_type: layout +related_rules: +- function-paren-newline +- func-call-spacing +- object-property-newline +- array-element-newline +--- + + A number of style guides require or disallow line breaks between arguments of a function call. @@ -18,6 +29,8 @@ This rule has a string option: Examples of **incorrect** code for this rule with the default `"always"` option: +::: incorrect + ```js /*eslint function-call-argument-newline: ["error", "always"]*/ @@ -33,8 +46,12 @@ baz("one", "two", (x) => { }); ``` +::: + Examples of **correct** code for this rule with the default `"always"` option: +::: correct + ```js /*eslint function-call-argument-newline: ["error", "always"]*/ @@ -68,10 +85,14 @@ baz( ); ``` +::: + ### never Examples of **incorrect** code for this rule with the `"never"` option: +::: incorrect + ```js /*eslint function-call-argument-newline: ["error", "never"]*/ @@ -96,8 +117,12 @@ baz( ); ``` +::: + Examples of **correct** code for this rule with the `"never"` option: +::: correct + ```js /*eslint function-call-argument-newline: ["error", "never"]*/ @@ -119,10 +144,14 @@ baz("one", "two", (x) => { }); ``` +::: + ### consistent Examples of **incorrect** code for this rule with the `"consistent"` option: +::: incorrect + ```js /*eslint function-call-argument-newline: ["error", "consistent"]*/ @@ -141,8 +170,12 @@ baz("one", "two", ); ``` +::: + Examples of **correct** code for this rule with the `"consistent"` option: +::: correct + ```js /*eslint function-call-argument-newline: ["error", "consistent"]*/ @@ -187,13 +220,8 @@ baz( ); ``` +::: + ## When Not To Use It If you don't want to enforce line breaks between arguments, don't enable this rule. - -## Related Rules - -* [function-paren-newline](function-paren-newline.md) -* [func-call-spacing](func-call-spacing.md) -* [object-property-newline](object-property-newline.md) -* [array-element-newline](array-element-newline.md) diff --git a/eslint/docs/rules/function-paren-newline.md b/eslint/docs/src/rules/function-paren-newline.md similarity index 94% rename from eslint/docs/rules/function-paren-newline.md rename to eslint/docs/src/rules/function-paren-newline.md index ab86680..68d38fa 100644 --- a/eslint/docs/rules/function-paren-newline.md +++ b/eslint/docs/src/rules/function-paren-newline.md @@ -1,4 +1,10 @@ -# enforce consistent line breaks inside function parentheses (function-paren-newline) +--- +title: function-paren-newline +layout: doc +rule_type: layout +--- + + Many style guides require or disallow newlines inside of function parentheses. @@ -37,6 +43,8 @@ Example configurations: Examples of **incorrect** code for this rule with the `"always"` option: +::: incorrect + ```js /* eslint function-paren-newline: ["error", "always"] */ @@ -49,8 +57,12 @@ var foo = (bar, baz) => {}; foo(bar, baz); ``` +::: + Examples of **correct** code for this rule with the `"always"` option: +::: correct + ```js /* eslint function-paren-newline: ["error", "always"] */ @@ -74,8 +86,12 @@ foo( ); ``` +::: + Examples of **incorrect** code for this rule with the `"never"` option: +::: incorrect + ```js /* eslint function-paren-newline: ["error", "never"] */ @@ -99,8 +115,12 @@ foo( ); ``` +::: + Examples of **correct** code for this rule with the `"never"` option: +::: correct + ```js /* eslint function-paren-newline: ["error", "never"] */ @@ -119,8 +139,12 @@ foo(bar, baz); ``` +::: + Examples of **incorrect** code for this rule with the default `"multiline"` option: +::: incorrect + ```js /* eslint function-paren-newline: ["error", "multiline"] */ @@ -146,8 +170,12 @@ foo( ); ``` +::: + Examples of **correct** code for this rule with the default `"multiline"` option: +::: correct + ```js /* eslint function-paren-newline: ["error", "multiline"] */ @@ -173,8 +201,12 @@ foo(function() { }); ``` +::: + Examples of **incorrect** code for this rule with the `"consistent"` option: +::: incorrect + ```js /* eslint function-paren-newline: ["error", "consistent"] */ @@ -200,8 +232,12 @@ foo( }); ``` +::: + Examples of **correct** code for this rule with the `"consistent"` option: +::: correct + ```js /* eslint function-paren-newline: ["error", "consistent"] */ @@ -226,8 +262,12 @@ foo( ); ``` +::: + Examples of **incorrect** code for this rule with the `"multiline-arguments"` option: +::: incorrect + ```js /* eslint function-paren-newline: ["error", "multiline-arguments"] */ @@ -253,8 +293,12 @@ foo( ); ``` +::: + Examples of **correct** code for this rule with the consistent `"multiline-arguments"` option: +::: correct + ```js /* eslint function-paren-newline: ["error", "multiline-arguments"] */ @@ -276,8 +320,12 @@ foo( ); ``` +::: + Examples of **incorrect** code for this rule with the `{ "minItems": 3 }` option: +::: incorrect + ```js /* eslint function-paren-newline: ["error", { "minItems": 3 }] */ @@ -299,8 +347,12 @@ foo(bar, baz); ``` +::: + Examples of **correct** code for this rule with the `{ "minItems": 3 }` option: +::: correct + ```js /* eslint function-paren-newline: ["error", { "minItems": 3 }] */ @@ -323,6 +375,8 @@ foo( ); ``` +::: + ## When Not To Use It If don't want to enforce consistent linebreaks inside function parentheses, do not turn on this rule. diff --git a/eslint/docs/rules/generator-star-spacing.md b/eslint/docs/src/rules/generator-star-spacing.md similarity index 94% rename from eslint/docs/rules/generator-star-spacing.md rename to eslint/docs/src/rules/generator-star-spacing.md index 00a9ada..82cdbcd 100644 --- a/eslint/docs/rules/generator-star-spacing.md +++ b/eslint/docs/src/rules/generator-star-spacing.md @@ -1,4 +1,12 @@ -# Enforce spacing around the * in generator functions (generator-star-spacing) +--- +title: generator-star-spacing +layout: doc +rule_type: layout +further_reading: +- https://leanpub.com/understandinges6/read/#leanpub-auto-generators +--- + + Generators are a new type of function in ECMAScript 6 that can return multiple values over time. These special functions are indicated by placing an `*` after the `function` keyword. @@ -102,6 +110,8 @@ Overrides can be either an object with "before" and "after", or a shorthand stri Examples of **correct** code for this rule with the `"before"` option: +::: correct + ```js /*eslint generator-star-spacing: ["error", {"before": true, "after": false}]*/ /*eslint-env es6*/ @@ -113,10 +123,14 @@ var anonymous = function *() {}; var shorthand = { *generator() {} }; ``` +::: + ### after Examples of **correct** code for this rule with the `"after"` option: +::: correct + ```js /*eslint generator-star-spacing: ["error", {"before": false, "after": true}]*/ /*eslint-env es6*/ @@ -128,10 +142,14 @@ var anonymous = function* () {}; var shorthand = { * generator() {} }; ``` +::: + ### both Examples of **correct** code for this rule with the `"both"` option: +::: correct + ```js /*eslint generator-star-spacing: ["error", {"before": true, "after": true}]*/ /*eslint-env es6*/ @@ -143,10 +161,14 @@ var anonymous = function * () {}; var shorthand = { * generator() {} }; ``` +::: + ### neither Examples of **correct** code for this rule with the `"neither"` option: +::: correct + ```js /*eslint generator-star-spacing: ["error", {"before": false, "after": false}]*/ /*eslint-env es6*/ @@ -158,8 +180,12 @@ var anonymous = function*() {}; var shorthand = { *generator() {} }; ``` +::: + Examples of **incorrect** code for this rule with overrides present: +::: incorrect + ```js /*eslint generator-star-spacing: ["error", { "before": false, @@ -178,8 +204,12 @@ var shorthand = { *generator() {} }; class Class { static* method() {} } ``` +::: + Examples of **correct** code for this rule with overrides present: +::: correct + ```js /*eslint generator-star-spacing: ["error", { "before": false, @@ -198,10 +228,8 @@ var shorthand = { * generator() {} }; class Class { static * method() {} } ``` +::: + ## When Not To Use It If your project will not be using generators or you are not concerned with spacing consistency, you do not need this rule. - -## Further Reading - -* [Understanding ES6: Generators](https://leanpub.com/understandinges6/read/#leanpub-auto-generators) diff --git a/eslint/docs/rules/generator-star.md b/eslint/docs/src/rules/generator-star.md similarity index 88% rename from eslint/docs/rules/generator-star.md rename to eslint/docs/src/rules/generator-star.md index f344cc4..60b1780 100644 --- a/eslint/docs/rules/generator-star.md +++ b/eslint/docs/src/rules/generator-star.md @@ -1,6 +1,13 @@ -# generator-star: enforce consistent spacing around the asterisk in generator functions +--- +title: generator-star +layout: doc +further_reading: +- https://leanpub.com/understandinges6/read/#leanpub-auto-generators +--- -(removed) This rule was **removed** in ESLint v1.0 and **replaced** by the [generator-star-spacing](generator-star-spacing.md) rule. +Enforces consistent spacing around the asterisk in generator functions. + +(removed) This rule was **removed** in ESLint v1.0 and **replaced** by the [generator-star-spacing](generator-star-spacing) rule. Generators are a new type of function in ECMAScript 6 that can return multiple values over time. These special functions are indicated by placing an `*` after the `function` keyword. @@ -120,7 +127,3 @@ The shortened object literal syntax for generators is not affected by this rule. ## When Not To Use It If your project will not be using generators you do not need this rule. - -## Further Reading - -* [Understanding ES6: Generators](https://leanpub.com/understandinges6/read/#leanpub-auto-generators) diff --git a/eslint/docs/rules/getter-return.md b/eslint/docs/src/rules/getter-return.md similarity index 82% rename from eslint/docs/rules/getter-return.md rename to eslint/docs/src/rules/getter-return.md index 631de80..b35f0d5 100644 --- a/eslint/docs/rules/getter-return.md +++ b/eslint/docs/src/rules/getter-return.md @@ -1,4 +1,13 @@ -# Enforces that a return statement is present in property getters (getter-return) +--- +title: getter-return +layout: doc +rule_type: problem +further_reading: +- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get +- https://leanpub.com/understandinges6/read/#leanpub-auto-accessor-properties +--- + + The get syntax binds an object property to a function that will be called when that property is looked up. It was first introduced in ECMAScript 5: @@ -24,6 +33,8 @@ This rule enforces that a return statement is present in property getters. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint getter-return: "error"*/ @@ -46,8 +57,12 @@ class P{ } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint getter-return: "error"*/ @@ -70,6 +85,8 @@ class P{ } ``` +::: + ## Options This rule has an object option: @@ -78,6 +95,8 @@ This rule has an object option: Examples of **correct** code for the `{ "allowImplicit": true }` option: +::: correct + ```js /*eslint getter-return: ["error", { allowImplicit: true }]*/ p = { @@ -87,11 +106,8 @@ p = { }; ``` +::: + ## When Not To Use It If your project will not be using ES5 property getters you do not need this rule. - -## Further Reading - -* [MDN: Functions getter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get) -* [Understanding ES6: Accessor Properties](https://leanpub.com/understandinges6/read/#leanpub-auto-accessor-properties) diff --git a/eslint/docs/rules/global-require.md b/eslint/docs/src/rules/global-require.md similarity index 83% rename from eslint/docs/rules/global-require.md rename to eslint/docs/src/rules/global-require.md index a81d5a3..0fddee7 100644 --- a/eslint/docs/rules/global-require.md +++ b/eslint/docs/src/rules/global-require.md @@ -1,4 +1,9 @@ -# Enforce require() on the top-level module scope (global-require) +--- +title: global-require +layout: doc +rule_type: suggestion +--- + This rule was **deprecated** in ESLint v7.0.0. Please use the corresponding rule in [`eslint-plugin-node`](https://github.com/mysticatea/eslint-plugin-node). @@ -12,7 +17,6 @@ While `require()` may be called anywhere in code, some style guides prescribe th ```js function foo() { - if (condition) { var fs = require("fs"); } @@ -29,55 +33,69 @@ This rule requires all calls to `require()` to be at the top level of the module Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint global-require: "error"*/ /*eslint-env es6*/ // calling require() inside of a function is not allowed function readFile(filename, callback) { - var fs = require('fs'); - fs.readFile(filename, callback) + var fs = require("fs"); + fs.readFile(filename, callback); } // conditional requires like this are also not allowed -if (DEBUG) { require('debug'); } +if (DEBUG) { + require("debug"); +} // a require() in a switch statement is also flagged -switch(x) { case '1': require('1'); break; } +switch (x) { + case "1": + require("1"); + break; +} // you may not require() inside an arrow function body var getModule = (name) => require(name); // you may not require() inside of a function body as well -function getModule(name) { return require(name); } +function getModule(name) { + return require(name); +} // you may not require() inside of a try/catch block try { require(unsafeModule); -} catch(e) { +} catch (e) { console.log(e); } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint global-require: "error"*/ // all these variations of require() are ok -require('x'); -var y = require('y'); +require("x"); +var y = require("y"); var z; -z = require('z').initialize(); +z = require("z").initialize(); // requiring a module and using it in a function is ok -var fs = require('fs'); +var fs = require("fs"); function readFile(filename, callback) { - fs.readFile(filename, callback) + fs.readFile(filename, callback); } // you can use a ternary to determine which module to require -var logger = DEBUG ? require('dev-logger') : require('logger'); +var logger = DEBUG ? require("dev-logger") : require("logger"); // if you want you can require() at the end of your module function doSomethingA() {} @@ -86,6 +104,8 @@ var x = require("x"), z = require("z"); ``` +::: + ## When Not To Use It If you have a module that must be initialized with information that comes from the file-system or if a module is only used in very rare situations and will cause significant overhead to load it may make sense to disable the rule. If you need to `require()` an optional dependency inside of a `try`/`catch`, you can disable this rule for just that dependency using the `// eslint-disable-line global-require` comment. diff --git a/eslint/docs/rules/global-strict.md b/eslint/docs/src/rules/global-strict.md similarity index 90% rename from eslint/docs/rules/global-strict.md rename to eslint/docs/src/rules/global-strict.md index 5fbba7b..08c0c02 100644 --- a/eslint/docs/rules/global-strict.md +++ b/eslint/docs/src/rules/global-strict.md @@ -1,6 +1,12 @@ -# global-strict: require or disallow strict mode directives in the global scope +--- +title: global-strict +layout: doc -(removed) This rule was **removed** in ESLint v1.0 and **replaced** by the [strict](strict.md) rule. The `"global"` option in the new rule is most similar to the removed rule. +--- + +Requires or disallows strict mode directives in the global scope. + +(removed) This rule was **removed** in ESLint v1.0 and **replaced** by the [strict](strict) rule. The `"global"` option in the new rule is most similar to the removed rule. Strict mode is enabled by using the following pragma in your code: diff --git a/eslint/docs/rules/grouped-accessor-pairs.md b/eslint/docs/src/rules/grouped-accessor-pairs.md similarity index 86% rename from eslint/docs/rules/grouped-accessor-pairs.md rename to eslint/docs/src/rules/grouped-accessor-pairs.md index 60848d1..a8e40da 100644 --- a/eslint/docs/rules/grouped-accessor-pairs.md +++ b/eslint/docs/src/rules/grouped-accessor-pairs.md @@ -1,4 +1,17 @@ -# Require grouped accessor pairs in object literals and classes (grouped-accessor-pairs) +--- +title: grouped-accessor-pairs +layout: doc +rule_type: suggestion +related_rules: +- accessor-pairs +- no-dupe-keys +- no-dupe-class-members +further_reading: +- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/set +- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get +- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes +--- + A getter and setter for the same property don't necessarily have to be defined adjacent to each other. @@ -36,10 +49,12 @@ This rule requires grouped definitions of accessor functions for the same proper Optionally, this rule can also enforce consistent order (`getBeforeSet` or `setBeforeGet`). -This rule does not enforce the existence of the pair for a getter or a setter. See [accessor-pairs](accessor-pairs.md) if you also want to enforce getter/setter pairs. +This rule does not enforce the existence of the pair for a getter or a setter. See [accessor-pairs](accessor-pairs) if you also want to enforce getter/setter pairs. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint grouped-accessor-pairs: "error"*/ @@ -84,8 +99,12 @@ const Bar = class { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint grouped-accessor-pairs: "error"*/ @@ -130,6 +149,8 @@ const Bar = class { } ``` +::: + ## Options This rule has a string option: @@ -142,6 +163,8 @@ This rule has a string option: Examples of **incorrect** code for this rule with the `"getBeforeSet"` option: +::: incorrect + ```js /*eslint grouped-accessor-pairs: ["error", "getBeforeSet"]*/ @@ -173,8 +196,12 @@ const Bar = class { } ``` +::: + Examples of **correct** code for this rule with the `"getBeforeSet"` option: +::: correct + ```js /*eslint grouped-accessor-pairs: ["error", "getBeforeSet"]*/ @@ -206,10 +233,14 @@ const Bar = class { } ``` +::: + ### setBeforeGet Examples of **incorrect** code for this rule with the `"setBeforeGet"` option: +::: incorrect + ```js /*eslint grouped-accessor-pairs: ["error", "setBeforeGet"]*/ @@ -241,8 +272,12 @@ const Bar = class { } ``` +::: + Examples of **correct** code for this rule with the `"setBeforeGet"` option: +::: correct + ```js /*eslint grouped-accessor-pairs: ["error", "setBeforeGet"]*/ @@ -274,6 +309,8 @@ const Bar = class { } ``` +::: + ## Known Limitations Due to the limits of static analysis, this rule does not account for possible side effects and in certain cases @@ -309,18 +346,6 @@ var bar = { Also, this rule does not report any warnings for properties that have duplicate getters or setters. -See [no-dupe-keys](no-dupe-keys.md) if you also want to disallow duplicate keys in object literals. - -See [no-dupe-class-members](no-dupe-class-members.md) if you also want to disallow duplicate names in class definitions. - -## Further Reading - -* [Object Setters](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/set) -* [Object Getters](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get) -* [Classes](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes) - -## Related Rules +See [no-dupe-keys](no-dupe-keys) if you also want to disallow duplicate keys in object literals. -* [accessor-pairs](accessor-pairs.md) -* [no-dupe-keys](no-dupe-keys.md) -* [no-dupe-class-members](no-dupe-class-members.md) +See [no-dupe-class-members](no-dupe-class-members) if you also want to disallow duplicate names in class definitions. diff --git a/eslint/docs/rules/guard-for-in.md b/eslint/docs/src/rules/guard-for-in.md similarity index 73% rename from eslint/docs/rules/guard-for-in.md rename to eslint/docs/src/rules/guard-for-in.md index 28dc163..c6cdbab 100644 --- a/eslint/docs/rules/guard-for-in.md +++ b/eslint/docs/src/rules/guard-for-in.md @@ -1,4 +1,14 @@ -# Require Guarding for-in (guard-for-in) +--- +title: guard-for-in +layout: doc +rule_type: suggestion +related_rules: +- no-prototype-builtins +further_reading: +- https://javascriptweblog.wordpress.com/2011/01/04/exploring-javascript-for-in-loops/ +- https://2ality.com/2012/01/objects-as-maps.html +--- + Looping over objects with a `for in` loop will include properties that are inherited through the prototype chain. This behavior can lead to unexpected items in your for loop. @@ -8,7 +18,7 @@ for (key in foo) { } ``` -Note that simply checking `foo.hasOwnProperty(key)` is likely to cause an error in some cases; see [no-prototype-builtins](no-prototype-builtins.md). +Note that simply checking `foo.hasOwnProperty(key)` is likely to cause an error in some cases; see [no-prototype-builtins](no-prototype-builtins). ## Rule Details @@ -16,6 +26,8 @@ This rule is aimed at preventing unexpected behavior that could arise from using Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint guard-for-in: "error"*/ @@ -24,8 +36,12 @@ for (key in foo) { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint guard-for-in: "error"*/ @@ -42,11 +58,4 @@ for (key in foo) { } ``` -## Related Rules - -* [no-prototype-builtins](no-prototype-builtins.md) - -## Further Reading - -* [Exploring JavaScript for-in loops](https://javascriptweblog.wordpress.com/2011/01/04/exploring-javascript-for-in-loops/) -* [The pitfalls of using objects as maps in JavaScript](http://2ality.com/2012/01/objects-as-maps.html) +::: diff --git a/eslint/docs/rules/handle-callback-err.md b/eslint/docs/src/rules/handle-callback-err.md similarity index 89% rename from eslint/docs/rules/handle-callback-err.md rename to eslint/docs/src/rules/handle-callback-err.md index dad537e..4f4b8c9 100644 --- a/eslint/docs/rules/handle-callback-err.md +++ b/eslint/docs/src/rules/handle-callback-err.md @@ -1,4 +1,12 @@ -# Enforce Callback Error Handling (handle-callback-err) +--- +title: handle-callback-err +layout: doc +rule_type: suggestion +further_reading: +- https://github.com/maxogden/art-of-node#callbacks +- https://web.archive.org/web/20171224042620/https://docs.nodejitsu.com/articles/errors/what-are-the-error-conventions/ +--- + This rule was **deprecated** in ESLint v7.0.0. Please use the corresponding rule in [`eslint-plugin-node`](https://github.com/mysticatea/eslint-plugin-node). @@ -22,6 +30,8 @@ The rule takes a single string option: the name of the error parameter. The defa Examples of **incorrect** code for this rule with the default `"err"` parameter name: +::: incorrect + ```js /*eslint handle-callback-err: "error"*/ @@ -31,8 +41,12 @@ function loadData (err, data) { ``` +::: + Examples of **correct** code for this rule with the default `"err"` parameter name: +::: correct + ```js /*eslint handle-callback-err: "error"*/ @@ -48,8 +62,12 @@ function generateError (err) { } ``` +::: + Examples of **correct** code for this rule with a sample `"error"` parameter name: +::: correct + ```js /*eslint handle-callback-err: ["error", "error"]*/ @@ -61,6 +79,8 @@ function loadData (error, data) { } ``` +::: + ### regular expression Sometimes (especially in big projects) the name of the error variable is not consistent across the project, @@ -76,8 +96,3 @@ If the configured name of the error variable begins with a `^` it is considered There are cases where it may be safe for your application to ignore errors, however only ignore errors if you are confident that some other form of monitoring will help you catch the problem. - -## Further Reading - -* [The Art Of Node: Callbacks](https://github.com/maxogden/art-of-node#callbacks) -* [Nodejitsu: What are the error conventions?](https://docs.nodejitsu.com/articles/errors/what-are-the-error-conventions/) diff --git a/eslint/docs/src/rules/id-blacklist.md b/eslint/docs/src/rules/id-blacklist.md new file mode 100644 index 0000000..267eece --- /dev/null +++ b/eslint/docs/src/rules/id-blacklist.md @@ -0,0 +1,8 @@ +--- +title: id-blacklist +layout: doc +rule_type: suggestion +--- + + +This rule was **deprecated** in ESLint v7.5.0 and replaced by the [id-denylist](id-denylist) rule. diff --git a/eslint/docs/rules/id-denylist.md b/eslint/docs/src/rules/id-denylist.md similarity index 76% rename from eslint/docs/rules/id-denylist.md rename to eslint/docs/src/rules/id-denylist.md index 071a34f..271d2a3 100644 --- a/eslint/docs/rules/id-denylist.md +++ b/eslint/docs/src/rules/id-denylist.md @@ -1,4 +1,9 @@ -# disallow specified identifiers (id-denylist) +--- +title: id-denylist +layout: doc +rule_type: suggestion +--- + > "There are only two hard things in Computer Science: cache invalidation and naming things." — Phil Karlton @@ -10,16 +15,16 @@ This rule disallows specified identifiers in assignments and `function` definiti This rule will catch disallowed identifiers that are: -- variable declarations -- function declarations -- object properties assigned to during object creation -- class fields -- class methods +* variable declarations +* function declarations +* object properties assigned to during object creation +* class fields +* class methods It will not catch disallowed identifiers that are: -- function calls (so you can still use functions you do not have control over) -- object properties (so you can still use objects you do not have control over) +* function calls (so you can still use functions you do not have control over) +* object properties (so you can still use objects you do not have control over) ## Options @@ -33,8 +38,12 @@ For example, to restrict the use of common generic identifiers: } ``` +**Note:** The first element of the array is for the rule severity (see [configuring rules](/docs/latest/user-guide/configuring/rules). The other elements in the array are the identifiers that you want to disallow. + Examples of **incorrect** code for this rule with sample `"data", "callback"` restricted identifiers: +::: incorrect + ```js /*eslint id-denylist: ["error", "data", "callback"] */ @@ -69,8 +78,12 @@ class Foo { } ``` +::: + Examples of **correct** code for this rule with sample `"data", "callback"` restricted identifiers: +::: correct + ```js /*eslint id-denylist: ["error", "data", "callback"] */ @@ -111,6 +124,8 @@ class Foo { } ``` +::: + ## When Not To Use It You can turn this rule off if you do not want to restrict the use of certain identifiers. diff --git a/eslint/docs/rules/id-length.md b/eslint/docs/src/rules/id-length.md similarity index 95% rename from eslint/docs/rules/id-length.md rename to eslint/docs/src/rules/id-length.md index d8b1b45..fb69db1 100644 --- a/eslint/docs/rules/id-length.md +++ b/eslint/docs/src/rules/id-length.md @@ -1,4 +1,14 @@ -# enforce minimum and maximum identifier lengths (id-length) +--- +title: id-length +layout: doc +rule_type: suggestion +related_rules: +- max-len +- new-cap +- func-names +- camelcase +--- + Very short identifier names like `e`, `x`, `_t` or very long ones like `hashGeneratorResultOutputContainerObject` can make code harder to read and potentially less maintainable. To prevent this, one may enforce a minimum and/or maximum identifier length. @@ -14,6 +24,8 @@ This rule enforces a minimum and/or maximum identifier length convention. Examples of **incorrect** code for this rule with the default options: +::: incorrect + ```js /*eslint id-length: "error"*/ // default is minimum 2-chars ({ "min": 2 }) /*eslint-env es6*/ @@ -43,8 +55,12 @@ var { prop: a} = {}; ({ prop: obj.x } = {}); ``` +::: + Examples of **correct** code for this rule with the default options: +::: correct + ```js /*eslint id-length: "error"*/ // default is minimum 2-chars ({ "min": 2 }) /*eslint-env es6*/ @@ -81,6 +97,8 @@ var data = { "x": 1 }; // excused because of quotes data["y"] = 3; // excused because of calculated property access ``` +::: + This rule has an object option: * `"min"` (default: 2) enforces a minimum identifier length @@ -94,6 +112,8 @@ This rule has an object option: Examples of **incorrect** code for this rule with the `{ "min": 4 }` option: +::: incorrect + ```js /*eslint id-length: ["error", { "min": 4 }]*/ /*eslint-env es6*/ @@ -118,8 +138,12 @@ var { prop: [x]} = {}; ({ prop: obj.x } = {}); ``` +::: + Examples of **correct** code for this rule with the `{ "min": 4 }` option: +::: correct + ```js /*eslint id-length: ["error", { "min": 4 }]*/ /*eslint-env es6*/ @@ -148,10 +172,14 @@ var data = { "x": 1 }; // excused because of quotes data["y"] = 3; // excused because of calculated property access ``` +::: + ### max Examples of **incorrect** code for this rule with the `{ "max": 10 }` option: +::: incorrect + ```js /*eslint id-length: ["error", { "max": 10 }]*/ /*eslint-env es6*/ @@ -169,8 +197,12 @@ try { var [reallyLongFirstElementName] = arr; ``` +::: + Examples of **correct** code for this rule with the `{ "max": 10 }` option: +::: correct + ```js /*eslint id-length: ["error", { "max": 10 }]*/ /*eslint-env es6*/ @@ -188,10 +220,14 @@ try { var [first] = arr; ``` +::: + ### properties Examples of **correct** code for this rule with the `{ "properties": "never" }` option: +::: correct + ```js /*eslint id-length: ["error", { "properties": "never" }]*/ /*eslint-env es6*/ @@ -201,10 +237,14 @@ var myObj = { a: 1 }; ({ prop: obj.i } = {}); ``` +::: + ### exceptions Examples of additional **correct** code for this rule with the `{ "exceptions": ["x"] }` option: +::: correct + ```js /*eslint id-length: ["error", { "exceptions": ["x"] }]*/ /*eslint-env es6*/ @@ -224,10 +264,14 @@ const { x } = foo; const { a: x } = foo; ``` +::: + ### exceptionPatterns Examples of additional **correct** code for this rule with the `{ "exceptionPatterns": ["E|S", "[x-z]"] }` option: +::: correct + ```js /*eslint id-length: ["error", { "exceptionPatterns": ["E|S", "[x-z]"] }]*/ /*eslint-env es6*/ @@ -247,9 +291,4 @@ const { y } = foo; const { a: z } = foo; ``` -## Related Rules - -* [max-len](max-len.md) -* [new-cap](new-cap.md) -* [func-names](func-names.md) -* [camelcase](camelcase.md) +::: diff --git a/eslint/docs/rules/id-match.md b/eslint/docs/src/rules/id-match.md similarity index 95% rename from eslint/docs/rules/id-match.md rename to eslint/docs/src/rules/id-match.md index 5bb2a1d..8e4bea9 100644 --- a/eslint/docs/rules/id-match.md +++ b/eslint/docs/src/rules/id-match.md @@ -1,4 +1,9 @@ -# require identifiers to match a specified regular expression (id-match) +--- +title: id-match +layout: doc +rule_type: suggestion +--- + > "There are only two hard things in Computer Science: cache invalidation and naming things." — Phil Karlton @@ -25,6 +30,8 @@ For example, to enforce a camelcase naming convention: Examples of **incorrect** code for this rule with the `"^[a-z]+([A-Z][a-z]+)*$"` option: +::: incorrect + ```js /*eslint id-match: ["error", "^[a-z]+([A-Z][a-z]+)*$"]*/ @@ -51,8 +58,12 @@ class myClass { } ``` +::: + Examples of **correct** code for this rule with the `"^[a-z]+([A-Z][a-z]+)*$"` option: +::: correct + ```js /*eslint id-match: ["error", "^[a-z]+([A-Z][a-z]+)*$"]*/ @@ -75,6 +86,8 @@ class myClass { } ``` +::: + This rule has an object option: * `"properties": false` (default) does not check object properties @@ -90,6 +103,8 @@ This rule has an object option: Examples of **incorrect** code for this rule with the `"^[a-z]+([A-Z][a-z]+)*$", { "properties": true }` options: +::: incorrect + ```js /*eslint id-match: ["error", "^[a-z]+([A-Z][a-z]+)*$", { "properties": true }]*/ @@ -98,10 +113,14 @@ var obj = { }; ``` +::: + ### classFields Examples of **incorrect** code for this rule with the `"^[a-z]+([A-Z][a-z]+)*$", { "classFields": true }` options: +::: incorrect + ```js /*eslint id-match: ["error", "^[a-z]+([A-Z][a-z]+)*$", { "properties": true }]*/ @@ -114,20 +133,28 @@ class myClass { } ``` +::: + ### onlyDeclarations Examples of **correct** code for this rule with the `"^[a-z]+([A-Z][a-z]+)*$", { "onlyDeclarations": true }` options: +::: correct + ```js /*eslint id-match: [2, "^[a-z]+([A-Z][a-z]+)*$", { "onlyDeclarations": true }]*/ do_something(__dirname); ``` +::: + ### ignoreDestructuring: false Examples of **incorrect** code for this rule with the default `"^[^_]+$", { "ignoreDestructuring": false }` option: +::: incorrect + ```js /*eslint id-match: [2, "^[^_]+$", { "ignoreDestructuring": false }]*/ @@ -142,10 +169,14 @@ var { category_id: category_alias } = query; var { category_id: categoryId, ...other_props } = query; ``` +::: + ### ignoreDestructuring: true Examples of **incorrect** code for this rule with the `"^[^_]+$", { "ignoreDestructuring": true }` option: +::: incorrect + ```js /*eslint id-match: [2, "^[^_]+$", { "ignoreDestructuring": true }]*/ @@ -154,8 +185,12 @@ var { category_id: category_alias } = query; var { category_id, ...other_props } = query; ``` +::: + Examples of **correct** code for this rule with the `"^[^_]+$", { "ignoreDestructuring": true }` option: +::: correct + ```js /*eslint id-match: [2, "^[^_]+$", { "ignoreDestructuring": true }]*/ @@ -166,6 +201,8 @@ var { category_id = 1 } = query; var { category_id: category_id } = query; ``` +::: + ## When Not To Use It If you don't want to enforce any particular naming convention for all identifiers, or your naming convention is too complex to be enforced by configuring this rule, then you should not enable this rule. diff --git a/eslint/docs/rules/implicit-arrow-linebreak.md b/eslint/docs/src/rules/implicit-arrow-linebreak.md similarity index 76% rename from eslint/docs/rules/implicit-arrow-linebreak.md rename to eslint/docs/src/rules/implicit-arrow-linebreak.md index a1a2355..c0d9f9f 100644 --- a/eslint/docs/rules/implicit-arrow-linebreak.md +++ b/eslint/docs/src/rules/implicit-arrow-linebreak.md @@ -1,4 +1,12 @@ -# Enforce the location of arrow function bodies with implicit returns (implicit-arrow-linebreak) +--- +title: implicit-arrow-linebreak +layout: doc +rule_type: layout +related_rules: +- brace-style +--- + + An arrow function body can contain an implicit return as an expression instead of a block body. It can be useful to enforce a consistent location for the implicitly returned expression. @@ -6,19 +14,17 @@ An arrow function body can contain an implicit return as an expression instead o This rule aims to enforce a consistent location for an arrow function containing an implicit return. -See Also: - -- [`brace-style`](https://eslint.org/docs/rules/brace-style) which enforces this behavior for arrow functions with block bodies. - ### Options This rule accepts a string option: -- `"beside"` (default) disallows a newline before an arrow function body. -- `"below"` requires a newline before an arrow function body. +* `"beside"` (default) disallows a newline before an arrow function body. +* `"below"` requires a newline before an arrow function body. Examples of **incorrect** code for this rule with the default `"beside"` option: +::: incorrect + ```js /* eslint implicit-arrow-linebreak: ["error", "beside"] */ @@ -38,8 +44,12 @@ Examples of **incorrect** code for this rule with the default `"beside"` option: ); ``` +::: + Examples of **correct** code for this rule with the default `"beside"` option: +::: correct + ```js /* eslint implicit-arrow-linebreak: ["error", "beside"] */ @@ -65,8 +75,12 @@ Examples of **correct** code for this rule with the default `"beside"` option: } ``` +::: + Examples of **incorrect** code for this rule with the `"below"` option: +::: incorrect + ```js /* eslint implicit-arrow-linebreak: ["error", "below"] */ @@ -77,12 +91,15 @@ Examples of **incorrect** code for this rule with the `"below"` option: (foo) => bar => baz; ``` +::: + Examples of **correct** code for this rule with the `"below"` option: +::: correct + ```js /* eslint implicit-arrow-linebreak: ["error", "below"] */ - (foo) => bar; @@ -94,8 +111,10 @@ Examples of **correct** code for this rule with the `"below"` option: baz; ``` +::: + ## When Not To Use It If you're not concerned about consistent locations of implicitly returned arrow function expressions, you should not turn on this rule. -You can also disable this rule if you are using the `"always"` option for the [`arrow-body-style`](https://eslint.org/docs/rules/arrow-body-style), since this will disable the use of implicit returns in arrow functions. +You can also disable this rule if you are using the `"always"` option for the [`arrow-body-style`](arrow-body-style), since this will disable the use of implicit returns in arrow functions. diff --git a/eslint/docs/rules/indent-legacy.md b/eslint/docs/src/rules/indent-legacy.md similarity index 95% rename from eslint/docs/rules/indent-legacy.md rename to eslint/docs/src/rules/indent-legacy.md index 2711ccc..13ca8b6 100644 --- a/eslint/docs/rules/indent-legacy.md +++ b/eslint/docs/src/rules/indent-legacy.md @@ -1,4 +1,10 @@ -# enforce consistent indentation (indent-legacy) +--- +title: indent-legacy +layout: doc +rule_type: layout +--- + + This rule was **deprecated** in ESLint v4.0.0. @@ -48,6 +54,8 @@ Or for tabbed indentation: Examples of **incorrect** code for this rule with the default options: +::: incorrect + ```js /*eslint indent: "error"*/ @@ -59,8 +67,12 @@ if (a) { } ``` +::: + Examples of **correct** code for this rule with the default options: +::: correct + ```js /*eslint indent: "error"*/ @@ -72,6 +84,8 @@ if (a) { } ``` +::: + This rule has an object option: * `"SwitchCase"` (default: 0) enforces indentation level for `case` clauses in `switch` statements @@ -110,6 +124,8 @@ Level of indentation denotes the multiple of the indent specified. Example: Examples of **incorrect** code for this rule with the `"tab"` option: +::: incorrect + ```js /*eslint indent: ["error", "tab"]*/ @@ -121,8 +137,12 @@ function foo(d) { } ``` +::: + Examples of **correct** code for this rule with the `"tab"` option: +::: correct + ```js /*eslint indent: ["error", "tab"]*/ @@ -134,10 +154,14 @@ if (a) { } ``` +::: + ### SwitchCase Examples of **incorrect** code for this rule with the `2, { "SwitchCase": 1 }` options: +::: incorrect + ```js /*eslint indent: ["error", 2, { "SwitchCase": 1 }]*/ @@ -149,8 +173,12 @@ case "b": } ``` +::: + Examples of **correct** code for this rule with the `2, { "SwitchCase": 1 }` option: +::: correct + ```js /*eslint indent: ["error", 2, { "SwitchCase": 1 }]*/ @@ -162,10 +190,14 @@ switch(a){ } ``` +::: + ### VariableDeclarator Examples of **incorrect** code for this rule with the `2, { "VariableDeclarator": 1 }` options: +::: incorrect + ```js /*eslint indent: ["error", 2, { "VariableDeclarator": 1 }]*/ /*eslint-env es6*/ @@ -181,8 +213,12 @@ const a = 1, c = 3; ``` +::: + Examples of **correct** code for this rule with the `2, { "VariableDeclarator": 1 }` options: +::: correct + ```js /*eslint indent: ["error", 2, { "VariableDeclarator": 1 }]*/ /*eslint-env es6*/ @@ -198,8 +234,12 @@ const a = 1, c = 3; ``` +::: + Examples of **correct** code for this rule with the `2, { "VariableDeclarator": 2 }` options: +::: correct + ```js /*eslint indent: ["error", 2, { "VariableDeclarator": 2 }]*/ /*eslint-env es6*/ @@ -215,8 +255,12 @@ const a = 1, c = 3; ``` +::: + Examples of **correct** code for this rule with the `2, { "VariableDeclarator": { "var": 2, "let": 2, "const": 3 } }` options: +::: correct + ```js /*eslint indent: ["error", 2, { "VariableDeclarator": { "var": 2, "let": 2, "const": 3 } }]*/ /*eslint-env es6*/ @@ -232,10 +276,14 @@ const a = 1, c = 3; ``` +::: + ### outerIIFEBody Examples of **incorrect** code for this rule with the options `2, { "outerIIFEBody": 0 }`: +::: incorrect + ```js /*eslint indent: ["error", 2, { "outerIIFEBody": 0 }]*/ @@ -247,14 +295,17 @@ Examples of **incorrect** code for this rule with the options `2, { "outerIIFEBo })(); - if(y) { console.log('foo'); } ``` +::: + Examples of **correct** code for this rule with the options `2, {"outerIIFEBody": 0}`: +::: correct + ```js /*eslint indent: ["error", 2, { "outerIIFEBody": 0 }]*/ @@ -266,16 +317,19 @@ function foo(x) { })(); - if(y) { console.log('foo'); } ``` +::: + ### MemberExpression Examples of **incorrect** code for this rule with the `2, { "MemberExpression": 1 }` options: +::: incorrect + ```js /*eslint indent: ["error", 2, { "MemberExpression": 1 }]*/ @@ -284,8 +338,12 @@ foo .baz() ``` +::: + Examples of **correct** code for this rule with the `2, { "MemberExpression": 1 }` option: +::: correct + ```js /*eslint indent: ["error", 2, { "MemberExpression": 1 }]*/ @@ -298,10 +356,14 @@ var bip = aardvark.badger .coyote; ``` +::: + ### FunctionDeclaration Examples of **incorrect** code for this rule with the `2, { "FunctionDeclaration": {"body": 1, "parameters": 2} }` option: +::: incorrect + ```js /*eslint indent: ["error", 2, { "FunctionDeclaration": {"body": 1, "parameters": 2} }]*/ @@ -312,8 +374,12 @@ function foo(bar, } ``` +::: + Examples of **correct** code for this rule with the `2, { "FunctionDeclaration": {"body": 1, "parameters": 2} }` option: +::: correct + ```js /*eslint indent: ["error", 2, { "FunctionDeclaration": {"body": 1, "parameters": 2} }]*/ @@ -324,8 +390,12 @@ function foo(bar, } ``` +::: + Examples of **incorrect** code for this rule with the `2, { "FunctionDeclaration": {"parameters": "first"} }` option: +::: incorrect + ```js /*eslint indent: ["error", 2, {"FunctionDeclaration": {"parameters": "first"}}]*/ @@ -335,8 +405,12 @@ function foo(bar, baz, } ``` +::: + Examples of **correct** code for this rule with the `2, { "FunctionDeclaration": {"parameters": "first"} }` option: +::: correct + ```js /*eslint indent: ["error", 2, {"FunctionDeclaration": {"parameters": "first"}}]*/ @@ -346,10 +420,14 @@ function foo(bar, baz, } ``` +::: + ### FunctionExpression Examples of **incorrect** code for this rule with the `2, { "FunctionExpression": {"body": 1, "parameters": 2} }` option: +::: incorrect + ```js /*eslint indent: ["error", 2, { "FunctionExpression": {"body": 1, "parameters": 2} }]*/ @@ -360,8 +438,12 @@ var foo = function(bar, } ``` +::: + Examples of **correct** code for this rule with the `2, { "FunctionExpression": {"body": 1, "parameters": 2} }` option: +::: correct + ```js /*eslint indent: ["error", 2, { "FunctionExpression": {"body": 1, "parameters": 2} }]*/ @@ -372,8 +454,12 @@ var foo = function(bar, } ``` +::: + Examples of **incorrect** code for this rule with the `2, { "FunctionExpression": {"parameters": "first"} }` option: +::: incorrect + ```js /*eslint indent: ["error", 2, {"FunctionExpression": {"parameters": "first"}}]*/ @@ -383,8 +469,12 @@ var foo = function(bar, baz, } ``` +::: + Examples of **correct** code for this rule with the `2, { "FunctionExpression": {"parameters": "first"} }` option: +::: correct + ```js /*eslint indent: ["error", 2, {"FunctionExpression": {"parameters": "first"}}]*/ @@ -394,10 +484,14 @@ var foo = function(bar, baz, } ``` +::: + ### CallExpression Examples of **incorrect** code for this rule with the `2, { "CallExpression": {"arguments": 1} }` option: +::: incorrect + ```js /*eslint indent: ["error", 2, { "CallExpression": {"arguments": 1} }]*/ @@ -407,8 +501,12 @@ foo(bar, ); ``` +::: + Examples of **correct** code for this rule with the `2, { "CallExpression": {"arguments": 1} }` option: +::: correct + ```js /*eslint indent: ["error", 2, { "CallExpression": {"arguments": 1} }]*/ @@ -418,8 +516,12 @@ foo(bar, ); ``` +::: + Examples of **incorrect** code for this rule with the `2, { "CallExpression": {"arguments": "first"} }` option: +::: incorrect + ```js /*eslint indent: ["error", 2, {"CallExpression": {"arguments": "first"}}]*/ @@ -427,8 +529,12 @@ foo(bar, baz, baz, boop, beep); ``` +::: + Examples of **correct** code for this rule with the `2, { "CallExpression": {"arguments": "first"} }` option: +::: correct + ```js /*eslint indent: ["error", 2, {"CallExpression": {"arguments": "first"}}]*/ @@ -436,10 +542,14 @@ foo(bar, baz, baz, boop, beep); ``` +::: + ### ArrayExpression Examples of **incorrect** code for this rule with the `2, { "ArrayExpression": 1 }` option: +::: incorrect + ```js /*eslint indent: ["error", 2, { "ArrayExpression": 1 }]*/ @@ -450,8 +560,12 @@ baz, ]; ``` +::: + Examples of **correct** code for this rule with the `2, { "ArrayExpression": 1 }` option: +::: correct + ```js /*eslint indent: ["error", 2, { "ArrayExpression": 1 }]*/ @@ -462,8 +576,12 @@ var foo = [ ]; ``` +::: + Examples of **incorrect** code for this rule with the `2, { "ArrayExpression": "first" }` option: +::: incorrect + ```js /*eslint indent: ["error", 2, {"ArrayExpression": "first"}]*/ @@ -473,8 +591,12 @@ var foo = [bar, ]; ``` +::: + Examples of **correct** code for this rule with the `2, { "ArrayExpression": "first" }` option: +::: correct + ```js /*eslint indent: ["error", 2, {"ArrayExpression": "first"}]*/ @@ -484,10 +606,14 @@ var foo = [bar, ]; ``` +::: + ### ObjectExpression Examples of **incorrect** code for this rule with the `2, { "ObjectExpression": 1 }` option: +::: incorrect + ```js /*eslint indent: ["error", 2, { "ObjectExpression": 1 }]*/ @@ -498,8 +624,12 @@ baz: 2, }; ``` +::: + Examples of **correct** code for this rule with the `2, { "ObjectExpression": 1 }` option: +::: correct + ```js /*eslint indent: ["error", 2, { "ObjectExpression": 1 }]*/ @@ -510,8 +640,12 @@ var foo = { }; ``` +::: + Examples of **incorrect** code for this rule with the `2, { "ObjectExpression": "first" }` option: +::: incorrect + ```js /*eslint indent: ["error", 2, {"ObjectExpression": "first"}]*/ @@ -519,8 +653,12 @@ var foo = { bar: 1, baz: 2 }; ``` +::: + Examples of **correct** code for this rule with the `2, { "ObjectExpression": "first" }` option: +::: correct + ```js /*eslint indent: ["error", 2, {"ObjectExpression": "first"}]*/ @@ -528,6 +666,8 @@ var foo = { bar: 1, baz: 2 }; ``` +::: + ## Compatibility * **JSHint**: `indent` diff --git a/eslint/docs/rules/indent.md b/eslint/docs/src/rules/indent.md similarity index 93% rename from eslint/docs/rules/indent.md rename to eslint/docs/src/rules/indent.md index bd4e86e..461abbe 100644 --- a/eslint/docs/rules/indent.md +++ b/eslint/docs/src/rules/indent.md @@ -1,4 +1,10 @@ -# enforce consistent indentation (indent) +--- +title: indent +layout: doc +rule_type: layout +--- + + There are several common guidelines which require specific indentation of nested blocks and statements, like: @@ -42,6 +48,8 @@ Or for tabbed indentation: Examples of **incorrect** code for this rule with the default options: +::: incorrect + ```js /*eslint indent: "error"*/ @@ -53,8 +61,12 @@ if (a) { } ``` +::: + Examples of **correct** code for this rule with the default options: +::: correct + ```js /*eslint indent: "error"*/ @@ -66,9 +78,11 @@ if (a) { } ``` +::: + This rule has an object option: -* `"ignoredNodes"` can be used to disable indentation checking for any AST node. This accepts an array of [selectors](/docs/developer-guide/selectors.md). If an AST node is matched by any of the selectors, the indentation of tokens which are direct children of that node will be ignored. This can be used as an escape hatch to relax the rule if you disagree with the indentation that it enforces for a particular syntactic pattern. +* `"ignoredNodes"` can be used to disable indentation checking for any AST node. This accepts an array of [selectors](/docs/developer-guide/selectors). If an AST node is matched by any of the selectors, the indentation of tokens which are direct children of that node will be ignored. This can be used as an escape hatch to relax the rule if you disagree with the indentation that it enforces for a particular syntactic pattern. * `"SwitchCase"` (default: 0) enforces indentation level for `case` clauses in `switch` statements * `"VariableDeclarator"` (default: 1) enforces indentation level for `var` declarators; can also take an object to define separate rules for `var`, `let` and `const` declarations. It can also be `"first"`, indicating all the declarators should be aligned with the first declarator. * `"outerIIFEBody"` (default: 1) enforces indentation level for file-level IIFEs. This can also be set to `"off"` to disable checking for file-level IIFEs. @@ -111,6 +125,8 @@ Level of indentation denotes the multiple of the indent specified. Example: Examples of **incorrect** code for this rule with the `"tab"` option: +::: incorrect + ```js /*eslint indent: ["error", "tab"]*/ @@ -122,8 +138,12 @@ function foo(d) { } ``` +::: + Examples of **correct** code for this rule with the `"tab"` option: +::: correct + ```js /*eslint indent: ["error", "tab"]*/ @@ -135,12 +155,16 @@ if (a) { } ``` +::: + ### ignoredNodes The following configuration ignores the indentation of `ConditionalExpression` ("ternary expression") nodes: Examples of **correct** code for this rule with the `4, { "ignoredNodes": ["ConditionalExpression"] }` option: +::: correct + ```js /*eslint indent: ["error", 4, { "ignoredNodes": ["ConditionalExpression"] }]*/ @@ -153,10 +177,14 @@ var a = foo : baz; ``` +::: + The following configuration ignores indentation in the body of IIFEs. Examples of **correct** code for this rule with the `4, { "ignoredNodes": ["CallExpression > FunctionExpression.callee > BlockStatement.body"] }` option: +::: correct + ```js /*eslint indent: ["error", 4, { "ignoredNodes": ["CallExpression > FunctionExpression.callee > BlockStatement.body"] }]*/ @@ -168,12 +196,16 @@ bar(); }) ``` +::: + All AST node types can be found at [ESTree](https://github.com/estree/estree) specification. You can use [AST Explorer](https://astexplorer.net/) with the espree parser to examine AST tree of a code snippet. ### SwitchCase Examples of **incorrect** code for this rule with the `2, { "SwitchCase": 1 }` options: +::: incorrect + ```js /*eslint indent: ["error", 2, { "SwitchCase": 1 }]*/ @@ -185,8 +217,12 @@ case "b": } ``` +::: + Examples of **correct** code for this rule with the `2, { "SwitchCase": 1 }` option: +::: correct + ```js /*eslint indent: ["error", 2, { "SwitchCase": 1 }]*/ @@ -198,10 +234,14 @@ switch(a){ } ``` +::: + ### VariableDeclarator Examples of **incorrect** code for this rule with the `2, { "VariableDeclarator": 1 }` options: +::: incorrect + ```js /*eslint indent: ["error", 2, { "VariableDeclarator": 1 }]*/ /*eslint-env es6*/ @@ -217,8 +257,12 @@ const a = 1, c = 3; ``` +::: + Examples of **correct** code for this rule with the `2, { "VariableDeclarator": 1 }` options: +::: correct + ```js /*eslint indent: ["error", 2, { "VariableDeclarator": 1 }]*/ /*eslint-env es6*/ @@ -234,8 +278,12 @@ const a = 1, c = 3; ``` +::: + Examples of **correct** code for this rule with the `2, { "VariableDeclarator": 2 }` options: +::: correct + ```js /*eslint indent: ["error", 2, { "VariableDeclarator": 2 }]*/ /*eslint-env es6*/ @@ -251,8 +299,12 @@ const a = 1, c = 3; ``` +::: + Examples of **incorrect** code for this rule with the `2, { "VariableDeclarator": "first" }` options: +::: incorrect + ```js /*eslint indent: ["error", 2, { "VariableDeclarator": "first" }]*/ /*eslint-env es6*/ @@ -268,8 +320,12 @@ const a = 1, c = 3; ``` +::: + Examples of **correct** code for this rule with the `2, { "VariableDeclarator": "first" }` options: +::: correct + ```js /*eslint indent: ["error", 2, { "VariableDeclarator": "first" }]*/ /*eslint-env es6*/ @@ -285,8 +341,12 @@ const a = 1, c = 3; ``` +::: + Examples of **correct** code for this rule with the `2, { "VariableDeclarator": { "var": 2, "let": 2, "const": 3 } }` options: +::: correct + ```js /*eslint indent: ["error", 2, { "VariableDeclarator": { "var": 2, "let": 2, "const": 3 } }]*/ /*eslint-env es6*/ @@ -302,10 +362,14 @@ const a = 1, c = 3; ``` +::: + ### outerIIFEBody Examples of **incorrect** code for this rule with the options `2, { "outerIIFEBody": 0 }`: +::: incorrect + ```js /*eslint indent: ["error", 2, { "outerIIFEBody": 0 }]*/ @@ -317,14 +381,17 @@ Examples of **incorrect** code for this rule with the options `2, { "outerIIFEBo })(); - if (y) { console.log('foo'); } ``` +::: + Examples of **correct** code for this rule with the options `2, { "outerIIFEBody": 0 }`: +::: correct + ```js /*eslint indent: ["error", 2, { "outerIIFEBody": 0 }]*/ @@ -336,14 +403,17 @@ function foo(x) { })(); - if (y) { console.log('foo'); } ``` +::: + Examples of **correct** code for this rule with the options `2, { "outerIIFEBody": "off" }`: +::: correct + ```js /*eslint indent: ["error", 2, { "outerIIFEBody": "off" }]*/ @@ -368,10 +438,14 @@ if (y) { } ``` +::: + ### MemberExpression Examples of **incorrect** code for this rule with the `2, { "MemberExpression": 1 }` options: +::: incorrect + ```js /*eslint indent: ["error", 2, { "MemberExpression": 1 }]*/ @@ -380,8 +454,12 @@ foo .baz() ``` +::: + Examples of **correct** code for this rule with the `2, { "MemberExpression": 1 }` option: +::: correct + ```js /*eslint indent: ["error", 2, { "MemberExpression": 1 }]*/ @@ -390,10 +468,14 @@ foo .baz(); ``` +::: + ### FunctionDeclaration Examples of **incorrect** code for this rule with the `2, { "FunctionDeclaration": {"body": 1, "parameters": 2} }` option: +::: incorrect + ```js /*eslint indent: ["error", 2, { "FunctionDeclaration": {"body": 1, "parameters": 2} }]*/ @@ -404,8 +486,12 @@ function foo(bar, } ``` +::: + Examples of **correct** code for this rule with the `2, { "FunctionDeclaration": {"body": 1, "parameters": 2} }` option: +::: correct + ```js /*eslint indent: ["error", 2, { "FunctionDeclaration": {"body": 1, "parameters": 2} }]*/ @@ -416,8 +502,12 @@ function foo(bar, } ``` +::: + Examples of **incorrect** code for this rule with the `2, { "FunctionDeclaration": {"parameters": "first"} }` option: +::: incorrect + ```js /*eslint indent: ["error", 2, {"FunctionDeclaration": {"parameters": "first"}}]*/ @@ -427,8 +517,12 @@ function foo(bar, baz, } ``` +::: + Examples of **correct** code for this rule with the `2, { "FunctionDeclaration": {"parameters": "first"} }` option: +::: correct + ```js /*eslint indent: ["error", 2, {"FunctionDeclaration": {"parameters": "first"}}]*/ @@ -438,10 +532,14 @@ function foo(bar, baz, } ``` +::: + ### FunctionExpression Examples of **incorrect** code for this rule with the `2, { "FunctionExpression": {"body": 1, "parameters": 2} }` option: +::: incorrect + ```js /*eslint indent: ["error", 2, { "FunctionExpression": {"body": 1, "parameters": 2} }]*/ @@ -452,8 +550,12 @@ var foo = function(bar, } ``` +::: + Examples of **correct** code for this rule with the `2, { "FunctionExpression": {"body": 1, "parameters": 2} }` option: +::: correct + ```js /*eslint indent: ["error", 2, { "FunctionExpression": {"body": 1, "parameters": 2} }]*/ @@ -464,8 +566,12 @@ var foo = function(bar, } ``` +::: + Examples of **incorrect** code for this rule with the `2, { "FunctionExpression": {"parameters": "first"} }` option: +::: incorrect + ```js /*eslint indent: ["error", 2, {"FunctionExpression": {"parameters": "first"}}]*/ @@ -475,8 +581,12 @@ var foo = function(bar, baz, } ``` +::: + Examples of **correct** code for this rule with the `2, { "FunctionExpression": {"parameters": "first"} }` option: +::: correct + ```js /*eslint indent: ["error", 2, {"FunctionExpression": {"parameters": "first"}}]*/ @@ -486,10 +596,14 @@ var foo = function(bar, baz, } ``` +::: + ### StaticBlock Examples of **incorrect** code for this rule with the `2, { "StaticBlock": {"body": 1} }` option: +::: incorrect + ```js /*eslint indent: ["error", 2, { "StaticBlock": {"body": 1} }]*/ @@ -500,8 +614,12 @@ class C { } ``` +::: + Examples of **correct** code for this rule with the `2, { "StaticBlock": {"body": 1} }` option: +::: correct + ```js /*eslint indent: ["error", 2, { "StaticBlock": {"body": 1} }]*/ @@ -512,8 +630,12 @@ class C { } ``` +::: + Examples of **incorrect** code for this rule with the `2, { "StaticBlock": {"body": 2} }` option: +::: incorrect + ```js /*eslint indent: ["error", 2, { "StaticBlock": {"body": 2} }]*/ @@ -524,8 +646,12 @@ class C { } ``` +::: + Examples of **correct** code for this rule with the `2, { "StaticBlock": {"body": 2} }` option: +::: correct + ```js /*eslint indent: ["error", 2, { "StaticBlock": {"body": 2} }]*/ @@ -536,10 +662,14 @@ class C { } ``` +::: + ### CallExpression Examples of **incorrect** code for this rule with the `2, { "CallExpression": {"arguments": 1} }` option: +::: incorrect + ```js /*eslint indent: ["error", 2, { "CallExpression": {"arguments": 1} }]*/ @@ -549,8 +679,12 @@ foo(bar, ); ``` +::: + Examples of **correct** code for this rule with the `2, { "CallExpression": {"arguments": 1} }` option: +::: correct + ```js /*eslint indent: ["error", 2, { "CallExpression": {"arguments": 1} }]*/ @@ -560,8 +694,12 @@ foo(bar, ); ``` +::: + Examples of **incorrect** code for this rule with the `2, { "CallExpression": {"arguments": "first"} }` option: +::: incorrect + ```js /*eslint indent: ["error", 2, {"CallExpression": {"arguments": "first"}}]*/ @@ -569,8 +707,12 @@ foo(bar, baz, baz, boop, beep); ``` +::: + Examples of **correct** code for this rule with the `2, { "CallExpression": {"arguments": "first"} }` option: +::: correct + ```js /*eslint indent: ["error", 2, {"CallExpression": {"arguments": "first"}}]*/ @@ -578,10 +720,14 @@ foo(bar, baz, baz, boop, beep); ``` +::: + ### ArrayExpression Examples of **incorrect** code for this rule with the `2, { "ArrayExpression": 1 }` option: +::: incorrect + ```js /*eslint indent: ["error", 2, { "ArrayExpression": 1 }]*/ @@ -592,8 +738,12 @@ baz, ]; ``` +::: + Examples of **correct** code for this rule with the `2, { "ArrayExpression": 1 }` option: +::: correct + ```js /*eslint indent: ["error", 2, { "ArrayExpression": 1 }]*/ @@ -604,8 +754,12 @@ var foo = [ ]; ``` +::: + Examples of **incorrect** code for this rule with the `2, { "ArrayExpression": "first" }` option: +::: incorrect + ```js /*eslint indent: ["error", 2, {"ArrayExpression": "first"}]*/ @@ -615,8 +769,12 @@ var foo = [bar, ]; ``` +::: + Examples of **correct** code for this rule with the `2, { "ArrayExpression": "first" }` option: +::: correct + ```js /*eslint indent: ["error", 2, {"ArrayExpression": "first"}]*/ @@ -626,10 +784,14 @@ var foo = [bar, ]; ``` +::: + ### ObjectExpression Examples of **incorrect** code for this rule with the `2, { "ObjectExpression": 1 }` option: +::: incorrect + ```js /*eslint indent: ["error", 2, { "ObjectExpression": 1 }]*/ @@ -640,8 +802,12 @@ baz: 2, }; ``` +::: + Examples of **correct** code for this rule with the `2, { "ObjectExpression": 1 }` option: +::: correct + ```js /*eslint indent: ["error", 2, { "ObjectExpression": 1 }]*/ @@ -652,8 +818,12 @@ var foo = { }; ``` +::: + Examples of **incorrect** code for this rule with the `2, { "ObjectExpression": "first" }` option: +::: incorrect + ```js /*eslint indent: ["error", 2, {"ObjectExpression": "first"}]*/ @@ -661,8 +831,12 @@ var foo = { bar: 1, baz: 2 }; ``` +::: + Examples of **correct** code for this rule with the `2, { "ObjectExpression": "first" }` option: +::: correct + ```js /*eslint indent: ["error", 2, {"ObjectExpression": "first"}]*/ @@ -670,10 +844,14 @@ var foo = { bar: 1, baz: 2 }; ``` +::: + ### ImportDeclaration Examples of **correct** code for this rule with the `4, { "ImportDeclaration": 1 }` option (the default): +::: correct + ```js /*eslint indent: ["error", 4, { "ImportDeclaration": 1 }]*/ @@ -689,8 +867,12 @@ import { } from 'qux'; ``` +::: + Examples of **incorrect** code for this rule with the `4, { "ImportDeclaration": "first" }` option: +::: incorrect + ```js /*eslint indent: ["error", 4, { "ImportDeclaration": "first" }]*/ @@ -700,8 +882,12 @@ import { foo, } from 'qux'; ``` +::: + Examples of **correct** code for this rule with the `4, { "ImportDeclaration": "first" }` option: +::: correct + ```js /*eslint indent: ["error", 4, { "ImportDeclaration": "first" }]*/ @@ -711,10 +897,14 @@ import { foo, } from 'qux'; ``` +::: + ### flatTernaryExpressions Examples of **incorrect** code for this rule with the default `4, { "flatTernaryExpressions": false }` option: +::: incorrect + ```js /*eslint indent: ["error", 4, { "flatTernaryExpressions": false }]*/ @@ -724,8 +914,12 @@ var a = boop; ``` +::: + Examples of **correct** code for this rule with the default `4, { "flatTernaryExpressions": false }` option: +::: correct + ```js /*eslint indent: ["error", 4, { "flatTernaryExpressions": false }]*/ @@ -735,8 +929,12 @@ var a = boop; ``` +::: + Examples of **incorrect** code for this rule with the `4, { "flatTernaryExpressions": true }` option: +::: incorrect + ```js /*eslint indent: ["error", 4, { "flatTernaryExpressions": true }]*/ @@ -746,8 +944,12 @@ var a = boop; ``` +::: + Examples of **correct** code for this rule with the `4, { "flatTernaryExpressions": true }` option: +::: correct + ```js /*eslint indent: ["error", 4, { "flatTernaryExpressions": true }]*/ @@ -757,10 +959,14 @@ var a = boop; ``` +::: + ### offsetTernaryExpressions Examples of **incorrect** code for this rule with the default `2, { "offsetTernaryExpressions": false }` option: +::: incorrect + ```js /*eslint indent: ["error", 2, { "offsetTernaryExpressions": false }]*/ @@ -773,8 +979,12 @@ condition } ``` +::: + Examples of **correct** code for this rule with the default `2, { "offsetTernaryExpressions": false }` option: +::: correct + ```js /*eslint indent: ["error", 2, { "offsetTernaryExpressions": false }]*/ @@ -791,8 +1001,12 @@ condition } ``` +::: + Examples of **incorrect** code for this rule with the `2, { "offsetTernaryExpressions": true }` option: +::: incorrect + ```js /*eslint indent: ["error", 2, { "offsetTernaryExpressions": true }]*/ @@ -809,8 +1023,12 @@ condition } ``` +::: + Examples of **correct** code for this rule with the `2, { "offsetTernaryExpressions": true }` option: +::: correct + ```js /*eslint indent: ["error", 2, { "offsetTernaryExpressions": true }]*/ @@ -827,10 +1045,14 @@ condition } ``` +::: + ### ignoreComments Examples of additional **correct** code for this rule with the `4, { "ignoreComments": true }` option: +::: correct + ```js /*eslint indent: ["error", 4, { "ignoreComments": true }] */ @@ -842,6 +1064,8 @@ if (foo) { } ``` +::: + ## Compatibility * **JSHint**: `indent` diff --git a/eslint/docs/rules/init-declarations.md b/eslint/docs/src/rules/init-declarations.md similarity index 94% rename from eslint/docs/rules/init-declarations.md rename to eslint/docs/src/rules/init-declarations.md index 97c831a..f7612e6 100644 --- a/eslint/docs/rules/init-declarations.md +++ b/eslint/docs/src/rules/init-declarations.md @@ -1,4 +1,9 @@ -# require or disallow initialization in variable declarations (init-declarations) +--- +title: init-declarations +layout: doc +rule_type: suggestion +--- + In JavaScript, variables can be assigned during declaration, or at any point afterwards using an assignment statement. For example, in the following code, `foo` is initialized during declaration, while `bar` is initialized later. @@ -63,6 +68,8 @@ Variables must not be initialized at declaration, except in for loops, where it Examples of **incorrect** code for the default `"always"` option: +::: incorrect + ```js /*eslint init-declarations: ["error", "always"]*/ /*eslint-env es6*/ @@ -73,8 +80,12 @@ function foo() { } ``` +::: + Examples of **correct** code for the default `"always"` option: +::: correct + ```js /*eslint init-declarations: ["error", "always"]*/ /*eslint-env es6*/ @@ -86,10 +97,14 @@ function foo() { } ``` +::: + ### never Examples of **incorrect** code for the `"never"` option: +::: incorrect + ```js /*eslint init-declarations: ["error", "never"]*/ /*eslint-env es6*/ @@ -102,8 +117,12 @@ function foo() { } ``` +::: + Examples of **correct** code for the `"never"` option: +::: correct + ```js /*eslint init-declarations: ["error", "never"]*/ /*eslint-env es6*/ @@ -115,17 +134,23 @@ function foo() { } ``` +::: + The `"never"` option ignores `const` variable initializations. ### ignoreForLoopInit Examples of **correct** code for the `"never", { "ignoreForLoopInit": true }` options: +::: correct + ```js /*eslint init-declarations: ["error", "never", { "ignoreForLoopInit": true }]*/ for (var i = 0; i < 1; i++) {} ``` +::: + ## When Not To Use It When you are indifferent as to how your variables are initialized. diff --git a/eslint/docs/rules/jsx-quotes.md b/eslint/docs/src/rules/jsx-quotes.md similarity index 91% rename from eslint/docs/rules/jsx-quotes.md rename to eslint/docs/src/rules/jsx-quotes.md index ba0b876..f1af499 100644 --- a/eslint/docs/rules/jsx-quotes.md +++ b/eslint/docs/src/rules/jsx-quotes.md @@ -1,4 +1,12 @@ -# enforce the consistent use of either double or single quotes in JSX attributes (jsx-quotes) +--- +title: jsx-quotes +layout: doc +rule_type: layout +related_rules: +- quotes +--- + + JSX attribute values can contain string literals, which are delimited with single or double quotes. @@ -30,14 +38,20 @@ This rule has a string option: Examples of **incorrect** code for this rule with the default `"prefer-double"` option: +:::incorrect + ```xml /*eslint jsx-quotes: ["error", "prefer-double"]*/ <a b='c' /> ``` +::: + Examples of **correct** code for this rule with the default `"prefer-double"` option: +:::correct + ```xml /*eslint jsx-quotes: ["error", "prefer-double"]*/ @@ -45,18 +59,26 @@ Examples of **correct** code for this rule with the default `"prefer-double"` op <a b='"' /> ``` +::: + ### prefer-single Examples of **incorrect** code for this rule with the `"prefer-single"` option: +:::incorrect + ```xml /*eslint jsx-quotes: ["error", "prefer-single"]*/ <a b="c" /> ``` +::: + Examples of **correct** code for this rule with the `"prefer-single"` option: +:::correct + ```xml /*eslint jsx-quotes: ["error", "prefer-single"]*/ @@ -64,10 +86,8 @@ Examples of **correct** code for this rule with the `"prefer-single"` option: <a b="'" /> ``` +::: + ## When Not To Use It You can turn this rule off if you don’t use JSX or if you aren’t concerned with a consistent usage of quotes within JSX attributes. - -## Related Rules - -* [quotes](quotes.md) diff --git a/eslint/docs/rules/key-spacing.md b/eslint/docs/src/rules/key-spacing.md similarity index 94% rename from eslint/docs/rules/key-spacing.md rename to eslint/docs/src/rules/key-spacing.md index c94b11f..4b96fc0 100644 --- a/eslint/docs/rules/key-spacing.md +++ b/eslint/docs/src/rules/key-spacing.md @@ -1,4 +1,10 @@ -# enforce consistent spacing between keys and values in object literal properties (key-spacing) +--- +title: key-spacing +layout: doc +rule_type: layout +--- + + This rule enforces spacing around the colon in object literal properties. It can verify each property individually, or it can ensure horizontal alignment of adjacent properties in an object literal. @@ -32,74 +38,108 @@ Please note that you can either use the top-level options or the grouped options Examples of **incorrect** code for this rule with the default `{ "beforeColon": false }` option: +::: incorrect + ```js /*eslint key-spacing: ["error", { "beforeColon": false }]*/ var obj = { "foo" : 42 }; ``` +::: + Examples of **correct** code for this rule with the default `{ "beforeColon": false }` option: +::: correct + ```js /*eslint key-spacing: ["error", { "beforeColon": false }]*/ var obj = { "foo": 42 }; ``` +::: + Examples of **incorrect** code for this rule with the `{ "beforeColon": true }` option: +::: incorrect + ```js /*eslint key-spacing: ["error", { "beforeColon": true }]*/ var obj = { "foo": 42 }; ``` +::: + Examples of **correct** code for this rule with the `{ "beforeColon": true }` option: +::: correct + ```js /*eslint key-spacing: ["error", { "beforeColon": true }]*/ var obj = { "foo" : 42 }; ``` +::: + ### afterColon Examples of **incorrect** code for this rule with the default `{ "afterColon": true }` option: +::: incorrect + ```js /*eslint key-spacing: ["error", { "afterColon": true }]*/ var obj = { "foo":42 }; ``` +::: + Examples of **correct** code for this rule with the default `{ "afterColon": true }` option: +::: correct + ```js /*eslint key-spacing: ["error", { "afterColon": true }]*/ var obj = { "foo": 42 }; ``` +::: + Examples of **incorrect** code for this rule with the `{ "afterColon": false }` option: +::: incorrect + ```js /*eslint key-spacing: ["error", { "afterColon": false }]*/ var obj = { "foo": 42 }; ``` +::: + Examples of **correct** code for this rule with the `{ "afterColon": false }` option: +::: correct + ```js /*eslint key-spacing: ["error", { "afterColon": false }]*/ var obj = { "foo":42 }; ``` +::: + ### mode Examples of **incorrect** code for this rule with the default `{ "mode": "strict" }` option: +::: incorrect + ```js /*eslint key-spacing: ["error", { "mode": "strict" }]*/ @@ -109,8 +149,12 @@ call({ }); ``` +::: + Examples of **correct** code for this rule with the default `{ "mode": "strict" }` option: +::: correct + ```js /*eslint key-spacing: ["error", { "mode": "strict" }]*/ @@ -120,8 +164,12 @@ call({ }); ``` +::: + Examples of **correct** code for this rule with the `{ "mode": "minimum" }` option: +::: correct + ```js /*eslint key-spacing: ["error", { "mode": "minimum" }]*/ @@ -131,10 +179,14 @@ call({ }); ``` +::: + ### align Examples of **incorrect** code for this rule with the `{ "align": "value" }` option: +::: incorrect + ```js /*eslint key-spacing: ["error", { "align": "value" }]*/ @@ -145,8 +197,12 @@ var obj = { }; ``` +::: + Examples of **correct** code for this rule with the `{ "align": "value" }` option: +::: correct + ```js /*eslint key-spacing: ["error", { "align": "value" }]*/ @@ -164,8 +220,12 @@ var obj = { var obj = { a: "foo", longPropertyName: "bar" }; ``` +::: + Examples of **incorrect** code for this rule with the `{ "align": "colon" }` option: +::: incorrect + ```js /*eslint key-spacing: ["error", { "align": "colon" }]*/ @@ -175,8 +235,12 @@ call({ }); ``` +::: + Examples of **correct** code for this rule with the `{ "align": "colon" }` option: +::: correct + ```js /*eslint key-spacing: ["error", { "align": "colon" }]*/ @@ -186,6 +250,8 @@ call({ }); ``` +::: + ### align The `align` option can take additional configuration through the `beforeColon`, `afterColon`, `mode`, and `on` options. @@ -204,6 +270,8 @@ align: { Examples of **correct** code for this rule with sample `{ "align": { } }` options: +::: correct + ```js /*eslint key-spacing: ["error", { "align": { @@ -219,6 +287,10 @@ var obj = { } ``` +::: + +::: correct + ```js /*eslint key-spacing: ["error", { "align": { @@ -234,6 +306,8 @@ var obj = { } ``` +::: + ### align and multiLine The `multiLine` and `align` options can differ, which allows for fine-tuned control over the `key-spacing` of your files. `align` will **not** inherit from `multiLine` if `align` is configured as an object. @@ -254,6 +328,8 @@ var myObj = { Examples of **incorrect** code for this rule with sample `{ "align": { }, "multiLine": { } }` options: +::: incorrect + ```js /*eslint key-spacing: ["error", { "multiLine": { @@ -276,8 +352,12 @@ var obj = { } ``` +::: + Examples of **correct** code for this rule with sample `{ "align": { }, "multiLine": { } }` options: +::: correct + ```js /*eslint key-spacing: ["error", { "multiLine": { @@ -296,16 +376,20 @@ var obj = { "myObjectFunction": function() { // Do something // - }, // These are two separate groups, so no alignment between `myObjectFuction` and `one` + }, // These are two separate groups, so no alignment between `myObjectFunction` and `one` "one" : 1, "seven" : 7 // `one` and `seven` are in their own group, and therefore aligned } ``` +::: + ### singleLine and multiLine Examples of **correct** code for this rule with sample `{ "singleLine": { }, "multiLine": { } }` options: +::: correct + ```js /*eslint "key-spacing": [2, { "singleLine": { @@ -325,6 +409,8 @@ var obj2 = { }; ``` +::: + ## When Not To Use It If you have another convention for property spacing that might not be consistent with the available options, or if you want to permit multiple styles concurrently you can safely disable this rule. diff --git a/eslint/docs/rules/keyword-spacing.md b/eslint/docs/src/rules/keyword-spacing.md similarity index 93% rename from eslint/docs/rules/keyword-spacing.md rename to eslint/docs/src/rules/keyword-spacing.md index 8ca6739..ada2208 100644 --- a/eslint/docs/rules/keyword-spacing.md +++ b/eslint/docs/src/rules/keyword-spacing.md @@ -1,4 +1,10 @@ -# enforce consistent spacing before and after keywords (keyword-spacing) +--- +title: keyword-spacing +layout: doc +rule_type: layout +--- + + Keywords are syntax elements of JavaScript, such as `try` and `if`. These keywords have special meaning to the language and so often appear in a different color in code editors. @@ -15,7 +21,7 @@ if (foo) { Of course, you could also have a style guide that disallows spaces around keywords. -However, if you want to enforce the style of spacing between the `function` keyword and the following opening parenthesis, please refer to [space-before-function-paren](space-before-function-paren.md). +However, if you want to enforce the style of spacing between the `function` keyword and the following opening parenthesis, please refer to [space-before-function-paren](space-before-function-paren). ## Rule Details @@ -35,6 +41,8 @@ This rule has an object option: Examples of **incorrect** code for this rule with the default `{ "before": true }` option: +::: incorrect + ```js /*eslint keyword-spacing: ["error", { "before": true }]*/ @@ -47,8 +55,12 @@ if (foo) { } ``` +::: + Examples of **correct** code for this rule with the default `{ "before": true }` option: +::: correct + ```js /*eslint keyword-spacing: ["error", { "before": true }]*/ /*eslint-env es6*/ @@ -102,8 +114,12 @@ if (10+this.foo<= this.bar) {} let a = <A foo={this.foo} bar={function(){}} /> ``` +::: + Examples of **incorrect** code for this rule with the `{ "before": false }` option: +::: incorrect + ```js /*eslint keyword-spacing: ["error", { "before": false }]*/ @@ -116,8 +132,12 @@ if (foo) { } ``` +::: + Examples of **correct** code for this rule with the `{ "before": false }` option: +::: correct + ```js /*eslint keyword-spacing: ["error", { "before": false }]*/ @@ -130,10 +150,14 @@ if (foo) { } ``` +::: + ### after Examples of **incorrect** code for this rule with the default `{ "after": true }` option: +::: incorrect + ```js /*eslint keyword-spacing: ["error", { "after": true }]*/ @@ -146,8 +170,12 @@ if(foo) { } ``` +::: + Examples of **correct** code for this rule with the default `{ "after": true }` option: +::: correct + ```js /*eslint keyword-spacing: ["error", { "after": true }]*/ @@ -213,8 +241,12 @@ function* foo(a) { let a = <A foo={this.foo} bar={function(){}} /> ``` +::: + Examples of **incorrect** code for this rule with the `{ "after": false }` option: +::: incorrect + ```js /*eslint keyword-spacing: ["error", { "after": false }]*/ @@ -227,8 +259,12 @@ if (foo) { } ``` +::: + Examples of **correct** code for this rule with the `{ "after": false }` option: +::: correct + ```js /*eslint keyword-spacing: ["error", { "after": false }]*/ @@ -241,16 +277,21 @@ if(foo) { } ``` +::: + ### overrides -Examples of **correct** code for this rule with the `{ "overrides": { "if": { "after": false }, "for": { "after": false }, "while": { "after": false }, "static": { "after": false } } }` option: +Examples of **correct** code for this rule with the `{ "overrides": { "if": { "after": false }, "for": { "after": false }, "while": { "after": false }, "static": { "after": false }, "as": { "after": false } } }` option: + +::: correct ```js /*eslint keyword-spacing: ["error", { "overrides": { "if": { "after": false }, "for": { "after": false }, "while": { "after": false }, - "static": { "after": false } + "static": { "after": false }, + "as": { "after": false } } }]*/ if(foo) { @@ -272,8 +313,12 @@ class C { //... } } + +export { C as"my class" }; ``` +::: + ## When Not To Use It If you don't want to enforce consistency on keyword spacing, then it's safe to disable this rule. diff --git a/eslint/docs/rules/line-comment-position.md b/eslint/docs/src/rules/line-comment-position.md similarity index 93% rename from eslint/docs/rules/line-comment-position.md rename to eslint/docs/src/rules/line-comment-position.md index 2e0eef8..21c8b68 100644 --- a/eslint/docs/rules/line-comment-position.md +++ b/eslint/docs/src/rules/line-comment-position.md @@ -1,4 +1,9 @@ -# enforce position of line comments (line-comment-position) +--- +title: line-comment-position +layout: doc +rule_type: layout +--- + Line comments can be positioned above or beside code. This rule helps teams maintain a consistent style. @@ -26,72 +31,104 @@ The `position` option has two settings: Examples of **correct** code for the `{ "position": "above" }` option: +::: correct + ```js /*eslint line-comment-position: ["error", { "position": "above" }]*/ // valid comment 1 + 1; ``` +::: + Examples of **incorrect** code for the `{ "position": "above" }` option: +::: incorrect + ```js /*eslint line-comment-position: ["error", { "position": "above" }]*/ 1 + 1; // invalid comment ``` +::: + #### position: beside Examples of **correct** code for the `{ "position": "beside" }` option: +::: correct + ```js /*eslint line-comment-position: ["error", { "position": "beside" }]*/ 1 + 1; // valid comment ``` +::: + Examples of **incorrect** code for the `{ "position": "beside" }` option: +::: incorrect + ```js /*eslint line-comment-position: ["error", { "position": "beside" }]*/ // invalid comment 1 + 1; ``` +::: + ### ignorePattern By default this rule ignores comments starting with the following words: `eslint`, `jshint`, `jslint`, `istanbul`, `global`, `exported`, `jscs`, `falls through`. An alternative regular expression can be provided. Examples of **correct** code for the `ignorePattern` option: +::: correct + ```js /*eslint line-comment-position: ["error", { "ignorePattern": "pragma" }]*/ 1 + 1; // pragma valid comment ``` +::: + Examples of **incorrect** code for the `ignorePattern` option: +::: incorrect + ```js /*eslint line-comment-position: ["error", { "ignorePattern": "pragma" }]*/ 1 + 1; // invalid comment ``` +::: + ### applyDefaultIgnorePatterns Default ignore patterns are applied even when `ignorePattern` is provided. If you want to omit default patterns, set this option to `false`. Examples of **correct** code for the `{ "applyDefaultIgnorePatterns": false }` option: +::: correct + ```js /*eslint line-comment-position: ["error", { "ignorePattern": "pragma", "applyDefaultIgnorePatterns": false }]*/ 1 + 1; // pragma valid comment ``` +::: + Examples of **incorrect** code for the `{ "applyDefaultIgnorePatterns": false }` option: +::: incorrect + ```js /*eslint line-comment-position: ["error", { "ignorePattern": "pragma", "applyDefaultIgnorePatterns": false }]*/ 1 + 1; // falls through ``` +::: + **Deprecated:** the object property `applyDefaultPatterns` is deprecated. Please use the property `applyDefaultIgnorePatterns` instead. ## When Not To Use It diff --git a/eslint/docs/rules/linebreak-style.md b/eslint/docs/src/rules/linebreak-style.md similarity index 93% rename from eslint/docs/rules/linebreak-style.md rename to eslint/docs/src/rules/linebreak-style.md index a4eb620..8e97515 100644 --- a/eslint/docs/rules/linebreak-style.md +++ b/eslint/docs/src/rules/linebreak-style.md @@ -1,4 +1,10 @@ -# enforce consistent linebreak style (linebreak-style) +--- +title: linebreak-style +layout: doc +rule_type: layout +--- + + When developing with a lot of people all having different editors, VCS applications and operating systems it may occur that different line endings are written by either of the mentioned (might especially happen when using the windows and mac versions of SourceTree together). @@ -23,6 +29,8 @@ This rule has a string option: Examples of **incorrect** code for this rule with the default `"unix"` option: +::: incorrect + ```js /*eslint linebreak-style: ["error", "unix"]*/ @@ -30,8 +38,12 @@ var a = 'a'; // \r\n ``` +::: + Examples of **correct** code for this rule with the default `"unix"` option: +::: correct + ```js /*eslint linebreak-style: ["error", "unix"]*/ @@ -43,18 +55,26 @@ function foo(params) { // \n }// \n ``` +::: + ### windows Examples of **incorrect** code for this rule with the `"windows"` option: +::: incorrect + ```js /*eslint linebreak-style: ["error", "windows"]*/ var a = 'a'; // \n ``` +::: + Examples of **correct** code for this rule with the `"windows"` option: +::: correct + ```js /*eslint linebreak-style: ["error", "windows"]*/ @@ -66,13 +86,15 @@ function foo(params) { // \r\n } // \r\n ``` -## Using this rule with version control systems +::: + +### Using this rule with version control systems Version control systems sometimes have special behavior for linebreaks. To make it easy for developers to contribute to your codebase from different platforms, you may want to configure your VCS to handle linebreaks appropriately. For example, the default behavior of [git](https://git-scm.com/) on Windows systems is to convert LF linebreaks to CRLF when checking out files, but to store the linebreaks as LF when committing a change. This will cause the `linebreak-style` rule to report errors if configured with the `"unix"` setting, because the files that ESLint sees will have CRLF linebreaks. If you use git, you may want to add a line to your [`.gitattributes` file](https://git-scm.com/docs/gitattributes) to prevent git from converting linebreaks in `.js` files: -```pt +```txt *.js text eol=lf ``` diff --git a/eslint/docs/rules/lines-around-comment.md b/eslint/docs/src/rules/lines-around-comment.md similarity index 92% rename from eslint/docs/rules/lines-around-comment.md rename to eslint/docs/src/rules/lines-around-comment.md index b13d525..472b61b 100644 --- a/eslint/docs/rules/lines-around-comment.md +++ b/eslint/docs/src/rules/lines-around-comment.md @@ -1,4 +1,13 @@ -# require empty lines around comments (lines-around-comment) +--- +title: lines-around-comment +layout: doc +rule_type: layout +related_rules: +- space-before-blocks +- spaced-comment +--- + + Many style guides require empty lines before or after comments. The primary goal of these rules is to make the comments easier to read and improve readability of the code. @@ -15,8 +24,8 @@ This rule has an object option: * `"afterBlockComment": true` requires an empty line after block comments * `"beforeLineComment": true` requires an empty line before line comments * `"afterLineComment": true` requires an empty line after line comments -* `"allowBlockStart": true` allows comments to appear at the start of block statements, function bodies, classes, and class static blocks -* `"allowBlockEnd": true` allows comments to appear at the end of block statements, function bodies, classes, and class static blocks +* `"allowBlockStart": true` allows comments to appear at the start of block statements, function bodies, classes, switch statements, and class static blocks +* `"allowBlockEnd": true` allows comments to appear at the end of block statements, function bodies, classes, switch statements, and class static blocks * `"allowObjectStart": true` allows comments to appear at the start of object literals * `"allowObjectEnd": true` allows comments to appear at the end of object literals * `"allowArrayStart": true` allows comments to appear at the start of array literals @@ -30,6 +39,8 @@ This rule has an object option: Examples of **incorrect** code for this rule with the default `{ "beforeBlockComment": true }` option: +::: incorrect + ```js /*eslint lines-around-comment: ["error", { "beforeBlockComment": true }]*/ @@ -38,8 +49,12 @@ var night = "long"; var day = "great" ``` +::: + Examples of **correct** code for this rule with the default `{ "beforeBlockComment": true }` option: +::: correct + ```js /*eslint lines-around-comment: ["error", { "beforeBlockComment": true }]*/ @@ -49,10 +64,14 @@ var night = "long"; var day = "great" ``` +::: + ### afterBlockComment Examples of **incorrect** code for this rule with the `{ "afterBlockComment": true }` option: +::: incorrect + ```js /*eslint lines-around-comment: ["error", { "afterBlockComment": true }]*/ @@ -62,8 +81,12 @@ var night = "long"; var day = "great" ``` +::: + Examples of **correct** code for this rule with the `{ "afterBlockComment": true }` option: +::: correct + ```js /*eslint lines-around-comment: ["error", { "afterBlockComment": true }]*/ @@ -74,10 +97,14 @@ var night = "long"; var day = "great" ``` +::: + ### beforeLineComment Examples of **incorrect** code for this rule with the `{ "beforeLineComment": true }` option: +::: incorrect + ```js /*eslint lines-around-comment: ["error", { "beforeLineComment": true }]*/ @@ -86,8 +113,12 @@ var night = "long"; var day = "great" ``` +::: + Examples of **correct** code for this rule with the `{ "beforeLineComment": true }` option: +::: correct + ```js /*eslint lines-around-comment: ["error", { "beforeLineComment": true }]*/ @@ -97,10 +128,14 @@ var night = "long"; var day = "great" ``` +::: + ### afterLineComment Examples of **incorrect** code for this rule with the `{ "afterLineComment": true }` option: +::: incorrect + ```js /*eslint lines-around-comment: ["error", { "afterLineComment": true }]*/ @@ -109,8 +144,12 @@ var night = "long"; var day = "great" ``` +::: + Examples of **correct** code for this rule with the `{ "afterLineComment": true }` option: +::: correct + ```js /*eslint lines-around-comment: ["error", { "afterLineComment": true }]*/ @@ -120,10 +159,14 @@ var night = "long"; var day = "great" ``` +::: + ### allowBlockStart Examples of **correct** code for this rule with the `{ "beforeLineComment": true, "allowBlockStart": true }` options: +::: correct + ```js /*eslint lines-around-comment: ["error", { "beforeLineComment": true, "allowBlockStart": true }]*/ @@ -153,8 +196,12 @@ class C { } ``` +::: + Examples of **correct** code for this rule with the `{ "beforeBlockComment": true, "allowBlockStart": true }` options: +::: correct + ```js /*eslint lines-around-comment: ["error", { "beforeBlockComment": true, "allowBlockStart": true }]*/ @@ -182,12 +229,24 @@ class C { foo(); } } + +switch (foo) { + /* what a great and wonderful day */ + + case 1: + bar(); + break; +} ``` +::: + ### allowBlockEnd Examples of **correct** code for this rule with the `{ "afterLineComment": true, "allowBlockEnd": true }` option: +::: correct + ```js /*eslint lines-around-comment: ["error", { "afterLineComment": true, "allowBlockEnd": true }]*/ @@ -218,8 +277,12 @@ class C { } ``` +::: + Examples of **correct** code for this rule with the `{ "afterBlockComment": true, "allowBlockEnd": true }` option: +::: correct + ```js /*eslint lines-around-comment: ["error", { "afterBlockComment": true, "allowBlockEnd": true }]*/ @@ -252,12 +315,24 @@ class C { /* what a great and wonderful day */ } + +switch (foo) { + case 1: + bar(); + break; + + /* what a great and wonderful day */ +} ``` +::: + ### allowClassStart Examples of **incorrect** code for this rule with the `{ "beforeLineComment": true, "allowClassStart": false }` option: +::: incorrect + ```js /*eslint lines-around-comment: ["error", { "beforeLineComment": true, "allowClassStart": false }]*/ @@ -267,8 +342,12 @@ class foo { }; ``` +::: + Examples of **correct** code for this rule with the `{ "beforeLineComment": true, "allowClassStart": false }` option: +::: correct + ```js /*eslint lines-around-comment: ["error", { "beforeLineComment": true, "allowClassStart": false }]*/ @@ -279,8 +358,12 @@ class foo { }; ``` +::: + Examples of **correct** code for this rule with the `{ "beforeLineComment": true, "allowClassStart": true }` option: +::: correct + ```js /*eslint lines-around-comment: ["error", { "beforeLineComment": true, "allowClassStart": true }]*/ @@ -290,8 +373,12 @@ class foo { }; ``` +::: + Examples of **incorrect** code for this rule with the `{ "beforeBlockComment": true, "allowClassStart": false }` option: +::: incorrect + ```js /*eslint lines-around-comment: ["error", { "beforeBlockComment": true, "allowClassStart": false }]*/ @@ -301,8 +388,12 @@ class foo { }; ``` +::: + Examples of **correct** code for this rule with the `{ "beforeBlockComment": true, "allowClassStart": false }` option: +::: correct + ```js /*eslint lines-around-comment: ["error", { "beforeBlockComment": true, "allowClassStart": false }]*/ @@ -313,8 +404,12 @@ class foo { }; ``` +::: + Examples of **correct** code for this rule with the `{ "beforeBlockComment": true, "allowClassStart": true }` option: +::: correct + ```js /*eslint lines-around-comment: ["error", { "beforeBlockComment": true, "allowClassStart": true }]*/ @@ -324,10 +419,14 @@ class foo { }; ``` +::: + ### allowClassEnd Examples of **correct** code for this rule with the `{ "afterLineComment": true, "allowClassEnd": true }` option: +::: correct + ```js /*eslint lines-around-comment: ["error", { "afterLineComment": true, "allowClassEnd": true }]*/ @@ -337,8 +436,12 @@ class foo { }; ``` +::: + Examples of **correct** code for this rule with the `{ "afterBlockComment": true, "allowClassEnd": true }` option: +::: correct + ```js /*eslint lines-around-comment: ["error", { "afterBlockComment": true, "allowClassEnd": true }]*/ @@ -349,10 +452,14 @@ class foo { }; ``` +::: + ### allowObjectStart Examples of **correct** code for this rule with the `{ "beforeLineComment": true, "allowObjectStart": true }` option: +::: correct + ```js /*eslint lines-around-comment: ["error", { "beforeLineComment": true, "allowObjectStart": true }]*/ @@ -372,8 +479,12 @@ const { } = {day: "great"}; ``` +::: + Examples of **correct** code for this rule with the `{ "beforeBlockComment": true, "allowObjectStart": true }` option: +::: correct + ```js /*eslint lines-around-comment: ["error", { "beforeBlockComment": true, "allowObjectStart": true }]*/ @@ -393,10 +504,14 @@ const { } = {day: "great"}; ``` +::: + ### allowObjectEnd Examples of **correct** code for this rule with the `{ "afterLineComment": true, "allowObjectEnd": true }` option: +::: correct + ```js /*eslint lines-around-comment: ["error", { "afterLineComment": true, "allowObjectEnd": true }]*/ @@ -416,8 +531,12 @@ const { } = {day: "great"}; ``` +::: + Examples of **correct** code for this rule with the `{ "afterBlockComment": true, "allowObjectEnd": true }` option: +::: correct + ```js /*eslint lines-around-comment: ["error", { "afterBlockComment": true, "allowObjectEnd": true }]*/ @@ -440,10 +559,14 @@ const { } = {day: "great"}; ``` +::: + ### allowArrayStart Examples of **correct** code for this rule with the `{ "beforeLineComment": true, "allowArrayStart": true }` option: +::: correct + ```js /*eslint lines-around-comment: ["error", { "beforeLineComment": true, "allowArrayStart": true }]*/ @@ -459,8 +582,12 @@ const [ ] = ["great", "not great"]; ``` +::: + Examples of **correct** code for this rule with the `{ "beforeBlockComment": true, "allowArrayStart": true }` option: +::: correct + ```js /*eslint lines-around-comment: ["error", { "beforeBlockComment": true, "allowArrayStart": true }]*/ @@ -476,10 +603,14 @@ const [ ] = ["great", "not great"]; ``` +::: + ### allowArrayEnd Examples of **correct** code for this rule with the `{ "afterLineComment": true, "allowArrayEnd": true }` option: +::: correct + ```js /*eslint lines-around-comment: ["error", { "afterLineComment": true, "allowArrayEnd": true }]*/ @@ -495,8 +626,12 @@ const [ ] = ["great", "not great"]; ``` +::: + Examples of **correct** code for this rule with the `{ "afterBlockComment": true, "allowArrayEnd": true }` option: +::: correct + ```js /*eslint lines-around-comment: ["error", { "afterBlockComment": true, "allowArrayEnd": true }]*/ @@ -514,12 +649,16 @@ const [ ] = ["great", "not great"]; ``` +::: + ### ignorePattern By default this rule ignores comments starting with the following words: `eslint`, `jshint`, `jslint`, `istanbul`, `global`, `exported`, `jscs`. To ignore more comments in addition to the defaults, set the `ignorePattern` option to a string pattern that will be passed to the [`RegExp` constructor](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/RegExp). Examples of **correct** code for the `ignorePattern` option: +::: correct + ```js /*eslint lines-around-comment: ["error"]*/ @@ -527,15 +666,18 @@ foo(); /* eslint mentioned in this comment */, bar(); - /*eslint lines-around-comment: ["error", { "ignorePattern": "pragma" }] */ foo(); /* a valid comment using pragma in it */ ``` +::: + Examples of **incorrect** code for the `ignorePattern` option: +::: incorrect + ```js /*eslint lines-around-comment: ["error", { "ignorePattern": "pragma" }] */ @@ -543,12 +685,16 @@ Examples of **incorrect** code for the `ignorePattern` option: /* something else */ ``` +::: + ### applyDefaultIgnorePatterns Default ignore patterns are applied even when `ignorePattern` is provided. If you want to omit default patterns, set this option to `false`. Examples of **correct** code for the `{ "applyDefaultIgnorePatterns": false }` option: +::: correct + ```js /*eslint lines-around-comment: ["error", { "ignorePattern": "pragma", applyDefaultIgnorePatterns: false }] */ @@ -556,8 +702,12 @@ foo(); /* a valid comment using pragma in it */ ``` +::: + Examples of **incorrect** code for the `{ "applyDefaultIgnorePatterns": false }` option: +::: incorrect + ```js /*eslint lines-around-comment: ["error", { "applyDefaultIgnorePatterns": false }] */ @@ -566,11 +716,8 @@ foo(); ``` +::: + ## When Not To Use It Many people enjoy a terser code style and don't mind comments bumping up against code. If you fall into that category this rule is not for you. - -## Related Rules - -* [space-before-blocks](space-before-blocks.md) -* [spaced-comment](spaced-comment.md) diff --git a/eslint/docs/rules/lines-around-directive.md b/eslint/docs/src/rules/lines-around-directive.md similarity index 93% rename from eslint/docs/rules/lines-around-directive.md rename to eslint/docs/src/rules/lines-around-directive.md index 6aa9f1d..42133a3 100644 --- a/eslint/docs/rules/lines-around-directive.md +++ b/eslint/docs/src/rules/lines-around-directive.md @@ -1,6 +1,15 @@ -# require or disallow newlines around directives (lines-around-directive) +--- +title: lines-around-directive +layout: doc +rule_type: layout +related_rules: +- lines-around-comment +- padded-blocks +--- -This rule was **deprecated** in ESLint v4.0.0 and replaced by the [padding-line-between-statements](padding-line-between-statements.md) rule. + + +This rule was **deprecated** in ESLint v4.0.0 and replaced by the [padding-line-between-statements](padding-line-between-statements) rule. Directives are used in JavaScript to indicate to the execution environment that a script would like to opt into a feature such as `"strict mode"`. Directives are grouped together in a [directive prologue](https://www.ecma-international.org/ecma-262/7.0/#directive-prologue) at the top of either a file or function block and are applied to the scope in which they occur. @@ -28,7 +37,7 @@ function bar() { ## Rule Details -This rule requires or disallows blank newlines around directive prologues. This rule does not enforce any conventions about blank newlines between the individual directives. In addition, it does not require blank newlines before directive prologues unless they are preceded by a comment. Please use the [padded-blocks](padded-blocks.md) rule if this is a style you would like to enforce. +This rule requires or disallows blank newlines around directive prologues. This rule does not enforce any conventions about blank newlines between the individual directives. In addition, it does not require blank newlines before directive prologues unless they are preceded by a comment. Please use the [padded-blocks](padded-blocks) rule if this is a style you would like to enforce. ## Options @@ -52,6 +61,8 @@ This is the default option. Examples of **incorrect** code for this rule with the `"always"` option: +::: incorrect + ```js /* eslint lines-around-directive: ["error", "always"] */ @@ -78,8 +89,12 @@ function foo() { } ``` +::: + Examples of **correct** code for this rule with the `"always"` option: +::: correct + ```js /* eslint lines-around-directive: ["error", "always"] */ @@ -112,10 +127,14 @@ function foo() { } ``` +::: + ### never Examples of **incorrect** code for this rule with the `"never"` option: +::: incorrect + ```js /* eslint lines-around-directive: ["error", "never"] */ @@ -125,7 +144,6 @@ Examples of **incorrect** code for this rule with the `"never"` option: var foo; - /* Top of file */ // comment @@ -134,7 +152,6 @@ var foo; var foo; - function foo() { "use strict"; "use asm"; @@ -142,7 +159,6 @@ function foo() { var bar; } - function foo() { // comment @@ -152,8 +168,12 @@ function foo() { } ``` +::: + Examples of **correct** code for this rule with the `"never"` option: +::: correct + ```js /* eslint lines-around-directive: ["error", "never"] */ @@ -180,10 +200,14 @@ function foo() { } ``` +::: + ### before & after Examples of **incorrect** code for this rule with the `{ "before": "never", "after": "always" }` option: +::: incorrect + ```js /* eslint lines-around-directive: ["error", { "before": "never", "after": "always" }] */ @@ -213,8 +237,12 @@ function foo() { } ``` +::: + Examples of **correct** code for this rule with the `{ "before": "never", "after": "always" }` option: +::: correct + ```js /* eslint lines-around-directive: ["error", { "before": "never", "after": "always" }] */ @@ -245,8 +273,12 @@ function foo() { } ``` +::: + Examples of **incorrect** code for this rule with the `{ "before": "always", "after": "never" }` option: +::: incorrect + ```js /* eslint lines-around-directive: ["error", { "before": "always", "after": "never" }] */ @@ -277,8 +309,12 @@ function foo() { } ``` +::: + Examples of **correct** code for this rule with the `{ "before": "always", "after": "never" }` option: +::: correct + ```js /* eslint lines-around-directive: ["error", { "before": "always", "after": "never" }] */ @@ -307,15 +343,12 @@ function foo() { } ``` +::: + ## When Not To Use It You can safely disable this rule if you do not have any strict conventions about whether or not directive prologues should have blank newlines before or after them. -## Related Rules - -* [lines-around-comment](lines-around-comment.md) -* [padded-blocks](padded-blocks.md) - ## Compatibility * **JSCS**: [requirePaddingNewLinesAfterUseStrict](https://jscs-dev.github.io/rule/requirePaddingNewLinesAfterUseStrict) diff --git a/eslint/docs/rules/lines-between-class-members.md b/eslint/docs/src/rules/lines-between-class-members.md similarity index 90% rename from eslint/docs/rules/lines-between-class-members.md rename to eslint/docs/src/rules/lines-between-class-members.md index 27084c2..13fcbe4 100644 --- a/eslint/docs/rules/lines-between-class-members.md +++ b/eslint/docs/src/rules/lines-between-class-members.md @@ -1,4 +1,13 @@ -# require or disallow an empty line between class members (lines-between-class-members) +--- +title: lines-between-class-members +layout: doc +rule_type: layout +related_rules: +- padded-blocks +- padding-line-between-statements +--- + + This rule improves readability by enforcing lines between class members. It will not check empty lines before the first member and after the last member, since that is already taken care of by padded-blocks. @@ -6,6 +15,8 @@ This rule improves readability by enforcing lines between class members. It will Examples of **incorrect** code for this rule: +::: incorrect + ```js /* eslint lines-between-class-members: ["error", "always"]*/ class MyClass { @@ -19,8 +30,12 @@ class MyClass { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /* eslint lines-between-class-members: ["error", "always"]*/ class MyClass { @@ -36,8 +51,12 @@ class MyClass { } ``` +::: + Examples of additional **correct** code for this rule: +::: correct + ```js /* eslint lines-between-class-members: ["error", "always"]*/ class MyClass { @@ -47,6 +66,8 @@ class MyClass { } ``` +::: + ### Options This rule has a string option and an object option. @@ -63,6 +84,8 @@ Object option: Examples of **incorrect** code for this rule with the string option: +::: incorrect + ```js /* eslint lines-between-class-members: ["error", "always"]*/ class Foo{ @@ -81,8 +104,12 @@ class Foo{ } ``` +::: + Examples of **correct** code for this rule with the string option: +::: correct + ```js /* eslint lines-between-class-members: ["error", "always"]*/ class Foo{ @@ -101,8 +128,12 @@ class Foo{ } ``` +::: + Examples of **correct** code for this rule with the object option: +::: correct + ```js /* eslint lines-between-class-members: ["error", "always", { "exceptAfterSingleLine": true }]*/ class Foo{ @@ -116,15 +147,12 @@ class Foo{ } ``` +::: + ## When Not To Use It If you don't want to enforce empty lines between class members, you can disable this rule. -## Related Rules - -* [padded-blocks](padded-blocks.md) -* [padding-line-between-statements](padding-line-between-statements.md) - ## Compatibility * [requirePaddingNewLinesAfterBlocks](https://jscs-dev.github.io/rule/requirePaddingNewLinesAfterBlocks) diff --git a/eslint/docs/rules/max-classes-per-file.md b/eslint/docs/src/rules/max-classes-per-file.md similarity index 81% rename from eslint/docs/rules/max-classes-per-file.md rename to eslint/docs/src/rules/max-classes-per-file.md index 70f3348..d7a47ba 100644 --- a/eslint/docs/rules/max-classes-per-file.md +++ b/eslint/docs/src/rules/max-classes-per-file.md @@ -1,4 +1,9 @@ -# enforce a maximum number of classes per file (max-classes-per-file) +--- +title: max-classes-per-file +layout: doc +rule_type: suggestion +--- + Files containing multiple classes can often result in a less navigable and poorly structured codebase. Best practice is to keep each file @@ -11,6 +16,8 @@ of classes and no more. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint max-classes-per-file: "error"*/ @@ -18,22 +25,28 @@ class Foo {} class Bar {} ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint max-classes-per-file: "error"*/ class Foo {} ``` +::: + ## Options This rule may be configured with either an object or a number. If the option is an object, it may contain one or both of: -- `ignoreExpressions`: a boolean option (defaulted to `false`) to ignore class expressions. -- `max`: a numeric option (defaulted to 1) to specify the maximum number of classes. +* `ignoreExpressions`: a boolean option (defaulted to `false`) to ignore class expressions. +* `max`: a numeric option (defaulted to 1) to specify the maximum number of classes. For example: @@ -54,6 +67,8 @@ For example: Examples of **correct** code for this rule with the `max` option set to `2`: +::: correct + ```js /* eslint max-classes-per-file: ["error", 2] */ @@ -61,8 +76,12 @@ class Foo {} class Bar {} ``` +::: + Examples of **correct** code for this rule with the `ignoreExpressions` option set to `true`: +::: correct + ```js /* eslint max-classes-per-file: ["error", { ignoreExpressions: true }] */ @@ -76,3 +95,5 @@ class VisitorFactory { } } ``` + +::: diff --git a/eslint/docs/rules/max-depth.md b/eslint/docs/src/rules/max-depth.md similarity index 86% rename from eslint/docs/rules/max-depth.md rename to eslint/docs/src/rules/max-depth.md index ae8121e..70f441a 100644 --- a/eslint/docs/rules/max-depth.md +++ b/eslint/docs/src/rules/max-depth.md @@ -1,4 +1,17 @@ -# enforce a maximum depth that blocks can be nested (max-depth) +--- +title: max-depth +layout: doc +rule_type: suggestion +related_rules: +- complexity +- max-len +- max-lines +- max-lines-per-function +- max-nested-callbacks +- max-params +- max-statements +--- + Many developers consider code difficult to read if blocks are nested beyond a certain depth. @@ -18,6 +31,8 @@ This rule has a number or object option: Examples of **incorrect** code for this rule with the default `{ "max": 4 }` option: +::: incorrect + ```js /*eslint max-depth: ["error", 4]*/ @@ -35,8 +50,12 @@ function foo() { } ``` +::: + Examples of **correct** code for this rule with the default `{ "max": 4 }` option: +::: correct + ```js /*eslint max-depth: ["error", 4]*/ @@ -52,10 +71,14 @@ function foo() { } ``` +::: + Note that class static blocks do not count as nested blocks, and that the depth in them is calculated separately from the enclosing context. Examples of **incorrect** code for this rule with `{ "max": 2 }` option: +::: incorrect + ```js /*eslint max-depth: ["error", 2]*/ @@ -75,8 +98,12 @@ function foo() { } ``` +::: + Examples of **correct** code for this rule with `{ "max": 2 }` option: +::: correct + ```js /*eslint max-depth: ["error", 2]*/ @@ -94,12 +121,4 @@ function foo() { } ``` -## Related Rules - -* [complexity](complexity.md) -* [max-len](max-len.md) -* [max-lines](max-lines.md) -* [max-lines-per-function](max-lines-per-function.md) -* [max-nested-callbacks](max-nested-callbacks.md) -* [max-params](max-params.md) -* [max-statements](max-statements.md) +::: diff --git a/eslint/docs/rules/max-len.md b/eslint/docs/src/rules/max-len.md similarity index 92% rename from eslint/docs/rules/max-len.md rename to eslint/docs/src/rules/max-len.md index 7aa755a..ae3d527 100644 --- a/eslint/docs/rules/max-len.md +++ b/eslint/docs/src/rules/max-len.md @@ -1,4 +1,15 @@ -# enforce a maximum line length (max-len) +--- +title: max-len +layout: doc +rule_type: layout +related_rules: +- complexity +- max-depth +- max-nested-callbacks +- max-params +- max-statements +--- + Very long lines of code in any language can be difficult to read. In order to aid in readability and maintainability many coders have developed a convention to limit lines of code to X number of characters (traditionally 80 characters). @@ -29,14 +40,20 @@ This rule has a number or object option: Examples of **incorrect** code for this rule with the default `{ "code": 80 }` option: +::: incorrect + ```js /*eslint max-len: ["error", { "code": 80 }]*/ var foo = { "bar": "This is a bar.", "baz": { "qux": "This is a qux" }, "difficult": "to read" }; ``` +::: + Examples of **correct** code for this rule with the default `{ "code": 80 }` option: +::: correct + ```js /*eslint max-len: ["error", { "code": 80 }]*/ @@ -47,18 +64,26 @@ var foo = { }; ``` +::: + ### tabWidth Examples of **incorrect** code for this rule with the default `{ "tabWidth": 4 }` option: +::: incorrect + ```js /*eslint max-len: ["error", { "code": 80, "tabWidth": 4 }]*/ \t \t var foo = { "bar": "This is a bar.", "baz": { "qux": "This is a qux" } }; ``` +::: + Examples of **correct** code for this rule with the default `{ "tabWidth": 4 }` option: +::: correct + ```js /*eslint max-len: ["error", { "code": 80, "tabWidth": 4 }]*/ @@ -68,10 +93,14 @@ Examples of **correct** code for this rule with the default `{ "tabWidth": 4 }` \t \t }; ``` +::: + ### comments Examples of **incorrect** code for this rule with the `{ "comments": 65 }` option: +::: incorrect + ```js /*eslint max-len: ["error", { "comments": 65 }]*/ @@ -80,10 +109,14 @@ Examples of **incorrect** code for this rule with the `{ "comments": 65 }` optio **/ ``` +::: + ### ignoreComments Examples of **correct** code for this rule with the `{ "ignoreComments": true }` option: +::: correct + ```js /*eslint max-len: ["error", { "ignoreComments": true }]*/ @@ -92,70 +125,88 @@ Examples of **correct** code for this rule with the `{ "ignoreComments": true }` **/ ``` +::: + ### ignoreTrailingComments Examples of **correct** code for this rule with the `{ "ignoreTrailingComments": true }` option: +::: correct + ```js /*eslint max-len: ["error", { "ignoreTrailingComments": true }]*/ var foo = 'bar'; // This is a really really really really really really really long comment ``` +::: + ### ignoreUrls Examples of **correct** code for this rule with the `{ "ignoreUrls": true }` option: +::: correct + ```js /*eslint max-len: ["error", { "ignoreUrls": true }]*/ var url = 'https://www.example.com/really/really/really/really/really/really/really/long'; ``` +::: + ### ignoreStrings Examples of **correct** code for this rule with the `{ "ignoreStrings": true }` option: +::: correct + ```js /*eslint max-len: ["error", { "ignoreStrings": true }]*/ var longString = 'this is a really really really really really long string!'; ``` +::: + ### ignoreTemplateLiterals Examples of **correct** code for this rule with the `{ "ignoreTemplateLiterals": true }` option: +::: correct + ```js /*eslint max-len: ["error", { "ignoreTemplateLiterals": true }]*/ var longTemplateLiteral = `this is a really really really really really long template literal!`; ``` +::: + ### ignoreRegExpLiterals Examples of **correct** code for this rule with the `{ "ignoreRegExpLiterals": true }` option: +::: correct + ```js /*eslint max-len: ["error", { "ignoreRegExpLiterals": true }]*/ var longRegExpLiteral = /this is a really really really really really long regular expression!/; ``` +::: + ### ignorePattern Examples of **correct** code for this rule with the `ignorePattern` option: +::: correct + ```js /*eslint max-len: ["error", { "ignorePattern": "^\\s*var\\s.+=\\s*require\\s*\\(" }]*/ var dep = require('really/really/really/really/really/really/really/really/long/module'); ``` -## Related Rules - -* [complexity](complexity.md) -* [max-depth](max-depth.md) -* [max-nested-callbacks](max-nested-callbacks.md) -* [max-params](max-params.md) -* [max-statements](max-statements.md) +::: diff --git a/eslint/docs/rules/max-lines-per-function.md b/eslint/docs/src/rules/max-lines-per-function.md similarity index 89% rename from eslint/docs/rules/max-lines-per-function.md rename to eslint/docs/src/rules/max-lines-per-function.md index f2af93b..f0ca7cb 100644 --- a/eslint/docs/rules/max-lines-per-function.md +++ b/eslint/docs/src/rules/max-lines-per-function.md @@ -1,4 +1,17 @@ -# enforce a maximum function length (max-lines-per-function) +--- +title: max-lines-per-function +layout: doc +rule_type: suggestion +related_rules: +- complexity +- max-depth +- max-lines +- max-nested-callbacks +- max-params +- max-statements +- max-statements-per-line +--- + Some people consider large functions a code smell. Large functions tend to do a lot of things and can make it hard following what's going on. Many coding style guides dictate a limit of the number of lines that a function can comprise of. This rule can help enforce that style. @@ -6,7 +19,7 @@ Some people consider large functions a code smell. Large functions tend to do a This rule enforces a maximum number of lines per function, in order to aid in maintainability and reduce complexity. -## Why not use `max-statements` or other complexity measurement rules instead? +### Why not use `max-statements` or other complexity measurement rules instead? Nested long method chains like the below example are often broken onto separate lines for readability: @@ -62,6 +75,8 @@ is equivalent to Examples of **incorrect** code for this rule with a max value of `2`: +::: incorrect + ```js /*eslint max-lines-per-function: ["error", 2]*/ function foo() { @@ -69,6 +84,10 @@ function foo() { } ``` +::: + +::: incorrect + ```js /*eslint max-lines-per-function: ["error", 2]*/ function foo() { @@ -77,6 +96,10 @@ function foo() { } ``` +::: + +::: incorrect + ```js /*eslint max-lines-per-function: ["error", 2]*/ function foo() { @@ -86,8 +109,12 @@ function foo() { } ``` +::: + Examples of **correct** code for this rule with a max value of `3`: +::: correct + ```js /*eslint max-lines-per-function: ["error", 3]*/ function foo() { @@ -95,6 +122,10 @@ function foo() { } ``` +::: + +::: correct + ```js /*eslint max-lines-per-function: ["error", 3]*/ function foo() { @@ -103,6 +134,10 @@ function foo() { } ``` +::: + +::: correct + ```js /*eslint max-lines-per-function: ["error", 3]*/ function foo() { @@ -112,10 +147,14 @@ function foo() { } ``` +::: + ### skipBlankLines Examples of **incorrect** code for this rule with the `{ "skipBlankLines": true }` option: +::: incorrect + ```js /*eslint max-lines-per-function: ["error", {"max": 2, "skipBlankLines": true}]*/ function foo() { @@ -124,8 +163,12 @@ function foo() { } ``` +::: + Examples of **correct** code for this rule with the `{ "skipBlankLines": true }` option: +::: correct + ```js /*eslint max-lines-per-function: ["error", {"max": 3, "skipBlankLines": true}]*/ function foo() { @@ -134,10 +177,14 @@ function foo() { } ``` +::: + ### skipComments Examples of **incorrect** code for this rule with the `{ "skipComments": true }` option: +::: incorrect + ```js /*eslint max-lines-per-function: ["error", {"max": 2, "skipComments": true}]*/ function foo() { @@ -146,8 +193,12 @@ function foo() { } ``` +::: + Examples of **correct** code for this rule with the `{ "skipComments": true }` option: +::: correct + ```js /*eslint max-lines-per-function: ["error", {"max": 3, "skipComments": true}]*/ function foo() { @@ -156,10 +207,14 @@ function foo() { } ``` +::: + ### IIFEs Examples of **incorrect** code for this rule with the `{ "IIFEs": true }` option: +::: incorrect + ```js /*eslint max-lines-per-function: ["error", {"max": 2, "IIFEs": true}]*/ (function(){ @@ -171,8 +226,12 @@ Examples of **incorrect** code for this rule with the `{ "IIFEs": true }` option })(); ``` +::: + Examples of **correct** code for this rule with the `{ "IIFEs": true }` option: +::: correct + ```js /*eslint max-lines-per-function: ["error", {"max": 3, "IIFEs": true}]*/ (function(){ @@ -184,16 +243,8 @@ Examples of **correct** code for this rule with the `{ "IIFEs": true }` option: })(); ``` +::: + ## When Not To Use It You can turn this rule off if you are not concerned with the number of lines in your functions. - -## Related Rules - -* [complexity](complexity.md) -* [max-depth](max-depth.md) -* [max-lines](max-lines.md) -* [max-nested-callbacks](max-nested-callbacks.md) -* [max-params](max-params.md) -* [max-statements](max-statements.md) -* [max-statements-per-line](max-statements-per-line.md) diff --git a/eslint/docs/rules/max-lines.md b/eslint/docs/src/rules/max-lines.md similarity index 82% rename from eslint/docs/rules/max-lines.md rename to eslint/docs/src/rules/max-lines.md index 74b9aad..3064683 100644 --- a/eslint/docs/rules/max-lines.md +++ b/eslint/docs/src/rules/max-lines.md @@ -1,4 +1,18 @@ -# enforce a maximum file length (max-lines) +--- +title: max-lines +layout: doc +rule_type: suggestion +related_rules: +- complexity +- max-depth +- max-lines-per-function +- max-nested-callbacks +- max-params +- max-statements +further_reading: +- https://web.archive.org/web/20160725154648/http://www.mind2b.com/component/content/article/24-software-module-size-and-file-size +--- + Some people consider large files a code smell. Large files tend to do a lot of things and can make it hard following what's going. While there is not an objective maximum number of lines considered acceptable in a file, most people would agree it should not be in the thousands. Recommendations usually range from 100 to 500 lines. @@ -22,6 +36,8 @@ This rule has a number or object option: Examples of **incorrect** code for this rule with a max value of `2`: +::: incorrect + ```js /*eslint max-lines: ["error", 2]*/ var a, @@ -29,6 +45,10 @@ var a, c; ``` +::: + +::: incorrect + ```js /*eslint max-lines: ["error", 2]*/ @@ -36,6 +56,10 @@ var a, b,c; ``` +::: + +::: incorrect + ```js /*eslint max-lines: ["error", 2]*/ // a comment @@ -43,30 +67,46 @@ var a, b,c; ``` +::: + Examples of **correct** code for this rule with a max value of `2`: +::: correct + ```js /*eslint max-lines: ["error", 2]*/ var a, b, c; ``` +::: + +::: correct + ```js /*eslint max-lines: ["error", 2]*/ var a, b, c; ``` +::: + +::: correct + ```js /*eslint max-lines: ["error", 2]*/ // a comment var a, b, c; ``` +::: + ### skipBlankLines Examples of **incorrect** code for this rule with the `{ "skipBlankLines": true }` option: +::: incorrect + ```js /*eslint max-lines: ["error", {"max": 2, "skipBlankLines": true}]*/ @@ -75,8 +115,12 @@ var a, c; ``` +::: + Examples of **correct** code for this rule with the `{ "skipBlankLines": true }` option: +::: correct + ```js /*eslint max-lines: ["error", {"max": 2, "skipBlankLines": true}]*/ @@ -84,10 +128,14 @@ var a, b, c; ``` +::: + ### skipComments Examples of **incorrect** code for this rule with the `{ "skipComments": true }` option: +::: incorrect + ```js /*eslint max-lines: ["error", {"max": 2, "skipComments": true}]*/ // a comment @@ -96,8 +144,12 @@ var a, c; ``` +::: + Examples of **correct** code for this rule with the `{ "skipComments": true }` option: +::: correct + ```js /*eslint max-lines: ["error", {"max": 2, "skipComments": true}]*/ // a comment @@ -105,23 +157,12 @@ var a, b, c; ``` +::: + ## When Not To Use It You can turn this rule off if you are not concerned with the number of lines in your files. -## Further reading - -* [Software Module size and file size](https://web.archive.org/web/20160725154648/http://www.mind2b.com/component/content/article/24-software-module-size-and-file-size) - -## Related Rules - -* [complexity](complexity.md) -* [max-depth](max-depth.md) -* [max-lines-per-function](max-lines-per-function.md) -* [max-nested-callbacks](max-nested-callbacks.md) -* [max-params](max-params.md) -* [max-statements](max-statements.md) - ## Compatibility * **JSCS**: [maximumNumberOfLines](https://jscs-dev.github.io/rule/maximumNumberOfLines) diff --git a/eslint/docs/rules/max-nested-callbacks.md b/eslint/docs/src/rules/max-nested-callbacks.md similarity index 73% rename from eslint/docs/rules/max-nested-callbacks.md rename to eslint/docs/src/rules/max-nested-callbacks.md index 24e4b90..ea83c63 100644 --- a/eslint/docs/rules/max-nested-callbacks.md +++ b/eslint/docs/src/rules/max-nested-callbacks.md @@ -1,4 +1,21 @@ -# enforce a maximum depth that callbacks can be nested (max-nested-callbacks) +--- +title: max-nested-callbacks +layout: doc +rule_type: suggestion +related_rules: +- complexity +- max-depth +- max-len +- max-lines +- max-lines-per-function +- max-params +- max-statements +further_reading: +- http://book.mixu.net/node/ch7.html +- https://web.archive.org/web/20220104141150/https://howtonode.org/control-flow +- https://web.archive.org/web/20220127215850/https://howtonode.org/control-flow-part-ii +--- + Many JavaScript libraries use the callback pattern to manage asynchronous operations. A program of any complexity will most likely need to manage several asynchronous operations at various levels of concurrency. A common pitfall that is easy to fall into is nesting callbacks, which makes code more difficult to read the deeper the callbacks are nested. @@ -30,6 +47,8 @@ This rule has a number or object option: Examples of **incorrect** code for this rule with the `{ "max": 3 }` option: +::: incorrect + ```js /*eslint max-nested-callbacks: ["error", 3]*/ @@ -44,8 +63,12 @@ foo1(function() { }); ``` +::: + Examples of **correct** code for this rule with the `{ "max": 3 }` option: +::: correct + ```js /*eslint max-nested-callbacks: ["error", 3]*/ @@ -68,18 +91,4 @@ function handleFoo4() { } ``` -## Further Reading - -* [Control flow in Node.js](http://book.mixu.net/node/ch7.html) -* [Control Flow in Node](https://howtonode.org/control-flow) -* [Control Flow in Node Part II](https://howtonode.org/control-flow-part-ii) - -## Related Rules - -* [complexity](complexity.md) -* [max-depth](max-depth.md) -* [max-len](max-len.md) -* [max-lines](max-lines.md) -* [max-lines-per-function](max-lines-per-function.md) -* [max-params](max-params.md) -* [max-statements](max-statements.md) +::: diff --git a/eslint/docs/rules/max-params.md b/eslint/docs/src/rules/max-params.md similarity index 78% rename from eslint/docs/rules/max-params.md rename to eslint/docs/src/rules/max-params.md index 050d2a3..5456cb1 100644 --- a/eslint/docs/rules/max-params.md +++ b/eslint/docs/src/rules/max-params.md @@ -1,4 +1,17 @@ -# enforce a maximum number of parameters in function definitions (max-params) +--- +title: max-params +layout: doc +rule_type: suggestion +related_rules: +- complexity +- max-depth +- max-len +- max-lines +- max-lines-per-function +- max-nested-callbacks +- max-statements +--- + Functions that take numerous parameters can be difficult to read and write because it requires the memorization of what each parameter is, its type, and the order they should appear in. As a result, many coders adhere to a convention that caps the number of parameters a function can take. @@ -24,6 +37,8 @@ This rule has a number or object option: Examples of **incorrect** code for this rule with the default `{ "max": 3 }` option: +:::incorrect + ```js /*eslint max-params: ["error", 3]*/ /*eslint-env es6*/ @@ -37,8 +52,12 @@ let foo = (bar, baz, qux, qxx) => { }; ``` +::: + Examples of **correct** code for this rule with the default `{ "max": 3 }` option: +:::correct + ```js /*eslint max-params: ["error", 3]*/ /*eslint-env es6*/ @@ -52,12 +71,4 @@ let foo = (bar, baz, qux) => { }; ``` -## Related Rules - -* [complexity](complexity.md) -* [max-depth](max-depth.md) -* [max-len](max-len.md) -* [max-lines](max-lines.md) -* [max-lines-per-function](max-lines-per-function.md) -* [max-nested-callbacks](max-nested-callbacks.md) -* [max-statements](max-statements.md) +::: diff --git a/eslint/docs/rules/max-statements-per-line.md b/eslint/docs/src/rules/max-statements-per-line.md similarity index 86% rename from eslint/docs/rules/max-statements-per-line.md rename to eslint/docs/src/rules/max-statements-per-line.md index e8462b6..efa8160 100644 --- a/eslint/docs/rules/max-statements-per-line.md +++ b/eslint/docs/src/rules/max-statements-per-line.md @@ -1,4 +1,17 @@ -# enforce a maximum number of statements allowed per line (max-statements-per-line) +--- +title: max-statements-per-line +layout: doc +rule_type: layout +related_rules: +- max-depth +- max-len +- max-lines +- max-lines-per-function +- max-nested-callbacks +- max-params +- max-statements +--- + A line of code containing too many statements can be difficult to read. Code is generally read from the top down, especially when scanning, so limiting the number of statements allowed on a single line can be very beneficial for readability and maintainability. @@ -18,6 +31,8 @@ The "max" object property is optional (default: 1). Examples of **incorrect** code for this rule with the default `{ "max": 1 }` option: +::: incorrect + ```js /*eslint max-statements-per-line: ["error", { "max": 1 }]*/ @@ -30,8 +45,12 @@ var foo = function foo() { bar = 1; }; (function foo() { bar = 1; })(); ``` +::: + Examples of **correct** code for this rule with the default `{ "max": 1 }` option: +::: correct + ```js /*eslint max-statements-per-line: ["error", { "max": 1 }]*/ @@ -44,8 +63,12 @@ var foo = function foo() { }; (function foo() { })(); ``` +::: + Examples of **incorrect** code for this rule with the `{ "max": 2 }` option: +::: incorrect + ```js /*eslint max-statements-per-line: ["error", { "max": 2 }]*/ @@ -58,8 +81,12 @@ var foo = function foo() { bar = 1; }; (function foo() { bar = 1; baz = 2; })(); ``` +::: + Examples of **correct** code for this rule with the `{ "max": 2 }` option: +::: correct + ```js /*eslint max-statements-per-line: ["error", { "max": 2 }]*/ @@ -72,16 +99,8 @@ var foo = function foo() { bar = 1; }; (function foo() { var bar = 1; })(); ``` +::: + ## When Not To Use It You can turn this rule off if you are not concerned with the number of statements on each line. - -## Related Rules - -* [max-depth](max-depth.md) -* [max-len](max-len.md) -* [max-lines](max-lines.md) -* [max-lines-per-function](max-lines-per-function.md) -* [max-nested-callbacks](max-nested-callbacks.md) -* [max-params](max-params.md) -* [max-statements](max-statements.md) diff --git a/eslint/docs/rules/max-statements.md b/eslint/docs/src/rules/max-statements.md similarity index 89% rename from eslint/docs/rules/max-statements.md rename to eslint/docs/src/rules/max-statements.md index c2a6733..c29a595 100644 --- a/eslint/docs/rules/max-statements.md +++ b/eslint/docs/src/rules/max-statements.md @@ -1,4 +1,17 @@ -# enforce a maximum number of statements allowed in function blocks (max-statements) +--- +title: max-statements +layout: doc +rule_type: suggestion +related_rules: +- complexity +- max-depth +- max-len +- max-lines +- max-lines-per-function +- max-nested-callbacks +- max-params +--- + The `max-statements` rule allows you to specify the maximum number of statements allowed in a function. @@ -30,6 +43,8 @@ This rule has an object option: Examples of **incorrect** code for this rule with the default `{ "max": 10 }` option: +::: incorrect + ```js /*eslint max-statements: ["error", 10]*/ /*eslint-env es6*/ @@ -65,8 +80,12 @@ let foo = () => { }; ``` +::: + Examples of **correct** code for this rule with the default `{ "max": 10 }` option: +::: correct + ```js /*eslint max-statements: ["error", 10]*/ /*eslint-env es6*/ @@ -112,10 +131,14 @@ let foo = () => { } ``` +::: + Note that this rule does not apply to class static blocks, and that statements in class static blocks do not count as statements in the enclosing function. Examples of **correct** code for this rule with `{ "max": 2 }` option: +::: correct + ```js /*eslint max-statements: ["error", 2]*/ @@ -136,10 +159,14 @@ function foo() { } ``` +::: + ### ignoreTopLevelFunctions Examples of additional **correct** code for this rule with the `{ "max": 10 }, { "ignoreTopLevelFunctions": true }` options: +::: correct + ```js /*eslint max-statements: ["error", 10, { "ignoreTopLevelFunctions": true }]*/ @@ -158,12 +185,4 @@ function foo() { } ``` -## Related Rules - -* [complexity](complexity.md) -* [max-depth](max-depth.md) -* [max-len](max-len.md) -* [max-lines](max-lines.md) -* [max-lines-per-function](max-lines-per-function.md) -* [max-nested-callbacks](max-nested-callbacks.md) -* [max-params](max-params.md) +::: diff --git a/eslint/docs/rules/multiline-comment-style.md b/eslint/docs/src/rules/multiline-comment-style.md similarity index 93% rename from eslint/docs/rules/multiline-comment-style.md rename to eslint/docs/src/rules/multiline-comment-style.md index 32beddd..657de1d 100644 --- a/eslint/docs/rules/multiline-comment-style.md +++ b/eslint/docs/src/rules/multiline-comment-style.md @@ -1,4 +1,10 @@ -# enforce a particular style for multiline comments (multiline-comment-style) +--- +title: multiline-comment-style +layout: doc +rule_type: suggestion +--- + + Many style guides require a particular style for comments that span multiple lines. For example, some style guides prefer the use of a single block comment for multiline comments, whereas other style guides prefer consecutive line comments. @@ -18,6 +24,8 @@ The rule always ignores directive comments such as `/* eslint-disable */`. Addit Examples of **incorrect** code for this rule with the default `"starred-block"` option: +::: incorrect + ```js /* eslint multiline-comment-style: ["error", "starred-block"] */ @@ -48,8 +56,12 @@ foo(); ``` +::: + Examples of **correct** code for this rule with the default `"starred-block"` option: +::: correct + ```js /* eslint multiline-comment-style: ["error", "starred-block"] */ @@ -62,8 +74,12 @@ foo(); // single-line comment ``` +::: + Examples of **incorrect** code for this rule with the `"bare-block"` option: +::: incorrect + ```js /* eslint multiline-comment-style: ["error", "bare-block"] */ @@ -78,8 +94,12 @@ foo(); foo(); ``` +::: + Examples of **correct** code for this rule with the `"bare-block"` option: +::: correct + ```js /* eslint multiline-comment-style: ["error", "bare-block"] */ @@ -88,8 +108,12 @@ Examples of **correct** code for this rule with the `"bare-block"` option: foo(); ``` +::: + Examples of **incorrect** code for this rule with the `"separate-lines"` option: +::: incorrect + ```js /* eslint multiline-comment-style: ["error", "separate-lines"] */ @@ -106,8 +130,12 @@ foo(); ``` +::: + Examples of **correct** code for this rule with the `"separate-lines"` option: +::: correct + ```js /* eslint multiline-comment-style: ["error", "separate-lines"] */ @@ -115,9 +143,10 @@ Examples of **correct** code for this rule with the `"separate-lines"` option: // calls foo() foo(); - ``` +::: + ## When Not To Use It If you don't want to enforce a particular style for multiline comments, you can disable the rule. diff --git a/eslint/docs/rules/multiline-ternary.md b/eslint/docs/src/rules/multiline-ternary.md similarity index 89% rename from eslint/docs/rules/multiline-ternary.md rename to eslint/docs/src/rules/multiline-ternary.md index 0c38bf7..f3ba255 100644 --- a/eslint/docs/rules/multiline-ternary.md +++ b/eslint/docs/src/rules/multiline-ternary.md @@ -1,4 +1,12 @@ -# Enforce or disallow newlines between operands of ternary expressions (multiline-ternary) +--- +title: multiline-ternary +layout: doc +rule_type: layout +related_rules: +- operator-linebreak +--- + + JavaScript allows operands of ternary expressions to be separated by newlines, which can improve the readability of your program. @@ -19,7 +27,7 @@ var foo = bar > baz ? ## Rule Details This rule enforces or disallows newlines between operands of a ternary expression. -Note: The location of the operators is not enforced by this rule. Please see the [operator-linebreak](operator-linebreak.md) rule if you are interested in enforcing the location of the operators themselves. +Note: The location of the operators is not enforced by this rule. Please see the [operator-linebreak](operator-linebreak) rule if you are interested in enforcing the location of the operators themselves. ## Options @@ -35,6 +43,8 @@ This is the default option. Examples of **incorrect** code for this rule with the `"always"` option: +::: incorrect + ```js /*eslint multiline-ternary: ["error", "always"]*/ @@ -47,8 +57,12 @@ foo > bar ? value : value2; ``` +::: + Examples of **correct** code for this rule with the `"always"` option: +::: correct + ```js /*eslint multiline-ternary: ["error", "always"]*/ @@ -63,10 +77,14 @@ foo > bar ? value3; ``` +::: + ### always-multiline Examples of **incorrect** code for this rule with the `"always-multiline"` option: +::: incorrect + ```js /*eslint multiline-ternary: ["error", "always-multiline"]*/ @@ -80,8 +98,12 @@ foo > bar && bar > baz ? value1 : value2; ``` +::: + Examples of **correct** code for this rule with the `"always-multiline"` option: +::: correct + ```js /*eslint multiline-ternary: ["error", "always-multiline"]*/ @@ -107,10 +129,14 @@ foo > bar && value2; ``` +::: + ### never Examples of **incorrect** code for this rule with the `"never"` option: +::: incorrect + ```js /*eslint multiline-ternary: ["error", "never"]*/ @@ -126,8 +152,12 @@ foo > value2; ``` +::: + Examples of **correct** code for this rule with the `"never"` option: +::: correct + ```js /*eslint multiline-ternary: ["error", "never"]*/ @@ -140,14 +170,12 @@ foo > bar ? ( ) : value3; ``` +::: + ## When Not To Use It You can safely disable this rule if you do not have any strict conventions about whether the operands of a ternary expression should be separated by newlines. -## Related Rules - -* [operator-linebreak](operator-linebreak.md) - ## Compatibility * **JSCS**: [requireMultiLineTernary](https://jscs-dev.github.io/rule/requireMultiLineTernary) diff --git a/eslint/docs/rules/new-cap.md b/eslint/docs/src/rules/new-cap.md similarity index 94% rename from eslint/docs/rules/new-cap.md rename to eslint/docs/src/rules/new-cap.md index ef8c615..cf49280 100644 --- a/eslint/docs/rules/new-cap.md +++ b/eslint/docs/src/rules/new-cap.md @@ -1,4 +1,9 @@ -# require constructor names to begin with a capital letter (new-cap) +--- +title: new-cap +layout: doc +rule_type: suggestion +--- + The `new` operator in JavaScript creates a new instance of a particular type of object. That type of object is represented by a constructor function. Since constructor functions are just regular functions, the only defining characteristic is that `new` is being used as part of the call. Native JavaScript functions begin with an uppercase letter to distinguish those functions that are to be used as constructors from functions that are not. Many style guides recommend following this pattern to more easily determine which functions are to be used as constructors. @@ -23,6 +28,8 @@ This rule requires constructor names to begin with a capital letter. Certain bui Examples of **correct** code for this rule: +::: correct + ```js /*eslint new-cap: "error"*/ @@ -31,6 +38,8 @@ function foo(arg) { } ``` +::: + ## Options This rule has an object option: @@ -50,58 +59,84 @@ This rule has an object option: Examples of **incorrect** code for this rule with the default `{ "newIsCap": true }` option: +::: incorrect + ```js /*eslint new-cap: ["error", { "newIsCap": true }]*/ var friend = new person(); ``` +::: + Examples of **correct** code for this rule with the default `{ "newIsCap": true }` option: +::: correct + ```js /*eslint new-cap: ["error", { "newIsCap": true }]*/ var friend = new Person(); ``` +::: + Examples of **correct** code for this rule with the `{ "newIsCap": false }` option: +::: correct + ```js /*eslint new-cap: ["error", { "newIsCap": false }]*/ var friend = new person(); ``` +::: + ### capIsNew Examples of **incorrect** code for this rule with the default `{ "capIsNew": true }` option: +::: incorrect + ```js /*eslint new-cap: ["error", { "capIsNew": true }]*/ var colleague = Person(); ``` +::: + Examples of **correct** code for this rule with the default `{ "capIsNew": true }` option: +::: correct + ```js /*eslint new-cap: ["error", { "capIsNew": true }]*/ var colleague = new Person(); ``` +::: + Examples of **correct** code for this rule with the `{ "capIsNew": false }` option: +::: correct + ```js /*eslint new-cap: ["error", { "capIsNew": false }]*/ var colleague = Person(); ``` +::: + ### newIsCapExceptions Examples of additional **correct** code for this rule with the `{ "newIsCapExceptions": ["events"] }` option: +::: correct + ```js /*eslint new-cap: ["error", { "newIsCapExceptions": ["events"] }]*/ @@ -110,10 +145,14 @@ var events = require('events'); var emitter = new events(); ``` +::: + ### newIsCapExceptionPattern Examples of additional **correct** code for this rule with the `{ "newIsCapExceptionPattern": "^person\\.." }` option: +::: correct + ```js /*eslint new-cap: ["error", { "newIsCapExceptionPattern": "^person\\.." }]*/ @@ -122,18 +161,26 @@ var friend = new person.acquaintance(); var bestFriend = new person.friend(); ``` +::: + Examples of additional **correct** code for this rule with the `{ "newIsCapExceptionPattern": "\\.bar$" }` option: +::: correct + ```js /*eslint new-cap: ["error", { "newIsCapExceptionPattern": "\\.bar$" }]*/ var friend = new person.bar(); ``` +::: + ### capIsNewExceptions Examples of additional **correct** code for this rule with the `{ "capIsNewExceptions": ["Person"] }` option: +::: correct + ```js /*eslint new-cap: ["error", { "capIsNewExceptions": ["Person"] }]*/ @@ -142,10 +189,14 @@ function foo(arg) { } ``` +::: + ### capIsNewExceptionPattern Examples of additional **correct** code for this rule with the `{ "capIsNewExceptionPattern": "^person\\.." }` option: +::: correct + ```js /*eslint new-cap: ["error", { "capIsNewExceptionPattern": "^person\\.." }]*/ @@ -153,16 +204,24 @@ var friend = person.Acquaintance(); var bestFriend = person.Friend(); ``` +::: + Examples of additional **correct** code for this rule with the `{ "capIsNewExceptionPattern": "\\.Bar$" }` option: +::: correct + ```js /*eslint new-cap: ["error", { "capIsNewExceptionPattern": "\\.Bar$" }]*/ foo.Bar(); ``` +::: + Examples of additional **correct** code for this rule with the `{ "capIsNewExceptionPattern": "^Foo" }` option: +::: correct + ```js /*eslint new-cap: ["error", { "capIsNewExceptionPattern": "^Foo" }]*/ @@ -173,32 +232,46 @@ var y = Foobar(42); var z = Foo.Bar(42); ``` +::: + ### properties Examples of **incorrect** code for this rule with the default `{ "properties": true }` option: +::: incorrect + ```js /*eslint new-cap: ["error", { "properties": true }]*/ var friend = new person.acquaintance(); ``` +::: + Examples of **correct** code for this rule with the default `{ "properties": true }` option: +::: correct + ```js /*eslint new-cap: ["error", { "properties": true }]*/ var friend = new person.Acquaintance(); ``` +::: + Examples of **correct** code for this rule with the `{ "properties": false }` option: +::: correct + ```js /*eslint new-cap: ["error", { "properties": false }]*/ var friend = new person.acquaintance(); ``` +::: + ## When Not To Use It If you have conventions that don't require an uppercase letter for constructors, or don't require capitalized functions be only used as constructors, turn this rule off. diff --git a/eslint/docs/rules/new-parens.md b/eslint/docs/src/rules/new-parens.md similarity index 82% rename from eslint/docs/rules/new-parens.md rename to eslint/docs/src/rules/new-parens.md index 0b2a49b..02bceef 100644 --- a/eslint/docs/rules/new-parens.md +++ b/eslint/docs/src/rules/new-parens.md @@ -1,4 +1,10 @@ -# require parentheses when invoking a constructor with no arguments (new-parens) +--- +title: new-parens +layout: doc +rule_type: layout +--- + + JavaScript allows the omission of parentheses when invoking a function via the `new` keyword and the constructor has no arguments. However, some coders believe that omitting the parentheses is inconsistent with the rest of the language and thus makes code less clear. @@ -14,13 +20,15 @@ This rule can enforce or disallow parentheses when invoking a constructor with n This rule takes one option. -- `"always"` enforces parenthesis after a new constructor with no arguments (default) -- `"never"` enforces no parenthesis after a new constructor with no arguments +* `"always"` enforces parenthesis after a new constructor with no arguments (default) +* `"never"` enforces no parenthesis after a new constructor with no arguments ### always Examples of **incorrect** code for this rule with the `"always"` option: +::: incorrect + ```js /*eslint new-parens: "error"*/ @@ -28,8 +36,12 @@ var person = new Person; var person = new (Person); ``` +::: + Examples of **correct** code for this rule with the `"always"` option: +::: correct + ```js /*eslint new-parens: "error"*/ @@ -37,10 +49,14 @@ var person = new Person(); var person = new (Person)(); ``` +::: + ### never Examples of **incorrect** code for this rule with the `"never"` option: +::: incorrect + ```js /*eslint new-parens: ["error", "never"]*/ @@ -48,8 +64,12 @@ var person = new Person(); var person = new (Person)(); ``` +::: + Examples of **correct** code for this rule with the `"never"` option: +::: correct + ```js /*eslint new-parens: ["error", "never"]*/ @@ -57,3 +77,5 @@ var person = new Person; var person = (new Person); var person = new Person("Name"); ``` + +::: diff --git a/eslint/docs/rules/newline-after-var.md b/eslint/docs/src/rules/newline-after-var.md similarity index 95% rename from eslint/docs/rules/newline-after-var.md rename to eslint/docs/src/rules/newline-after-var.md index 43ec9ba..a516b53 100644 --- a/eslint/docs/rules/newline-after-var.md +++ b/eslint/docs/src/rules/newline-after-var.md @@ -1,6 +1,12 @@ -# require or disallow an empty line after variable declarations (newline-after-var) +--- +title: newline-after-var +layout: doc +rule_type: layout +--- -This rule was **deprecated** in ESLint v4.0.0 and replaced by the [padding-line-between-statements](padding-line-between-statements.md) rule. + + +This rule was **deprecated** in ESLint v4.0.0 and replaced by the [padding-line-between-statements](padding-line-between-statements) rule. As of today there is no consistency in separating variable declarations from the rest of the code. Some developers leave an empty line between var statements and the rest of the code like: @@ -37,6 +43,8 @@ This rule has a string option: Examples of **incorrect** code for this rule with the default `"always"` option: +::: incorrect + ```js /*eslint newline-after-var: ["error", "always"]*/ /*eslint-env es6*/ @@ -59,8 +67,12 @@ var name = "world"; console.log(greet, name); ``` +::: + Examples of **correct** code for this rule with the default `"always"` option: +::: correct + ```js /*eslint newline-after-var: ["error", "always"]*/ /*eslint-env es6*/ @@ -87,10 +99,14 @@ var name = "world"; console.log(greet, name); ``` +::: + ### never Examples of **incorrect** code for this rule with the `"never"` option: +::: incorrect + ```js /*eslint newline-after-var: ["error", "never"]*/ /*eslint-env es6*/ @@ -117,8 +133,12 @@ var name = "world"; console.log(greet, name); ``` +::: + Examples of **correct** code for this rule with the `"never"` option: +::: correct + ```js /*eslint newline-after-var: ["error", "never"]*/ /*eslint-env es6*/ @@ -140,3 +160,5 @@ var name = "world"; // var name = require("world"); console.log(greet, name); ``` + +::: diff --git a/eslint/docs/rules/newline-before-return.md b/eslint/docs/src/rules/newline-before-return.md similarity index 93% rename from eslint/docs/rules/newline-before-return.md rename to eslint/docs/src/rules/newline-before-return.md index 6709534..2851e68 100644 --- a/eslint/docs/rules/newline-before-return.md +++ b/eslint/docs/src/rules/newline-before-return.md @@ -1,6 +1,14 @@ -# require an empty line before `return` statements (newline-before-return) +--- +title: newline-before-return +layout: doc +rule_type: layout +related_rules: +- newline-after-var +--- -This rule was **deprecated** in ESLint v4.0.0 and replaced by the [padding-line-between-statements](padding-line-between-statements.md) rule. + + +This rule was **deprecated** in ESLint v4.0.0 and replaced by the [padding-line-between-statements](padding-line-between-statements) rule. There is no hard and fast rule about whether empty lines should precede `return` statements in JavaScript. However, clearly delineating where a function is returning can greatly increase the readability and clarity of the code. For example: @@ -37,6 +45,8 @@ This rule requires an empty line before `return` statements to increase code cla Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint newline-before-return: "error"*/ @@ -57,8 +67,12 @@ function foo(bar) { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint newline-before-return: "error"*/ @@ -107,10 +121,8 @@ function foo() { } ``` +::: + ## When Not To Use It You can safely disable this rule if you do not have any strict conventions about whitespace before `return` statements. - -## Related Rules - -* [newline-after-var](newline-after-var.md) diff --git a/eslint/docs/rules/newline-per-chained-call.md b/eslint/docs/src/rules/newline-per-chained-call.md similarity index 95% rename from eslint/docs/rules/newline-per-chained-call.md rename to eslint/docs/src/rules/newline-per-chained-call.md index c4227c0..4ceff02 100644 --- a/eslint/docs/rules/newline-per-chained-call.md +++ b/eslint/docs/src/rules/newline-per-chained-call.md @@ -1,4 +1,10 @@ -# require a newline after each call in a method chain (newline-per-chained-call) +--- +title: newline-per-chained-call +layout: doc +rule_type: layout +--- + + Chained method calls on a single line without line breaks are harder to read, so some developers place a newline character after each method call in the chain to make it more readable and easy to maintain. @@ -62,6 +68,8 @@ This rule has an object option: Examples of **incorrect** code for this rule with the default `{ "ignoreChainWithDepth": 2 }` option: +::: incorrect + ```js /*eslint newline-per-chained-call: ["error", { "ignoreChainWithDepth": 2 }]*/ @@ -79,8 +87,12 @@ _ obj.method().method2().method3(); ``` +::: + Examples of **correct** code for this rule with the default `{ "ignoreChainWithDepth": 2 }` option: +::: correct + ```js /*eslint newline-per-chained-call: ["error", { "ignoreChainWithDepth": 2 }]*/ @@ -113,6 +125,8 @@ obj .method3().prop; ``` +::: + ## When Not To Use It If you have conflicting rules or when you are fine with chained calls on one line, you can safely turn this rule off. diff --git a/eslint/docs/rules/no-alert.md b/eslint/docs/src/rules/no-alert.md similarity index 88% rename from eslint/docs/rules/no-alert.md rename to eslint/docs/src/rules/no-alert.md index 6b7e664..6088cb3 100644 --- a/eslint/docs/rules/no-alert.md +++ b/eslint/docs/src/rules/no-alert.md @@ -1,4 +1,12 @@ -# Disallow Use of Alert (no-alert) +--- +title: no-alert +layout: doc +rule_type: suggestion +related_rules: +- no-console +- no-debugger +--- + JavaScript's `alert`, `confirm`, and `prompt` functions are widely considered to be obtrusive as UI elements and should be replaced by a more appropriate custom UI implementation. Furthermore, `alert` is often used while debugging code, which should be removed before deployment to production. @@ -12,6 +20,8 @@ This rule is aimed at catching debugging code that should be removed and popup U Examples of **incorrect** code for this rule: +:::incorrect + ```js /*eslint no-alert: "error"*/ @@ -22,8 +32,12 @@ confirm("Are you sure?"); prompt("What's your name?", "John Doe"); ``` +::: + Examples of **correct** code for this rule: +:::correct + ```js /*eslint no-alert: "error"*/ @@ -39,7 +53,4 @@ function foo() { } ``` -## Related Rules - -* [no-console](no-console.md) -* [no-debugger](no-debugger.md) +::: diff --git a/eslint/docs/rules/no-array-constructor.md b/eslint/docs/src/rules/no-array-constructor.md similarity index 85% rename from eslint/docs/rules/no-array-constructor.md rename to eslint/docs/src/rules/no-array-constructor.md index 22fbde6..730da6c 100644 --- a/eslint/docs/rules/no-array-constructor.md +++ b/eslint/docs/src/rules/no-array-constructor.md @@ -1,4 +1,12 @@ -# disallow `Array` constructors (no-array-constructor) +--- +title: no-array-constructor +layout: doc +rule_type: suggestion +related_rules: +- no-new-object +- no-new-wrappers +--- + Use of the `Array` constructor to construct a new array is generally discouraged in favor of array literal notation because of the single-argument @@ -12,6 +20,8 @@ This rule disallows `Array` constructors. Examples of **incorrect** code for this rule: +:::incorrect + ```js /*eslint no-array-constructor: "error"*/ @@ -20,8 +30,12 @@ Array(0, 1, 2) new Array(0, 1, 2) ``` +::: + Examples of **correct** code for this rule: +:::correct + ```js /*eslint no-array-constructor: "error"*/ @@ -32,12 +46,9 @@ new Array(someOtherArray.length) [0, 1, 2] ``` +::: + ## When Not To Use It This rule enforces a nearly universal stylistic concern. That being said, this rule may be disabled if the constructor style is preferred. - -## Related Rules - -* [no-new-object](no-new-object.md) -* [no-new-wrappers](no-new-wrappers.md) diff --git a/eslint/docs/rules/no-arrow-condition.md b/eslint/docs/src/rules/no-arrow-condition.md similarity index 79% rename from eslint/docs/rules/no-arrow-condition.md rename to eslint/docs/src/rules/no-arrow-condition.md index faa5566..6783bde 100644 --- a/eslint/docs/rules/no-arrow-condition.md +++ b/eslint/docs/src/rules/no-arrow-condition.md @@ -1,6 +1,16 @@ -# no-arrow-condition: disallow arrow functions where test conditions are expected +--- +title: no-arrow-condition +layout: doc -(removed) This rule was **removed** in ESLint v2.0 and **replaced** by a combination of the [no-confusing-arrow](no-confusing-arrow.md) and [no-constant-condition](no-constant-condition.md) rules. +related_rules: +- arrow-parens +- no-confusing-arrow +- no-constant-condition +--- + +Disallows arrow functions where test conditions are expected. + +(removed) This rule was **removed** in ESLint v2.0 and **replaced** by a combination of the [no-confusing-arrow](no-confusing-arrow) and [no-constant-condition](no-constant-condition) rules. Arrow functions (`=>`) are similar in syntax to some comparison operators (`>`, `<`, `<=`, and `>=`). This rule warns against using the arrow function syntax in places where a condition is expected. Even if the arguments of the arrow function are wrapped with parens, this rule still warns about it. @@ -28,6 +38,8 @@ var x = a <= 1 ? 2 : 3 Examples of **incorrect** code for this rule: +:::incorrect + ```js /*eslint no-arrow-condition: "error"*/ /*eslint-env es6*/ @@ -41,8 +53,4 @@ var x = a => 1 ? 2 : 3 var x = (a) => 1 ? 2 : 3 ``` -## Related Rules - -* [arrow-parens](arrow-parens.md) -* [no-confusing-arrow](no-confusing-arrow.md) -* [no-constant-condition](no-constant-condition.md) +::: diff --git a/eslint/docs/rules/no-async-promise-executor.md b/eslint/docs/src/rules/no-async-promise-executor.md similarity index 93% rename from eslint/docs/rules/no-async-promise-executor.md rename to eslint/docs/src/rules/no-async-promise-executor.md index 58655b7..4c6a854 100644 --- a/eslint/docs/rules/no-async-promise-executor.md +++ b/eslint/docs/src/rules/no-async-promise-executor.md @@ -1,4 +1,10 @@ -# disallow using an async function as a Promise executor (no-async-promise-executor) +--- +title: no-async-promise-executor +layout: doc +rule_type: problem +--- + + The `new Promise` constructor accepts an *executor* function as an argument, which has `resolve` and `reject` parameters that can be used to control the state of the created Promise. For example: @@ -25,6 +31,8 @@ This rule aims to disallow async Promise executor functions. Examples of **incorrect** code for this rule: +::: incorrect + ```js const foo = new Promise(async (resolve, reject) => { readFile('foo.txt', function(err, result) { @@ -41,8 +49,12 @@ const result = new Promise(async (resolve, reject) => { }); ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js const foo = new Promise((resolve, reject) => { readFile('foo.txt', function(err, result) { @@ -57,6 +69,8 @@ const foo = new Promise((resolve, reject) => { const result = Promise.resolve(foo); ``` +::: + ## When Not To Use It If your codebase doesn't support async function syntax, there's no need to enable this rule. diff --git a/eslint/docs/rules/no-await-in-loop.md b/eslint/docs/src/rules/no-await-in-loop.md similarity index 96% rename from eslint/docs/rules/no-await-in-loop.md rename to eslint/docs/src/rules/no-await-in-loop.md index eebf142..f661a5b 100644 --- a/eslint/docs/rules/no-await-in-loop.md +++ b/eslint/docs/src/rules/no-await-in-loop.md @@ -1,4 +1,9 @@ -# Disallow `await` inside of loops (no-await-in-loop) +--- +title: no-await-in-loop +layout: doc +rule_type: problem +--- + Performing an operation on each element of an iterable is a common task. However, performing an `await` as part of each operation is an indication that the program is not taking full advantage of @@ -41,6 +46,8 @@ This rule disallows the use of `await` within loop bodies. Examples of **correct** code for this rule: +:::correct + ```js /*eslint no-await-in-loop: "error"*/ @@ -55,8 +62,12 @@ async function foo(things) { } ``` +::: + Examples of **incorrect** code for this rule: +:::incorrect + ```js /*eslint no-await-in-loop: "error"*/ @@ -70,6 +81,8 @@ async function foo(things) { } ``` +::: + ## When Not To Use It In many cases the iterations of a loop are not actually independent of each-other. For example, the diff --git a/eslint/docs/rules/no-bitwise.md b/eslint/docs/src/rules/no-bitwise.md similarity index 90% rename from eslint/docs/rules/no-bitwise.md rename to eslint/docs/src/rules/no-bitwise.md index 252f0cf..2df0b8a 100644 --- a/eslint/docs/rules/no-bitwise.md +++ b/eslint/docs/src/rules/no-bitwise.md @@ -1,4 +1,9 @@ -# disallow bitwise operators (no-bitwise) +--- +title: no-bitwise +layout: doc +rule_type: suggestion +--- + The use of bitwise operators in JavaScript is very rare and often `&` or `|` is simply a mistyped `&&` or `||`, which will lead to unexpected behavior. @@ -12,6 +17,8 @@ This rule disallows bitwise operators. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-bitwise: "error"*/ @@ -42,8 +49,12 @@ x >>= y; x >>>= y; ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-bitwise: "error"*/ @@ -58,6 +69,8 @@ var x = y < z; x += y; ``` +::: + ## Options This rule has an object option: @@ -69,18 +82,26 @@ This rule has an object option: Examples of **correct** code for this rule with the `{ "allow": ["~"] }` option: +::: correct + ```js /*eslint no-bitwise: ["error", { "allow": ["~"] }] */ ~[1,2,3].indexOf(1) === -1; ``` +::: + ### int32Hint Examples of **correct** code for this rule with the `{ "int32Hint": true }` option: +::: correct + ```js /*eslint no-bitwise: ["error", { "int32Hint": true }] */ var b = a|0; ``` + +::: diff --git a/eslint/docs/rules/no-buffer-constructor.md b/eslint/docs/src/rules/no-buffer-constructor.md similarity index 79% rename from eslint/docs/rules/no-buffer-constructor.md rename to eslint/docs/src/rules/no-buffer-constructor.md index 9902a71..18f4f17 100644 --- a/eslint/docs/rules/no-buffer-constructor.md +++ b/eslint/docs/src/rules/no-buffer-constructor.md @@ -1,4 +1,13 @@ -# disallow use of the Buffer() constructor (no-buffer-constructor) +--- +title: no-buffer-constructor +layout: doc +rule_type: problem +further_reading: +- https://nodejs.org/api/buffer.html +- https://github.com/ChALkeR/notes/blob/master/Lets-fix-Buffer-API.md +- https://github.com/nodejs/node/issues/4660 +--- + This rule was **deprecated** in ESLint v7.0.0. Please use the corresponding rule in [`eslint-plugin-node`](https://github.com/mysticatea/eslint-plugin-node). @@ -10,6 +19,8 @@ This rule disallows calling and constructing the `Buffer()` constructor. Examples of **incorrect** code for this rule: +::: incorrect + ```js new Buffer(5); new Buffer([1, 2, 3]); @@ -21,8 +32,12 @@ new Buffer(res.body.amount); new Buffer(res.body.values); ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js Buffer.alloc(5); Buffer.allocUnsafe(5); @@ -32,12 +47,8 @@ Buffer.alloc(res.body.amount); Buffer.from(res.body.values); ``` +::: + ## When Not To Use It If you don't use Node.js, or you still need to support versions of Node.js that lack methods like `Buffer.from`, then you should not enable this rule. - -## Further Reading - -* [Buffer API documentation](https://nodejs.org/api/buffer.html) -* [Let's fix Node.js Buffer API](https://github.com/ChALkeR/notes/blob/master/Lets-fix-Buffer-API.md) -* [Buffer(number) is unsafe](https://github.com/nodejs/node/issues/4660) diff --git a/eslint/docs/rules/no-caller.md b/eslint/docs/src/rules/no-caller.md similarity index 91% rename from eslint/docs/rules/no-caller.md rename to eslint/docs/src/rules/no-caller.md index f5688df..5a1e2b7 100644 --- a/eslint/docs/rules/no-caller.md +++ b/eslint/docs/src/rules/no-caller.md @@ -1,4 +1,9 @@ -# Disallow Use of caller/callee (no-caller) +--- +title: no-caller +layout: doc +rule_type: suggestion +--- + The use of `arguments.caller` and `arguments.callee` make several code optimizations impossible. They have been deprecated in future versions of JavaScript and their use is forbidden in ECMAScript 5 while in strict mode. @@ -14,6 +19,8 @@ This rule is aimed at discouraging the use of deprecated and sub-optimal code by Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-caller: "error"*/ @@ -30,8 +37,12 @@ function foo(n) { }); ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-caller: "error"*/ @@ -47,3 +58,5 @@ function foo(n) { return !(n > 1) ? 1 : factorial(n - 1) * n; }); ``` + +::: diff --git a/eslint/docs/rules/no-case-declarations.md b/eslint/docs/src/rules/no-case-declarations.md similarity index 92% rename from eslint/docs/rules/no-case-declarations.md rename to eslint/docs/src/rules/no-case-declarations.md index 3652c74..b9aa9b5 100644 --- a/eslint/docs/rules/no-case-declarations.md +++ b/eslint/docs/src/rules/no-case-declarations.md @@ -1,4 +1,12 @@ -# Disallow lexical declarations in case/default clauses (no-case-declarations) +--- +title: no-case-declarations +layout: doc +rule_type: suggestion +related_rules: +- no-fallthrough +--- + + This rule disallows lexical declarations (`let`, `const`, `function` and `class`) in `case`/`default` clauses. The reason is that the lexical declaration is visible @@ -14,6 +22,8 @@ This rule aims to prevent access to uninitialized lexical bindings as well as ac Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-case-declarations: "error"*/ /*eslint-env es6*/ @@ -33,8 +43,12 @@ switch (foo) { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-case-declarations: "error"*/ /*eslint-env es6*/ @@ -66,10 +80,8 @@ switch (foo) { } ``` +::: + ## When Not To Use It If you depend on fall through behavior and want access to bindings introduced in the case block. - -## Related Rules - -* [no-fallthrough](no-fallthrough.md) diff --git a/eslint/docs/rules/no-catch-shadow.md b/eslint/docs/src/rules/no-catch-shadow.md similarity index 92% rename from eslint/docs/rules/no-catch-shadow.md rename to eslint/docs/src/rules/no-catch-shadow.md index cd57ac8..abf86b9 100644 --- a/eslint/docs/rules/no-catch-shadow.md +++ b/eslint/docs/src/rules/no-catch-shadow.md @@ -1,4 +1,9 @@ -# Disallow Shadowing of Variables Inside of catch (no-catch-shadow) +--- +title: no-catch-shadow +layout: doc +rule_type: suggestion +--- + This rule was **deprecated** in ESLint v5.1.0. @@ -22,6 +27,8 @@ This rule is aimed at preventing unexpected behavior in your program that may ar Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-catch-shadow: "error"*/ @@ -44,8 +51,12 @@ try { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-catch-shadow: "error"*/ @@ -68,6 +79,8 @@ try { } ``` +::: + ## When Not To Use It If you do not need to support IE 8 and earlier, you should turn this rule off. diff --git a/eslint/docs/rules/no-class-assign.md b/eslint/docs/src/rules/no-class-assign.md similarity index 86% rename from eslint/docs/rules/no-class-assign.md rename to eslint/docs/src/rules/no-class-assign.md index 62c8a71..153be8e 100644 --- a/eslint/docs/rules/no-class-assign.md +++ b/eslint/docs/src/rules/no-class-assign.md @@ -1,4 +1,10 @@ -# Disallow modifying variables of class declarations (no-class-assign) +--- +title: no-class-assign +layout: doc +rule_type: problem +--- + + `ClassDeclaration` creates a variable, and we can modify the variable. @@ -17,6 +23,8 @@ This rule is aimed to flag modifying variables of class declarations. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-class-assign: "error"*/ /*eslint-env es6*/ @@ -25,6 +33,10 @@ class A { } A = 0; ``` +::: + +::: incorrect + ```js /*eslint no-class-assign: "error"*/ /*eslint-env es6*/ @@ -33,6 +45,10 @@ A = 0; class A { } ``` +::: + +::: incorrect + ```js /*eslint no-class-assign: "error"*/ /*eslint-env es6*/ @@ -44,6 +60,10 @@ class A { } ``` +::: + +::: incorrect + ```js /*eslint no-class-assign: "error"*/ /*eslint-env es6*/ @@ -56,8 +76,12 @@ let A = class A { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-class-assign: "error"*/ /*eslint-env es6*/ @@ -66,6 +90,10 @@ let A = class A { } A = 0; // A is a variable. ``` +::: + +::: correct + ```js /*eslint no-class-assign: "error"*/ /*eslint-env es6*/ @@ -77,6 +105,10 @@ let A = class { } ``` +::: + +::: correct + ```js /*eslint no-class-assign: 2*/ /*eslint-env es6*/ @@ -88,6 +120,8 @@ class A { } ``` +::: + ## When Not To Use It If you don't want to be notified about modifying variables of class declarations, you can safely disable this rule. diff --git a/eslint/docs/rules/no-comma-dangle.md b/eslint/docs/src/rules/no-comma-dangle.md similarity index 84% rename from eslint/docs/rules/no-comma-dangle.md rename to eslint/docs/src/rules/no-comma-dangle.md index d8396ba..de0faf7 100644 --- a/eslint/docs/rules/no-comma-dangle.md +++ b/eslint/docs/src/rules/no-comma-dangle.md @@ -1,6 +1,12 @@ -# no-comma-dangle: disallow trailing commas in object and array literals +--- +title: no-comma-dangle +layout: doc -(removed) This rule was **removed** in ESLint v1.0 and **replaced** by the [comma-dangle](comma-dangle.md) rule. +--- + +Disallows trailing commas in object and array literals. + +(removed) This rule was **removed** in ESLint v1.0 and **replaced** by the [comma-dangle](comma-dangle) rule. Trailing commas in object literals are valid according to the ECMAScript 5 (and ECMAScript 3!) spec, however IE8 (when not in IE8 document mode) and below will throw an error when it encounters trailing commas in JavaScript. @@ -17,6 +23,8 @@ This rule is aimed at detecting trailing commas in object literals. As such, it Examples of **incorrect** code for this rule: +::: incorrect + ```js var foo = { bar: "baz", @@ -31,8 +39,12 @@ foo({ }); ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js var foo = { bar: "baz", @@ -47,6 +59,8 @@ foo({ }); ``` +::: + ## When Not To Use It If your code will not be run in IE8 or below (a Node.js application, for example) and you'd prefer to allow trailing commas, turn this rule off. diff --git a/eslint/docs/rules/no-compare-neg-zero.md b/eslint/docs/src/rules/no-compare-neg-zero.md similarity index 62% rename from eslint/docs/rules/no-compare-neg-zero.md rename to eslint/docs/src/rules/no-compare-neg-zero.md index cfbe545..5d7da2a 100644 --- a/eslint/docs/rules/no-compare-neg-zero.md +++ b/eslint/docs/src/rules/no-compare-neg-zero.md @@ -1,11 +1,19 @@ -# disallow comparing against -0 (no-compare-neg-zero) +--- +title: no-compare-neg-zero +layout: doc +rule_type: problem +--- + + ## Rule Details -The rule should warn against code that tries to compare against -0, since that will not work as intended. That is, code like x === -0 will pass for both +0 and -0. The author probably intended Object.is(x, -0). +The rule should warn against code that tries to compare against `-0`, since that will not work as intended. That is, code like `x === -0` will pass for both `+0` and `-0`. The author probably intended `Object.is(x, -0)`. Examples of **incorrect** code for this rule: +::: incorrect + ```js /* eslint no-compare-neg-zero: "error" */ @@ -14,8 +22,12 @@ if (x === -0) { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /* eslint no-compare-neg-zero: "error" */ @@ -24,6 +36,10 @@ if (x === 0) { } ``` +::: + +::: correct + ```js /* eslint no-compare-neg-zero: "error" */ @@ -31,3 +47,5 @@ if (Object.is(x, -0)) { // doSomething()... } ``` + +::: diff --git a/eslint/docs/rules/no-cond-assign.md b/eslint/docs/src/rules/no-cond-assign.md similarity index 94% rename from eslint/docs/rules/no-cond-assign.md rename to eslint/docs/src/rules/no-cond-assign.md index f1738fa..af04548 100644 --- a/eslint/docs/rules/no-cond-assign.md +++ b/eslint/docs/src/rules/no-cond-assign.md @@ -1,4 +1,12 @@ -# disallow assignment operators in conditional statements (no-cond-assign) +--- +title: no-cond-assign +layout: doc +rule_type: problem +related_rules: +- no-extra-parens +--- + + In conditional statements, it is very easy to mistype a comparison operator (such as `==`) as an assignment operator (such as `=`). For example: @@ -26,6 +34,8 @@ This rule has a string option: Examples of **incorrect** code for this rule with the default `"except-parens"` option: +::: incorrect + ```js /*eslint no-cond-assign: "error"*/ @@ -44,8 +54,12 @@ function setHeight(someNode) { } ``` +::: + Examples of **correct** code for this rule with the default `"except-parens"` option: +::: correct + ```js /*eslint no-cond-assign: "error"*/ @@ -72,10 +86,14 @@ function setHeight(someNode) { } ``` +::: + ### always Examples of **incorrect** code for this rule with the `"always"` option: +::: incorrect + ```js /*eslint no-cond-assign: ["error", "always"]*/ @@ -110,8 +128,12 @@ function setHeight(someNode) { } ``` +::: + Examples of **correct** code for this rule with the `"always"` option: +::: correct + ```js /*eslint no-cond-assign: ["error", "always"]*/ @@ -122,6 +144,4 @@ if (x === 0) { } ``` -## Related Rules - -* [no-extra-parens](no-extra-parens.md) +::: diff --git a/eslint/docs/rules/no-confusing-arrow.md b/eslint/docs/src/rules/no-confusing-arrow.md similarity index 55% rename from eslint/docs/rules/no-confusing-arrow.md rename to eslint/docs/src/rules/no-confusing-arrow.md index dccf11e..18d0563 100644 --- a/eslint/docs/rules/no-confusing-arrow.md +++ b/eslint/docs/src/rules/no-confusing-arrow.md @@ -1,4 +1,13 @@ -# Disallow arrow functions where they could be confused with comparisons (no-confusing-arrow) +--- +title: no-confusing-arrow +layout: doc +rule_type: suggestion +related_rules: +- no-constant-condition +- arrow-parens +--- + + Arrow functions (`=>`) are similar in syntax to some comparison operators (`>`, `<`, `<=`, and `>=`). This rule warns against using the arrow function syntax in places where it could be confused with a comparison operator. @@ -8,7 +17,9 @@ Here's an example where the usage of `=>` could be confusing: // The intent is not clear var x = a => 1 ? 2 : 3; // Did the author mean this -var x = function (a) { return 1 ? 2 : 3 }; +var x = function (a) { + return 1 ? 2 : 3; +}; // Or this var x = a <= 1 ? 2 : 3; ``` @@ -17,6 +28,8 @@ var x = a <= 1 ? 2 : 3; Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-confusing-arrow: "error"*/ /*eslint-env es6*/ @@ -25,26 +38,36 @@ var x = a => 1 ? 2 : 3; var x = (a) => 1 ? 2 : 3; ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-confusing-arrow: "error"*/ /*eslint-env es6*/ - var x = a => (1 ? 2 : 3); var x = (a) => (1 ? 2 : 3); +var x = (a) => { + return 1 ? 2 : 3; +}; var x = a => { return 1 ? 2 : 3; }; -var x = (a) => { return 1 ? 2 : 3; }; ``` +::: + ## Options -This rule accepts a single options argument with the following defaults: +This rule accepts two options argument with the following defaults: ```json { "rules": { - "no-confusing-arrow": ["error", {"allowParens": true}] + "no-confusing-arrow": [ + "error", + { "allowParens": true, "onlyOneSimpleParam": false } + ] } } ``` @@ -56,6 +79,8 @@ This rule accepts a single options argument with the following defaults: Examples of **incorrect** code for this rule with the `{"allowParens": false}` option: +::: incorrect + ```js /*eslint no-confusing-arrow: ["error", {"allowParens": false}]*/ /*eslint-env es6*/ @@ -63,7 +88,26 @@ var x = a => (1 ? 2 : 3); var x = (a) => (1 ? 2 : 3); ``` -## Related Rules +::: + +`onlyOneSimpleParam` is a boolean setting that can be `true` or `false`(default): + +1. `true` relaxes the rule and doesn't report errors if the arrow function has 0 or more than 1 parameters, or the parameter is not an identifier. +2. `false` warns regardless of parameters. + +Examples of **correct** code for this rule with the `{"onlyOneSimpleParam": true}` option: + +::: correct + +```js +/*eslint no-confusing-arrow: ["error", {"onlyOneSimpleParam": true}]*/ +/*eslint-env es6*/ +() => 1 ? 2 : 3; +(a, b) => 1 ? 2 : 3; +(a = b) => 1 ? 2 : 3; +({ a }) => 1 ? 2 : 3; +([a]) => 1 ? 2 : 3; +(...a) => 1 ? 2 : 3; +``` -* [no-constant-condition](no-constant-condition.md) -* [arrow-parens](arrow-parens.md) +::: diff --git a/eslint/docs/rules/no-console.md b/eslint/docs/src/rules/no-console.md similarity index 94% rename from eslint/docs/rules/no-console.md rename to eslint/docs/src/rules/no-console.md index b1e4e60..05a1dfe 100644 --- a/eslint/docs/rules/no-console.md +++ b/eslint/docs/src/rules/no-console.md @@ -1,4 +1,12 @@ -# disallow the use of `console` (no-console) +--- +title: no-console +layout: doc +rule_type: suggestion +related_rules: +- no-alert +- no-debugger +--- + In JavaScript that is designed to be executed in the browser, it's considered a best practice to avoid using methods on `console`. Such messages are considered to be for debugging purposes and therefore not suitable to ship to the client. In general, calls using `console` should be stripped before being pushed to production. @@ -13,6 +21,8 @@ This rule disallows calls or assignments to methods of the `console` object. Examples of **incorrect** code for this rule: +::: incorrect + ```js /* eslint no-console: "error" */ @@ -22,8 +32,12 @@ console.error("Log an error level message."); console.log = foo(); ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /* eslint no-console: "error" */ @@ -31,6 +45,8 @@ Examples of **correct** code for this rule: Console.log("Hello world!"); ``` +::: + ## Options This rule has an object option for exceptions: @@ -39,6 +55,8 @@ This rule has an object option for exceptions: Examples of additional **correct** code for this rule with a sample `{ "allow": ["warn", "error"] }` option: +::: correct + ```js /* eslint no-console: ["error", { allow: ["warn", "error"] }] */ @@ -46,6 +64,8 @@ console.warn("Log a warn level message."); console.error("Log an error level message."); ``` +::: + ## When Not To Use It If you're using Node.js, however, `console` is used to output information to the user and so is not strictly used for debugging purposes. If you are developing for Node.js then you most likely do not want this rule enabled. @@ -90,8 +110,3 @@ However, you might not want to manually add `eslint-disable-next-line` or `eslin } } ``` - -## Related Rules - -* [no-alert](no-alert.md) -* [no-debugger](no-debugger.md) diff --git a/eslint/docs/rules/no-const-assign.md b/eslint/docs/src/rules/no-const-assign.md similarity index 87% rename from eslint/docs/rules/no-const-assign.md rename to eslint/docs/src/rules/no-const-assign.md index 3969767..67be27e 100644 --- a/eslint/docs/rules/no-const-assign.md +++ b/eslint/docs/src/rules/no-const-assign.md @@ -1,4 +1,10 @@ -# Disallow modifying variables that are declared using `const` (no-const-assign) +--- +title: no-const-assign +layout: doc +rule_type: problem +--- + + We cannot modify variables that are declared using `const` keyword. It will raise a runtime error. @@ -11,6 +17,8 @@ This rule is aimed to flag modifying variables that are declared using `const` k Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-const-assign: "error"*/ /*eslint-env es6*/ @@ -19,6 +27,10 @@ const a = 0; a = 1; ``` +::: + +::: incorrect + ```js /*eslint no-const-assign: "error"*/ /*eslint-env es6*/ @@ -27,6 +39,10 @@ const a = 0; a += 1; ``` +::: + +::: incorrect + ```js /*eslint no-const-assign: "error"*/ /*eslint-env es6*/ @@ -35,8 +51,12 @@ const a = 0; ++a; ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-const-assign: "error"*/ /*eslint-env es6*/ @@ -45,6 +65,10 @@ const a = 0; console.log(a); ``` +::: + +::: correct + ```js /*eslint no-const-assign: "error"*/ /*eslint-env es6*/ @@ -54,6 +78,10 @@ for (const a in [1, 2, 3]) { // `a` is re-defined (not modified) on each loop st } ``` +::: + +::: correct + ```js /*eslint no-const-assign: "error"*/ /*eslint-env es6*/ @@ -63,6 +91,8 @@ for (const a of [1, 2, 3]) { // `a` is re-defined (not modified) on each loop st } ``` +::: + ## When Not To Use It If you don't want to be notified about modifying variables that are declared using `const` keyword, you can safely disable this rule. diff --git a/eslint/docs/src/rules/no-constant-binary-expression.md b/eslint/docs/src/rules/no-constant-binary-expression.md new file mode 100644 index 0000000..43deeae --- /dev/null +++ b/eslint/docs/src/rules/no-constant-binary-expression.md @@ -0,0 +1,81 @@ +--- +title: no-constant-binary-expression +layout: doc +rule_type: problem +related_rules: +- no-constant-condition +further_reading: +- https://eslint.org/blog/2022/07/interesting-bugs-caught-by-no-constant-binary-expression/ +--- + + +Comparisons which will always evaluate to true or false and logical expressions (`||`, `&&`, `??`) which either always short-circuit or never short-circuit are both likely indications of programmer error. + +These errors are especially common in complex expressions where operator precedence is easy to misjudge. For example: + +```js +// One might think this would evaluate as `a + (b ?? c)`: +const x = a + b ?? c; + +// But it actually evaluates as `(a + b) ?? c`. Since `a + b` can never be null, +// the `?? c` has no effect. +``` + +Additionally, this rule detects comparisons to newly constructed objects/arrays/functions/etc. In JavaScript, where objects are compared by reference, a newly constructed object can _never_ `===` any other value. This can be surprising for programmers coming from languages where objects are compared by value. + +```js +// Programmers coming from a language where objects are compared by value might expect this to work: +const isEmpty = x === []; + +// However, this will always result in `isEmpty` being `false`. +``` + +## Rule Details + +This rule identifies `==` and `===` comparisons which, based on the semantics of the JavaScript language, will always evaluate to `true` or `false`. + +It also identifies `||`, `&&` and `??` logical expressions which will either always or never short-circuit. + +Examples of **incorrect** code for this rule: + +::: incorrect + +```js +/*eslint no-constant-binary-expression: "error"*/ + +const value1 = +x == null; + +const value2 = condition ? x : {} || DEFAULT; + +const value3 = !foo == null; + +const value4 = new Boolean(foo) === true; + +const objIsEmpty = someObj === {}; + +const arrIsEmpty = someArr === []; +``` + +::: + +Examples of **correct** code for this rule: + +::: correct + +```js +/*eslint no-constant-binary-expression: "error"*/ + +const value1 = x == null; + +const value2 = (condition ? x : {}) || DEFAULT; + +const value3 = !(foo == null); + +const value4 = Boolean(foo) === true; + +const objIsEmpty = Object.keys(someObj).length === 0; + +const arrIsEmpty = someArr.length === 0; +``` + +::: diff --git a/eslint/docs/rules/no-constant-condition.md b/eslint/docs/src/rules/no-constant-condition.md similarity index 86% rename from eslint/docs/rules/no-constant-condition.md rename to eslint/docs/src/rules/no-constant-condition.md index 8de5e69..a3bad57 100644 --- a/eslint/docs/rules/no-constant-condition.md +++ b/eslint/docs/src/rules/no-constant-condition.md @@ -1,4 +1,12 @@ -# disallow constant expressions in conditions (no-constant-condition) +--- +title: no-constant-condition +layout: doc +rule_type: problem +related_rules: +- no-constant-binary-expression +--- + + A constant expression (for example, a literal) as a test condition might be a typo or development trigger for a specific behavior. For example, the following code looks as if it is not ready for production. @@ -17,6 +25,8 @@ This rule disallows constant expressions in the test condition of: Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-constant-condition: "error"*/ @@ -40,6 +50,14 @@ if (new Boolean(x)) { doSomethingAlways(); } +if (Boolean(1)) { + doSomethingAlways(); +} + +if (undefined) { + doSomethingUnfinished(); +} + if (x ||= true) { doSomethingAlways(); } @@ -59,8 +77,12 @@ do { var result = 0 ? a : b; ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-constant-condition: "error"*/ @@ -83,6 +105,8 @@ do { var result = x !== 0 ? a : b; ``` +::: + ## Options ### checkLoops @@ -91,6 +115,8 @@ Set to `true` by default. Setting this option to `false` allows constant express Examples of **correct** code for when `checkLoops` is `false`: +::: correct + ```js /*eslint no-constant-condition: ["error", { "checkLoops": false }]*/ @@ -115,3 +141,5 @@ do { } } while (true) ``` + +::: diff --git a/eslint/docs/rules/no-constructor-return.md b/eslint/docs/src/rules/no-constructor-return.md similarity index 89% rename from eslint/docs/rules/no-constructor-return.md rename to eslint/docs/src/rules/no-constructor-return.md index 284b757..1e74eb7 100644 --- a/eslint/docs/rules/no-constructor-return.md +++ b/eslint/docs/src/rules/no-constructor-return.md @@ -1,4 +1,9 @@ -# Disallow returning value in constructor (no-constructor-return) +--- +title: no-constructor-return +layout: doc +rule_type: problem +--- + In JavaScript, returning a value in the constructor of a class may be a mistake. Forbidding this pattern prevents mistakes resulting from unfamiliarity with the language or a copy-paste error. @@ -8,6 +13,8 @@ This rule disallows return statements in the constructor of a class. Note that r Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-constructor-return: "error"*/ @@ -27,8 +34,12 @@ class B { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-constructor-return: "error"*/ @@ -48,3 +59,5 @@ class D { } } ``` + +::: diff --git a/eslint/docs/rules/no-continue.md b/eslint/docs/src/rules/no-continue.md similarity index 90% rename from eslint/docs/rules/no-continue.md rename to eslint/docs/src/rules/no-continue.md index 37c1188..0753e36 100644 --- a/eslint/docs/rules/no-continue.md +++ b/eslint/docs/src/rules/no-continue.md @@ -1,4 +1,9 @@ -# disallow `continue` statements (no-continue) +--- +title: no-continue +layout: doc +rule_type: suggestion +--- + The `continue` statement terminates execution of the statements in the current iteration of the current or labeled loop, and continues execution of the loop with the next iteration. When used incorrectly it makes code less testable, less readable and less maintainable. Structured control flow statements such as `if` should be used instead. @@ -21,6 +26,8 @@ This rule disallows `continue` statements. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-continue: "error"*/ @@ -36,6 +43,10 @@ for(i = 0; i < 10; i++) { } ``` +::: + +::: incorrect + ```js /*eslint no-continue: "error"*/ @@ -51,8 +62,12 @@ labeledLoop: for(i = 0; i < 10; i++) { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-continue: "error"*/ @@ -66,6 +81,8 @@ for(i = 0; i < 10; i++) { } ``` +::: + ## Compatibility * **JSLint**: `continue` diff --git a/eslint/docs/src/rules/no-control-regex.md b/eslint/docs/src/rules/no-control-regex.md new file mode 100644 index 0000000..65149cd --- /dev/null +++ b/eslint/docs/src/rules/no-control-regex.md @@ -0,0 +1,80 @@ +--- +title: no-control-regex +layout: doc +rule_type: problem +related_rules: +- no-div-regex +- no-regex-spaces +--- + + + +Control characters are special, invisible characters in the ASCII range 0-31. These characters are rarely used in JavaScript strings so a regular expression containing elements that explicitly match these characters is most likely a mistake. + +## Rule Details + +This rule disallows control characters and some escape sequences that match control characters in regular expressions. + +The following elements of regular expression patterns are considered possible errors in typing and are therefore disallowed by this rule: + +* Hexadecimal character escapes from `\x00` to `\x1F`. +* Unicode character escapes from `\u0000` to `\u001F`. +* Unicode code point escapes from `\u{0}` to `\u{1F}`. +* Unescaped raw characters from U+0000 to U+001F. + +Control escapes such as `\t` and `\n` are allowed by this rule. + +Examples of **incorrect** code for this rule: + +::: incorrect + +```js +/*eslint no-control-regex: "error"*/ + +var pattern1 = /\x00/; +var pattern2 = /\x0C/; +var pattern3 = /\x1F/; +var pattern4 = /\u000C/; +var pattern5 = /\u{C}/u; +var pattern6 = new RegExp("\x0C"); // raw U+000C character in the pattern +var pattern7 = new RegExp("\\x0C"); // \x0C pattern +``` + +::: + +Examples of **correct** code for this rule: + +::: correct + +```js +/*eslint no-control-regex: "error"*/ + +var pattern1 = /\x20/; +var pattern2 = /\u0020/; +var pattern3 = /\u{20}/u; +var pattern4 = /\t/; +var pattern5 = /\n/; +var pattern6 = new RegExp("\x20"); +var pattern7 = new RegExp("\\t"); +var pattern8 = new RegExp("\\n"); +``` + +::: + +## Known Limitations + +When checking `RegExp` constructor calls, this rule examines evaluated regular expression patterns. Therefore, although this rule intends to allow syntax such as `\t`, it doesn't allow `new RegExp("\t")` since the evaluated pattern (string value of `"\t"`) contains a raw control character (the TAB character). + +```js +/*eslint no-control-regex: "error"*/ + +new RegExp("\t"); // disallowed since the pattern is: <TAB> + +new RegExp("\\t"); // allowed since the pattern is: \t +``` + +There is no difference in behavior between `new RegExp("\t")` and `new RegExp("\\t")`, and the intention to match the TAB character is clear in both cases. They are equally valid for the purpose of this rule, but it only allows `new RegExp("\\t")`. + +## When Not To Use It + +If you need to use control character pattern matching, then you should turn this rule off. diff --git a/eslint/docs/rules/no-debugger.md b/eslint/docs/src/rules/no-debugger.md similarity index 81% rename from eslint/docs/rules/no-debugger.md rename to eslint/docs/src/rules/no-debugger.md index f8220bd..07da9b8 100644 --- a/eslint/docs/rules/no-debugger.md +++ b/eslint/docs/src/rules/no-debugger.md @@ -1,4 +1,15 @@ -# disallow the use of `debugger` (no-debugger) +--- +title: no-debugger +layout: doc +rule_type: problem +related_rules: +- no-alert +- no-console +further_reading: +- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/debugger +--- + + The `debugger` statement is used to tell the executing JavaScript environment to stop execution and start up a debugger at the current point in the code. This has fallen out of favor as a good practice with the advent of modern debugging and development tools. Production code should definitely not contain `debugger`, as it will cause the browser to stop executing code and open an appropriate debugger. @@ -8,6 +19,8 @@ This rule disallows `debugger` statements. Example of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-debugger: "error"*/ @@ -17,8 +30,12 @@ function isTruthy(x) { } ``` +::: + Example of **correct** code for this rule: +::: correct + ```js /*eslint no-debugger: "error"*/ @@ -27,15 +44,8 @@ function isTruthy(x) { } ``` +::: + ## When Not To Use It If your code is still very much in development and don't want to worry about stripping `debugger` statements, then turn this rule off. You'll generally want to turn it back on when testing code prior to deployment. - -## Further Reading - -* [Debugger](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/debugger) - -## Related Rules - -* [no-alert](no-alert.md) -* [no-console](no-console.md) diff --git a/eslint/docs/rules/no-delete-var.md b/eslint/docs/src/rules/no-delete-var.md similarity index 83% rename from eslint/docs/rules/no-delete-var.md rename to eslint/docs/src/rules/no-delete-var.md index ab90d11..8d5f680 100644 --- a/eslint/docs/rules/no-delete-var.md +++ b/eslint/docs/src/rules/no-delete-var.md @@ -1,4 +1,10 @@ -# disallow deleting variables (no-delete-var) +--- +title: no-delete-var +layout: doc +rule_type: suggestion +--- + + The purpose of the `delete` operator is to remove a property from an object. Using the `delete` operator on a variable might lead to unexpected behavior. @@ -10,9 +16,13 @@ If ESLint parses code in strict mode, the parser (instead of this rule) reports Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-delete-var: "error"*/ var x; delete x; ``` + +::: diff --git a/eslint/docs/rules/no-div-regex.md b/eslint/docs/src/rules/no-div-regex.md similarity index 72% rename from eslint/docs/rules/no-div-regex.md rename to eslint/docs/src/rules/no-div-regex.md index 211525b..d44b3dd 100644 --- a/eslint/docs/rules/no-div-regex.md +++ b/eslint/docs/src/rules/no-div-regex.md @@ -1,4 +1,13 @@ -# Disallow Regular Expressions That Look Like Division (no-div-regex) +--- +title: no-div-regex +layout: doc +rule_type: suggestion +related_rules: +- no-control-regex +- no-regex-spaces +--- + + Require regex literals to escape division operators. @@ -12,21 +21,24 @@ This is used to disambiguate the division operator to not confuse users. Examples of **incorrect** code for this rule: +:::incorrect + ```js /*eslint no-div-regex: "error"*/ function bar() { return /=foo/; } ``` +::: + Examples of **correct** code for this rule: +:::correct + ```js /*eslint no-div-regex: "error"*/ function bar() { return /[=]foo/; } ``` -## Related Rules - -* [no-control-regex](no-control-regex.md) -* [no-regex-spaces](no-regex-spaces.md) +::: diff --git a/eslint/docs/rules/no-dupe-args.md b/eslint/docs/src/rules/no-dupe-args.md similarity index 90% rename from eslint/docs/rules/no-dupe-args.md rename to eslint/docs/src/rules/no-dupe-args.md index 80a3d85..84ca185 100644 --- a/eslint/docs/rules/no-dupe-args.md +++ b/eslint/docs/src/rules/no-dupe-args.md @@ -1,4 +1,10 @@ -# disallow duplicate arguments in `function` definitions (no-dupe-args) +--- +title: no-dupe-args +layout: doc +rule_type: problem +--- + + If more than one parameter has the same name in a function definition, the last occurrence "shadows" the preceding occurrences. A duplicated name might be a typing error. @@ -10,6 +16,8 @@ If ESLint parses code in strict mode, the parser (instead of this rule) reports Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-dupe-args: "error"*/ @@ -22,8 +30,12 @@ var bar = function (a, b, a) { }; ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-dupe-args: "error"*/ @@ -35,3 +47,5 @@ var bar = function (a, b, c) { console.log(a, b, c); }; ``` + +::: diff --git a/eslint/docs/rules/no-dupe-class-members.md b/eslint/docs/src/rules/no-dupe-class-members.md similarity index 92% rename from eslint/docs/rules/no-dupe-class-members.md rename to eslint/docs/src/rules/no-dupe-class-members.md index 48b22e8..91b096f 100644 --- a/eslint/docs/rules/no-dupe-class-members.md +++ b/eslint/docs/src/rules/no-dupe-class-members.md @@ -1,4 +1,10 @@ -# Disallow duplicate name in class members (no-dupe-class-members) +--- +title: no-dupe-class-members +layout: doc +rule_type: problem +--- + + If there are declarations of the same name in class members, the last declaration overwrites other declarations silently. It can cause unexpected behaviors. @@ -23,6 +29,8 @@ This rule is aimed to flag the use of duplicate names in class members. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-dupe-class-members: "error"*/ @@ -52,8 +60,12 @@ class Foo { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-dupe-class-members: "error"*/ @@ -83,6 +95,8 @@ class Foo { } ``` +::: + ## When Not To Use It This rule should not be used in ES3/5 environments. diff --git a/eslint/docs/rules/no-dupe-else-if.md b/eslint/docs/src/rules/no-dupe-else-if.md similarity index 94% rename from eslint/docs/rules/no-dupe-else-if.md rename to eslint/docs/src/rules/no-dupe-else-if.md index 8b91c83..2ab75a6 100644 --- a/eslint/docs/rules/no-dupe-else-if.md +++ b/eslint/docs/src/rules/no-dupe-else-if.md @@ -1,4 +1,13 @@ -# Disallow duplicate conditions in `if-else-if` chains (no-dupe-else-if) +--- +title: no-dupe-else-if +layout: doc +rule_type: problem +related_rules: +- no-duplicate-case +- no-lonely-if +--- + + `if-else-if` chains are commonly used when there is a need to execute only one branch (or at most one branch) out of several possible branches, based on certain conditions. @@ -32,6 +41,8 @@ This rule disallows duplicate conditions in the same `if-else-if` chain. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-dupe-else-if: "error"*/ @@ -66,8 +77,12 @@ if (n === 1) { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-dupe-else-if: "error"*/ @@ -102,10 +117,14 @@ if (n === 1) { } ``` +::: + This rule can also detect some cases where the conditions are not identical, but the branch can never execute due to the logic of `||` and `&&` operators. Examples of additional **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-dupe-else-if: "error"*/ @@ -150,6 +169,8 @@ if (a) { } ``` +::: + Please note that this rule does not compare conditions from the chain with conditions inside statements, and will not warn in the cases such as follows: ```js @@ -171,8 +192,3 @@ if (a) { ## When Not To Use It In rare cases where you really need identical test conditions in the same chain, which necessarily means that the expressions in the chain are causing and relying on side effects, you will have to turn this rule off. - -## Related Rules - -* [no-duplicate-case](no-duplicate-case.md) -* [no-lonely-if](no-lonely-if.md) diff --git a/eslint/docs/rules/no-dupe-keys.md b/eslint/docs/src/rules/no-dupe-keys.md similarity index 85% rename from eslint/docs/rules/no-dupe-keys.md rename to eslint/docs/src/rules/no-dupe-keys.md index 0d892ef..aa33693 100644 --- a/eslint/docs/rules/no-dupe-keys.md +++ b/eslint/docs/src/rules/no-dupe-keys.md @@ -1,4 +1,10 @@ -# disallow duplicate keys in object literals (no-dupe-keys) +--- +title: no-dupe-keys +layout: doc +rule_type: problem +--- + + Multiple properties with the same key in object literals can cause unexpected behavior in your application. @@ -15,6 +21,8 @@ This rule disallows duplicate keys in object literals. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-dupe-keys: "error"*/ @@ -34,8 +42,12 @@ var foo = { }; ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-dupe-keys: "error"*/ @@ -44,3 +56,5 @@ var foo = { quxx: "qux" }; ``` + +::: diff --git a/eslint/docs/rules/no-duplicate-case.md b/eslint/docs/src/rules/no-duplicate-case.md similarity index 73% rename from eslint/docs/rules/no-duplicate-case.md rename to eslint/docs/src/rules/no-duplicate-case.md index c728bdf..26ffeb0 100644 --- a/eslint/docs/rules/no-duplicate-case.md +++ b/eslint/docs/src/rules/no-duplicate-case.md @@ -1,4 +1,10 @@ -# Rule to disallow a duplicate case label (no-duplicate-case) +--- +title: no-duplicate-case +layout: doc +rule_type: problem +--- + + If a `switch` statement has duplicate test expressions in `case` clauses, it is likely that a programmer copied a `case` clause but forgot to change the test expression. @@ -8,6 +14,8 @@ This rule disallows duplicate test expressions in `case` clauses of `switch` sta Examples of **incorrect** code for this rule: +:::incorrect + ```js /*eslint no-duplicate-case: "error"*/ @@ -48,8 +56,12 @@ switch (a) { } ``` +::: + Examples of **correct** code for this rule: +:::correct + ```js /*eslint no-duplicate-case: "error"*/ @@ -89,3 +101,20 @@ switch (a) { break; } ``` + +::: + +## When Not To Use It + +In rare cases where identical test expressions in `case` clauses produce different values, which necessarily means that the expressions are causing and relying on side effects, you will have to disable this rule. + +```js +switch (a) { + case i++: + foo(); + break; + case i++: // eslint-disable-line no-duplicate-case + bar(); + break; +} +``` diff --git a/eslint/docs/rules/no-duplicate-imports.md b/eslint/docs/src/rules/no-duplicate-imports.md similarity index 92% rename from eslint/docs/rules/no-duplicate-imports.md rename to eslint/docs/src/rules/no-duplicate-imports.md index 437d2c3..c94a178 100644 --- a/eslint/docs/rules/no-duplicate-imports.md +++ b/eslint/docs/src/rules/no-duplicate-imports.md @@ -1,4 +1,9 @@ -# Disallow duplicate imports (no-duplicate-imports) +--- +title: no-duplicate-imports +layout: doc +rule_type: problem +--- + Using a single `import` statement per module will make the code clearer because you can see everything being imported from that module on one line. @@ -16,6 +21,8 @@ This rule requires that all imports from a single module that can be merged exis Example of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-duplicate-imports: "error"*/ @@ -24,8 +31,12 @@ import something from 'another-module'; import { find } from 'module'; ``` +::: + Example of **correct** code for this rule: +::: correct + ```js /*eslint no-duplicate-imports: "error"*/ @@ -33,8 +44,12 @@ import { merge, find } from 'module'; import something from 'another-module'; ``` +::: + Example of **correct** code for this rule: +::: correct + ```js /*eslint no-duplicate-imports: "error"*/ @@ -43,6 +58,8 @@ import { merge } from 'module'; import * as something from 'module'; ``` +::: + ## Options This rule takes one optional argument, an object with a single key, `includeExports` which is a `boolean`. It defaults to `false`. @@ -51,6 +68,8 @@ If re-exporting from an imported module, you should add the imports to the `impo Example of **incorrect** code for this rule with the `{ "includeExports": true }` option: +::: incorrect + ```js /*eslint no-duplicate-imports: ["error", { "includeExports": true }]*/ @@ -59,8 +78,12 @@ import { merge } from 'module'; export { find } from 'module'; ``` +::: + Example of **correct** code for this rule with the `{ "includeExports": true }` option: +::: correct + ```js /*eslint no-duplicate-imports: ["error", { "includeExports": true }]*/ @@ -69,8 +92,12 @@ import { merge, find } from 'module'; export { find }; ``` +::: + Example of **correct** code for this rule with the `{ "includeExports": true }` option: +::: correct + ```js /*eslint no-duplicate-imports: ["error", { "includeExports": true }]*/ @@ -82,3 +109,5 @@ export * as something from 'module'; // cannot be written differently export * from 'module'; ``` + +::: diff --git a/eslint/docs/rules/no-else-return.md b/eslint/docs/src/rules/no-else-return.md similarity index 94% rename from eslint/docs/rules/no-else-return.md rename to eslint/docs/src/rules/no-else-return.md index 2f3f83d..c67c5f3 100644 --- a/eslint/docs/rules/no-else-return.md +++ b/eslint/docs/src/rules/no-else-return.md @@ -1,4 +1,10 @@ -# Disallow return before else (no-else-return) +--- +title: no-else-return +layout: doc +rule_type: suggestion +--- + + If an `if` block contains a `return` statement, the `else` block becomes unnecessary. Its contents can be placed outside of the block. @@ -27,6 +33,8 @@ This rule has an object option: Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-else-return: "error"*/ @@ -82,8 +90,12 @@ function foo() { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-else-return: "error"*/ @@ -124,10 +136,14 @@ function foo() { } ``` +::: + ### `allowElseIf: false` Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-else-return: ["error", {allowElseIf: false}]*/ @@ -140,8 +156,12 @@ function foo() { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-else-return: ["error", {allowElseIf: false}]*/ @@ -155,3 +175,5 @@ function foo() { } } ``` + +::: diff --git a/eslint/docs/rules/no-empty-character-class.md b/eslint/docs/src/rules/no-empty-character-class.md similarity index 89% rename from eslint/docs/rules/no-empty-character-class.md rename to eslint/docs/src/rules/no-empty-character-class.md index c587e9d..d916950 100644 --- a/eslint/docs/rules/no-empty-character-class.md +++ b/eslint/docs/src/rules/no-empty-character-class.md @@ -1,4 +1,10 @@ -# disallow empty character classes in regular expressions (no-empty-character-class) +--- +title: no-empty-character-class +layout: doc +rule_type: problem +--- + + Because empty character classes in regular expressions do not match anything, they might be typing mistakes. @@ -12,6 +18,8 @@ This rule disallows empty character classes in regular expressions. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-empty-character-class: "error"*/ @@ -19,8 +27,12 @@ Examples of **incorrect** code for this rule: "abcdefg".match(/^abc[]/); // null ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-empty-character-class: "error"*/ @@ -31,6 +43,8 @@ Examples of **correct** code for this rule: "abcdefg".match(/^abc[a-z]/); // ["abcd"] ``` +::: + ## Known Limitations This rule does not report empty character classes in the string argument of calls to the `RegExp` constructor. diff --git a/eslint/docs/rules/no-empty-class.md b/eslint/docs/src/rules/no-empty-class.md similarity index 75% rename from eslint/docs/rules/no-empty-class.md rename to eslint/docs/src/rules/no-empty-class.md index 6ed0267..4326054 100644 --- a/eslint/docs/rules/no-empty-class.md +++ b/eslint/docs/src/rules/no-empty-class.md @@ -1,6 +1,12 @@ -# no-empty-class: disallow empty character classes in regular expressions +--- +title: no-empty-class +layout: doc -(removed) This rule was **removed** in ESLint v1.0 and **replaced** by the [no-empty-character-class](no-empty-character-class.md) rule. +--- + +Disallows empty character classes in regular expressions. + +(removed) This rule was **removed** in ESLint v1.0 and **replaced** by the [no-empty-character-class](no-empty-character-class) rule. Empty character classes in regular expressions do not match anything and can result in code that may not work as intended. @@ -14,6 +20,8 @@ This rule is aimed at highlighting possible typos and unexpected behavior in reg Examples of **incorrect** code for this rule: +::: incorrect + ```js var foo = /^abc[]/; @@ -22,8 +30,12 @@ var foo = /^abc[]/; bar.match(/^abc[]/); ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js var foo = /^abc/; @@ -31,3 +43,5 @@ var foo = /^abc[a-z]/; var bar = new RegExp("^abc[]"); ``` + +::: diff --git a/eslint/docs/rules/no-empty-function.md b/eslint/docs/src/rules/no-empty-function.md similarity index 94% rename from eslint/docs/rules/no-empty-function.md rename to eslint/docs/src/rules/no-empty-function.md index 1911031..6542317 100644 --- a/eslint/docs/rules/no-empty-function.md +++ b/eslint/docs/src/rules/no-empty-function.md @@ -1,4 +1,11 @@ -# Disallow empty functions (no-empty-function) +--- +title: no-empty-function +layout: doc +rule_type: suggestion +related_rules: +- no-empty +--- + Empty functions can reduce readability because readers need to guess whether it's intentional or not. So writing a clear comment for empty functions is a good practice. @@ -24,6 +31,8 @@ A function will not be considered a problem if it contains a comment. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-empty-function: "error"*/ /*eslint-env es6*/ @@ -73,8 +82,12 @@ class A { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-empty-function: "error"*/ /*eslint-env es6*/ @@ -164,6 +177,8 @@ class A { } ``` +::: + ## Options This rule has an option to allow specific kinds of functions to be empty. @@ -184,6 +199,8 @@ This rule has an option to allow specific kinds of functions to be empty. Examples of **correct** code for the `{ "allow": ["functions"] }` option: +::: correct + ```js /*eslint no-empty-function: ["error", { "allow": ["functions"] }]*/ @@ -196,10 +213,14 @@ var obj = { }; ``` +::: + ### allow: arrowFunctions Examples of **correct** code for the `{ "allow": ["arrowFunctions"] }` option: +::: correct + ```js /*eslint no-empty-function: ["error", { "allow": ["arrowFunctions"] }]*/ /*eslint-env es6*/ @@ -207,10 +228,14 @@ Examples of **correct** code for the `{ "allow": ["arrowFunctions"] }` option: var foo = () => {}; ``` +::: + ### allow: generatorFunctions Examples of **correct** code for the `{ "allow": ["generatorFunctions"] }` option: +::: correct + ```js /*eslint no-empty-function: ["error", { "allow": ["generatorFunctions"] }]*/ /*eslint-env es6*/ @@ -224,10 +249,14 @@ var obj = { }; ``` +::: + ### allow: methods Examples of **correct** code for the `{ "allow": ["methods"] }` option: +::: correct + ```js /*eslint no-empty-function: ["error", { "allow": ["methods"] }]*/ /*eslint-env es6*/ @@ -242,10 +271,14 @@ class A { } ``` +::: + ### allow: generatorMethods Examples of **correct** code for the `{ "allow": ["generatorMethods"] }` option: +::: correct + ```js /*eslint no-empty-function: ["error", { "allow": ["generatorMethods"] }]*/ /*eslint-env es6*/ @@ -260,10 +293,14 @@ class A { } ``` +::: + ### allow: getters Examples of **correct** code for the `{ "allow": ["getters"] }` option: +::: correct + ```js /*eslint no-empty-function: ["error", { "allow": ["getters"] }]*/ /*eslint-env es6*/ @@ -278,10 +315,14 @@ class A { } ``` +::: + ### allow: setters Examples of **correct** code for the `{ "allow": ["setters"] }` option: +::: correct + ```js /*eslint no-empty-function: ["error", { "allow": ["setters"] }]*/ /*eslint-env es6*/ @@ -296,10 +337,14 @@ class A { } ``` +::: + ### allow: constructors Examples of **correct** code for the `{ "allow": ["constructors"] }` option: +::: correct + ```js /*eslint no-empty-function: ["error", { "allow": ["constructors"] }]*/ /*eslint-env es6*/ @@ -309,10 +354,14 @@ class A { } ``` +::: + ### allow: asyncFunctions Examples of **correct** code for the `{ "allow": ["asyncFunctions"] }` options: +::: correct + ```js /*eslint no-empty-function: ["error", { "allow": ["asyncFunctions"] }]*/ /*eslint-env es2017*/ @@ -320,10 +369,14 @@ Examples of **correct** code for the `{ "allow": ["asyncFunctions"] }` options: async function a(){} ``` +::: + ### allow: asyncMethods Examples of **correct** code for the `{ "allow": ["asyncMethods"] }` options: +::: correct + ```js /*eslint no-empty-function: ["error", { "allow": ["asyncMethods"] }]*/ /*eslint-env es2017*/ @@ -338,10 +391,8 @@ class A { } ``` +::: + ## When Not To Use It If you don't want to be notified about empty functions, then it's safe to disable this rule. - -## Related Rules - -* [no-empty](./no-empty.md) diff --git a/eslint/docs/rules/no-empty-label.md b/eslint/docs/src/rules/no-empty-label.md similarity index 73% rename from eslint/docs/rules/no-empty-label.md rename to eslint/docs/src/rules/no-empty-label.md index b887c87..6666960 100644 --- a/eslint/docs/rules/no-empty-label.md +++ b/eslint/docs/src/rules/no-empty-label.md @@ -1,6 +1,16 @@ -# no-empty-label: disallow labels for anything other than loops and switches +--- +title: no-empty-label +layout: doc -(removed) This rule was **removed** in ESLint v2.0 and **replaced** by the [no-labels](no-labels.md) rule. +related_rules: +- no-labels +- no-label-var +- no-unused-labels +--- + +Disallows labels for anything other than loops and switches. + +(removed) This rule was **removed** in ESLint v2.0 and **replaced** by the [no-labels](no-labels) rule. Labeled statements are only used in conjunction with labeled break and continue statements. ECMAScript has no goto statement. @@ -10,6 +20,8 @@ This error occurs when a label is used to mark a statement that is not an iterat Example of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-empty-label: "error"*/ @@ -17,8 +29,12 @@ labeled: var x = 10; ``` +::: + Example of **correct** code for this rule: +::: correct + ```js /*eslint no-empty-label: "error"*/ @@ -28,12 +44,8 @@ for (var i=10; i; i--) { } ``` +::: + ## When Not To Use It If you don't want to be notified about usage of labels, then it's safe to disable this rule. - -## Related Rules - -* [no-labels](./no-labels.md) -* [no-label-var](./no-label-var.md) -* [no-unused-labels](./no-unused-labels.md) diff --git a/eslint/docs/rules/no-empty-pattern.md b/eslint/docs/src/rules/no-empty-pattern.md similarity index 93% rename from eslint/docs/rules/no-empty-pattern.md rename to eslint/docs/src/rules/no-empty-pattern.md index 9459915..374535f 100644 --- a/eslint/docs/rules/no-empty-pattern.md +++ b/eslint/docs/src/rules/no-empty-pattern.md @@ -1,4 +1,10 @@ -# Disallow empty destructuring patterns (no-empty-pattern) +--- +title: no-empty-pattern +layout: doc +rule_type: problem +--- + + When using destructuring, it's possible to create a pattern that has no effect. This happens when empty curly braces are used to the right of an embedded object destructuring pattern, such as: @@ -29,6 +35,8 @@ This rule aims to flag any empty patterns in destructured objects and arrays, an Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-empty-pattern: "error"*/ @@ -42,8 +50,12 @@ function foo({a: {}}) {} function foo({a: []}) {} ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-empty-pattern: "error"*/ @@ -52,3 +64,5 @@ var {a = []} = foo; function foo({a = {}}) {} function foo({a = []}) {} ``` + +::: diff --git a/eslint/docs/rules/no-empty.md b/eslint/docs/src/rules/no-empty.md similarity index 90% rename from eslint/docs/rules/no-empty.md rename to eslint/docs/src/rules/no-empty.md index a088708..68a3634 100644 --- a/eslint/docs/rules/no-empty.md +++ b/eslint/docs/src/rules/no-empty.md @@ -1,4 +1,12 @@ -# disallow empty block statements (no-empty) +--- +title: no-empty +layout: doc +rule_type: suggestion +related_rules: +- no-empty-function +--- + + Empty block statements, while not technically errors, usually occur due to refactoring that wasn't completed. They can cause confusion when reading code. @@ -8,6 +16,8 @@ This rule disallows empty block statements. This rule ignores block statements w Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-empty: "error"*/ @@ -29,8 +39,12 @@ try { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-empty: "error"*/ @@ -55,6 +69,8 @@ try { } ``` +::: + ## Options This rule has an object option for exceptions: @@ -65,6 +81,8 @@ This rule has an object option for exceptions: Examples of additional **correct** code for this rule with the `{ "allowEmptyCatch": true }` option: +::: correct + ```js /* eslint no-empty: ["error", { "allowEmptyCatch": true }] */ try { @@ -80,10 +98,8 @@ finally { } ``` +::: + ## When Not To Use It If you intentionally use empty block statements then you can disable this rule. - -## Related Rules - -* [no-empty-function](./no-empty-function.md) diff --git a/eslint/docs/rules/no-eq-null.md b/eslint/docs/src/rules/no-eq-null.md similarity index 91% rename from eslint/docs/rules/no-eq-null.md rename to eslint/docs/src/rules/no-eq-null.md index 7b0f5df..6511bd7 100644 --- a/eslint/docs/rules/no-eq-null.md +++ b/eslint/docs/src/rules/no-eq-null.md @@ -1,4 +1,9 @@ -# Disallow Null Comparisons (no-eq-null) +--- +title: no-eq-null +layout: doc +rule_type: suggestion +--- + Comparing to `null` without a type-checking operator (`==` or `!=`), can have unintended results as the comparison will evaluate to true when comparing to not just a `null`, but also an `undefined` value. @@ -14,6 +19,8 @@ The `no-eq-null` rule aims reduce potential bug and unwanted behavior by ensurin Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-eq-null: "error"*/ @@ -26,8 +33,12 @@ while (qux != null) { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-eq-null: "error"*/ @@ -40,10 +51,12 @@ while (qux !== null) { } ``` -## Compatibility - -* **JSHint**: This rule corresponds to `eqnull` rule of JSHint. +::: ## When Not To Use It If you want to enforce type-checking operations in general, use the more powerful [eqeqeq](./eqeqeq) instead. + +## Compatibility + +* **JSHint**: This rule corresponds to `eqnull` rule of JSHint. diff --git a/eslint/docs/rules/no-eval.md b/eslint/docs/src/rules/no-eval.md similarity index 88% rename from eslint/docs/rules/no-eval.md rename to eslint/docs/src/rules/no-eval.md index 4a2a3b7..166087d 100644 --- a/eslint/docs/rules/no-eval.md +++ b/eslint/docs/src/rules/no-eval.md @@ -1,4 +1,14 @@ -# Disallow eval() (no-eval) +--- +title: no-eval +layout: doc +rule_type: suggestion +related_rules: +- no-implied-eval +further_reading: +- https://ericlippert.com/2003/11/01/eval-is-evil-part-one/ +- https://javascriptweblog.wordpress.com/2010/04/19/how-evil-is-eval/ +--- + JavaScript's `eval()` function is potentially dangerous and is often misused. Using `eval()` on untrusted code can open a program up to several different injection attacks. The use of `eval()` in most contexts can be substituted for a better, alternative approach to a problem. @@ -14,6 +24,8 @@ This rule is aimed at preventing potentially dangerous, unnecessary, and slow co Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-eval: "error"*/ @@ -30,8 +42,12 @@ foo("var a = 0"); this.eval("var a = 0"); ``` +::: + Example of additional **incorrect** code for this rule when `browser` environment is set to `true`: +::: incorrect + ```js /*eslint no-eval: "error"*/ /*eslint-env browser*/ @@ -39,8 +55,12 @@ Example of additional **incorrect** code for this rule when `browser` environmen window.eval("var a = 0"); ``` +::: + Example of additional **incorrect** code for this rule when `node` environment is set to `true`: +::: incorrect + ```js /*eslint no-eval: "error"*/ /*eslint-env node*/ @@ -48,8 +68,12 @@ Example of additional **incorrect** code for this rule when `node` environment i global.eval("var a = 0"); ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-eval: "error"*/ /*eslint-env es6*/ @@ -77,6 +101,8 @@ class A { } ``` +::: + ## Options This rule has an option to allow indirect calls to `eval`. @@ -90,6 +116,8 @@ Indirect calls to `eval` are less dangerous than direct calls to `eval` because Example of **incorrect** code for this rule with the `{"allowIndirect": true}` option: +::: incorrect + ```js /*eslint no-eval: "error"*/ @@ -98,8 +126,12 @@ var obj = { x: "foo" }, value = eval("obj." + key); ``` +::: + Examples of **correct** code for this rule with the `{"allowIndirect": true}` option: +::: correct + ```js /*eslint no-eval: "error"*/ @@ -111,6 +143,10 @@ foo("var a = 0"); this.eval("var a = 0"); ``` +::: + +::: correct + ```js /*eslint no-eval: "error"*/ /*eslint-env browser*/ @@ -118,6 +154,10 @@ this.eval("var a = 0"); window.eval("var a = 0"); ``` +::: + +::: correct + ```js /*eslint no-eval: "error"*/ /*eslint-env node*/ @@ -125,6 +165,8 @@ window.eval("var a = 0"); global.eval("var a = 0"); ``` +::: + ## Known Limitations * This rule is warning every `eval()` even if the `eval` is not global's. @@ -144,12 +186,3 @@ global.eval("var a = 0"); var foo = window; foo.eval("var a = 0"); ``` - -## Further Reading - -* [Eval is Evil, Part One](https://blogs.msdn.com/b/ericlippert/archive/2003/11/01/53329.aspx) -* [How evil is eval](https://javascriptweblog.wordpress.com/2010/04/19/how-evil-is-eval/) - -## Related Rules - -* [no-implied-eval](no-implied-eval.md) diff --git a/eslint/docs/rules/no-ex-assign.md b/eslint/docs/src/rules/no-ex-assign.md similarity index 60% rename from eslint/docs/rules/no-ex-assign.md rename to eslint/docs/src/rules/no-ex-assign.md index 11745da..edf2fca 100644 --- a/eslint/docs/rules/no-ex-assign.md +++ b/eslint/docs/src/rules/no-ex-assign.md @@ -1,6 +1,14 @@ -# disallow reassigning exceptions in `catch` clauses (no-ex-assign) +--- +title: no-ex-assign +layout: doc +rule_type: problem +further_reading: +- https://bocoup.com/blog/the-catch-with-try-catch +--- -If a `catch` clause in a `try` statement accidentally (or purposely) assigns another value to the exception parameter, it impossible to refer to the error from that point on. + + +If a `catch` clause in a `try` statement accidentally (or purposely) assigns another value to the exception parameter, it is impossible to refer to the error from that point on. Since there is no `arguments` object to offer alternative access to this data, assignment of the parameter is absolutely destructive. ## Rule Details @@ -9,6 +17,8 @@ This rule disallows reassigning exceptions in `catch` clauses. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-ex-assign: "error"*/ @@ -19,8 +29,12 @@ try { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-ex-assign: "error"*/ @@ -31,6 +45,4 @@ try { } ``` -## Further Reading - -* [The "catch" with try...catch](https://bocoup.com/blog/the-catch-with-try-catch) by Ben Alman explains how the exception identifier can leak into the outer scope in IE 6-8 +::: diff --git a/eslint/docs/rules/no-extend-native.md b/eslint/docs/src/rules/no-extend-native.md similarity index 93% rename from eslint/docs/rules/no-extend-native.md rename to eslint/docs/src/rules/no-extend-native.md index c3ccaeb..abdf812 100644 --- a/eslint/docs/rules/no-extend-native.md +++ b/eslint/docs/src/rules/no-extend-native.md @@ -1,4 +1,11 @@ -# Disallow Extending of Native Objects (no-extend-native) +--- +title: no-extend-native +layout: doc +rule_type: suggestion +related_rules: +- no-global-assign +--- + In JavaScript, you can extend any object, including builtin or "native" objects. Sometimes people change the behavior of these native objects in ways that break the assumptions made about them in other parts of the code. @@ -28,6 +35,8 @@ Disallows directly modifying the prototype of builtin objects. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-extend-native: "error"*/ @@ -35,6 +44,8 @@ Object.prototype.a = "a"; Object.defineProperty(Array.prototype, "times", { value: 999 }); ``` +::: + ## Options This rule accepts an `exceptions` option, which can be used to specify a list of builtins for which extensions will be allowed. @@ -43,12 +54,16 @@ This rule accepts an `exceptions` option, which can be used to specify a list of Examples of **correct** code for the sample `{ "exceptions": ["Object"] }` option: +::: correct + ```js /*eslint no-extend-native: ["error", { "exceptions": ["Object"] }]*/ Object.prototype.a = "a"; ``` +::: + ## Known Limitations This rule *does not* report any of the following less obvious approaches to modify the prototype of builtin objects: @@ -69,7 +84,3 @@ window.Function.prototype.bind = 'tight'; ## When Not To Use It You may want to disable this rule when working with polyfills that try to patch older versions of JavaScript with the latest spec, such as those that might `Function.prototype.bind` or `Array.prototype.forEach` in a future-friendly way. - -## Related Rules - -* [no-global-assign](no-global-assign.md) diff --git a/eslint/docs/rules/no-extra-bind.md b/eslint/docs/src/rules/no-extra-bind.md similarity index 86% rename from eslint/docs/rules/no-extra-bind.md rename to eslint/docs/src/rules/no-extra-bind.md index 6d6bf13..4133e75 100644 --- a/eslint/docs/rules/no-extra-bind.md +++ b/eslint/docs/src/rules/no-extra-bind.md @@ -1,4 +1,13 @@ -# Disallow unnecessary function binding (no-extra-bind) +--- +title: no-extra-bind +layout: doc +rule_type: suggestion +further_reading: +- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind +- https://www.smashingmagazine.com/2014/01/understanding-javascript-function-prototype-bind/ +--- + + The `bind()` method is used to create functions with specific `this` values and, optionally, binds arguments to specific values. When used to specify the value of `this`, it's important that the function actually uses `this` in its function body. For example: @@ -33,6 +42,8 @@ This rule is aimed at avoiding the unnecessary use of `bind()` and as such will Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-extra-bind: "error"*/ /*eslint-env es6*/ @@ -62,8 +73,12 @@ var x = function () { }.bind(baz); ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-extra-bind: "error"*/ @@ -76,11 +91,8 @@ var x = function (a) { }.bind(foo, bar); ``` +::: + ## When Not To Use It If you are not concerned about unnecessary calls to `bind()`, you can safely disable this rule. - -## Further Reading - -* [Function.prototype.bind](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind) -* [Understanding JavaScript's Function.prototype.bind](https://www.smashingmagazine.com/2014/01/understanding-javascript-function-prototype-bind/) diff --git a/eslint/docs/rules/no-extra-boolean-cast.md b/eslint/docs/src/rules/no-extra-boolean-cast.md similarity index 93% rename from eslint/docs/rules/no-extra-boolean-cast.md rename to eslint/docs/src/rules/no-extra-boolean-cast.md index 5c7d200..d08a4ea 100644 --- a/eslint/docs/rules/no-extra-boolean-cast.md +++ b/eslint/docs/src/rules/no-extra-boolean-cast.md @@ -1,4 +1,12 @@ -# disallow unnecessary boolean casts (no-extra-boolean-cast) +--- +title: no-extra-boolean-cast +layout: doc +rule_type: suggestion +--- + + + + In contexts such as an `if` statement's test where the result of the expression will already be coerced to a Boolean, casting to a Boolean via double negation (`!!`) or a `Boolean` call is unnecessary. For example, these `if` statements are equivalent: @@ -22,6 +30,8 @@ This rule disallows unnecessary boolean casts. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-extra-boolean-cast: "error"*/ @@ -54,8 +64,12 @@ for (; !!foo; ) { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-extra-boolean-cast: "error"*/ @@ -69,6 +83,8 @@ function foo() { var foo = bar ? !!baz : !!bat; ``` +::: + ## Options This rule has an object option: @@ -79,6 +95,8 @@ This rule has an object option: Examples of **incorrect** code for this rule with `"enforceForLogicalOperands"` option set to `true`: +::: incorrect + ```js /*eslint no-extra-boolean-cast: ["error", {"enforceForLogicalOperands": true}]*/ @@ -99,8 +117,12 @@ foo && Boolean(bar) ? baz : bat var foo = new Boolean(!!bar || baz) ``` +::: + Examples of **correct** code for this rule with `"enforceForLogicalOperands"` option set to `true`: +::: correct + ```js /*eslint no-extra-boolean-cast: ["error", {"enforceForLogicalOperands": true}]*/ @@ -122,3 +144,5 @@ var foo = new Boolean(bar || baz) var foo = !!bar || baz; ``` + +::: diff --git a/eslint/docs/rules/no-extra-label.md b/eslint/docs/src/rules/no-extra-label.md similarity index 86% rename from eslint/docs/rules/no-extra-label.md rename to eslint/docs/src/rules/no-extra-label.md index 5c7c114..bd2cb58 100644 --- a/eslint/docs/rules/no-extra-label.md +++ b/eslint/docs/src/rules/no-extra-label.md @@ -1,4 +1,14 @@ -# Disallow Unnecessary Labels (no-extra-label) +--- +title: no-extra-label +layout: doc +rule_type: suggestion +related_rules: +- no-labels +- no-label-var +- no-unused-labels +--- + + If a loop contains no nested loops or switches, labeling the loop is unnecessary. @@ -17,6 +27,8 @@ This rule is aimed at eliminating unnecessary labels. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-extra-label: "error"*/ @@ -34,8 +46,12 @@ C: switch (a) { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-extra-label: "error"*/ @@ -71,12 +87,8 @@ C: switch (a) { } ``` +::: + ## When Not To Use It If you don't want to be notified about usage of labels, then it's safe to disable this rule. - -## Related Rules - -* [no-labels](./no-labels.md) -* [no-label-var](./no-label-var.md) -* [no-unused-labels](./no-unused-labels.md) diff --git a/eslint/docs/rules/no-extra-parens.md b/eslint/docs/src/rules/no-extra-parens.md similarity index 90% rename from eslint/docs/rules/no-extra-parens.md rename to eslint/docs/src/rules/no-extra-parens.md index b521dcb..ab3fd1c 100644 --- a/eslint/docs/rules/no-extra-parens.md +++ b/eslint/docs/src/rules/no-extra-parens.md @@ -1,4 +1,16 @@ -# disallow unnecessary parentheses (no-extra-parens) +--- +title: no-extra-parens +layout: doc +rule_type: layout +related_rules: +- arrow-parens +- no-cond-assign +- no-return-assign +further_reading: +- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence +--- + + This rule restricts the use of parentheses to only where they are necessary. @@ -6,9 +18,9 @@ This rule restricts the use of parentheses to only where they are necessary. This rule always ignores extra parentheses around the following: -* RegExp literals such as `(/abc/).test(var)` to avoid conflicts with the [wrap-regex](wrap-regex.md) rule -* immediately-invoked function expressions (also known as IIFEs) such as `var x = (function () {})();` and `var x = (function () {}());` to avoid conflicts with the [wrap-iife](wrap-iife.md) rule -* arrow function arguments to avoid conflicts with the [arrow-parens](arrow-parens.md) rule +* RegExp literals such as `(/abc/).test(var)` to avoid conflicts with the [wrap-regex](wrap-regex) rule +* immediately-invoked function expressions (also known as IIFEs) such as `var x = (function () {})();` and `var x = (function () {}());` to avoid conflicts with the [wrap-iife](wrap-iife) rule +* arrow function arguments to avoid conflicts with the [arrow-parens](arrow-parens) rule ## Options @@ -32,6 +44,8 @@ This rule has an object option for exceptions to the `"all"` option: Examples of **incorrect** code for this rule with the default `"all"` option: +::: incorrect + ```js /* eslint no-extra-parens: "error" */ @@ -58,8 +72,12 @@ class B { } ``` +::: + Examples of **correct** code for this rule with the default `"all"` option: +::: correct + ```js /* eslint no-extra-parens: "error" */ @@ -90,10 +108,14 @@ class B { } ``` +::: + ### conditionalAssign Examples of **correct** code for this rule with the `"all"` and `{ "conditionalAssign": false }` options: +::: correct + ```js /* eslint no-extra-parens: ["error", "all", { "conditionalAssign": false }] */ @@ -106,10 +128,14 @@ do; while ((foo = bar())) for (;(a = b);); ``` +::: + ### returnAssign Examples of **correct** code for this rule with the `"all"` and `{ "returnAssign": false }` options: +::: correct + ```js /* eslint no-extra-parens: ["error", "all", { "returnAssign": false }] */ @@ -126,10 +152,14 @@ b => (b = 1); b => b ? (c = d) : (c = e); ``` +::: + ### nestedBinaryExpressions Examples of **correct** code for this rule with the `"all"` and `{ "nestedBinaryExpressions": false }` options: +::: correct + ```js /* eslint no-extra-parens: ["error", "all", { "nestedBinaryExpressions": false }] */ @@ -138,10 +168,14 @@ x = a + (b * c); x = (a * b) / c; ``` +::: + ### ignoreJSX Examples of **correct** code for this rule with the `all` and `{ "ignoreJSX": "all" }` options: +::: correct + ```js /* eslint no-extra-parens: ["error", "all", { ignoreJSX: "all" }] */ const Component = (<div />) @@ -152,16 +186,24 @@ const Component = ( ) ``` +::: + Examples of **incorrect** code for this rule with the `all` and `{ "ignoreJSX": "multi-line" }` options: +::: incorrect + ```js /* eslint no-extra-parens: ["error", "all", { ignoreJSX: "multi-line" }] */ const Component = (<div />) const Component = (<div><p /></div>) ``` +::: + Examples of **correct** code for this rule with the `all` and `{ "ignoreJSX": "multi-line" }` options: +::: correct + ```js /* eslint no-extra-parens: ["error", "all", { ignoreJSX: "multi-line" }] */ const Component = ( @@ -176,8 +218,12 @@ const Component = ( ) ``` +::: + Examples of **incorrect** code for this rule with the `all` and `{ "ignoreJSX": "single-line" }` options: +::: incorrect + ```js /* eslint no-extra-parens: ["error", "all", { ignoreJSX: "single-line" }] */ const Component = ( @@ -192,18 +238,26 @@ const Component = ( ) ``` +::: + Examples of **correct** code for this rule with the `all` and `{ "ignoreJSX": "single-line" }` options: +::: correct + ```js /* eslint no-extra-parens: ["error", "all", { ignoreJSX: "single-line" }] */ const Component = (<div />) const Component = (<div><p /></div>) ``` +::: + ### enforceForArrowConditionals Examples of **correct** code for this rule with the `"all"` and `{ "enforceForArrowConditionals": false }` options: +::: correct + ```js /* eslint no-extra-parens: ["error", "all", { "enforceForArrowConditionals": false }] */ @@ -211,10 +265,14 @@ const b = a => 1 ? 2 : 3; const d = c => (1 ? 2 : 3); ``` +::: + ### enforceForSequenceExpressions Examples of **correct** code for this rule with the `"all"` and `{ "enforceForSequenceExpressions": false }` options: +::: correct + ```js /* eslint no-extra-parens: ["error", "all", { "enforceForSequenceExpressions": false }] */ @@ -225,10 +283,14 @@ if ((val = foo(), val < 10)) {} while ((val = foo(), val < 10)); ``` +::: + ### enforceForNewInMemberExpressions Examples of **correct** code for this rule with the `"all"` and `{ "enforceForNewInMemberExpressions": false }` options: +::: correct + ```js /* eslint no-extra-parens: ["error", "all", { "enforceForNewInMemberExpressions": false }] */ @@ -239,10 +301,14 @@ const quux = (new Bar())[baz]; (new Bar()).doSomething(); ``` +::: + ### enforceForFunctionPrototypeMethods Examples of **correct** code for this rule with the `"all"` and `{ "enforceForFunctionPrototypeMethods": false }` options: +::: correct + ```js /* eslint no-extra-parens: ["error", "all", { "enforceForFunctionPrototypeMethods": false }] */ @@ -255,10 +321,14 @@ const baz = (function () {}.call()); const quux = (function () {}.apply()); ``` +::: + ### functions Examples of **incorrect** code for this rule with the `"functions"` option: +::: incorrect + ```js /* eslint no-extra-parens: ["error", "functions"] */ @@ -267,8 +337,12 @@ Examples of **incorrect** code for this rule with the `"functions"` option: var y = (function () {return 1;}); ``` +::: + Examples of **correct** code for this rule with the `"functions"` option: +::: correct + ```js /* eslint no-extra-parens: ["error", "functions"] */ @@ -289,12 +363,4 @@ a = (b * c); typeof (a); ``` -## Further Reading - -* [MDN: Operator Precedence](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence) - -## Related Rules - -* [arrow-parens](arrow-parens.md) -* [no-cond-assign](no-cond-assign.md) -* [no-return-assign](no-return-assign.md) +::: diff --git a/eslint/docs/rules/no-extra-semi.md b/eslint/docs/src/rules/no-extra-semi.md similarity index 86% rename from eslint/docs/rules/no-extra-semi.md rename to eslint/docs/src/rules/no-extra-semi.md index a33a493..6132bcb 100644 --- a/eslint/docs/rules/no-extra-semi.md +++ b/eslint/docs/src/rules/no-extra-semi.md @@ -1,4 +1,15 @@ -# disallow unnecessary semicolons (no-extra-semi) +--- +title: no-extra-semi +layout: doc +rule_type: suggestion +related_rules: +- semi +- semi-spacing +--- + + + + Typing mistakes and misunderstandings about where semicolons are required can lead to semicolons that are unnecessary. While not technically an error, extra semicolons can cause confusion when reading code. @@ -8,6 +19,8 @@ This rule disallows unnecessary semicolons. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-extra-semi: "error"*/ @@ -30,8 +43,12 @@ class C { }; ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-extra-semi: "error"*/ @@ -58,11 +75,8 @@ class C { } ``` +::: + ## When Not To Use It If you intentionally use extra semicolons then you can disable this rule. - -## Related Rules - -* [semi](semi.md) -* [semi-spacing](semi-spacing.md) diff --git a/eslint/docs/rules/no-extra-strict.md b/eslint/docs/src/rules/no-extra-strict.md similarity index 72% rename from eslint/docs/rules/no-extra-strict.md rename to eslint/docs/src/rules/no-extra-strict.md index a350f77..caeff8a 100644 --- a/eslint/docs/rules/no-extra-strict.md +++ b/eslint/docs/src/rules/no-extra-strict.md @@ -1,6 +1,14 @@ -# no-extra-strict: disallow strict mode directives when already in strict mode +--- +title: no-extra-strict +layout: doc -(removed) This rule was **removed** in ESLint v1.0 and **replaced** by the [strict](strict.md) rule. The `"global"` or `"function"` options in the new rule are similar to the removed rule. +further_reading: +- https://es5.github.io/#C +--- + +Disallows strict mode directives when already in strict mode. + +(removed) This rule was **removed** in ESLint v1.0 and **replaced** by the [strict](strict) rule. The `"global"` or `"function"` options in the new rule are similar to the removed rule. The `"use strict";` directive applies to the scope in which it appears and all inner scopes contained within that scope. Therefore, using the `"use strict";` directive in one of these inner scopes is unnecessary. @@ -19,6 +27,8 @@ This rule is aimed at preventing unnecessary `"use strict";` directives. As such Example of **incorrect** code for this rule: +::: incorrect + ```js "use strict"; @@ -28,8 +38,12 @@ Example of **incorrect** code for this rule: }()); ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js "use strict"; @@ -38,6 +52,10 @@ Examples of **correct** code for this rule: }()); ``` +::: + +::: correct + ```js (function () { "use strict"; @@ -45,6 +63,4 @@ Examples of **correct** code for this rule: }()); ``` -## Further Reading - -* [The ECMAScript 5 Annotated Specification - Strict Mode](https://es5.github.io/#C) +::: diff --git a/eslint/docs/rules/no-fallthrough.md b/eslint/docs/src/rules/no-fallthrough.md similarity index 80% rename from eslint/docs/rules/no-fallthrough.md rename to eslint/docs/src/rules/no-fallthrough.md index 81b428c..7986b81 100644 --- a/eslint/docs/rules/no-fallthrough.md +++ b/eslint/docs/src/rules/no-fallthrough.md @@ -1,4 +1,12 @@ -# Disallow Case Statement Fallthrough (no-fallthrough) +--- +title: no-fallthrough +layout: doc +rule_type: problem +related_rules: +- default-case +--- + + The `switch` statement in JavaScript is one of the more error-prone constructs of the language thanks in part to the ability to "fall through" from one `case` to the next. For example: @@ -75,6 +83,8 @@ This rule is aimed at eliminating unintentional fallthrough of one case to the o Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-fallthrough: "error"*/ @@ -87,8 +97,12 @@ switch(foo) { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-fallthrough: "error"*/ @@ -148,18 +162,24 @@ switch(foo) { } ``` +::: + Note that the last `case` statement in these examples does not cause a warning because there is nothing to fall through into. ## Options -This rule accepts a single options argument: +This rule has an object option: + +* Set the `commentPattern` option to a regular expression string to change the test for intentional fallthrough comment. -* Set the `commentPattern` option to a regular expression string to change the test for intentional fallthrough comment +* Set the `allowEmptyCase` option to `true` to allow empty cases regardless of the layout. By default, this rule does not require a fallthrough comment after an empty `case` only if the empty `case` and the next `case` are on the same line or on consecutive lines. ### commentPattern Examples of **correct** code for the `{ "commentPattern": "break[\\s\\w]*omitted" }` option: +::: correct + ```js /*eslint no-fallthrough: ["error", { "commentPattern": "break[\\s\\w]*omitted" }]*/ @@ -182,10 +202,35 @@ switch(foo) { } ``` -## When Not To Use It +::: -If you don't want to enforce that each `case` statement should end with a `throw`, `return`, `break`, or comment, then you can safely turn this rule off. +### allowEmptyCase + +Examples of **correct** code for the `{ "allowEmptyCase": true }` option: + +::: correct + +```js +/* eslint no-fallthrough: ["error", { "allowEmptyCase": true }] */ + +switch(foo){ + case 1: -## Related Rules + case 2: doSomething(); +} + +switch(foo){ + case 1: + /* + Put a message here + */ + case 2: doSomething(); +} -* [default-case](default-case.md) +``` + +::: + +## When Not To Use It + +If you don't want to enforce that each `case` statement should end with a `throw`, `return`, `break`, or comment, then you can safely turn this rule off. diff --git a/eslint/docs/rules/no-floating-decimal.md b/eslint/docs/src/rules/no-floating-decimal.md similarity index 91% rename from eslint/docs/rules/no-floating-decimal.md rename to eslint/docs/src/rules/no-floating-decimal.md index 880bc07..e1c26d2 100644 --- a/eslint/docs/rules/no-floating-decimal.md +++ b/eslint/docs/src/rules/no-floating-decimal.md @@ -1,4 +1,10 @@ -# Disallow Floating Decimals (no-floating-decimal) +--- +title: no-floating-decimal +layout: doc +rule_type: suggestion +--- + + Float values in JavaScript contain a decimal point, and there is no requirement that the decimal point be preceded or followed by a number. For example, the following are all valid JavaScript numbers: @@ -16,6 +22,8 @@ This rule is aimed at eliminating floating decimal points and will warn whenever Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-floating-decimal: "error"*/ @@ -24,8 +32,12 @@ var num = 2.; var num = -.7; ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-floating-decimal: "error"*/ @@ -34,6 +46,8 @@ var num = 2.0; var num = -0.7; ``` +::: + ## When Not To Use It If you aren't concerned about misinterpreting floating decimal point values, then you can safely turn this rule off. diff --git a/eslint/docs/rules/no-func-assign.md b/eslint/docs/src/rules/no-func-assign.md similarity index 89% rename from eslint/docs/rules/no-func-assign.md rename to eslint/docs/src/rules/no-func-assign.md index e35b0ed..84971db 100644 --- a/eslint/docs/rules/no-func-assign.md +++ b/eslint/docs/src/rules/no-func-assign.md @@ -1,4 +1,10 @@ -# disallow reassigning `function` declarations (no-func-assign) +--- +title: no-func-assign +layout: doc +rule_type: problem +--- + + JavaScript functions can be written as a FunctionDeclaration `function foo() { ... }` or as a FunctionExpression `var foo = function() { ... };`. While a JavaScript interpreter might tolerate it, overwriting/reassigning a function written as a FunctionDeclaration is often indicative of a mistake or issue. @@ -13,6 +19,8 @@ This rule disallows reassigning `function` declarations. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-func-assign: "error"*/ @@ -28,8 +36,12 @@ var a = function hello() { }; ``` +::: + Examples of **incorrect** code for this rule, unlike the corresponding rule in JSHint: +::: incorrect + ```js /*eslint no-func-assign: "error"*/ @@ -37,8 +49,12 @@ foo = bar; function foo() {} ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-func-assign: "error"*/ @@ -53,3 +69,5 @@ function foo() { var foo = bar; // `foo` is shadowed. } ``` + +::: diff --git a/eslint/docs/rules/no-global-assign.md b/eslint/docs/src/rules/no-global-assign.md similarity index 88% rename from eslint/docs/rules/no-global-assign.md rename to eslint/docs/src/rules/no-global-assign.md index b3718d1..95ca90d 100644 --- a/eslint/docs/rules/no-global-assign.md +++ b/eslint/docs/src/rules/no-global-assign.md @@ -1,4 +1,14 @@ -# Disallow assignment to native objects or read-only global variables (no-global-assign) +--- +title: no-global-assign +layout: doc +rule_type: suggestion +related_rules: +- no-extend-native +- no-redeclare +- no-shadow +--- + + JavaScript environments contain a number of built-in global variables, such as `window` in browsers and `process` in Node.js. In almost all cases, you don't want to assign a value to these global variables as doing so could result in losing access to important functionality. For example, you probably don't want to do this in browser code: @@ -19,6 +29,8 @@ ESLint has the capability to configure global variables as read-only. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-global-assign: "error"*/ @@ -26,6 +38,10 @@ Object = null undefined = 1 ``` +::: + +::: incorrect + ```js /*eslint no-global-assign: "error"*/ /*eslint-env browser*/ @@ -35,6 +51,10 @@ length = 1 top = 1 ``` +::: + +::: incorrect + ```js /*eslint no-global-assign: "error"*/ /*global a:readonly*/ @@ -42,8 +62,12 @@ top = 1 a = 1 ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-global-assign: "error"*/ @@ -52,6 +76,10 @@ var b = 1 b = 2 ``` +::: + +::: correct + ```js /*eslint no-global-assign: "error"*/ /*eslint-env browser*/ @@ -59,6 +87,10 @@ b = 2 onload = function() {} ``` +::: + +::: correct + ```js /*eslint no-global-assign: "error"*/ /*global a:writable*/ @@ -66,6 +98,8 @@ onload = function() {} a = 1 ``` +::: + ## Options This rule accepts an `exceptions` option, which can be used to specify a list of builtins for which reassignments will be allowed: @@ -81,9 +115,3 @@ This rule accepts an `exceptions` option, which can be used to specify a list of ## When Not To Use It If you are trying to override one of the native objects. - -## Related Rules - -* [no-extend-native](no-extend-native.md) -* [no-redeclare](no-redeclare.md) -* [no-shadow](no-shadow.md) diff --git a/eslint/docs/rules/no-implicit-coercion.md b/eslint/docs/src/rules/no-implicit-coercion.md similarity index 78% rename from eslint/docs/rules/no-implicit-coercion.md rename to eslint/docs/src/rules/no-implicit-coercion.md index 8ccee33..746c988 100644 --- a/eslint/docs/rules/no-implicit-coercion.md +++ b/eslint/docs/src/rules/no-implicit-coercion.md @@ -1,4 +1,10 @@ -# Disallow the type conversion with shorter notations. (no-implicit-coercion) +--- +title: no-implicit-coercion +layout: doc +rule_type: suggestion +--- + + In JavaScript, there are a lot of different ways to convert value types. Some of them might be hard to read and understand. @@ -33,11 +39,11 @@ This rule is aimed to flag shorter notations for the type conversion, then sugge This rule has three main options and one override option to allow some coercions as required. -- `"boolean"` (`true` by default) - When this is `true`, this rule warns shorter type conversions for `boolean` type. -- `"number"` (`true` by default) - When this is `true`, this rule warns shorter type conversions for `number` type. -- `"string"` (`true` by default) - When this is `true`, this rule warns shorter type conversions for `string` type. -- `"disallowTemplateShorthand"` (`false` by default) - When this is `true`, this rule warns `string` type conversions using `${expression}` form. -- `"allow"` (`empty` by default) - Each entry in this array can be one of `~`, `!!`, `+` or `*` that are to be allowed. +* `"boolean"` (`true` by default) - When this is `true`, this rule warns shorter type conversions for `boolean` type. +* `"number"` (`true` by default) - When this is `true`, this rule warns shorter type conversions for `number` type. +* `"string"` (`true` by default) - When this is `true`, this rule warns shorter type conversions for `string` type. +* `"disallowTemplateShorthand"` (`false` by default) - When this is `true`, this rule warns `string` type conversions using `${expression}` form. +* `"allow"` (`empty` by default) - Each entry in this array can be one of `~`, `!!`, `+` or `*` that are to be allowed. Note that operator `+` in `allow` list would allow `+foo` (number coercion) as well as `"" + foo` (string coercion). @@ -45,6 +51,8 @@ Note that operator `+` in `allow` list would allow `+foo` (number coercion) as w Examples of **incorrect** code for the default `{ "boolean": true }` option: +::: incorrect + ```js /*eslint no-implicit-coercion: "error"*/ @@ -53,8 +61,12 @@ var b = ~foo.indexOf("."); // bitwise not is incorrect only with `indexOf`/`lastIndexOf` method calling. ``` +::: + Examples of **correct** code for the default `{ "boolean": true }` option: +::: correct + ```js /*eslint no-implicit-coercion: "error"*/ @@ -64,10 +76,14 @@ var b = foo.indexOf(".") !== -1; var n = ~foo; // This is a just bitwise not. ``` +::: + ### number Examples of **incorrect** code for the default `{ "number": true }` option: +::: incorrect + ```js /*eslint no-implicit-coercion: "error"*/ @@ -75,8 +91,12 @@ var n = +foo; var n = 1 * foo; ``` +::: + Examples of **correct** code for the default `{ "number": true }` option: +::: correct + ```js /*eslint no-implicit-coercion: "error"*/ @@ -85,10 +105,14 @@ var n = parseFloat(foo); var n = parseInt(foo, 10); ``` +::: + ### string Examples of **incorrect** code for the default `{ "string": true }` option: +::: incorrect + ```js /*eslint no-implicit-coercion: "error"*/ @@ -98,8 +122,12 @@ foo += ""; foo += ``; ``` +::: + Examples of **correct** code for the default `{ "string": true }` option: +::: correct + ```js /*eslint no-implicit-coercion: "error"*/ @@ -107,20 +135,28 @@ var s = String(foo); foo = String(foo); ``` +::: + ### disallowTemplateShorthand This option is **not** affected by the `string` option. Examples of **incorrect** code for the `{ "disallowTemplateShorthand": true }` option: +::: incorrect + ```js /*eslint no-implicit-coercion: ["error", { "disallowTemplateShorthand": true }]*/ var s = `${foo}`; ``` +::: + Examples of **correct** code for the `{ "disallowTemplateShorthand": true }` option: +::: correct + ```js /*eslint no-implicit-coercion: ["error", { "disallowTemplateShorthand": true }]*/ @@ -135,20 +171,28 @@ var s = `${foo}${bar}`; var s = tag`${foo}`; ``` +::: + Examples of **correct** code for the default `{ "disallowTemplateShorthand": false }` option: +::: correct + ```js /*eslint no-implicit-coercion: ["error", { "disallowTemplateShorthand": false }]*/ var s = `${foo}`; ``` +::: + ### allow Using `allow` list, we can override and allow specific operators. Examples of **correct** code for the sample `{ "allow": ["!!", "~"] }` option: +::: correct + ```js /*eslint no-implicit-coercion: [2, { "allow": ["!!", "~"] } ]*/ @@ -156,6 +200,8 @@ var b = !!foo; var b = ~foo.indexOf("."); ``` +::: + ## When Not To Use It If you don't want to be notified about shorter notations for the type conversion, you can safely disable this rule. diff --git a/eslint/docs/rules/no-implicit-globals.md b/eslint/docs/src/rules/no-implicit-globals.md similarity index 92% rename from eslint/docs/rules/no-implicit-globals.md rename to eslint/docs/src/rules/no-implicit-globals.md index 479d958..15c0386 100644 --- a/eslint/docs/rules/no-implicit-globals.md +++ b/eslint/docs/src/rules/no-implicit-globals.md @@ -1,4 +1,16 @@ -# Disallow declarations in the global scope (no-implicit-globals) +--- +title: no-implicit-globals +layout: doc +rule_type: suggestion +related_rules: +- no-undef +- no-global-assign +further_reading: +- https://benalman.com/news/2010/11/immediately-invoked-function-expression/ +- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Undeclared_var +- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let#Temporal_dead_zone +--- + It is the best practice to avoid 'polluting' the global scope with variables that are intended to be local to the script. @@ -32,6 +44,8 @@ This rule disallows `var` and `function` declarations at the top-level script sc Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-implicit-globals: "error"*/ @@ -40,8 +54,12 @@ var foo = 1; function bar() {} ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-implicit-globals: "error"*/ @@ -57,8 +75,12 @@ window.bar = function() {}; })(); ``` +::: + Examples of **correct** code for this rule with `"parserOptions": { "sourceType": "module" }` in the ESLint configuration: +::: correct + ```js /*eslint no-implicit-globals: "error"*/ @@ -67,6 +89,8 @@ var foo = 1; function bar() {} ``` +::: + ### Global variable leaks When the code is not in `strict` mode, an assignment to an undeclared variable creates @@ -76,6 +100,8 @@ This does not apply to ES modules since the module code is implicitly in `strict Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-implicit-globals: "error"*/ @@ -86,6 +112,8 @@ Bar.prototype.baz = function () { }; ``` +::: + ### Read-only global variables This rule also disallows redeclarations of read-only global variables and assignments to read-only global variables. @@ -99,6 +127,8 @@ or in a `/*global */` comment. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-implicit-globals: "error"*/ @@ -110,6 +140,8 @@ Array = []; var Object; ``` +::: + ### `const`, `let` and `class` declarations Lexical declarations `const` and `let`, as well as `class` declarations, create variables that are block-scoped. @@ -123,6 +155,8 @@ If the variable is intended to be local to the script, wrap the code with a bloc Examples of **correct** code for this rule with `"lexicalBindings"` option set to `false` (default): +::: correct + ```js /*eslint no-implicit-globals: ["error", {"lexicalBindings": false}]*/ @@ -133,8 +167,12 @@ let baz; class Bar {} ``` +::: + Examples of **incorrect** code for this rule with `"lexicalBindings"` option set to `true`: +::: incorrect + ```js /*eslint no-implicit-globals: ["error", {"lexicalBindings": true}]*/ @@ -145,8 +183,12 @@ let baz; class Bar {} ``` +::: + Examples of **correct** code for this rule with `"lexicalBindings"` option set to `true`: +::: correct + ```js /*eslint no-implicit-globals: ["error", {"lexicalBindings": true}]*/ @@ -163,6 +205,8 @@ Examples of **correct** code for this rule with `"lexicalBindings"` option set t }()); ``` +::: + If you intend to create a global `const` or `let` variable or a global `class` declaration, to be used from other scripts, be aware that there are certain differences when compared to the traditional methods, which are `var` declarations and assigning to a property of the global `window` object: @@ -177,6 +221,8 @@ Even the `typeof` check is not safe from TDZ reference exceptions. Examples of **incorrect** code for this rule with `"lexicalBindings"` option set to `true`: +::: incorrect + ```js /*eslint no-implicit-globals: ["error", {"lexicalBindings": true}]*/ @@ -189,8 +235,12 @@ const MyGlobalFunction = (function() { }()); ``` +::: + Examples of **correct** code for this rule with `"lexicalBindings"` option set to `true`: +::: correct + ```js /*eslint no-implicit-globals: ["error", {"lexicalBindings": true}]*/ @@ -203,6 +253,8 @@ window.MyGlobalFunction = (function() { }()); ``` +::: + ## When Not To Use It In the case of a browser script, if you want to be able to explicitly declare variables and functions in the global scope, @@ -213,14 +265,3 @@ In the case of a CommonJS module, if your code is in strict mode or you don't wa and you also don't want this rule to warn you about the read-only globals, you can disable this rule. In the case of an ES module, if you don't want this rule to warn you about the read-only globals you can disable this rule. - -## Further Reading - -* [Immediately-Invoked Function Expression (IIFE)](http://benalman.com/news/2010/11/immediately-invoked-function-expression/) -* [ReferenceError: assignment to undeclared variable](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Undeclared_var) -* [Temporal Dead Zone](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let#Temporal_dead_zone) - -## Related Rules - -* [no-undef](no-undef.md) -* [no-global-assign](no-global-assign.md) diff --git a/eslint/docs/rules/no-implied-eval.md b/eslint/docs/src/rules/no-implied-eval.md similarity index 93% rename from eslint/docs/rules/no-implied-eval.md rename to eslint/docs/src/rules/no-implied-eval.md index cbf7c67..acfcfd5 100644 --- a/eslint/docs/rules/no-implied-eval.md +++ b/eslint/docs/src/rules/no-implied-eval.md @@ -1,4 +1,11 @@ -# Disallow Implied eval() (no-implied-eval) +--- +title: no-implied-eval +layout: doc +rule_type: suggestion +related_rules: +- no-eval +--- + It's considered a good practice to avoid using `eval()` in JavaScript. There are security and performance implications involved with doing so, which is why many linters (including ESLint) recommend disallowing `eval()`. However, there are some other ways to pass a string and have it interpreted as JavaScript code that have similar concerns. @@ -25,6 +32,8 @@ This rule aims to eliminate implied `eval()` through the use of `setTimeout()`, Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-implied-eval: "error"*/ @@ -39,8 +48,12 @@ window.setTimeout("count = 5", 10); window.setInterval("foo = bar", 10); ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-implied-eval: "error"*/ @@ -53,10 +66,8 @@ setInterval(function() { }, 100); ``` +::: + ## When Not To Use It If you want to allow `setTimeout()` and `setInterval()` with string arguments, then you can safely disable this rule. - -## Related Rules - -* [no-eval](no-eval.md) diff --git a/eslint/docs/rules/no-import-assign.md b/eslint/docs/src/rules/no-import-assign.md similarity index 92% rename from eslint/docs/rules/no-import-assign.md rename to eslint/docs/src/rules/no-import-assign.md index 49595cd..c19cfd2 100644 --- a/eslint/docs/rules/no-import-assign.md +++ b/eslint/docs/src/rules/no-import-assign.md @@ -1,4 +1,10 @@ -# disallow assigning to imported bindings (no-import-assign) +--- +title: no-import-assign +layout: doc +rule_type: problem +--- + + The updates of imported bindings by ES Modules cause runtime errors. @@ -8,6 +14,8 @@ This rule warns the assignments, increments, and decrements of imported bindings Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-import-assign: "error"*/ @@ -22,8 +30,12 @@ mod_ns = {} // ERROR: 'mod_ns' is readonly. Object.assign(mod_ns, { foo: "foo" }) // ERROR: The members of 'mod_ns' are readonly. ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-import-assign: "error"*/ @@ -41,6 +53,8 @@ function test(obj) { test(mod_ns) // Not errored because it doesn't know that 'test' updates the member of the argument. ``` +::: + ## When Not To Use It If you don't want to be notified about modifying imported bindings, you can disable this rule. diff --git a/eslint/docs/rules/no-inline-comments.md b/eslint/docs/src/rules/no-inline-comments.md similarity index 93% rename from eslint/docs/rules/no-inline-comments.md rename to eslint/docs/src/rules/no-inline-comments.md index 237b248..093214c 100644 --- a/eslint/docs/rules/no-inline-comments.md +++ b/eslint/docs/src/rules/no-inline-comments.md @@ -1,4 +1,9 @@ -# disallow inline comments after code (no-inline-comments) +--- +title: no-inline-comments +layout: doc +rule_type: suggestion +--- + Some style guides disallow comments on the same line as code. Code can become difficult to read if comments immediately follow the code on the same line. On the other hand, it is sometimes faster and more obvious to put comments immediately following code. @@ -9,6 +14,8 @@ This rule disallows comments on the same line as code. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-inline-comments: "error"*/ @@ -24,8 +31,12 @@ function getRandomNumber(){ var c = 3; /* A block comment after code */ ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-inline-comments: "error"*/ @@ -36,12 +47,16 @@ var bar = 5; //This is a comment below a line of code ``` +::: + ### JSX exception Comments inside the curly braces in JSX are allowed to be on the same line as the braces, but only if they are not on the same line with other code, and the braces do not enclose an actual expression. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-inline-comments: "error"*/ @@ -56,8 +71,12 @@ var bar = ( ); ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-inline-comments: "error"*/ @@ -88,6 +107,8 @@ var quux = ( ) ``` +::: + ## Options ### ignorePattern @@ -96,16 +117,24 @@ To make this rule ignore specific comments, set the `ignorePattern` option to a Examples of **correct** code for the `ignorePattern` option: +::: correct + ```js /*eslint no-inline-comments: ["error", { "ignorePattern": "webpackChunkName:\\s.+" }]*/ import(/* webpackChunkName: "my-chunk-name" */ './locale/en'); ``` +::: + Examples of **incorrect** code for the `ignorePattern` option: +::: incorrect + ```js /*eslint no-inline-comments: ["error", { "ignorePattern": "something" }] */ var foo = 4; // other thing ``` + +::: diff --git a/eslint/docs/rules/no-inner-declarations.md b/eslint/docs/src/rules/no-inner-declarations.md similarity index 92% rename from eslint/docs/rules/no-inner-declarations.md rename to eslint/docs/src/rules/no-inner-declarations.md index 7c64e9d..d098999 100644 --- a/eslint/docs/rules/no-inner-declarations.md +++ b/eslint/docs/src/rules/no-inner-declarations.md @@ -1,4 +1,10 @@ -# disallow variable or `function` declarations in nested blocks (no-inner-declarations) +--- +title: no-inner-declarations +layout: doc +rule_type: problem +--- + + In JavaScript, prior to ES6, a function declaration is only allowed in the first level of a program or the body of another function, though parsers sometimes [erroneously accept them elsewhere](https://code.google.com/p/esprima/issues/detail?id=422). This only applies to function declarations; named or anonymous function expressions can occur anywhere an expression is permitted. @@ -69,6 +75,8 @@ This rule has a string option: Examples of **incorrect** code for this rule with the default `"functions"` option: +::: incorrect + ```js /*eslint no-inner-declarations: "error"*/ @@ -93,8 +101,12 @@ class C { } ``` +::: + Examples of **correct** code for this rule with the default `"functions"` option: +::: correct + ```js /*eslint no-inner-declarations: "error"*/ @@ -122,10 +134,14 @@ if (test) { if (foo) var a; ``` +::: + ### both Examples of **incorrect** code for this rule with the `"both"` option: +::: incorrect + ```js /*eslint no-inner-declarations: ["error", "both"]*/ @@ -152,8 +168,12 @@ class C { } ``` +::: + Examples of **correct** code for this rule with the `"both"` option: +::: correct + ```js /*eslint no-inner-declarations: ["error", "both"]*/ @@ -174,6 +194,8 @@ class C { } ``` +::: + ## When Not To Use It -The function declaration portion rule will be rendered obsolete when [block-scoped functions](https://bugzilla.mozilla.org/show_bug.cgi?id=585536) land in ES6, but until then, it should be left on to enforce valid constructions. Disable checking variable declarations when using [block-scoped-var](block-scoped-var.md) or if declaring variables in nested blocks is acceptable despite hoisting. +The function declaration portion rule will be rendered obsolete when [block-scoped functions](https://bugzilla.mozilla.org/show_bug.cgi?id=585536) land in ES6, but until then, it should be left on to enforce valid constructions. Disable checking variable declarations when using [block-scoped-var](block-scoped-var) or if declaring variables in nested blocks is acceptable despite hoisting. diff --git a/eslint/docs/rules/no-invalid-regexp.md b/eslint/docs/src/rules/no-invalid-regexp.md similarity index 86% rename from eslint/docs/rules/no-invalid-regexp.md rename to eslint/docs/src/rules/no-invalid-regexp.md index 478cbee..59fe9dc 100644 --- a/eslint/docs/rules/no-invalid-regexp.md +++ b/eslint/docs/src/rules/no-invalid-regexp.md @@ -1,4 +1,12 @@ -# disallow invalid regular expression strings in `RegExp` constructors (no-invalid-regexp) +--- +title: no-invalid-regexp +layout: doc +rule_type: problem +further_reading: +- https://es5.github.io/#x7.8.5 +--- + + An invalid pattern in a regular expression literal is a `SyntaxError` when the code is parsed, but an invalid string in `RegExp` constructors throws a `SyntaxError` only when the code is executed. @@ -8,6 +16,8 @@ This rule disallows invalid regular expression strings in `RegExp` constructors. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-invalid-regexp: "error"*/ @@ -18,8 +28,12 @@ RegExp('.', 'z') new RegExp('\\') ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-invalid-regexp: "error"*/ @@ -30,6 +44,8 @@ new RegExp this.RegExp('[') ``` +::: + Please note that this rule validates regular expressions per the latest ECMAScript specification, regardless of your parser settings. If you want to allow additional constructor flags for any reason, you can specify them using the `allowConstructorFlags` option. These flags will then be ignored by the rule. @@ -44,6 +60,8 @@ This rule has an object option for exceptions: Examples of **correct** code for this rule with the `{ "allowConstructorFlags": ["a", "z"] }` option: +::: correct + ```js /*eslint no-invalid-regexp: ["error", { "allowConstructorFlags": ["a", "z"] }]*/ @@ -52,6 +70,4 @@ new RegExp('.', 'a') new RegExp('.', 'az') ``` -## Further Reading - -* [Annotated ES5 §7.8.5 - Regular Expression Literals](https://es5.github.io/#x7.8.5) +::: diff --git a/eslint/docs/rules/no-invalid-this.md b/eslint/docs/src/rules/no-invalid-this.md similarity index 88% rename from eslint/docs/rules/no-invalid-this.md rename to eslint/docs/src/rules/no-invalid-this.md index f2f17d4..62c11ba 100644 --- a/eslint/docs/rules/no-invalid-this.md +++ b/eslint/docs/src/rules/no-invalid-this.md @@ -1,12 +1,21 @@ -# Disallow `this` keywords outside of classes or class-like objects. (no-invalid-this) +--- +title: no-invalid-this +layout: doc +rule_type: suggestion +--- + Under the strict mode, `this` keywords outside of classes or class-like objects might be `undefined` and raise a `TypeError`. ## Rule Details -This rule aims to flag usage of `this` keywords outside of classes or class-like objects. +This rule aims to flag usage of `this` keywords in contexts where the value of `this` is `undefined`. + +Top-level `this` in scripts is always considered valid because it refers to the global object regardless of the strict mode. + +Top-level `this` in ECMAScript modules is always considered invalid because its value is `undefined`. -Basically, this rule checks whether or not a function containing `this` keyword is a constructor or a method. +For `this` inside functions, this rule basically checks whether or not the function containing `this` keyword is a constructor or a method. Note that arrow functions have lexical `this`, and that therefore this rule checks their enclosing contexts. This rule judges from following conditions whether or not the function is a constructor: @@ -28,6 +37,7 @@ And this rule allows `this` keywords in functions below: And this rule always allows `this` keywords in the following contexts: +* At the top level of scripts. * In class field initializers. * In class static blocks. @@ -38,15 +48,14 @@ With `"parserOptions": { "sourceType": "module" }` in the ESLint configuration, Examples of **incorrect** code for this rule in strict mode: +::: incorrect + ```js /*eslint no-invalid-this: "error"*/ /*eslint-env es6*/ "use strict"; -this.a = 0; -baz(() => this); - (function() { this.a = 0; baz(() => this); @@ -67,11 +76,6 @@ foo(function() { baz(() => this); }); -obj.foo = () => { - // `this` of arrow functions is the outer scope's. - this.a = 0; -}; - var obj = { aaa: function() { return function foo() { @@ -88,14 +92,21 @@ foo.forEach(function() { }); ``` +::: + Examples of **correct** code for this rule in strict mode: +::: correct + ```js /*eslint no-invalid-this: "error"*/ /*eslint-env es6*/ "use strict"; +this.a = 0; +baz(() => this); + function Foo() { // OK, this is in a legacy style constructor. this.a = 0; @@ -215,6 +226,8 @@ function foo() { } ``` +::: + ## Options This rule has an object option, with one option: @@ -229,6 +242,8 @@ Set `"capIsConstructor"` to `false` if you want those functions to be treated as Examples of **incorrect** code for this rule with `"capIsConstructor"` option set to `false`: +::: incorrect + ```js /*eslint no-invalid-this: ["error", { "capIsConstructor": false }]*/ @@ -251,8 +266,12 @@ Baz = function() { }; ``` +::: + Examples of **correct** code for this rule with `"capIsConstructor"` option set to `false`: +::: correct + ```js /*eslint no-invalid-this: ["error", { "capIsConstructor": false }]*/ @@ -264,6 +283,8 @@ obj.Foo = function Foo() { }; ``` +::: + ## When Not To Use It If you don't want to be notified about usage of `this` keyword outside of classes or class-like objects, you can safely disable this rule. diff --git a/eslint/docs/rules/no-irregular-whitespace.md b/eslint/docs/src/rules/no-irregular-whitespace.md similarity index 78% rename from eslint/docs/rules/no-irregular-whitespace.md rename to eslint/docs/src/rules/no-irregular-whitespace.md index a24de70..3f27133 100644 --- a/eslint/docs/rules/no-irregular-whitespace.md +++ b/eslint/docs/src/rules/no-irregular-whitespace.md @@ -1,4 +1,13 @@ -# disallow irregular whitespace (no-irregular-whitespace) +--- +title: no-irregular-whitespace +layout: doc +rule_type: problem +further_reading: +- https://es5.github.io/#x7.2 +- https://web.archive.org/web/20200414142829/http://timelessrepo.com/json-isnt-a-javascript-subset +--- + + Invalid or irregular whitespace causes issues with ECMAScript 5 parsers and also makes code harder to debug in a similar nature to mixed tabs and spaces. @@ -20,30 +29,32 @@ This rule is aimed at catching invalid whitespace that is not a normal tab and s This rule disallows the following characters except where the options allow: - \u000B - Line Tabulation (\v) - <VT> - \u000C - Form Feed (\f) - <FF> - \u00A0 - No-Break Space - <NBSP> - \u0085 - Next Line - \u1680 - Ogham Space Mark - \u180E - Mongolian Vowel Separator - <MVS> - \ufeff - Zero Width No-Break Space - <BOM> - \u2000 - En Quad - \u2001 - Em Quad - \u2002 - En Space - <ENSP> - \u2003 - Em Space - <EMSP> - \u2004 - Tree-Per-Em - \u2005 - Four-Per-Em - \u2006 - Six-Per-Em - \u2007 - Figure Space - \u2008 - Punctuation Space - <PUNCSP> - \u2009 - Thin Space - \u200A - Hair Space - \u200B - Zero Width Space - <ZWSP> - \u2028 - Line Separator - \u2029 - Paragraph Separator - \u202F - Narrow No-Break Space - \u205f - Medium Mathematical Space - \u3000 - Ideographic Space +```text +\u000B - Line Tabulation (\v) - <VT> +\u000C - Form Feed (\f) - <FF> +\u00A0 - No-Break Space - <NBSP> +\u0085 - Next Line +\u1680 - Ogham Space Mark +\u180E - Mongolian Vowel Separator - <MVS> +\ufeff - Zero Width No-Break Space - <BOM> +\u2000 - En Quad +\u2001 - Em Quad +\u2002 - En Space - <ENSP> +\u2003 - Em Space - <EMSP> +\u2004 - Three-Per-Em +\u2005 - Four-Per-Em +\u2006 - Six-Per-Em +\u2007 - Figure Space +\u2008 - Punctuation Space - <PUNCSP> +\u2009 - Thin Space +\u200A - Hair Space +\u200B - Zero Width Space - <ZWSP> +\u2028 - Line Separator +\u2029 - Paragraph Separator +\u202F - Narrow No-Break Space +\u205f - Medium Mathematical Space +\u3000 - Ideographic Space +``` ## Options @@ -58,6 +69,8 @@ This rule has an object option for exceptions: Examples of **incorrect** code for this rule with the default `{ "skipStrings": true }` option: +::: incorrect + ```js /*eslint no-irregular-whitespace: "error"*/ @@ -103,8 +116,12 @@ function thing() { } ``` +::: + Examples of **correct** code for this rule with the default `{ "skipStrings": true }` option: +::: correct + ```js /*eslint no-irregular-whitespace: "error"*/ @@ -121,10 +138,14 @@ function thing() { } ``` +::: + ### skipComments Examples of additional **correct** code for this rule with the `{ "skipComments": true }` option: +::: correct + ```js /*eslint no-irregular-whitespace: ["error", { "skipComments": true }]*/ @@ -137,10 +158,14 @@ Description <NBSP>: some descriptive text */ ``` +::: + ### skipRegExps Examples of additional **correct** code for this rule with the `{ "skipRegExps": true }` option: +::: correct + ```js /*eslint no-irregular-whitespace: ["error", { "skipRegExps": true }]*/ @@ -149,10 +174,14 @@ function thing() { } ``` +::: + ### skipTemplates Examples of additional **correct** code for this rule with the `{ "skipTemplates": true }` option: +::: correct + ```js /*eslint no-irregular-whitespace: ["error", { "skipTemplates": true }]*/ /*eslint-env es6*/ @@ -162,11 +191,8 @@ function thing() { } ``` +::: + ## When Not To Use It If you decide that you wish to use whitespace other than tabs and spaces outside of strings in your application. - -## Further Reading - -* [ECMA whitespace](https://es5.github.io/#x7.2) -* [JSON whitespace issues](http://timelessrepo.com/json-isnt-a-javascript-subset) diff --git a/eslint/docs/rules/no-iterator.md b/eslint/docs/src/rules/no-iterator.md similarity index 71% rename from eslint/docs/rules/no-iterator.md rename to eslint/docs/src/rules/no-iterator.md index 95b42a9..b0335e8 100644 --- a/eslint/docs/rules/no-iterator.md +++ b/eslint/docs/src/rules/no-iterator.md @@ -1,4 +1,13 @@ -# Disallow Iterator (no-iterator) +--- +title: no-iterator +layout: doc +rule_type: suggestion +further_reading: +- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators +- https://kangax.github.io/es5-compat-table/es6/#Iterators +- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Deprecated_and_obsolete_features#Object_methods +--- + The `__iterator__` property was a SpiderMonkey extension to JavaScript that could be used to create custom iterators that are compatible with JavaScript's `for in` and `for each` constructs. However, this property is now obsolete, so it should not be used. Here's an example of how this used to work: @@ -16,6 +25,8 @@ This rule is aimed at preventing errors that may arise from using the `__iterato Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-iterator: "error"*/ @@ -29,16 +40,16 @@ foo["__iterator__"] = function () {}; ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-iterator: "error"*/ var __iterator__ = foo; // Not using the `__iterator__` property. ``` -## Further Reading - -* [MDN - Iterators and Generators](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators) -* [ECMAScript 6 compatibility table - Iterators](https://kangax.github.io/es5-compat-table/es6/#Iterators) -* [Deprecated and Obsolete Features](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Deprecated_and_obsolete_features#Object_methods) +::: diff --git a/eslint/docs/rules/no-label-var.md b/eslint/docs/src/rules/no-label-var.md similarity index 78% rename from eslint/docs/rules/no-label-var.md rename to eslint/docs/src/rules/no-label-var.md index 9541dea..422538a 100644 --- a/eslint/docs/rules/no-label-var.md +++ b/eslint/docs/src/rules/no-label-var.md @@ -1,4 +1,13 @@ -# Disallow Labels That Are Variables Names (no-label-var) +--- +title: no-label-var +layout: doc +rule_type: suggestion +related_rules: +- no-extra-label +- no-labels +- no-unused-labels +--- + ## Rule Details @@ -6,6 +15,8 @@ This rule aims to create clearer code by disallowing the bad practice of creatin Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-label-var: "error"*/ @@ -18,8 +29,12 @@ x: } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-label-var: "error"*/ @@ -37,12 +52,8 @@ q: } ``` +::: + ## When Not To Use It If you don't want to be notified about usage of labels, then it's safe to disable this rule. - -## Related Rules - -* [no-extra-label](./no-extra-label.md) -* [no-labels](./no-labels.md) -* [no-unused-labels](./no-unused-labels.md) diff --git a/eslint/docs/rules/no-labels.md b/eslint/docs/src/rules/no-labels.md similarity index 92% rename from eslint/docs/rules/no-labels.md rename to eslint/docs/src/rules/no-labels.md index ea46ef0..c8d65c8 100644 --- a/eslint/docs/rules/no-labels.md +++ b/eslint/docs/src/rules/no-labels.md @@ -1,4 +1,13 @@ -# Disallow Labeled Statements (no-labels) +--- +title: no-labels +layout: doc +rule_type: suggestion +related_rules: +- no-extra-label +- no-label-var +- no-unused-labels +--- + Labeled statements in JavaScript are used in conjunction with `break` and `continue` to control flow around multiple loops. For example: @@ -22,6 +31,8 @@ This rule aims to eliminate the use of labeled statements in JavaScript. It will Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-labels: "error"*/ @@ -57,8 +68,12 @@ label: } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-labels: "error"*/ @@ -75,6 +90,8 @@ while (true) { } ``` +::: + ## Options The options allow labels with loop or switch statements: @@ -89,6 +106,8 @@ However, this way is ultra rare, not well-known, so this would be confusing deve Examples of **correct** code for the `{ "allowLoop": true }` option: +::: correct + ```js /*eslint no-labels: ["error", { "allowLoop": true }]*/ @@ -98,10 +117,14 @@ label: } ``` +::: + ### allowSwitch Examples of **correct** code for the `{ "allowSwitch": true }` option: +::: correct + ```js /*eslint no-labels: ["error", { "allowSwitch": true }]*/ @@ -112,12 +135,8 @@ label: } ``` +::: + ## When Not To Use It If you need to use labeled statements everywhere, then you can safely disable this rule. - -## Related Rules - -* [no-extra-label](./no-extra-label.md) -* [no-label-var](./no-label-var.md) -* [no-unused-labels](./no-unused-labels.md) diff --git a/eslint/docs/rules/no-lone-blocks.md b/eslint/docs/src/rules/no-lone-blocks.md similarity index 93% rename from eslint/docs/rules/no-lone-blocks.md rename to eslint/docs/src/rules/no-lone-blocks.md index 49fdda6..22703f8 100644 --- a/eslint/docs/rules/no-lone-blocks.md +++ b/eslint/docs/src/rules/no-lone-blocks.md @@ -1,4 +1,9 @@ -# Disallow Unnecessary Nested Blocks (no-lone-blocks) +--- +title: no-lone-blocks +layout: doc +rule_type: suggestion +--- + In JavaScript, prior to ES6, standalone code blocks delimited by curly braces do not create a new scope and have no use. For example, these curly braces do nothing to `foo`: @@ -16,6 +21,8 @@ This rule aims to eliminate unnecessary and potentially confusing blocks at the Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-lone-blocks: "error"*/ @@ -52,8 +59,12 @@ class C { } ``` +::: + Examples of **correct** code for this rule with ES6 environment: +::: correct + ```js /*eslint no-lone-blocks: "error"*/ /*eslint-env es6*/ @@ -100,8 +111,12 @@ class C { } ``` +::: + Examples of **correct** code for this rule with ES6 environment and strict mode via `"parserOptions": { "sourceType": "module" }` in the ESLint configuration or `"use strict"` directive in the code: +::: correct + ```js /*eslint no-lone-blocks: "error"*/ /*eslint-env es6*/ @@ -112,3 +127,5 @@ Examples of **correct** code for this rule with ES6 environment and strict mode function foo() {} } ``` + +::: diff --git a/eslint/docs/rules/no-lonely-if.md b/eslint/docs/src/rules/no-lonely-if.md similarity index 91% rename from eslint/docs/rules/no-lonely-if.md rename to eslint/docs/src/rules/no-lonely-if.md index 4dab7ef..2b306d4 100644 --- a/eslint/docs/rules/no-lonely-if.md +++ b/eslint/docs/src/rules/no-lonely-if.md @@ -1,4 +1,10 @@ -# disallow `if` statements as the only statement in `else` blocks (no-lonely-if) +--- +title: no-lonely-if +layout: doc +rule_type: suggestion +--- + + If an `if` statement is the only statement in the `else` block, it is often clearer to use an `else if` form. @@ -28,6 +34,8 @@ This rule disallows `if` statements as the only statement in `else` blocks. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-lonely-if: "error"*/ @@ -50,8 +58,12 @@ if (condition) { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-lonely-if: "error"*/ @@ -79,6 +91,8 @@ if (condition) { } ``` +::: + ## When Not To Use It Disable this rule if the code is clearer without requiring the `else if` form. diff --git a/eslint/docs/rules/no-loop-func.md b/eslint/docs/src/rules/no-loop-func.md similarity index 95% rename from eslint/docs/rules/no-loop-func.md rename to eslint/docs/src/rules/no-loop-func.md index f39b868..07e22b5 100644 --- a/eslint/docs/rules/no-loop-func.md +++ b/eslint/docs/src/rules/no-loop-func.md @@ -1,4 +1,9 @@ -# Disallow Functions in Loops (no-loop-func) +--- +title: no-loop-func +layout: doc +rule_type: suggestion +--- + Writing functions within loops tends to result in errors due to the way the function creates a closure around the loop. For example: @@ -34,6 +39,8 @@ This rule disallows any function within a loop that contains unsafe references ( Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-loop-func: "error"*/ /*eslint-env es6*/ @@ -66,8 +73,12 @@ for (let i = 0; i < 10; ++i) { foo = 100; ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-loop-func: "error"*/ /*eslint-env es6*/ @@ -95,3 +106,5 @@ for (let i=10; i; i--) { } //... no modifications of foo after this loop ... ``` + +::: diff --git a/eslint/docs/rules/no-loss-of-precision.md b/eslint/docs/src/rules/no-loss-of-precision.md similarity index 78% rename from eslint/docs/rules/no-loss-of-precision.md rename to eslint/docs/src/rules/no-loss-of-precision.md index 62d0659..2eed801 100644 --- a/eslint/docs/rules/no-loss-of-precision.md +++ b/eslint/docs/src/rules/no-loss-of-precision.md @@ -1,6 +1,12 @@ -# Disallow Number Literals That Lose Precision (no-loss-of-precision) +--- +title: no-loss-of-precision +layout: doc +rule_type: problem +--- -This rule would disallow the use of number literals that immediately lose precision at runtime when converted to a JS `Number` due to 64-bit floating-point rounding. + + +This rule would disallow the use of number literals that lose precision at runtime when converted to a JS `Number` due to 64-bit floating-point rounding. ## Rule Details @@ -8,6 +14,8 @@ In JS, `Number`s are stored as double-precision floating-point numbers according Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-loss-of-precision: "error"*/ @@ -19,8 +27,12 @@ const x = 0X20000000000001 const x = 0X2_000000000_0001; ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-loss-of-precision: "error"*/ @@ -32,3 +44,5 @@ const x = 0x1FFFFFFFFFFFFF const x = 9007199254740991 const x = 9007_1992547409_91 ``` + +::: diff --git a/eslint/docs/rules/no-magic-numbers.md b/eslint/docs/src/rules/no-magic-numbers.md similarity index 93% rename from eslint/docs/rules/no-magic-numbers.md rename to eslint/docs/src/rules/no-magic-numbers.md index dfe21d8..fca63d6 100644 --- a/eslint/docs/rules/no-magic-numbers.md +++ b/eslint/docs/src/rules/no-magic-numbers.md @@ -1,4 +1,9 @@ -# Disallow Magic Numbers (no-magic-numbers) +--- +title: no-magic-numbers +layout: doc +rule_type: suggestion +--- + 'Magic numbers' are numbers that occur multiple times in code without an explicit meaning. They should preferably be replaced by named constants. @@ -15,6 +20,8 @@ are declared as constants to make their meaning explicit. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-magic-numbers: "error"*/ @@ -22,6 +29,10 @@ var dutyFreePrice = 100, finalPrice = dutyFreePrice + (dutyFreePrice * 0.25); ``` +::: + +::: incorrect + ```js /*eslint no-magic-numbers: "error"*/ @@ -30,6 +41,10 @@ var data = ['foo', 'bar', 'baz']; var dataLast = data[2]; ``` +::: + +::: incorrect + ```js /*eslint no-magic-numbers: "error"*/ @@ -38,8 +53,12 @@ var SECONDS; SECONDS = 60; ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-magic-numbers: "error"*/ @@ -49,6 +68,8 @@ var dutyFreePrice = 100, finalPrice = dutyFreePrice + (dutyFreePrice * TAX); ``` +::: + ## Options ### ignore @@ -61,6 +82,8 @@ If it's a string, the text must be parsed as `bigint` literal (e.g., `"100n"`). Examples of **correct** code for the sample `{ "ignore": [1] }` option: +::: correct + ```js /*eslint no-magic-numbers: ["error", { "ignore": [1] }]*/ @@ -68,14 +91,20 @@ var data = ['foo', 'bar', 'baz']; var dataLast = data.length && data[data.length - 1]; ``` +::: + Examples of **correct** code for the sample `{ "ignore": ["1n"] }` option: +::: correct + ```js /*eslint no-magic-numbers: ["error", { "ignore": ["1n"] }]*/ foo(1n); ``` +::: + ### ignoreArrayIndexes A boolean to specify if numbers used in the context of array indexes (e.g., `data[2]`) are considered okay. `false` by default. @@ -88,6 +117,8 @@ Additionally, since the maximum [array length](https://developer.mozilla.org/en- Examples of **correct** code for the `{ "ignoreArrayIndexes": true }` option: +::: correct + ```js /*eslint no-magic-numbers: ["error", { "ignoreArrayIndexes": true }]*/ @@ -108,8 +139,12 @@ a = data[10n]; // same as data[10], 10n will be coerced to "10" a = data[4294967294]; // max array index ``` +::: + Examples of **incorrect** code for the `{ "ignoreArrayIndexes": true }` option: +::: incorrect + ```js /*eslint no-magic-numbers: ["error", { "ignoreArrayIndexes": true }]*/ @@ -128,12 +163,16 @@ a = data[4294967295]; // above the max array index a = data[1e500]; // same as data["Infinity"] ``` +::: + ### ignoreDefaultValues A boolean to specify if numbers used in default value assignments are considered okay. `false` by default. Examples of **correct** code for the `{ "ignoreDefaultValues": true }` option: +::: correct + ```js /*eslint no-magic-numbers: ["error", { "ignoreDefaultValues": true }]*/ @@ -142,6 +181,10 @@ const { tax = 0.25 } = accountancy; function mapParallel(concurrency = 3) { /***/ } ``` +::: + +::: correct + ```js /*eslint no-magic-numbers: ["error", { "ignoreDefaultValues": true }]*/ @@ -149,12 +192,16 @@ let head; [head = 100] = [] ``` +::: + ### enforceConst A boolean to specify if we should check for the const keyword in variable declaration of numbers. `false` by default. Examples of **incorrect** code for the `{ "enforceConst": true }` option: +::: incorrect + ```js /*eslint no-magic-numbers: ["error", { "enforceConst": true }]*/ @@ -164,12 +211,16 @@ var dutyFreePrice = 100, finalPrice = dutyFreePrice + (dutyFreePrice * TAX); ``` +::: + ### detectObjects A boolean to specify if we should detect numbers when setting object properties for example. `false` by default. Examples of **incorrect** code for the `{ "detectObjects": true }` option: +::: incorrect + ```js /*eslint no-magic-numbers: ["error", { "detectObjects": true }]*/ @@ -181,8 +232,12 @@ var dutyFreePrice = 100, finalPrice = dutyFreePrice + (dutyFreePrice * magic.tax); ``` +::: + Examples of **correct** code for the `{ "detectObjects": true }` option: +::: correct + ```js /*eslint no-magic-numbers: ["error", { "detectObjects": true }]*/ @@ -195,3 +250,5 @@ var magic = { var dutyFreePrice = 100, finalPrice = dutyFreePrice + (dutyFreePrice * magic.tax); ``` + +::: diff --git a/eslint/docs/rules/no-misleading-character-class.md b/eslint/docs/src/rules/no-misleading-character-class.md similarity index 94% rename from eslint/docs/rules/no-misleading-character-class.md rename to eslint/docs/src/rules/no-misleading-character-class.md index f6ef2fb..57b3ee6 100644 --- a/eslint/docs/rules/no-misleading-character-class.md +++ b/eslint/docs/src/rules/no-misleading-character-class.md @@ -1,4 +1,12 @@ -# Disallow characters which are made with multiple code points in character class syntax (no-misleading-character-class) +--- +title: no-misleading-character-class +layout: doc +rule_type: problem +--- + + + + Unicode includes the characters which are made with multiple code points. RegExp character class syntax (`/[abc]/`) cannot handle characters which are made by multiple code points as a character; those characters will be dissolved to each code point. For example, `❇️` is made by `❇` (`U+2747`) and VARIATION SELECTOR-16 (`U+FE0F`). If this character is in RegExp character class, it will match to either `❇` (`U+2747`) or VARIATION SELECTOR-16 (`U+FE0F`) rather than `❇️`. @@ -48,6 +56,8 @@ This rule reports the regular expressions which include multiple code point char Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-misleading-character-class: error */ @@ -59,8 +69,12 @@ Examples of **incorrect** code for this rule: /^[👍]$/ ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-misleading-character-class: error */ @@ -68,6 +82,8 @@ Examples of **correct** code for this rule: /^[👍]$/u ``` +::: + ## When Not To Use It You can turn this rule off if you don't want to check RegExp character class syntax for multiple code point characters. diff --git a/eslint/docs/rules/no-mixed-operators.md b/eslint/docs/src/rules/no-mixed-operators.md similarity index 88% rename from eslint/docs/rules/no-mixed-operators.md rename to eslint/docs/src/rules/no-mixed-operators.md index 1dca581..17422cb 100644 --- a/eslint/docs/rules/no-mixed-operators.md +++ b/eslint/docs/src/rules/no-mixed-operators.md @@ -1,12 +1,17 @@ -# Disallow mixes of different operators (no-mixed-operators) +--- +title: no-mixed-operators +layout: doc +rule_type: suggestion +related_rules: +- no-extra-parens +--- + Enclosing complex expressions by parentheses clarifies the developer's intention, which makes the code more readable. This rule warns when different operators are used consecutively without parentheses in an expression. ```js var foo = a && b || c || d; /*BAD: Unexpected mix of '&&' and '||'.*/ -var foo = a && b ? c : d; /*BAD: Unexpected mix of '&&' and '?:'.*/ -var foo = (a && b) ? c : d; /*GOOD*/ var foo = (a && b) || c || d; /*GOOD*/ var foo = a && (b || c || d); /*GOOD*/ ``` @@ -20,31 +25,22 @@ var foo = a && b || c || d; will generate -```sh +```shell 1:13 Unexpected mix of '&&' and '||'. (no-mixed-operators) 1:18 Unexpected mix of '&&' and '||'. (no-mixed-operators) ``` -```js -var foo = a && b ? c : d; -``` - -will generate - -```sh -1:13 Unexpected mix of '&&' and '?:'. (no-mixed-operators) -1:18 Unexpected mix of '&&' and '?:'. (no-mixed-operators) -``` - ## Rule Details This rule checks `BinaryExpression`, `LogicalExpression` and `ConditionalExpression`. -This rule may conflict with [no-extra-parens](no-extra-parens.md) rule. -If you use both this and [no-extra-parens](no-extra-parens.md) rule together, you need to use the `nestedBinaryExpressions` option of [no-extra-parens](no-extra-parens.md) rule. +This rule may conflict with [no-extra-parens](no-extra-parens) rule. +If you use both this and [no-extra-parens](no-extra-parens) rule together, you need to use the `nestedBinaryExpressions` option of [no-extra-parens](no-extra-parens) rule. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-mixed-operators: "error"*/ @@ -52,8 +48,12 @@ var foo = a && b < 0 || c > 0 || d + 1 === 0; var foo = a + b * c; ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-mixed-operators: "error"*/ @@ -65,6 +65,8 @@ var foo = a + (b * c); var foo = (a + b) * c; ``` +::: + ## Options ```json @@ -110,6 +112,8 @@ In this case, this rule checks if bitwise operators and logical operators are mi Examples of **incorrect** code for this rule with `{"groups": [["&", "|", "^", "~", "<<", ">>", ">>>"], ["&&", "||"]]}` option: +::: incorrect + ```js /*eslint no-mixed-operators: ["error", {"groups": [["&", "|", "^", "~", "<<", ">>", ">>>"], ["&&", "||"]]}]*/ @@ -117,6 +121,10 @@ var foo = a && b < 0 || c > 0 || d + 1 === 0; var foo = a & b | c; ``` +::: + +::: incorrect + ```js /*eslint no-mixed-operators: ["error", {"groups": [["&&", "||", "?:"]]}]*/ @@ -127,8 +135,12 @@ var bar = a ? b || c : d; var baz = a ? b : c || d; ``` +::: + Examples of **correct** code for this rule with `{"groups": [["&", "|", "^", "~", "<<", ">>", ">>>"], ["&&", "||"]]}` option: +::: correct + ```js /*eslint no-mixed-operators: ["error", {"groups": [["&", "|", "^", "~", "<<", ">>", ">>>"], ["&&", "||"]]}]*/ @@ -143,6 +155,10 @@ var foo = a + (b * c); var foo = (a + b) * c; ``` +::: + +::: correct + ```js /*eslint no-mixed-operators: ["error", {"groups": [["&&", "||", "?:"]]}]*/ @@ -155,10 +171,14 @@ var baz = a ? b : (c || d); var baz = (a ? b : c) || d; ``` +::: + ### allowSamePrecedence Examples of **correct** code for this rule with `{"allowSamePrecedence": true}` option: +::: correct + ```js /*eslint no-mixed-operators: ["error", {"allowSamePrecedence": true}]*/ @@ -166,8 +186,12 @@ Examples of **correct** code for this rule with `{"allowSamePrecedence": true}` var foo = a + b - c; ``` +::: + Examples of **incorrect** code for this rule with `{"allowSamePrecedence": false}` option: +::: incorrect + ```js /*eslint no-mixed-operators: ["error", {"allowSamePrecedence": false}]*/ @@ -175,8 +199,12 @@ Examples of **incorrect** code for this rule with `{"allowSamePrecedence": false var foo = a + b - c; ``` +::: + Examples of **correct** code for this rule with `{"allowSamePrecedence": false}` option: +::: correct + ```js /*eslint no-mixed-operators: ["error", {"allowSamePrecedence": false}]*/ @@ -184,10 +212,8 @@ Examples of **correct** code for this rule with `{"allowSamePrecedence": false}` var foo = (a + b) - c; ``` +::: + ## When Not To Use It If you don't want to be notified about mixed operators, then it's safe to disable this rule. - -## Related Rules - -* [no-extra-parens](no-extra-parens.md) diff --git a/eslint/docs/rules/no-mixed-requires.md b/eslint/docs/src/rules/no-mixed-requires.md similarity index 96% rename from eslint/docs/rules/no-mixed-requires.md rename to eslint/docs/src/rules/no-mixed-requires.md index c697d04..1f813d9 100644 --- a/eslint/docs/rules/no-mixed-requires.md +++ b/eslint/docs/src/rules/no-mixed-requires.md @@ -1,4 +1,9 @@ -# disallow `require` calls to be mixed with regular variable declarations (no-mixed-requires) +--- +title: no-mixed-requires +layout: doc +rule_type: suggestion +--- + This rule was **deprecated** in ESLint v7.0.0. Please use the corresponding rule in [`eslint-plugin-node`](https://github.com/mysticatea/eslint-plugin-node). @@ -39,6 +44,8 @@ Configuring this rule with one boolean option `true` is deprecated. Examples of **incorrect** code for this rule with the default `{ "grouping": false, "allowCall": false }` options: +::: incorrect + ```js /*eslint no-mixed-requires: "error"*/ @@ -50,8 +57,12 @@ var async = require('async'), eslint = require('eslint'); ``` +::: + Examples of **correct** code for this rule with the default `{ "grouping": false, "allowCall": false }` options: +::: correct + ```js /*eslint no-mixed-requires: "error"*/ @@ -71,10 +82,14 @@ var foo = require('foo' + VERSION), baz = require(); ``` +::: + ### grouping Examples of **incorrect** code for this rule with the `{ "grouping": true }` option: +::: incorrect + ```js /*eslint no-mixed-requires: ["error", { "grouping": true }]*/ @@ -87,10 +102,14 @@ var foo = require('foo'), bar = require(getBarModuleName()); ``` +::: + ### allowCall Examples of **incorrect** code for this rule with the `{ "allowCall": true }` option: +::: incorrect + ```js /*eslint no-mixed-requires: ["error", { "allowCall": true }]*/ @@ -99,8 +118,12 @@ var async = require('async'), eslint = require('eslint'); ``` +::: + Examples of **correct** code for this rule with the `{ "allowCall": true }` option: +::: correct + ```js /*eslint no-mixed-requires: ["error", { "allowCall": true }]*/ @@ -109,6 +132,8 @@ var async = require('async'), eslint = require('eslint'); ``` +::: + ## Known Limitations * The implementation is not aware of any local functions with the name `require` that may shadow Node.js' global `require`. diff --git a/eslint/docs/rules/no-mixed-spaces-and-tabs.md b/eslint/docs/src/rules/no-mixed-spaces-and-tabs.md similarity index 84% rename from eslint/docs/rules/no-mixed-spaces-and-tabs.md rename to eslint/docs/src/rules/no-mixed-spaces-and-tabs.md index 9f156bb..4f34752 100644 --- a/eslint/docs/rules/no-mixed-spaces-and-tabs.md +++ b/eslint/docs/src/rules/no-mixed-spaces-and-tabs.md @@ -1,4 +1,12 @@ -# disallow mixed spaces and tabs for indentation (no-mixed-spaces-and-tabs) +--- +title: no-mixed-spaces-and-tabs +layout: doc +rule_type: layout +further_reading: +- https://www.emacswiki.org/emacs/SmartTabs +--- + + Most code conventions require either tabs or spaces be used for indentation. As such, it's usually an error if a single line of code is indented with both tabs and spaces. @@ -8,6 +16,8 @@ This rule disallows mixed spaces and tabs for indentation. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-mixed-spaces-and-tabs: "error"*/ @@ -26,8 +36,12 @@ function main() { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-mixed-spaces-and-tabs: "error"*/ @@ -37,6 +51,8 @@ function add(x, y) { } ``` +::: + ## Options This rule has a string option. @@ -47,6 +63,8 @@ This rule has a string option. Examples of **correct** code for this rule with the `"smart-tabs"` option: +::: correct + ```js /*eslint no-mixed-spaces-and-tabs: ["error", "smart-tabs"]*/ @@ -59,6 +77,4 @@ function main() { } ``` -## Further Reading - -* [Smart Tabs](https://www.emacswiki.org/emacs/SmartTabs) +::: diff --git a/eslint/docs/rules/no-multi-assign.md b/eslint/docs/src/rules/no-multi-assign.md similarity index 89% rename from eslint/docs/rules/no-multi-assign.md rename to eslint/docs/src/rules/no-multi-assign.md index 14721da..351e4a6 100644 --- a/eslint/docs/rules/no-multi-assign.md +++ b/eslint/docs/src/rules/no-multi-assign.md @@ -1,4 +1,11 @@ -# Disallow Use of Chained Assignment Expressions (no-multi-assign) +--- +title: no-multi-assign +layout: doc +rule_type: suggestion +related_rules: +- max-statements-per-line +--- + Chaining the assignment of variables can lead to unexpected results and be difficult to read. @@ -16,6 +23,8 @@ This rule disallows using multiple assignments within a single statement. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-multi-assign: "error"*/ @@ -34,8 +43,12 @@ class Foo { a = b = "quux"; ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-multi-assign: "error"*/ @@ -58,6 +71,8 @@ a = "quux"; b = "quux"; ``` +::: + ## Options This rule has an object option: @@ -68,6 +83,8 @@ This rule has an object option: Examples of **correct** code for the `{ "ignoreNonDeclaration": true }` option: +::: correct + ```js /*eslint no-multi-assign: ["error", { "ignoreNonDeclaration": true }]*/ @@ -80,8 +97,12 @@ const y = {}; x.one = y.one = 1; ``` +::: + Examples of **incorrect** code for the `{ "ignoreNonDeclaration": true }` option: +::: incorrect + ```js /*eslint no-multi-assign: ["error", { "ignoreNonDeclaration": true }]*/ @@ -94,6 +115,4 @@ class Foo { } ``` -## Related Rules - -* [max-statements-per-line](max-statements-per-line.md) +::: diff --git a/eslint/docs/rules/no-multi-spaces.md b/eslint/docs/src/rules/no-multi-spaces.md similarity index 88% rename from eslint/docs/rules/no-multi-spaces.md rename to eslint/docs/src/rules/no-multi-spaces.md index c4b12e9..0345336 100644 --- a/eslint/docs/rules/no-multi-spaces.md +++ b/eslint/docs/src/rules/no-multi-spaces.md @@ -1,4 +1,18 @@ -# Disallow multiple spaces (no-multi-spaces) +--- +title: no-multi-spaces +layout: doc +rule_type: layout +related_rules: +- key-spacing +- space-infix-ops +- space-in-brackets +- space-in-parens +- space-after-keywords +- space-unary-ops +- space-return-throw-case +--- + + Multiple spaces in a row that are not used for indentation are typically mistakes. For example: @@ -22,6 +36,8 @@ This rule aims to disallow multiple whitespace around logical expressions, condi Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-multi-spaces: "error"*/ @@ -36,8 +52,12 @@ var arr = [1, 2]; a ? b: c ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-multi-spaces: "error"*/ @@ -52,6 +72,8 @@ var arr = [1, 2]; a ? b: c ``` +::: + ## Options This rule's configuration consists of an object with the following properties: @@ -63,6 +85,8 @@ This rule's configuration consists of an object with the following properties: Examples of **incorrect** code for this rule with the `{ "ignoreEOLComments": false }` (default) option: +::: incorrect + ```js /*eslint no-multi-spaces: ["error", { ignoreEOLComments: false }]*/ @@ -72,8 +96,12 @@ var x = 5; /* multiline */ ``` +::: + Examples of **correct** code for this rule with the `{ "ignoreEOLComments": false }` (default) option: +::: correct + ```js /*eslint no-multi-spaces: ["error", { ignoreEOLComments: false }]*/ @@ -83,8 +111,12 @@ var x = 5; /* multiline */ ``` +::: + Examples of **correct** code for this rule with the `{ "ignoreEOLComments": true }` option: +::: correct + ```js /*eslint no-multi-spaces: ["error", { ignoreEOLComments: true }]*/ @@ -98,16 +130,20 @@ var x = 5; /* multiline */ ``` +::: + ### exceptions To avoid contradictions with other rules that require multiple spaces, this rule has an `exceptions` option to ignore certain nodes. This option is an object that expects property names to be AST node types as defined by [ESTree](https://github.com/estree/estree). The easiest way to determine the node types for `exceptions` is to use [AST Explorer](https://astexplorer.net/) with the espree parser. -Only the `Property` node type is ignored by default, because for the [key-spacing](key-spacing.md) rule some alignment options require multiple spaces in properties of object literals. +Only the `Property` node type is ignored by default, because for the [key-spacing](key-spacing) rule some alignment options require multiple spaces in properties of object literals. Examples of **correct** code for the default `"exceptions": { "Property": true }` option: +::: correct + ```js /*eslint no-multi-spaces: "error"*/ /*eslint key-spacing: ["error", { align: "value" }]*/ @@ -118,8 +154,12 @@ var obj = { }; ``` +::: + Examples of **incorrect** code for the `"exceptions": { "Property": false }` option: +::: incorrect + ```js /*eslint no-multi-spaces: ["error", { exceptions: { "Property": false } }]*/ /*eslint key-spacing: ["error", { align: "value" }]*/ @@ -130,16 +170,24 @@ var obj = { }; ``` +::: + Examples of **correct** code for the `"exceptions": { "BinaryExpression": true }` option: +::: correct + ```js /*eslint no-multi-spaces: ["error", { exceptions: { "BinaryExpression": true } }]*/ var a = 1 * 2; ``` +::: + Examples of **correct** code for the `"exceptions": { "VariableDeclarator": true }` option: +::: correct + ```js /*eslint no-multi-spaces: ["error", { exceptions: { "VariableDeclarator": true } }]*/ @@ -147,8 +195,12 @@ var someVar = 'foo'; var someOtherVar = 'barBaz'; ``` +::: + Examples of **correct** code for the `"exceptions": { "ImportDeclaration": true }` option: +::: correct + ```js /*eslint no-multi-spaces: ["error", { exceptions: { "ImportDeclaration": true } }]*/ @@ -156,16 +208,8 @@ import mod from 'mod'; import someOtherMod from 'some-other-mod'; ``` +::: + ## When Not To Use It If you don't want to check and disallow multiple spaces, then you should turn this rule off. - -## Related Rules - -* [key-spacing](key-spacing.md) -* [space-infix-ops](space-infix-ops.md) -* [space-in-brackets](space-in-brackets.md) (deprecated) -* [space-in-parens](space-in-parens.md) -* [space-after-keywords](space-after-keywords.md) -* [space-unary-ops](space-unary-ops.md) -* [space-return-throw-case](space-return-throw-case.md) diff --git a/eslint/docs/rules/no-multi-str.md b/eslint/docs/src/rules/no-multi-str.md similarity index 86% rename from eslint/docs/rules/no-multi-str.md rename to eslint/docs/src/rules/no-multi-str.md index 2796bc8..c118a51 100644 --- a/eslint/docs/rules/no-multi-str.md +++ b/eslint/docs/src/rules/no-multi-str.md @@ -1,4 +1,9 @@ -# Disallow Multiline Strings (no-multi-str) +--- +title: no-multi-str +layout: doc +rule_type: suggestion +--- + It's possible to create multiline strings in JavaScript by using a slash before a newline, such as: @@ -15,6 +20,8 @@ This rule is aimed at preventing the use of multiline strings. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-multi-str: "error"*/ @@ -22,8 +29,12 @@ var x = "some very \ long text"; ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-multi-str: "error"*/ @@ -32,3 +43,5 @@ var x = "some very long text"; var x = "some very " + "long text"; ``` + +::: diff --git a/eslint/docs/rules/no-multiple-empty-lines.md b/eslint/docs/src/rules/no-multiple-empty-lines.md similarity index 84% rename from eslint/docs/rules/no-multiple-empty-lines.md rename to eslint/docs/src/rules/no-multiple-empty-lines.md index 1a04841..8ca5d23 100644 --- a/eslint/docs/rules/no-multiple-empty-lines.md +++ b/eslint/docs/src/rules/no-multiple-empty-lines.md @@ -1,4 +1,10 @@ -# disallow multiple empty lines (no-multiple-empty-lines) +--- +title: no-multiple-empty-lines +layout: doc +rule_type: layout +--- + + Some developers prefer to have multiple blank lines removed, while others feel that it helps improve readability. Whitespace is useful for separating logical sections of code, but excess whitespace takes up more of the screen. @@ -10,61 +16,72 @@ This rule aims to reduce the scrolling required when reading through your code. This rule has an object option: -- `"max"` (default: `2`) enforces a maximum number of consecutive empty lines. -- `"maxEOF"` enforces a maximum number of consecutive empty lines at the end of files. -- `"maxBOF"` enforces a maximum number of consecutive empty lines at the beginning of files. +* `"max"` (default: `2`) enforces a maximum number of consecutive empty lines. +* `"maxEOF"` enforces a maximum number of consecutive empty lines at the end of files. +* `"maxBOF"` enforces a maximum number of consecutive empty lines at the beginning of files. ### max Examples of **incorrect** code for this rule with the default `{ "max": 2 }` option: +::: incorrect + ```js /*eslint no-multiple-empty-lines: "error"*/ var foo = 5; - var bar = 3; ``` +::: + Examples of **correct** code for this rule with the default `{ "max": 2 }` option: +::: correct + ```js /*eslint no-multiple-empty-lines: "error"*/ var foo = 5; - var bar = 3; ``` +::: + ### maxEOF Examples of **incorrect** code for this rule with the `{ max: 2, maxEOF: 0 }` options: +::: incorrect + ```js /*eslint no-multiple-empty-lines: ["error", { "max": 2, "maxEOF": 0 }]*/ var foo = 5; - var bar = 3; - ``` +::: + Examples of **correct** code for this rule with the `{ max: 2, maxEOF: 0 }` options: +::: correct + ```js /*eslint no-multiple-empty-lines: ["error", { "max": 2, "maxEOF": 0 }]*/ var foo = 5; - var bar = 3; ``` +::: + **Note**: Although this ensures zero empty lines at the EOF, most editors will still show one empty line at the end if the file ends with a line break, as illustrated below. There is no empty line at the end of a file after the last `\n`, although editors may show an additional line. A true additional line would be represented by `\n\n`. **Incorrect**: @@ -96,27 +113,32 @@ var bar = 3; Examples of **incorrect** code for this rule with the `{ max: 2, maxBOF: 1 }` options: +::: incorrect + ```js /*eslint no-multiple-empty-lines: ["error", { "max": 2, "maxBOF": 1 }]*/ - var foo = 5; - var bar = 3; ``` +::: + Examples of **correct** code for this rule with the `{ max: 2, maxBOF: 1 }` options: +::: correct + ```js /*eslint no-multiple-empty-lines: ["error", { "max": 2, "maxBOF": 1}]*/ var foo = 5; - var bar = 3; ``` +::: + ## When Not To Use It If you do not care about extra blank lines, turn this off. diff --git a/eslint/docs/rules/no-native-reassign.md b/eslint/docs/src/rules/no-native-reassign.md similarity index 86% rename from eslint/docs/rules/no-native-reassign.md rename to eslint/docs/src/rules/no-native-reassign.md index bfb511d..226a173 100644 --- a/eslint/docs/rules/no-native-reassign.md +++ b/eslint/docs/src/rules/no-native-reassign.md @@ -1,6 +1,15 @@ -# Disallow Reassignment of Native Objects (no-native-reassign) +--- +title: no-native-reassign +layout: doc +rule_type: suggestion +related_rules: +- no-extend-native +- no-redeclare +- no-shadow +--- -This rule was **deprecated** in ESLint v3.3.0 and replaced by the [no-global-assign](no-global-assign.md) rule. + +This rule was **deprecated** in ESLint v3.3.0 and replaced by the [no-global-assign](no-global-assign) rule. JavaScript environments contain a number of built-in global variables, such as `window` in browsers and `process` in Node.js. In almost all cases, you don't want to assign a value to these global variables as doing so could result in losing access to important functionality. For example, you probably don't want to do this in browser code: @@ -21,6 +30,8 @@ ESLint has the capability to configure global variables as read-only. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-native-reassign: "error"*/ @@ -28,6 +39,10 @@ Object = null undefined = 1 ``` +::: + +::: incorrect + ```js /*eslint no-native-reassign: "error"*/ /*eslint-env browser*/ @@ -37,6 +52,10 @@ length = 1 top = 1 ``` +::: + +::: incorrect + ```js /*eslint no-native-reassign: "error"*/ /*global a:readonly*/ @@ -44,8 +63,12 @@ top = 1 a = 1 ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-native-reassign: "error"*/ @@ -54,6 +77,10 @@ var b = 1 b = 2 ``` +::: + +::: correct + ```js /*eslint no-native-reassign: "error"*/ /*eslint-env browser*/ @@ -61,6 +88,10 @@ b = 2 onload = function() {} ``` +::: + +::: correct + ```js /*eslint no-native-reassign: "error"*/ /*global a:writable*/ @@ -68,6 +99,8 @@ onload = function() {} a = 1 ``` +::: + ## Options This rule accepts an `exceptions` option, which can be used to specify a list of builtins for which reassignments will be allowed: @@ -83,9 +116,3 @@ This rule accepts an `exceptions` option, which can be used to specify a list of ## When Not To Use It If you are trying to override one of the native objects. - -## Related Rules - -* [no-extend-native](no-extend-native.md) -* [no-redeclare](no-redeclare.md) -* [no-shadow](no-shadow.md) diff --git a/eslint/docs/rules/no-negated-condition.md b/eslint/docs/src/rules/no-negated-condition.md similarity index 88% rename from eslint/docs/rules/no-negated-condition.md rename to eslint/docs/src/rules/no-negated-condition.md index 58addae..ab9e226 100644 --- a/eslint/docs/rules/no-negated-condition.md +++ b/eslint/docs/src/rules/no-negated-condition.md @@ -1,4 +1,9 @@ -# disallow negated conditions (no-negated-condition) +--- +title: no-negated-condition +layout: doc +rule_type: suggestion +--- + Negated conditions are more difficult to understand. Code can be made more readable by inverting the condition instead. @@ -11,6 +16,8 @@ This rule disallows negated conditions in either of the following: Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-negated-condition: "error"*/ @@ -35,8 +42,12 @@ if (a !== b) { !a ? c : b ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-negated-condition: "error"*/ @@ -56,3 +67,5 @@ if (a != b) { a ? b : c ``` + +::: diff --git a/eslint/docs/rules/no-negated-in-lhs.md b/eslint/docs/src/rules/no-negated-in-lhs.md similarity index 86% rename from eslint/docs/rules/no-negated-in-lhs.md rename to eslint/docs/src/rules/no-negated-in-lhs.md index dd3d422..da39b05 100644 --- a/eslint/docs/rules/no-negated-in-lhs.md +++ b/eslint/docs/src/rules/no-negated-in-lhs.md @@ -1,8 +1,11 @@ -# disallow negating the left operand in `in` expressions (no-negated-in-lhs) +--- +title: no-negated-in-lhs +layout: doc +rule_type: problem +--- -This rule was **deprecated** in ESLint v3.3.0 and replaced by the [no-unsafe-negation](no-unsafe-negation.md) rule. -## Rule Details +This rule was **deprecated** in ESLint v3.3.0 and replaced by the [no-unsafe-negation](no-unsafe-negation) rule. Just as developers might type `-a + b` when they mean `-(a + b)` for the negative of a sum, they might type `!key in object` by mistake when they almost certainly mean `!(key in object)` to test that a key is not in an object. @@ -12,6 +15,8 @@ This rule disallows negating the left operand in `in` expressions. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-negated-in-lhs: "error"*/ @@ -21,8 +26,12 @@ if(!key in object) { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-negated-in-lhs: "error"*/ @@ -36,6 +45,8 @@ if(('' + !key) in object) { } ``` +::: + ## When Not To Use It Never. diff --git a/eslint/docs/rules/no-nested-ternary.md b/eslint/docs/src/rules/no-nested-ternary.md similarity index 80% rename from eslint/docs/rules/no-nested-ternary.md rename to eslint/docs/src/rules/no-nested-ternary.md index 8c9cb0d..9716be8 100644 --- a/eslint/docs/rules/no-nested-ternary.md +++ b/eslint/docs/src/rules/no-nested-ternary.md @@ -1,4 +1,12 @@ -# disallow nested ternary expressions (no-nested-ternary) +--- +title: no-nested-ternary +layout: doc +rule_type: suggestion +related_rules: +- no-ternary +- no-unneeded-ternary +--- + Nesting ternary expressions can make code more difficult to understand. @@ -12,6 +20,8 @@ The `no-nested-ternary` rule disallows nested ternary expressions. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-nested-ternary: "error"*/ @@ -20,8 +30,12 @@ var thing = foo ? bar : baz === qux ? quxx : foobar; foo ? baz === qux ? quxx() : foobar() : bar(); ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-nested-ternary: "error"*/ @@ -38,7 +52,4 @@ if (foo) { } ``` -## Related Rules - -* [no-ternary](no-ternary.md) -* [no-unneeded-ternary](no-unneeded-ternary.md) +::: diff --git a/eslint/docs/rules/no-new-func.md b/eslint/docs/src/rules/no-new-func.md similarity index 94% rename from eslint/docs/rules/no-new-func.md rename to eslint/docs/src/rules/no-new-func.md index 7bdfc9e..abe4d00 100644 --- a/eslint/docs/rules/no-new-func.md +++ b/eslint/docs/src/rules/no-new-func.md @@ -1,4 +1,9 @@ -# Disallow Function Constructor (no-new-func) +--- +title: no-new-func +layout: doc +rule_type: suggestion +--- + It's possible to create functions in JavaScript from strings at runtime using the `Function` constructor, such as: @@ -18,6 +23,8 @@ This error is raised to highlight the use of a bad practice. By passing a string Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-new-func: "error"*/ @@ -29,8 +36,12 @@ var x = Function.bind(null, "a", "b", "return a + b")(); var f = Function.bind(null, "a", "b", "return a + b"); // assuming that the result of Function.bind(...) will be eventually called. ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-new-func: "error"*/ @@ -39,6 +50,8 @@ var x = function (a, b) { }; ``` +::: + ## When Not To Use It In more advanced cases where you really need to use the `Function` constructor. diff --git a/eslint/docs/rules/no-new-object.md b/eslint/docs/src/rules/no-new-object.md similarity index 87% rename from eslint/docs/rules/no-new-object.md rename to eslint/docs/src/rules/no-new-object.md index aef055c..377a682 100644 --- a/eslint/docs/rules/no-new-object.md +++ b/eslint/docs/src/rules/no-new-object.md @@ -1,4 +1,12 @@ -# disallow `Object` constructors (no-new-object) +--- +title: no-new-object +layout: doc +rule_type: suggestion +related_rules: +- no-array-constructor +- no-new-wrappers +--- + The `Object` constructor is used to create new generic objects in JavaScript, such as: @@ -22,6 +30,8 @@ This rule disallows `Object` constructors. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-new-object: "error"*/ @@ -30,8 +40,12 @@ var myObject = new Object(); new Object(); ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-new-object: "error"*/ @@ -43,11 +57,8 @@ var Object = function Object() {}; new Object(); ``` +::: + ## When Not To Use It If you wish to allow the use of the `Object` constructor, you can safely turn this rule off. - -## Related Rules - -* [no-array-constructor](no-array-constructor.md) -* [no-new-wrappers](no-new-wrappers.md) diff --git a/eslint/docs/rules/no-new-require.md b/eslint/docs/src/rules/no-new-require.md similarity index 92% rename from eslint/docs/rules/no-new-require.md rename to eslint/docs/src/rules/no-new-require.md index 6cf1242..f168795 100644 --- a/eslint/docs/rules/no-new-require.md +++ b/eslint/docs/src/rules/no-new-require.md @@ -1,4 +1,9 @@ -# Disallow new require (no-new-require) +--- +title: no-new-require +layout: doc +rule_type: suggestion +--- + This rule was **deprecated** in ESLint v7.0.0. Please use the corresponding rule in [`eslint-plugin-node`](https://github.com/mysticatea/eslint-plugin-node). @@ -28,14 +33,20 @@ This rule aims to eliminate use of the `new require` expression. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-new-require: "error"*/ var appHeader = new require('app-header'); ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-new-require: "error"*/ @@ -43,6 +54,8 @@ var AppHeader = require('app-header'); var appHeader = new AppHeader(); ``` +::: + ## When Not To Use It If you are using a custom implementation of `require` and your code will never be used in projects where a standard `require` (CommonJS, Node.js, AMD) is expected, you can safely turn this rule off. diff --git a/eslint/docs/rules/no-new-symbol.md b/eslint/docs/src/rules/no-new-symbol.md similarity index 80% rename from eslint/docs/rules/no-new-symbol.md rename to eslint/docs/src/rules/no-new-symbol.md index 66167cf..f182f27 100644 --- a/eslint/docs/rules/no-new-symbol.md +++ b/eslint/docs/src/rules/no-new-symbol.md @@ -1,4 +1,12 @@ -# Disallow Symbol Constructor (no-new-symbol) +--- +title: no-new-symbol +layout: doc +rule_type: problem +further_reading: +- https://www.ecma-international.org/ecma-262/6.0/#sec-symbol-objects +--- + + `Symbol` is not intended to be used with the `new` operator, but to be called as a function. @@ -16,6 +24,8 @@ This rule is aimed at preventing the accidental calling of `Symbol` with the `ne Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-new-symbol: "error"*/ /*eslint-env es6*/ @@ -23,15 +33,18 @@ Examples of **incorrect** code for this rule: var foo = new Symbol('foo'); ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-new-symbol: "error"*/ /*eslint-env es6*/ var foo = Symbol('foo'); - // Ignores shadowed Symbol. function bar(Symbol) { const baz = new Symbol("baz"); @@ -39,10 +52,8 @@ function bar(Symbol) { ``` +::: + ## When Not To Use It This rule should not be used in ES3/5 environments. - -## Further Reading - -* [Symbol Objects specification](https://www.ecma-international.org/ecma-262/6.0/#sec-symbol-objects) diff --git a/eslint/docs/rules/no-new-wrappers.md b/eslint/docs/src/rules/no-new-wrappers.md similarity index 90% rename from eslint/docs/rules/no-new-wrappers.md rename to eslint/docs/src/rules/no-new-wrappers.md index 45247e5..b15488d 100644 --- a/eslint/docs/rules/no-new-wrappers.md +++ b/eslint/docs/src/rules/no-new-wrappers.md @@ -1,4 +1,14 @@ -# Disallow Primitive Wrapper Instances (no-new-wrappers) +--- +title: no-new-wrappers +layout: doc +rule_type: suggestion +related_rules: +- no-array-constructor +- no-new-object +further_reading: +- https://www.inkling.com/read/javascript-definitive-guide-david-flanagan-6th/chapter-3/wrapper-objects +--- + There are three primitive types in JavaScript that have wrapper objects: string, number, and boolean. These are represented by the constructors `String`, `Number`, and `Boolean`, respectively. The primitive wrapper types are used whenever one of these primitive values is read, providing them with object-like capabilities such as methods. Behind the scenes, an object of the associated wrapper type is created and then destroyed, which is why you can call methods on primitive values, such as: @@ -41,6 +51,8 @@ This rule aims to eliminate the use of `String`, `Number`, and `Boolean` with th Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-new-wrappers: "error"*/ @@ -53,8 +65,12 @@ var numberObject = new Number; var booleanObject = new Boolean; ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-new-wrappers: "error"*/ @@ -64,15 +80,8 @@ var num = Number(someValue); var object = new MyString(); ``` +::: + ## When Not To Use It If you want to allow the use of primitive wrapper objects, then you can safely disable this rule. - -## Further Reading - -* [Wrapper objects](https://www.inkling.com/read/javascript-definitive-guide-david-flanagan-6th/chapter-3/wrapper-objects) - -## Related Rules - -* [no-array-constructor](no-array-constructor.md) -* [no-new-object](no-new-object.md) diff --git a/eslint/docs/rules/no-new.md b/eslint/docs/src/rules/no-new.md similarity index 90% rename from eslint/docs/rules/no-new.md rename to eslint/docs/src/rules/no-new.md index 19ae097..15f4b9e 100644 --- a/eslint/docs/rules/no-new.md +++ b/eslint/docs/src/rules/no-new.md @@ -1,4 +1,9 @@ -# Disallow new For Side Effects (no-new) +--- +title: no-new +layout: doc +rule_type: suggestion +--- + The goal of using `new` with a constructor is typically to create an object of a particular type and store that object in a variable, such as: @@ -20,14 +25,20 @@ This rule is aimed at maintaining consistency and convention by disallowing cons Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-new: "error"*/ new Thing(); ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-new: "error"*/ @@ -35,3 +46,5 @@ var thing = new Thing(); Thing(); ``` + +::: diff --git a/eslint/docs/rules/no-nonoctal-decimal-escape.md b/eslint/docs/src/rules/no-nonoctal-decimal-escape.md similarity index 81% rename from eslint/docs/rules/no-nonoctal-decimal-escape.md rename to eslint/docs/src/rules/no-nonoctal-decimal-escape.md index 930b555..ec267e1 100644 --- a/eslint/docs/rules/no-nonoctal-decimal-escape.md +++ b/eslint/docs/src/rules/no-nonoctal-decimal-escape.md @@ -1,4 +1,16 @@ -# Disallow `\8` and `\9` escape sequences in string literals (no-nonoctal-decimal-escape) +--- +title: no-nonoctal-decimal-escape +layout: doc +rule_type: suggestion +related_rules: +- no-octal-escape +further_reading: +- https://tc39.es/ecma262/#prod-annexB-NonOctalDecimalEscapeSequence +--- + + + + Although not being specified in the language until ECMAScript 2021, `\8` and `\9` escape sequences in string literals were allowed in most JavaScript engines, and treated as "useless" escapes: @@ -19,6 +31,8 @@ This rule disallows `\8` and `\9` escape sequences in string literals. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-nonoctal-decimal-escape: "error"*/ @@ -35,8 +49,12 @@ var baz = "Don't use \8 and \9 escapes."; var quux = "\0\8"; ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-nonoctal-decimal-escape: "error"*/ @@ -53,10 +71,4 @@ var baz = "Don't use \\8 and \\9 escapes."; var quux = "\0\u0038"; ``` -## Further Reading - -* [NonOctalDecimalEscapeSequence](https://tc39.es/ecma262/#prod-annexB-NonOctalDecimalEscapeSequence) in ECMAScript specification - -## Related Rules - -* [no-octal-escape](no-octal-escape.md) +::: diff --git a/eslint/docs/rules/no-obj-calls.md b/eslint/docs/src/rules/no-obj-calls.md similarity index 92% rename from eslint/docs/rules/no-obj-calls.md rename to eslint/docs/src/rules/no-obj-calls.md index 7c8f715..78f4de0 100644 --- a/eslint/docs/rules/no-obj-calls.md +++ b/eslint/docs/src/rules/no-obj-calls.md @@ -1,4 +1,12 @@ -# disallow calling global object properties as functions (no-obj-calls) +--- +title: no-obj-calls +layout: doc +rule_type: problem +further_reading: +- https://es5.github.io/#x15.8 +--- + + ECMAScript provides several global objects that are intended to be used as-is. Some of these objects look as if they could be constructors due their capitalization (such as `Math` and `JSON`) but will throw an error if you try to execute them as functions. @@ -22,6 +30,8 @@ This rule also disallows using these objects as constructors with the `new` oper Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-obj-calls: "error"*/ /*eslint-env es2017*/ @@ -43,8 +53,12 @@ var atomics = Atomics(); var newAtomics = new Atomics(); ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-obj-calls: "error"*/ /*eslint-env es2017*/ @@ -60,6 +74,4 @@ var value = Reflect.get({ x: 1, y: 2 }, "x"); var first = Atomics.load(foo, 0); ``` -## Further Reading - -* [The Math Object](https://es5.github.io/#x15.8) +::: diff --git a/eslint/docs/rules/no-octal-escape.md b/eslint/docs/src/rules/no-octal-escape.md similarity index 86% rename from eslint/docs/rules/no-octal-escape.md rename to eslint/docs/src/rules/no-octal-escape.md index f595217..38fa4fc 100644 --- a/eslint/docs/rules/no-octal-escape.md +++ b/eslint/docs/src/rules/no-octal-escape.md @@ -1,4 +1,9 @@ -# disallow octal escape sequences in string literals (no-octal-escape) +--- +title: no-octal-escape +layout: doc +rule_type: suggestion +--- + As of the ECMAScript 5 specification, octal escape sequences in string literals are deprecated and should not be used. Unicode escape sequences should be used instead. @@ -14,14 +19,20 @@ If ESLint parses code in strict mode, the parser (instead of this rule) reports Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-octal-escape: "error"*/ var foo = "Copyright \251"; ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-octal-escape: "error"*/ @@ -29,3 +40,5 @@ var foo = "Copyright \u00A9"; // unicode var foo = "Copyright \xA9"; // hexadecimal ``` + +::: diff --git a/eslint/docs/rules/no-octal.md b/eslint/docs/src/rules/no-octal.md similarity index 87% rename from eslint/docs/rules/no-octal.md rename to eslint/docs/src/rules/no-octal.md index a84fcce..2c961a4 100644 --- a/eslint/docs/rules/no-octal.md +++ b/eslint/docs/src/rules/no-octal.md @@ -1,4 +1,10 @@ -# disallow octal literals (no-octal) +--- +title: no-octal +layout: doc +rule_type: suggestion +--- + + Octal literals are numerals that begin with a leading zero, such as: @@ -16,6 +22,8 @@ If ESLint parses code in strict mode, the parser (instead of this rule) reports Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-octal: "error"*/ @@ -23,14 +31,20 @@ var num = 071; var result = 5 + 07; ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-octal: "error"*/ var num = "071"; ``` +::: + ## Compatibility * **JSHint**: W115 diff --git a/eslint/docs/rules/no-param-reassign.md b/eslint/docs/src/rules/no-param-reassign.md similarity index 91% rename from eslint/docs/rules/no-param-reassign.md rename to eslint/docs/src/rules/no-param-reassign.md index 29952c3..db740ea 100644 --- a/eslint/docs/rules/no-param-reassign.md +++ b/eslint/docs/src/rules/no-param-reassign.md @@ -1,4 +1,11 @@ -# Disallow Reassignment of Function Parameters (no-param-reassign) +--- +title: no-param-reassign +layout: doc +rule_type: suggestion +further_reading: +- https://spin.atomicobject.com/2011/04/10/javascript-don-t-reassign-your-function-arguments/ +--- + Assignment to variables declared as function parameters can be misleading and lead to confusing behavior, as modifying function parameters will also mutate the `arguments` object. Often, assignment to function parameters is unintended and indicative of a mistake or programmer error. @@ -10,6 +17,8 @@ This rule aims to prevent unintended behavior caused by modification or reassign Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-param-reassign: "error"*/ @@ -30,8 +39,12 @@ function foo(bar) { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-param-reassign: "error"*/ @@ -40,6 +53,8 @@ function foo(bar) { } ``` +::: + ## Options This rule takes one option, an object, with a boolean property `"props"`, and arrays `"ignorePropertyModificationsFor"` and `"ignorePropertyModificationsForRegex"`. `"props"` is `false` by default. If `"props"` is set to `true`, this rule warns against the modification of parameter properties unless they're included in `"ignorePropertyModificationsFor"` or `"ignorePropertyModificationsForRegex"`, which is an empty array by default. @@ -48,6 +63,8 @@ This rule takes one option, an object, with a boolean property `"props"`, and a Examples of **correct** code for the default `{ "props": false }` option: +::: correct + ```js /*eslint no-param-reassign: ["error", { "props": false }]*/ @@ -72,8 +89,12 @@ function foo(bar) { } ``` +::: + Examples of **incorrect** code for the `{ "props": true }` option: +::: incorrect + ```js /*eslint no-param-reassign: ["error", { "props": true }]*/ @@ -98,8 +119,12 @@ function foo(bar) { } ``` +::: + Examples of **correct** code for the `{ "props": true }` option with `"ignorePropertyModificationsFor"` set: +::: correct + ```js /*eslint no-param-reassign: ["error", { "props": true, "ignorePropertyModificationsFor": ["bar"] }]*/ @@ -124,8 +149,12 @@ function foo(bar) { } ``` +::: + Examples of **correct** code for the `{ "props": true }` option with `"ignorePropertyModificationsForRegex"` set: +::: correct + ```js /*eslint no-param-reassign: ["error", { "props": true, "ignorePropertyModificationsForRegex": ["^bar"] }]*/ @@ -150,10 +179,8 @@ function foo(barBaz) { } ``` +::: + ## When Not To Use It If you want to allow assignment to function parameters, then you can safely disable this rule. - -## Further Reading - -* [JavaScript: Don’t Reassign Your Function Arguments](https://spin.atomicobject.com/2011/04/10/javascript-don-t-reassign-your-function-arguments/) diff --git a/eslint/docs/rules/no-path-concat.md b/eslint/docs/src/rules/no-path-concat.md similarity index 95% rename from eslint/docs/rules/no-path-concat.md rename to eslint/docs/src/rules/no-path-concat.md index fddf27b..ebde85c 100644 --- a/eslint/docs/rules/no-path-concat.md +++ b/eslint/docs/src/rules/no-path-concat.md @@ -1,4 +1,9 @@ -# Disallow string concatenation when using `__dirname` and `__filename` (no-path-concat) +--- +title: no-path-concat +layout: doc +rule_type: suggestion +--- + This rule was **deprecated** in ESLint v7.0.0. Please use the corresponding rule in [`eslint-plugin-node`](https://github.com/mysticatea/eslint-plugin-node). @@ -30,6 +35,8 @@ This rule aims to prevent string concatenation of directory paths in Node.js Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-path-concat: "error"*/ @@ -39,14 +46,20 @@ var fullPath = __filename + "/foo.js"; ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-path-concat: "error"*/ var fullPath = dirname + "/foo.js"; ``` +::: + ## When Not To Use It If you want to allow string concatenation of path names. diff --git a/eslint/docs/rules/no-plusplus.md b/eslint/docs/src/rules/no-plusplus.md similarity index 91% rename from eslint/docs/rules/no-plusplus.md rename to eslint/docs/src/rules/no-plusplus.md index e1b1ca3..47a1038 100644 --- a/eslint/docs/rules/no-plusplus.md +++ b/eslint/docs/src/rules/no-plusplus.md @@ -1,4 +1,9 @@ -# disallow the unary operators `++` and `--` (no-plusplus) +--- +title: no-plusplus +layout: doc +rule_type: suggestion +--- + Because the unary `++` and `--` operators are subject to automatic semicolon insertion, differences in whitespace can change semantics of source code. @@ -27,6 +32,8 @@ This rule disallows the unary operators `++` and `--`. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-plusplus: "error"*/ @@ -41,8 +48,12 @@ for (i = 0; i < l; i++) { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-plusplus: "error"*/ @@ -57,6 +68,8 @@ for (i = 0; i < l; i += 1) { } ``` +::: + ## Options This rule has an object option. @@ -67,6 +80,8 @@ This rule has an object option. Examples of **correct** code for this rule with the `{ "allowForLoopAfterthoughts": true }` option: +::: correct + ```js /*eslint no-plusplus: ["error", { "allowForLoopAfterthoughts": true }]*/ @@ -83,8 +98,12 @@ for (i = 0, j = l; i < l; i++, j--) { } ``` +::: + Examples of **incorrect** code for this rule with the `{ "allowForLoopAfterthoughts": true }` option: +::: incorrect + ```js /*eslint no-plusplus: ["error", { "allowForLoopAfterthoughts": true }]*/ @@ -98,3 +117,5 @@ for (i = l; i--;) { for (i = 0; i < l;) i++; ``` + +::: diff --git a/eslint/docs/rules/no-process-env.md b/eslint/docs/src/rules/no-process-env.md similarity index 77% rename from eslint/docs/rules/no-process-env.md rename to eslint/docs/src/rules/no-process-env.md index 4655e96..a08bc25 100644 --- a/eslint/docs/rules/no-process-env.md +++ b/eslint/docs/src/rules/no-process-env.md @@ -1,4 +1,12 @@ -# Disallow process.env (no-process-env) +--- +title: no-process-env +layout: doc +rule_type: suggestion +further_reading: +- https://stackoverflow.com/questions/5869216/how-to-store-node-js-deployment-settings-configuration-files +- https://blog.benhall.me.uk/2012/02/storing-application-config-data-in/ +--- + This rule was **deprecated** in ESLint v7.0.0. Please use the corresponding rule in [`eslint-plugin-node`](https://github.com/mysticatea/eslint-plugin-node). @@ -10,6 +18,8 @@ This rule is aimed at discouraging use of `process.env` to avoid global dependen Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-process-env: "error"*/ @@ -18,8 +28,12 @@ if(process.env.NODE_ENV === "development") { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-process-env: "error"*/ @@ -30,11 +44,8 @@ if(config.env === "development") { } ``` +::: + ## When Not To Use It If you prefer to use `process.env` throughout your project to retrieve values from environment variables, then you can safely disable this rule. - -## Further Reading - -* [How to store Node.js deployment settings/configuration files? - Stack Overflow](https://stackoverflow.com/questions/5869216/how-to-store-node-js-deployment-settings-configuration-files) -* [Storing Node.js application config data - Ben Hall's blog](https://blog.benhall.me.uk/2012/02/storing-application-config-data-in/) diff --git a/eslint/docs/rules/no-process-exit.md b/eslint/docs/src/rules/no-process-exit.md similarity index 95% rename from eslint/docs/rules/no-process-exit.md rename to eslint/docs/src/rules/no-process-exit.md index 54f2661..f224218 100644 --- a/eslint/docs/rules/no-process-exit.md +++ b/eslint/docs/src/rules/no-process-exit.md @@ -1,4 +1,9 @@ -# Disallow process.exit() (no-process-exit) +--- +title: no-process-exit +layout: doc +rule_type: suggestion +--- + This rule was **deprecated** in ESLint v7.0.0. Please use the corresponding rule in [`eslint-plugin-node`](https://github.com/mysticatea/eslint-plugin-node). @@ -29,6 +34,8 @@ This rule aims to prevent the use of `process.exit()` in Node.js JavaScript. As Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-process-exit: "error"*/ @@ -36,8 +43,12 @@ process.exit(1); process.exit(0); ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-process-exit: "error"*/ @@ -45,6 +56,8 @@ Process.exit(); var exit = process.exit; ``` +::: + ## When Not To Use It There may be a part of a Node.js application that is responsible for determining the correct exit code to return upon exiting. In that case, you should turn this rule off to allow proper handling of the exit code. diff --git a/eslint/docs/rules/no-promise-executor-return.md b/eslint/docs/src/rules/no-promise-executor-return.md similarity index 87% rename from eslint/docs/rules/no-promise-executor-return.md rename to eslint/docs/src/rules/no-promise-executor-return.md index 1adfe37..95283d7 100644 --- a/eslint/docs/rules/no-promise-executor-return.md +++ b/eslint/docs/src/rules/no-promise-executor-return.md @@ -1,4 +1,13 @@ -# Disallow returning values from Promise executor functions (no-promise-executor-return) +--- +title: no-promise-executor-return +layout: doc +rule_type: problem +related_rules: +- no-async-promise-executor +further_reading: +- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise +--- + The `new Promise` constructor accepts a single argument, called an *executor*. @@ -26,6 +35,8 @@ Only `return` without a value is allowed, as it's a control flow statement. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-promise-executor-return: "error"*/ @@ -55,8 +66,12 @@ new Promise(() => { }); ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-promise-executor-return: "error"*/ @@ -87,10 +102,4 @@ new Promise((resolve, reject) => { Promise.resolve(1); ``` -## Further Reading - -* [MDN Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) - -## Related Rules - -* [no-async-promise-executor](no-async-promise-executor.md) +::: diff --git a/eslint/docs/rules/no-proto.md b/eslint/docs/src/rules/no-proto.md similarity index 86% rename from eslint/docs/rules/no-proto.md rename to eslint/docs/src/rules/no-proto.md index 9543b7e..7b6c8c4 100644 --- a/eslint/docs/rules/no-proto.md +++ b/eslint/docs/src/rules/no-proto.md @@ -1,4 +1,11 @@ -# Disallow Use of `__proto__` (no-proto) +--- +title: no-proto +layout: doc +rule_type: suggestion +further_reading: +- https://johnresig.com/blog/objectgetprototypeof/ +--- + `__proto__` property has been deprecated as of ECMAScript 3.1 and shouldn't be used in the code. Use `Object.getPrototypeOf` and `Object.setPrototypeOf` instead. @@ -8,6 +15,8 @@ When an object is created with the `new` operator, `__proto__` is set to the ori Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-proto: "error"*/ @@ -20,8 +29,12 @@ obj.__proto__ = b; obj["__proto__"] = b; ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-proto: "error"*/ @@ -32,11 +45,9 @@ Object.setPrototypeOf(obj, b); var c = { __proto__: a }; ``` +::: + ## When Not To Use It You might want to turn this rule off if you need to support legacy browsers which implement the `__proto__` property but not `Object.getPrototypeOf` or `Object.setPrototypeOf`. - -## Further Reading - -* [Object.getPrototypeOf](http://ejohn.org/blog/objectgetprototypeof/) diff --git a/eslint/docs/rules/no-prototype-builtins.md b/eslint/docs/src/rules/no-prototype-builtins.md similarity index 94% rename from eslint/docs/rules/no-prototype-builtins.md rename to eslint/docs/src/rules/no-prototype-builtins.md index 7132bcb..43e9373 100644 --- a/eslint/docs/rules/no-prototype-builtins.md +++ b/eslint/docs/src/rules/no-prototype-builtins.md @@ -1,4 +1,10 @@ -# Disallow use of Object.prototypes builtins directly (no-prototype-builtins) +--- +title: no-prototype-builtins +layout: doc +rule_type: problem +--- + + In ECMAScript 5.1, `Object.create` was added, which enables the creation of objects with a specified `[[Prototype]]`. `Object.create(null)` is a common pattern used to create objects that will be used as a Map. This can lead to errors when it is assumed that objects will have properties from `Object.prototype`. This rule prevents calling some `Object.prototype` methods directly from an object. @@ -12,6 +18,8 @@ This rule disallows calling some `Object.prototype` methods directly on object i Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-prototype-builtins: "error"*/ @@ -22,8 +30,12 @@ var isPrototypeOfBar = foo.isPrototypeOf(bar); var barIsEnumerable = foo.propertyIsEnumerable("bar"); ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-prototype-builtins: "error"*/ @@ -34,6 +46,8 @@ var isPrototypeOfBar = Object.prototype.isPrototypeOf.call(foo, bar); var barIsEnumerable = {}.propertyIsEnumerable.call(foo, "bar"); ``` +::: + ## When Not To Use It You may want to turn this rule off if your code only touches objects with hardcoded keys, and you will never use an object that shadows an `Object.prototype` method or which does not inherit from `Object.prototype`. diff --git a/eslint/docs/rules/no-redeclare.md b/eslint/docs/src/rules/no-redeclare.md similarity index 89% rename from eslint/docs/rules/no-redeclare.md rename to eslint/docs/src/rules/no-redeclare.md index bd029eb..1c16b12 100644 --- a/eslint/docs/rules/no-redeclare.md +++ b/eslint/docs/src/rules/no-redeclare.md @@ -1,4 +1,12 @@ -# disallow variable redeclaration (no-redeclare) +--- +title: no-redeclare +layout: doc +rule_type: suggestion +related_rules: +- no-shadow +--- + + In JavaScript, it's possible to redeclare the same variable name using `var`. This can lead to confusion as to where the variable is actually declared and initialized. @@ -8,6 +16,8 @@ This rule is aimed at eliminating variables that have multiple declarations in t Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-redeclare: "error"*/ @@ -27,8 +37,12 @@ class C { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-redeclare: "error"*/ @@ -49,6 +63,8 @@ class C { ``` +::: + ## Options This rule takes one optional argument, an object with a boolean property `"builtinGlobals"`. It defaults to `true`. @@ -60,14 +76,20 @@ The `"builtinGlobals"` option will check for redeclaration of built-in globals i Examples of **incorrect** code for the `{ "builtinGlobals": true }` option: +::: incorrect + ```js /*eslint no-redeclare: ["error", { "builtinGlobals": true }]*/ var Object = 0; ``` +::: + Examples of **incorrect** code for the `{ "builtinGlobals": true }` option and the `browser` environment: +::: incorrect + ```js /*eslint no-redeclare: ["error", { "builtinGlobals": true }]*/ /*eslint-env browser*/ @@ -75,10 +97,8 @@ Examples of **incorrect** code for the `{ "builtinGlobals": true }` option and t var top = 0; ``` -The `browser` environment has many built-in global variables (for example, `top`). Some of built-in global variables cannot be redeclared. - -Note that when using the `node` or `commonjs` environments (or `ecmaFeatures.globalReturn`, if using the default parser), the top scope of a program is not actually the global scope, but rather a "module" scope. When this is the case, declaring a variable named after a builtin global is not a redeclaration, but rather a shadowing of the global variable. In that case, the [`no-shadow`](no-shadow.md) rule with the `"builtinGlobals"` option should be used. +::: -## Related Rules +The `browser` environment has many built-in global variables (for example, `top`). Some of built-in global variables cannot be redeclared. -* [no-shadow](no-shadow.md) +Note that when using the `node` or `commonjs` environments (or `ecmaFeatures.globalReturn`, if using the default parser), the top scope of a program is not actually the global scope, but rather a "module" scope. When this is the case, declaring a variable named after a builtin global is not a redeclaration, but rather a shadowing of the global variable. In that case, the [`no-shadow`](no-shadow) rule with the `"builtinGlobals"` option should be used. diff --git a/eslint/docs/rules/no-regex-spaces.md b/eslint/docs/src/rules/no-regex-spaces.md similarity index 86% rename from eslint/docs/rules/no-regex-spaces.md rename to eslint/docs/src/rules/no-regex-spaces.md index 63a5174..48d3e45 100644 --- a/eslint/docs/rules/no-regex-spaces.md +++ b/eslint/docs/src/rules/no-regex-spaces.md @@ -1,4 +1,15 @@ -# disallow multiple spaces in regular expression literals (no-regex-spaces) +--- +title: no-regex-spaces +layout: doc +rule_type: suggestion +related_rules: +- no-div-regex +- no-control-regex +--- + + + + Regular expressions can be very complex and difficult to understand, which is why it's important to keep them as simple as possible in order to avoid mistakes. One of the more error-prone things you can do with a regular expression is to use more than one space, such as: @@ -20,6 +31,8 @@ This rule disallows multiple spaces in regular expression literals. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-regex-spaces: "error"*/ @@ -27,8 +40,12 @@ var re = /foo bar/; var re = new RegExp("foo bar"); ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-regex-spaces: "error"*/ @@ -36,11 +53,8 @@ var re = /foo {3}bar/; var re = new RegExp("foo {3}bar"); ``` +::: + ## When Not To Use It If you want to allow multiple spaces in a regular expression, then you can safely turn this rule off. - -## Related Rules - -* [no-div-regex](no-div-regex.md) -* [no-control-regex](no-control-regex.md) diff --git a/eslint/docs/rules/no-reserved-keys.md b/eslint/docs/src/rules/no-reserved-keys.md similarity index 85% rename from eslint/docs/rules/no-reserved-keys.md rename to eslint/docs/src/rules/no-reserved-keys.md index f1f8e41..1b4f048 100644 --- a/eslint/docs/rules/no-reserved-keys.md +++ b/eslint/docs/src/rules/no-reserved-keys.md @@ -1,6 +1,14 @@ -# no-reserved-keys: disallow unquoted reserved words as property names in object literals +--- +title: no-reserved-keys +layout: doc -(removed) This rule was **removed** in ESLint v1.0 and **replaced** by the [quote-props](quote-props.md) rule. +further_reading: +- https://kangax.github.io/compat-table/es5/#Reserved_words_as_property_names +--- + +Disallows unquoted reserved words as property names in object literals. + +(removed) This rule was **removed** in ESLint v1.0 and **replaced** by the [quote-props](quote-props) rule. ECMAScript 3 described as series of keywords and reserved words, such as `if` and `public`, that are used or intended to be used for a core language feature. The specification also indicated that these keywords and reserved words could not be used as object property names without being enclosed in strings. An error occurs in an ECMAScript 3 environment when you use a keyword or reserved word in an object literal. For example: @@ -20,6 +28,8 @@ This rule is aimed at eliminating the use of ECMAScript 3 keywords and reserved Examples of **incorrect** code for this rule: +::: incorrect + ```js var superman = { class: "Superhero", @@ -31,8 +41,12 @@ var values = { }; ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js var superman = { "class": "Superhero", @@ -44,10 +58,8 @@ var values = { }; ``` +::: + ## When Not To Use It If your code is only going to be executed in an ECMAScript 5 or higher environment, then you can safely leave this rule off. - -## Further Reading - -* [Reserved words as property names](https://kangax.github.io/compat-table/es5/#Reserved_words_as_property_names) diff --git a/eslint/docs/rules/no-restricted-exports.md b/eslint/docs/src/rules/no-restricted-exports.md similarity index 78% rename from eslint/docs/rules/no-restricted-exports.md rename to eslint/docs/src/rules/no-restricted-exports.md index 2993857..b1b2065 100644 --- a/eslint/docs/rules/no-restricted-exports.md +++ b/eslint/docs/src/rules/no-restricted-exports.md @@ -1,4 +1,9 @@ -# Disallow specified names in exports (no-restricted-exports) +--- +title: no-restricted-exports +layout: doc +rule_type: suggestion +--- + In a project, certain names may be disallowed from being used as exported names for various reasons. @@ -16,9 +21,11 @@ This rule has an object option: Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-restricted-exports: ["error", { - "restrictedNamedExports": ["foo", "bar", "Baz", "a", "b", "c", "d"] + "restrictedNamedExports": ["foo", "bar", "Baz", "a", "b", "c", "d", "e", "👍"] }]*/ export const foo = 1; @@ -33,16 +40,24 @@ export { a }; function someFunction() {} export { someFunction as b }; -export { c } from 'some_module'; +export { c } from "some_module"; + +export { "d" } from "some_module"; + +export { something as e } from "some_module"; -export { something as d } from 'some_module'; +export { "👍" } from "some_module"; ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-restricted-exports: ["error", { - "restrictedNamedExports": ["foo", "bar", "Baz", "a", "b", "c", "d"] + "restrictedNamedExports": ["foo", "bar", "Baz", "a", "b", "c", "d", "e", "👍"] }]*/ export const quux = 1; @@ -57,17 +72,25 @@ export { a as myObject }; function someFunction() {} export { someFunction }; -export { c as someName } from 'some_module'; +export { c as someName } from "some_module"; + +export { "d" as " d " } from "some_module"; + +export { something } from "some_module"; -export { something } from 'some_module'; +export { "👍" as thumbsUp } from "some_module"; ``` +::: + ### Default exports By design, this rule doesn't disallow `export default` declarations. If you configure `"default"` as a restricted name, that restriction will apply only to named export declarations. Examples of additional **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-restricted-exports: ["error", { "restrictedNamedExports": ["default"] }]*/ @@ -76,20 +99,30 @@ function foo() {} export { foo as default }; ``` +::: + +::: incorrect + ```js /*eslint no-restricted-exports: ["error", { "restrictedNamedExports": ["default"] }]*/ -export { default } from 'some_module'; +export { default } from "some_module"; ``` +::: + Examples of additional **correct** code for this rule: +::: correct + ```js /*eslint no-restricted-exports: ["error", { "restrictedNamedExports": ["default", "foo"] }]*/ export default function foo() {} ``` +::: + ## Known Limitations This rule doesn't inspect the content of source modules in re-export declarations. In particular, if you are re-exporting everything from another module's export, that export may include a restricted name. This rule cannot detect such cases. @@ -102,5 +135,5 @@ export function foo() {} //----- my_module.js ----- /*eslint no-restricted-exports: ["error", { "restrictedNamedExports": ["foo"] }]*/ -export * from 'some_module'; // allowed, although this declaration exports "foo" from my_module +export * from "some_module"; // allowed, although this declaration exports "foo" from my_module ``` diff --git a/eslint/docs/rules/no-restricted-globals.md b/eslint/docs/src/rules/no-restricted-globals.md similarity index 91% rename from eslint/docs/rules/no-restricted-globals.md rename to eslint/docs/src/rules/no-restricted-globals.md index dd3e15b..0bcf27d 100644 --- a/eslint/docs/rules/no-restricted-globals.md +++ b/eslint/docs/src/rules/no-restricted-globals.md @@ -1,4 +1,12 @@ -# Disallow specific global variables (no-restricted-globals) +--- +title: no-restricted-globals +layout: doc +rule_type: suggestion +related_rules: +- no-restricted-properties +- no-restricted-syntax +--- + Disallowing usage of specific global variables can be useful if you want to allow a set of global variables by enabling an environment, but still want to disallow some of those. @@ -45,6 +53,8 @@ Alternatively, the rule also accepts objects, where the global name and an optio Examples of **incorrect** code for sample `"event", "fdescribe"` global variable names: +::: incorrect + ```js /*global event, fdescribe*/ /*eslint no-restricted-globals: ["error", "event", "fdescribe"]*/ @@ -57,8 +67,12 @@ fdescribe("foo", function() { }); ``` +::: + Examples of **correct** code for a sample `"event"` global variable name: +::: correct + ```js /*global event*/ /*eslint no-restricted-globals: ["error", "event"]*/ @@ -66,6 +80,10 @@ Examples of **correct** code for a sample `"event"` global variable name: import event from "event-module"; ``` +::: + +::: correct + ```js /*global event*/ /*eslint no-restricted-globals: ["error", "event"]*/ @@ -73,8 +91,12 @@ import event from "event-module"; var event = 1; ``` +::: + Examples of **incorrect** code for a sample `"event"` global variable name, along with a custom error message: +::: incorrect + ```js /*global event*/ /* eslint no-restricted-globals: ["error", { name: "event", message: "Use local parameter instead." }] */ @@ -84,7 +106,4 @@ function onClick() { } ``` -## Related Rules - -* [no-restricted-properties](no-restricted-properties.md) -* [no-restricted-syntax](no-restricted-syntax.md) +::: diff --git a/eslint/docs/rules/no-restricted-imports.md b/eslint/docs/src/rules/no-restricted-imports.md similarity index 76% rename from eslint/docs/rules/no-restricted-imports.md rename to eslint/docs/src/rules/no-restricted-imports.md index d8e0610..646e1b0 100644 --- a/eslint/docs/rules/no-restricted-imports.md +++ b/eslint/docs/src/rules/no-restricted-imports.md @@ -1,4 +1,9 @@ -# Disallow specific imports (no-restricted-imports) +--- +title: no-restricted-imports +layout: doc +rule_type: suggestion +--- + Imports are an ES6/ES2015 standard for making the functionality of other modules available in your current module. In CommonJS this is implemented through the `require()` call which makes this ESLint rule roughly equivalent to its CommonJS counterpart `no-restricted-modules`. @@ -91,6 +96,29 @@ or like this if you want to apply a custom message to pattern matches: The custom message will be appended to the default error message. +Pattern matches can also be configured to be case-sensitive: + +```json +"no-restricted-imports": ["error", { + "patterns": [{ + "group": ["import1/private/prefix[A-Z]*"], + "caseSensitive": true + }] +}] +``` + +Pattern matches can restrict specific import names only, similar to the `paths` option: + +```json +"no-restricted-imports": ["error", { + "patterns": [{ + "group": ["utils/*"], + "importNames": ["isEmpty"], + "message": "Use 'isEmpty' from lodash instead." + }] +}] +``` + To restrict the use of all Node.js core imports (via <https://github.com/nodejs/node/tree/master/lib>): ```json @@ -103,36 +131,58 @@ To restrict the use of all Node.js core imports (via <https://github.com/nodejs/ Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-restricted-imports: ["error", "fs"]*/ import fs from 'fs'; ``` +::: + +::: incorrect + ```js /*eslint no-restricted-imports: ["error", "fs"]*/ export { fs } from 'fs'; ``` +::: + +::: incorrect + ```js /*eslint no-restricted-imports: ["error", "fs"]*/ export * from 'fs'; ``` +::: + +::: incorrect + ```js /*eslint no-restricted-imports: ["error", { "paths": ["cluster"] }]*/ import cluster from 'cluster'; ``` +::: + +::: incorrect + ```js /*eslint no-restricted-imports: ["error", { "patterns": ["lodash/*"] }]*/ import pick from 'lodash/pick'; ``` +::: + +::: incorrect + ```js /*eslint no-restricted-imports: ["error", { paths: [{ name: "foo", @@ -143,6 +193,10 @@ import pick from 'lodash/pick'; import DisallowedObject from "foo"; ``` +::: + +::: incorrect + ```js /*eslint no-restricted-imports: ["error", { paths: [{ name: "foo", @@ -150,9 +204,17 @@ import DisallowedObject from "foo"; message: "Please import 'DisallowedObject' from '/bar/baz/' instead." }]}]*/ +import { DisallowedObject } from "foo"; + import { DisallowedObject as AllowedObject } from "foo"; + +import { "DisallowedObject" as AllowedObject } from "foo"; ``` +::: + +::: incorrect + ```js /*eslint no-restricted-imports: ["error", { paths: [{ name: "foo", @@ -163,6 +225,10 @@ import { DisallowedObject as AllowedObject } from "foo"; import * as Foo from "foo"; ``` +::: + +::: incorrect + ```js /*eslint no-restricted-imports: ["error", { patterns: [{ group: ["lodash/*"], @@ -172,8 +238,39 @@ import * as Foo from "foo"; import pick from 'lodash/pick'; ``` +::: + +::: incorrect + +```js +/*eslint no-restricted-imports: ["error", { patterns: [{ + group: ["foo[A-Z]*"], + caseSensitive: true +}]}]*/ + +import pick from 'fooBar'; +``` + +::: + +::: incorrect + +```js +/*eslint no-restricted-imports: ["error", { patterns: [{ + group: ["utils/*"], + importNames: ['isEmpty'], + message: "Use 'isEmpty' from lodash instead." +}]}]*/ + +import { isEmpty } from 'utils/collection-utils'; +``` + +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-restricted-imports: ["error", "fs"]*/ @@ -181,6 +278,10 @@ import crypto from 'crypto'; export { foo } from "bar"; ``` +::: + +::: correct + ```js /*eslint no-restricted-imports: ["error", { "paths": ["fs"], "patterns": ["eslint/*"] }]*/ @@ -189,12 +290,20 @@ import eslint from 'eslint'; export * from "path"; ``` +::: + +::: correct + ```js /*eslint no-restricted-imports: ["error", { paths: [{ name: "foo", importNames: ["DisallowedObject"] }] }]*/ import DisallowedObject from "foo" ``` +::: + +::: correct + ```js /*eslint no-restricted-imports: ["error", { paths: [{ name: "foo", @@ -205,6 +314,10 @@ import DisallowedObject from "foo" import { AllowedObject as DisallowedObject } from "foo"; ``` +::: + +::: correct + ```js /*eslint no-restricted-imports: ["error", { patterns: [{ group: ["lodash/*"], @@ -214,6 +327,35 @@ import { AllowedObject as DisallowedObject } from "foo"; import lodash from 'lodash'; ``` +::: + +::: correct + +```js +/*eslint no-restricted-imports: ["error", { patterns: [{ + group: ["foo[A-Z]*"], + caseSensitive: true +}]}]*/ + +import pick from 'food'; +``` + +::: + +::: correct + +```js +/*eslint no-restricted-imports: ["error", { patterns: [{ + group: ["utils/*"], + importNames: ['isEmpty'], + message: "Use 'isEmpty' from lodash instead." +}]}]*/ + +import { hasValues } from 'utils/collection-utils'; +``` + +::: + ## When Not To Use It Don't use this rule or don't include a module in the list for this rule if you want to be able to import a module in your project without an ESLint error or warning. diff --git a/eslint/docs/rules/no-restricted-modules.md b/eslint/docs/src/rules/no-restricted-modules.md similarity index 95% rename from eslint/docs/rules/no-restricted-modules.md rename to eslint/docs/src/rules/no-restricted-modules.md index 3bce058..c8f77bf 100644 --- a/eslint/docs/rules/no-restricted-modules.md +++ b/eslint/docs/src/rules/no-restricted-modules.md @@ -1,4 +1,9 @@ -# Disallow Node.js modules (no-restricted-modules) +--- +title: no-restricted-modules +layout: doc +rule_type: suggestion +--- + This rule was **deprecated** in ESLint v7.0.0. Please use the corresponding rule in [`eslint-plugin-node`](https://github.com/mysticatea/eslint-plugin-node). @@ -71,6 +76,8 @@ To restrict the use of all Node.js core modules (via <https://github.com/nodejs/ Examples of **incorrect** code for this rule with sample `"fs", "cluster", "lodash"` restricted modules: +::: incorrect + ```js /*eslint no-restricted-modules: ["error", "fs", "cluster"]*/ @@ -78,26 +85,42 @@ var fs = require('fs'); var cluster = require('cluster'); ``` +::: + +::: incorrect + ```js /*eslint no-restricted-modules: ["error", {"paths": ["cluster"] }]*/ var cluster = require('cluster'); ``` +::: + +::: incorrect + ```js /*eslint no-restricted-modules: ["error", { "patterns": ["lodash/*"] }]*/ var pick = require('lodash/pick'); ``` +::: + Examples of **correct** code for this rule with sample `"fs", "cluster", "lodash"` restricted modules: +::: correct + ```js /*eslint no-restricted-modules: ["error", "fs", "cluster"]*/ var crypto = require('crypto'); ``` +::: + +::: correct + ```js /*eslint no-restricted-modules: ["error", { "paths": ["fs", "cluster"], @@ -107,3 +130,5 @@ var crypto = require('crypto'); var crypto = require('crypto'); var pick = require('lodash/pick'); ``` + +::: diff --git a/eslint/docs/rules/no-restricted-properties.md b/eslint/docs/src/rules/no-restricted-properties.md similarity index 92% rename from eslint/docs/rules/no-restricted-properties.md rename to eslint/docs/src/rules/no-restricted-properties.md index 468d0b3..758bd5c 100644 --- a/eslint/docs/rules/no-restricted-properties.md +++ b/eslint/docs/src/rules/no-restricted-properties.md @@ -1,4 +1,12 @@ -# disallow certain object properties (no-restricted-properties) +--- +title: no-restricted-properties +layout: doc +rule_type: suggestion +related_rules: +- no-restricted-globals +- no-restricted-syntax +--- + Certain properties on objects may be disallowed in a codebase. This is useful for deprecating an API or restricting usage of a module's methods. For example, you may want to disallow using `describe.only` when using Mocha or telling people to use `Object.assign` instead of `_.extend`. @@ -66,6 +74,8 @@ If the property name is omitted, accessing any property of the given object is d Examples of **incorrect** code for this rule: +::: incorrect + ```js /* eslint no-restricted-properties: [2, { "object": "disallowedObjectName", @@ -77,6 +87,10 @@ var example = disallowedObjectName.disallowedPropertyName; /*error Disallowed ob disallowedObjectName.disallowedPropertyName(); /*error Disallowed object property: disallowedObjectName.disallowedPropertyName.*/ ``` +::: + +::: incorrect + ```js /* eslint no-restricted-properties: [2, { "property": "__defineGetter__" @@ -85,6 +99,10 @@ disallowedObjectName.disallowedPropertyName(); /*error Disallowed object propert foo.__defineGetter__(bar, baz); ``` +::: + +::: incorrect + ```js /* eslint no-restricted-properties: [2, { "object": "require" @@ -93,8 +111,12 @@ foo.__defineGetter__(bar, baz); require.resolve('foo'); ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /* eslint no-restricted-properties: [2, { "object": "disallowedObjectName", @@ -106,6 +128,10 @@ var example = disallowedObjectName.somePropertyName; allowedObjectName.disallowedPropertyName(); ``` +::: + +::: correct + ```js /* eslint no-restricted-properties: [2, { "object": "require" @@ -114,11 +140,8 @@ allowedObjectName.disallowedPropertyName(); require('foo'); ``` +::: + ## When Not To Use It If you don't have any object/property combinations to restrict, you should not use this rule. - -## Related Rules - -* [no-restricted-globals](no-restricted-globals.md) -* [no-restricted-syntax](no-restricted-syntax.md) diff --git a/eslint/docs/rules/no-restricted-syntax.md b/eslint/docs/src/rules/no-restricted-syntax.md similarity index 87% rename from eslint/docs/rules/no-restricted-syntax.md rename to eslint/docs/src/rules/no-restricted-syntax.md index 0665167..bb700f0 100644 --- a/eslint/docs/rules/no-restricted-syntax.md +++ b/eslint/docs/src/rules/no-restricted-syntax.md @@ -1,8 +1,18 @@ -# disallow specified syntax (no-restricted-syntax) +--- +title: no-restricted-syntax +layout: doc +rule_type: suggestion +related_rules: +- no-alert +- no-console +- no-debugger +- no-restricted-properties +--- + JavaScript has a lot of language features, and not everyone likes all of them. As a result, some projects choose to disallow the use of certain language features altogether. For instance, you might decide to disallow the use of `try-catch` or `class`, or you might decide to disallow the use of the `in` operator. -Rather than creating separate rules for every language feature you want to turn off, this rule allows you to configure the syntax elements you want to restrict use of. These elements are represented by their [ESTree](https://github.com/estree/estree) node types. For example, a function declaration is represented by `FunctionDeclaration` and the `with` statement is represented by `WithStatement`. You may find the full list of AST node names you can use [on GitHub](https://github.com/eslint/espree/blob/master/lib/ast-node-types.js) and use [AST Explorer](https://astexplorer.net/) with the espree parser to see what type of nodes your code consists of. +Rather than creating separate rules for every language feature you want to turn off, this rule allows you to configure the syntax elements you want to restrict use of. These elements are represented by their [ESTree](https://github.com/estree/estree) node types. For example, a function declaration is represented by `FunctionDeclaration` and the `with` statement is represented by `WithStatement`. You may find the full list of AST node names you can use [on GitHub](https://github.com/eslint/eslint-visitor-keys/blob/main/lib/visitor-keys.js) and use [AST Explorer](https://astexplorer.net/) with the espree parser to see what type of nodes your code consists of. You can also specify [AST selectors](../developer-guide/selectors) to restrict, allowing much more precise control over syntax patterns. @@ -48,6 +58,8 @@ The string and object formats can be freely mixed in the configuration as needed Examples of **incorrect** code for this rule with the `"FunctionExpression", "WithStatement", BinaryExpression[operator='in']` options: +::: incorrect + ```js /* eslint no-restricted-syntax: ["error", "FunctionExpression", "WithStatement", "BinaryExpression[operator='in']"] */ @@ -60,8 +72,12 @@ var doSomething = function () {}; foo in bar; ``` +::: + Examples of **correct** code for this rule with the `"FunctionExpression", "WithStatement", BinaryExpression[operator='in']` options: +::: correct + ```js /* eslint no-restricted-syntax: ["error", "FunctionExpression", "WithStatement", "BinaryExpression[operator='in']"] */ @@ -72,13 +88,8 @@ function doSomething() {}; foo instanceof bar; ``` +::: + ## When Not To Use It If you don't want to restrict your code from using any JavaScript features or syntax, you should not use this rule. - -## Related Rules - -* [no-alert](no-alert.md) -* [no-console](no-console.md) -* [no-debugger](no-debugger.md) -* [no-restricted-properties](no-restricted-properties.md) diff --git a/eslint/docs/rules/no-return-assign.md b/eslint/docs/src/rules/no-return-assign.md similarity index 95% rename from eslint/docs/rules/no-return-assign.md rename to eslint/docs/src/rules/no-return-assign.md index ed40c27..0a63724 100644 --- a/eslint/docs/rules/no-return-assign.md +++ b/eslint/docs/src/rules/no-return-assign.md @@ -1,4 +1,9 @@ -# Disallow Assignment in return Statement (no-return-assign) +--- +title: no-return-assign +layout: doc +rule_type: suggestion +--- + One of the interesting, and sometimes confusing, aspects of JavaScript is that assignment can happen at almost any point. Because of this, an errant equals sign can end up causing assignment when the true intent was to do a comparison. This is especially true when using a `return` statement. For example: @@ -30,6 +35,8 @@ It disallows assignments unless they are enclosed in parentheses. Examples of **incorrect** code for the default `"except-parens"` option: +::: incorrect + ```js /*eslint no-return-assign: "error"*/ @@ -50,8 +57,12 @@ function doSomething() { } ``` +::: + Examples of **correct** code for the default `"except-parens"` option: +::: correct + ```js /*eslint no-return-assign: "error"*/ @@ -76,6 +87,8 @@ function doSomething() { } ``` +::: + ### always This option disallows all assignments in `return` statements. @@ -83,6 +96,8 @@ All assignments are treated as problems. Examples of **incorrect** code for the `"always"` option: +::: incorrect + ```js /*eslint no-return-assign: ["error", "always"]*/ @@ -99,8 +114,12 @@ function doSomething() { } ``` +::: + Examples of **correct** code for the `"always"` option: +::: correct + ```js /*eslint no-return-assign: ["error", "always"]*/ @@ -113,6 +132,8 @@ function doSomething() { } ``` +::: + ## When Not To Use It If you want to allow the use of assignment operators in a `return` statement, then you can safely disable this rule. diff --git a/eslint/docs/rules/no-return-await.md b/eslint/docs/src/rules/no-return-await.md similarity index 75% rename from eslint/docs/rules/no-return-await.md rename to eslint/docs/src/rules/no-return-await.md index e3f7be2..164843d 100644 --- a/eslint/docs/rules/no-return-await.md +++ b/eslint/docs/src/rules/no-return-await.md @@ -1,4 +1,12 @@ -# Disallows unnecessary `return await` (no-return-await) +--- +title: no-return-await +layout: doc +rule_type: suggestion +further_reading: +- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function +- https://jakearchibald.com/2017/await-vs-return-vs-return-await/ +--- + Using `return await` inside an `async function` keeps the current function in the call stack until the Promise that is being awaited has resolved, at the cost of an extra microtask before resolving the outer Promise. `return await` can also be used in a try/catch statement to catch errors from another function that returns a Promise. @@ -10,6 +18,8 @@ This rule aims to prevent a likely common performance hazard due to a lack of un Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-return-await: "error"*/ @@ -18,8 +28,12 @@ async function foo() { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-return-await: "error"*/ @@ -46,16 +60,12 @@ async function foo() { } ``` +::: + ## When Not To Use It There are a few reasons you might want to turn this rule off: -- If you want to use `await` to denote a value that is a thenable -- If you do not want the performance benefit of avoiding `return await` -- If you want the functions to show up in stack traces (useful for debugging purposes) - -## Further Reading - -[`async function` on MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function) - -[`await vs return vs return await` by Jake Archibald](https://jakearchibald.com/2017/await-vs-return-vs-return-await/) +* If you want to use `await` to denote a value that is a thenable +* If you do not want the performance benefit of avoiding `return await` +* If you want the functions to show up in stack traces (useful for debugging purposes) diff --git a/eslint/docs/rules/no-script-url.md b/eslint/docs/src/rules/no-script-url.md similarity index 70% rename from eslint/docs/rules/no-script-url.md rename to eslint/docs/src/rules/no-script-url.md index 5c71eb4..6255cf9 100644 --- a/eslint/docs/rules/no-script-url.md +++ b/eslint/docs/src/rules/no-script-url.md @@ -1,4 +1,11 @@ -# Disallow Script URLs (no-script-url) +--- +title: no-script-url +layout: doc +rule_type: suggestion +further_reading: +- https://stackoverflow.com/questions/13497971/what-is-the-matter-with-script-targeted-urls +--- + Using `javascript:` URLs is considered by some as a form of `eval`. Code passed in `javascript:` URLs has to be parsed and evaluated by the browser in the same way that `eval` is processed. @@ -6,6 +13,8 @@ Using `javascript:` URLs is considered by some as a form of `eval`. Code passed Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-script-url: "error"*/ @@ -14,10 +23,8 @@ location.href = "javascript:void(0)"; location.href = `javascript:void(0)`; ``` +::: + ## Compatibility * **JSHint**: This rule corresponds to `scripturl` rule of JSHint. - -## Further Reading - -* [What is the matter with script-targeted URLs?](https://stackoverflow.com/questions/13497971/what-is-the-matter-with-script-targeted-urls) diff --git a/eslint/docs/rules/no-self-assign.md b/eslint/docs/src/rules/no-self-assign.md similarity index 84% rename from eslint/docs/rules/no-self-assign.md rename to eslint/docs/src/rules/no-self-assign.md index 2991504..a65b242 100644 --- a/eslint/docs/rules/no-self-assign.md +++ b/eslint/docs/src/rules/no-self-assign.md @@ -1,4 +1,10 @@ -# Disallow Self Assignment (no-self-assign) +--- +title: no-self-assign +layout: doc +rule_type: problem +--- + + Self assignments have no effect, so probably those are an error due to incomplete refactoring. Those indicate that what you should do is still remaining. @@ -14,6 +20,8 @@ This rule is aimed at eliminating self assignments. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-self-assign: "error"*/ @@ -24,10 +32,18 @@ foo = foo; [a, ...b] = [x, ...b]; ({a, b} = {a, x}); + +foo &&= foo; +foo ||= foo; +foo ??= foo; ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-self-assign: "error"*/ @@ -50,11 +66,17 @@ obj[a] = obj["a"]; obj.a().b = obj.a().b; a().b = a().b; +// `&=` and `|=` have an effect on non-integers. +foo &= foo; +foo |= foo; + // Known limitation: this does not support computed properties except single literal or single identifier. obj[a + b] = obj[a + b]; obj["a" + "b"] = obj["a" + "b"]; ``` +::: + ## Options This rule has the option to check properties as well. @@ -65,12 +87,14 @@ This rule has the option to check properties as well. } ``` -- `props` - if this is `true`, `no-self-assign` rule warns self-assignments of properties. Default is `true`. +* `props` - if this is `true`, `no-self-assign` rule warns self-assignments of properties. Default is `true`. ### props Examples of **correct** code with the `{ "props": false }` option: +::: correct + ```js /*eslint no-self-assign: ["error", {"props": false}]*/ @@ -81,6 +105,8 @@ obj["a"] = obj["a"]; obj[a] = obj[a]; ``` +::: + ## When Not To Use It If you don't want to notify about self assignments, then it's safe to disable this rule. diff --git a/eslint/docs/rules/no-self-compare.md b/eslint/docs/src/rules/no-self-compare.md similarity index 91% rename from eslint/docs/rules/no-self-compare.md rename to eslint/docs/src/rules/no-self-compare.md index a745de4..12b2776 100644 --- a/eslint/docs/rules/no-self-compare.md +++ b/eslint/docs/src/rules/no-self-compare.md @@ -1,4 +1,9 @@ -# Disallow Self Compare (no-self-compare) +--- +title: no-self-compare +layout: doc +rule_type: problem +--- + Comparing a variable against itself is usually an error, either a typo or refactoring error. It is confusing to the reader and may potentially introduce a runtime error. @@ -10,6 +15,8 @@ This error is raised to highlight a potentially confusing and potentially pointl Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-self-compare: "error"*/ @@ -18,3 +25,5 @@ if (x === x) { x = 20; } ``` + +::: diff --git a/eslint/docs/rules/no-sequences.md b/eslint/docs/src/rules/no-sequences.md similarity index 95% rename from eslint/docs/rules/no-sequences.md rename to eslint/docs/src/rules/no-sequences.md index f12c465..dcc13f1 100644 --- a/eslint/docs/rules/no-sequences.md +++ b/eslint/docs/src/rules/no-sequences.md @@ -1,4 +1,9 @@ -# Disallow Use of the Comma Operator (no-sequences) +--- +title: no-sequences +layout: doc +rule_type: suggestion +--- + The comma operator includes multiple expressions where only one is expected. It evaluates each operand from left to right and returns the value of the last operand. However, this frequently obscures side effects, and its use is often an accident. Here are some examples of sequences: @@ -21,6 +26,8 @@ This rule forbids the use of the comma operator, with the following exceptions: Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-sequences: "error"*/ @@ -41,8 +48,12 @@ while (val = foo(), val < 42); with (doSomething(), val) {} ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-sequences: "error"*/ @@ -63,12 +74,16 @@ while ((val = foo(), val < 42)); with ((doSomething(), val)) {} ``` +::: + ### Note about arrow function bodies If an arrow function body is a statement rather than a block, and that statement contains a sequence, you need to use double parentheses around the statement to indicate that the sequence is intentional. Examples of **incorrect** code for arrow functions: +::: incorrect + ```js /*eslint no-sequences: "error"*/ const foo = (val) => (console.log('bar'), val); @@ -78,8 +93,12 @@ const foo = () => ((bar = 123), 10); const foo = () => { return (bar = 123), 10 } ``` +::: + Examples of **correct** code for arrow functions: +::: correct + ```js /*eslint no-sequences: "error"*/ const foo = (val) => ((console.log('bar'), val)); @@ -89,6 +108,8 @@ const foo = () => (((bar = 123), 10)); const foo = () => { return ((bar = 123), 10) } ``` +::: + ## Options This rule takes one option, an object, with the following properties: @@ -99,6 +120,8 @@ This rule takes one option, an object, with the following properties: Examples of **incorrect** code for this rule with the `{ "allowInParentheses": false }` option: +::: incorrect + ```js /*eslint no-sequences: ["error", { "allowInParentheses": false }]*/ @@ -121,14 +144,20 @@ with ((doSomething(), val)) {} const foo = (val) => ((console.log('bar'), val)); ``` +::: + Examples of **correct** code for this rule with the `{ "allowInParentheses": false }` option: +::: correct + ```js /*eslint no-sequences: ["error", { "allowInParentheses": false }]*/ for (i = 0, j = 10; i < j; i++, j--); ``` +::: + ## When Not To Use It Disable this rule if sequence expressions with the comma operator are acceptable. diff --git a/eslint/docs/rules/no-setter-return.md b/eslint/docs/src/rules/no-setter-return.md similarity index 89% rename from eslint/docs/rules/no-setter-return.md rename to eslint/docs/src/rules/no-setter-return.md index 5308974..2ed21d3 100644 --- a/eslint/docs/rules/no-setter-return.md +++ b/eslint/docs/src/rules/no-setter-return.md @@ -1,4 +1,14 @@ -# Disallow returning values from setters (no-setter-return) +--- +title: no-setter-return +layout: doc +rule_type: problem +related_rules: +- getter-return +further_reading: +- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/set +--- + + Setters cannot return values. @@ -18,6 +28,8 @@ This rule checks setters in: Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-setter-return: "error"*/ @@ -55,8 +67,12 @@ Object.defineProperty(foo, "bar", { }); ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-setter-return: "error"*/ @@ -92,10 +108,4 @@ Object.defineProperty(foo, "bar", { }); ``` -## Further Reading - -* [MDN setter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/set) - -## Related Rules - -* [getter-return](getter-return.md) +::: diff --git a/eslint/docs/rules/no-shadow-restricted-names.md b/eslint/docs/src/rules/no-shadow-restricted-names.md similarity index 79% rename from eslint/docs/rules/no-shadow-restricted-names.md rename to eslint/docs/src/rules/no-shadow-restricted-names.md index 890353d..cea6a12 100644 --- a/eslint/docs/rules/no-shadow-restricted-names.md +++ b/eslint/docs/src/rules/no-shadow-restricted-names.md @@ -1,4 +1,15 @@ -# Disallow Shadowing of Restricted Names (no-shadow-restricted-names) +--- +title: no-shadow-restricted-names +layout: doc +rule_type: suggestion +related_rules: +- no-shadow +further_reading: +- https://es5.github.io/#x15.1.1 +- https://es5.github.io/#C +--- + + ES5 §15.1.1 Value Properties of the Global Object (`NaN`, `Infinity`, `undefined`) as well as strict mode restricted identifiers `eval` and `arguments` are considered to be restricted names in JavaScript. Defining them to mean something else can have unintended consequences and confuse others reading the code. For example, there's nothing preventing you from writing: @@ -12,6 +23,8 @@ Then any code used within the same scope would not get the global `undefined`, b Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-shadow-restricted-names: "error"*/ @@ -24,8 +37,12 @@ var undefined = 5; try {} catch(eval){} ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-shadow-restricted-names: "error"*/ @@ -37,11 +54,4 @@ function f(a, b){} var undefined; ``` -## Further Reading - -* [Annotated ES5 - §15.1.1](https://es5.github.io/#x15.1.1) -* [Annotated ES5 - Annex C](https://es5.github.io/#C) - -## Related Rules - -* [no-shadow](no-shadow.md) +::: diff --git a/eslint/docs/rules/no-shadow.md b/eslint/docs/src/rules/no-shadow.md similarity index 68% rename from eslint/docs/rules/no-shadow.md rename to eslint/docs/src/rules/no-shadow.md index 3bf9783..229cdcb 100644 --- a/eslint/docs/rules/no-shadow.md +++ b/eslint/docs/src/rules/no-shadow.md @@ -1,4 +1,13 @@ -# disallow variable declarations from shadowing variables declared in the outer scope (no-shadow) +--- +title: no-shadow +layout: doc +rule_type: suggestion +related_rules: +- no-shadow-restricted-names +further_reading: +- https://en.wikipedia.org/wiki/Variable_shadowing +--- + Shadowing is the process by which a local variable shares the same name as a variable in its containing scope. For example: @@ -17,6 +26,8 @@ This rule aims to eliminate shadowed variable declarations. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-shadow: "error"*/ /*eslint-env es6*/ @@ -40,13 +51,15 @@ if (true) { } ``` +::: + ## Options -This rule takes one option, an object, with properties `"builtinGlobals"`, `"hoist"` and `"allow"`. +This rule takes one option, an object, with properties `"builtinGlobals"`, `"hoist"`, `"allow"` and `"ignoreOnInitialization"`. ```json { - "no-shadow": ["error", { "builtinGlobals": false, "hoist": "functions", "allow": [] }] + "no-shadow": ["error", { "builtinGlobals": false, "hoist": "functions", "allow": [], "ignoreOnInitialization": false }] } ``` @@ -57,6 +70,8 @@ If it is `true`, the rule prevents shadowing of built-in global variables: `Obje Examples of **incorrect** code for the `{ "builtinGlobals": true }` option: +::: incorrect + ```js /*eslint no-shadow: ["error", { "builtinGlobals": true }]*/ @@ -65,6 +80,8 @@ function foo() { } ``` +::: + ### hoist The `hoist` option has three settings: @@ -77,6 +94,8 @@ The `hoist` option has three settings: Examples of **incorrect** code for the default `{ "hoist": "functions" }` option: +::: incorrect + ```js /*eslint no-shadow: ["error", { "hoist": "functions" }]*/ /*eslint-env es6*/ @@ -88,10 +107,14 @@ if (true) { function b() {} ``` +::: + Although `let b` in the `if` statement is before the *function* declaration in the outer scope, it is incorrect. Examples of **correct** code for the default `{ "hoist": "functions" }` option: +::: correct + ```js /*eslint no-shadow: ["error", { "hoist": "functions" }]*/ /*eslint-env es6*/ @@ -103,12 +126,16 @@ if (true) { let a = 5; ``` +::: + Because `let a` in the `if` statement is before the *variable* declaration in the outer scope, it is correct. #### hoist: all Examples of **incorrect** code for the `{ "hoist": "all" }` option: +::: incorrect + ```js /*eslint no-shadow: ["error", { "hoist": "all" }]*/ /*eslint-env es6*/ @@ -122,10 +149,14 @@ let a = 5; function b() {} ``` +::: + #### hoist: never Examples of **correct** code for the `{ "hoist": "never" }` option: +::: correct + ```js /*eslint no-shadow: ["error", { "hoist": "never" }]*/ /*eslint-env es6*/ @@ -139,6 +170,8 @@ let a = 5; function b() {} ``` +::: + Because `let a` and `let b` in the `if` statement are before the declarations in the outer scope, they are correct. ### allow @@ -147,6 +180,8 @@ The `allow` option is an array of identifier names for which shadowing is allowe Examples of **correct** code for the `{ "allow": ["done"] }` option: +::: correct + ```js /*eslint no-shadow: ["error", { "allow": ["done"] }]*/ /*eslint-env es6*/ @@ -164,10 +199,40 @@ foo(function (err, result) { }); ``` -## Further Reading +::: + +### ignoreOnInitialization + +The `ignoreOnInitialization` option is `false` by default. If it is `true`, it prevents reporting shadowing of variables in their initializers when the shadowed variable is presumably still uninitialized. -* [Variable Shadowing](https://en.wikipedia.org/wiki/Variable_shadowing) +The shadowed variable must be on the left side. The shadowing variable must be on the right side and declared in a callback function or in an IIFE. + +Examples of **incorrect** code for the `{ "ignoreOnInitialization": "true" }` option: + +::: incorrect + +```js +/*eslint no-shadow: ["error", { "ignoreOnInitialization": true }]*/ + +var x = x => x; +``` + +::: + +Because the shadowing variable `x` will shadow the already initialized shadowed variable `x`. + +Examples of **correct** code for the `{ "ignoreOnInitialization": true }` option: + +::: correct + +```js +/*eslint no-shadow: ["error", { "ignoreOnInitialization": true }]*/ + +var x = foo(x => x) + +var y = (y => y)() +``` -## Related Rules +::: -* [no-shadow-restricted-names](no-shadow-restricted-names.md) +The rationale for callback functions is the assumption that they will be called during the initialization, so that at the time when the shadowing variable will be used, the shadowed variable has not yet been initialized. diff --git a/eslint/docs/rules/no-space-before-semi.md b/eslint/docs/src/rules/no-space-before-semi.md similarity index 75% rename from eslint/docs/rules/no-space-before-semi.md rename to eslint/docs/src/rules/no-space-before-semi.md index 2e142dd..5e50520 100644 --- a/eslint/docs/rules/no-space-before-semi.md +++ b/eslint/docs/src/rules/no-space-before-semi.md @@ -1,6 +1,15 @@ -# no-space-before-semi: disallow spaces before semicolons +--- +title: no-space-before-semi +layout: doc -(removed) This rule was **removed** in ESLint v1.0 and **replaced** by the [semi-spacing](semi-spacing.md) rule. +related_rules: +- semi +- no-extra-semi +--- + +Disallows spaces before semicolons. + +(removed) This rule was **removed** in ESLint v1.0 and **replaced** by the [semi-spacing](semi-spacing) rule. JavaScript allows for placing unnecessary spaces between an expression and the closing semicolon. @@ -18,6 +27,8 @@ This rule prevents the use of spaces before a semicolon in expressions. Examples of **incorrect** code for this rule: +::: incorrect + ```js var foo = "bar" ; @@ -29,15 +40,16 @@ var foo = function() { var foo = 1 + 2 ; ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js ;(function(){}()); var foo = "bar"; ``` -## Related Rules - -* [semi](semi.md) -* [no-extra-semi](no-extra-semi.md) +::: diff --git a/eslint/docs/rules/no-spaced-func.md b/eslint/docs/src/rules/no-spaced-func.md similarity index 77% rename from eslint/docs/rules/no-spaced-func.md rename to eslint/docs/src/rules/no-spaced-func.md index d424049..c844996 100644 --- a/eslint/docs/rules/no-spaced-func.md +++ b/eslint/docs/src/rules/no-spaced-func.md @@ -1,6 +1,12 @@ -# disallow spacing between function identifiers and their applications (no-spaced-func) +--- +title: no-spaced-func +layout: doc +rule_type: layout +--- -This rule was **deprecated** in ESLint v3.3.0 and replaced by the [func-call-spacing](func-call-spacing.md) rule. + + +This rule was **deprecated** in ESLint v3.3.0 and replaced by the [func-call-spacing](func-call-spacing) rule. While it's possible to have whitespace between the name of a function and the parentheses that execute it, such patterns tend to look more like errors. @@ -10,6 +16,8 @@ This rule disallows spacing between function identifiers and their applications. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-spaced-func: "error"*/ @@ -19,10 +27,16 @@ fn () ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-spaced-func: "error"*/ fn() ``` + +::: diff --git a/eslint/docs/rules/no-sparse-arrays.md b/eslint/docs/src/rules/no-sparse-arrays.md similarity index 88% rename from eslint/docs/rules/no-sparse-arrays.md rename to eslint/docs/src/rules/no-sparse-arrays.md index 826cfd8..cbeb57c 100644 --- a/eslint/docs/rules/no-sparse-arrays.md +++ b/eslint/docs/src/rules/no-sparse-arrays.md @@ -1,4 +1,12 @@ -# disallow sparse arrays (no-sparse-arrays) +--- +title: no-sparse-arrays +layout: doc +rule_type: problem +further_reading: +- https://www.nczonline.net/blog/2007/09/09/inconsistent-array-literals/ +--- + + Sparse arrays contain empty slots, most frequently due to multiple commas being used in an array literal, such as: @@ -22,6 +30,8 @@ This rule disallows sparse array literals which have "holes" where commas are no Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-sparse-arrays: "error"*/ @@ -29,8 +39,12 @@ var items = [,]; var colors = [ "red",, "blue" ]; ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-sparse-arrays: "error"*/ @@ -41,10 +55,8 @@ var items = new Array(23); var colors = [ "red", "blue", ]; ``` +::: + ## When Not To Use It If you want to use sparse arrays, then it is safe to disable this rule. - -## Further Reading - -* [Inconsistent array literals](https://www.nczonline.net/blog/2007/09/09/inconsistent-array-literals/) diff --git a/eslint/docs/rules/no-sync.md b/eslint/docs/src/rules/no-sync.md similarity index 94% rename from eslint/docs/rules/no-sync.md rename to eslint/docs/src/rules/no-sync.md index 949df6d..4b5eb57 100644 --- a/eslint/docs/rules/no-sync.md +++ b/eslint/docs/src/rules/no-sync.md @@ -1,4 +1,9 @@ -# Disallow Synchronous Methods (no-sync) +--- +title: no-sync +layout: doc +rule_type: suggestion +--- + This rule was **deprecated** in ESLint v7.0.0. Please use the corresponding rule in [`eslint-plugin-node`](https://github.com/mysticatea/eslint-plugin-node). @@ -14,6 +19,8 @@ This rule has an optional object option `{ allowAtRootLevel: <boolean> }`, which Examples of **incorrect** code for this rule with the default `{ allowAtRootLevel: false }` option: +::: incorrect + ```js /*eslint no-sync: "error"*/ @@ -24,8 +31,12 @@ function foo() { } ``` +::: + Examples of **correct** code for this rule with the default `{ allowAtRootLevel: false }` option: +::: correct + ```js /*eslint no-sync: "error"*/ @@ -36,8 +47,12 @@ async(function() { }); ``` +::: + Examples of **incorrect** code for this rule with the `{ allowAtRootLevel: true }` option +::: incorrect + ```js /*eslint no-sync: ["error", { allowAtRootLevel: true }]*/ @@ -48,14 +63,20 @@ function foo() { var bar = baz => fs.readFileSync(qux); ``` +::: + Examples of **correct** code for this rule with the `{ allowAtRootLevel: true }` option +::: correct + ```js /*eslint no-sync: ["error", { allowAtRootLevel: true }]*/ fs.readFileSync(somePath).toString(); ``` +::: + ## When Not To Use It If you want to allow synchronous operations in your script, do not enable this rule. diff --git a/eslint/docs/rules/no-tabs.md b/eslint/docs/src/rules/no-tabs.md similarity index 91% rename from eslint/docs/rules/no-tabs.md rename to eslint/docs/src/rules/no-tabs.md index 4e02d9a..279e0c8 100644 --- a/eslint/docs/rules/no-tabs.md +++ b/eslint/docs/src/rules/no-tabs.md @@ -1,4 +1,9 @@ -# disallow all tabs (no-tabs) +--- +title: no-tabs +layout: doc +rule_type: layout +--- + Some style guides don't allow the use of tab characters at all, including within comments. @@ -8,6 +13,8 @@ This rule looks for tabs anywhere inside a file: code, comments or anything else Examples of **incorrect** code for this rule: +::: incorrect + ```js var a \t= 2; @@ -19,8 +26,12 @@ function test(){} var x = 1; // \t test ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js var a = 2; @@ -32,6 +43,8 @@ function test(){} var x = 1; // test ``` +::: + ### Options This rule has an optional object option with the following properties: @@ -42,6 +55,8 @@ This rule has an optional object option with the following properties: Examples of **correct** code for this rule with the `allowIndentationTabs: true` option: +::: correct + ```js /* eslint no-tabs: ["error", { allowIndentationTabs: true }] */ @@ -52,6 +67,8 @@ function test() { \t// comment with leading indentation tab ``` +::: + ## When Not To Use It If you have established a standard where having tabs is fine, then you can disable this rule. diff --git a/eslint/docs/rules/no-template-curly-in-string.md b/eslint/docs/src/rules/no-template-curly-in-string.md similarity index 91% rename from eslint/docs/rules/no-template-curly-in-string.md rename to eslint/docs/src/rules/no-template-curly-in-string.md index 68a237d..79f42e7 100644 --- a/eslint/docs/rules/no-template-curly-in-string.md +++ b/eslint/docs/src/rules/no-template-curly-in-string.md @@ -1,4 +1,9 @@ -# Disallow template literal placeholder syntax in regular strings (no-template-curly-in-string) +--- +title: no-template-curly-in-string +layout: doc +rule_type: problem +--- + ECMAScript 6 allows programmers to create strings containing variable or expressions using template literals, instead of string concatenation, by writing expressions like `${variable}` between two backtick quotes (\`). It can be easy to use the wrong quotes when wanting to use template literals, by writing `"${variable}"`, and end up with the literal value `"${variable}"` instead of a string containing the value of the injected expressions. @@ -10,6 +15,8 @@ This rule aims to warn when a regular string contains what looks like a template Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-template-curly-in-string: "error"*/ "Hello ${name}!"; @@ -17,8 +24,12 @@ Examples of **incorrect** code for this rule: "Time: ${12 * 60 * 60 * 1000}"; ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-template-curly-in-string: "error"*/ `Hello ${name}!`; @@ -27,6 +38,8 @@ Examples of **correct** code for this rule: templateFunction`Hello ${name}`; ``` +::: + ## When Not To Use It This rule should not be used in ES3/5 environments. diff --git a/eslint/docs/rules/no-ternary.md b/eslint/docs/src/rules/no-ternary.md similarity index 81% rename from eslint/docs/rules/no-ternary.md rename to eslint/docs/src/rules/no-ternary.md index 3c95f82..7502c5b 100644 --- a/eslint/docs/rules/no-ternary.md +++ b/eslint/docs/src/rules/no-ternary.md @@ -1,4 +1,12 @@ -# disallow ternary operators (no-ternary) +--- +title: no-ternary +layout: doc +rule_type: suggestion +related_rules: +- no-nested-ternary +- no-unneeded-ternary +--- + The ternary operator is used to conditionally assign a value to a variable. Some believe that the use of ternary operators leads to unclear code. @@ -12,6 +20,8 @@ This rule disallows ternary operators. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-ternary: "error"*/ @@ -22,8 +32,12 @@ function quux() { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-ternary: "error"*/ @@ -44,7 +58,4 @@ function quux() { } ``` -## Related Rules - -* [no-nested-ternary](no-nested-ternary.md) -* [no-unneeded-ternary](no-unneeded-ternary.md) +::: diff --git a/eslint/docs/rules/no-this-before-super.md b/eslint/docs/src/rules/no-this-before-super.md similarity index 92% rename from eslint/docs/rules/no-this-before-super.md rename to eslint/docs/src/rules/no-this-before-super.md index 53223b7..e6e26dd 100644 --- a/eslint/docs/rules/no-this-before-super.md +++ b/eslint/docs/src/rules/no-this-before-super.md @@ -1,4 +1,10 @@ -# Disallow use of `this`/`super` before calling `super()` in constructors. (no-this-before-super) +--- +title: no-this-before-super +layout: doc +rule_type: problem +--- + + In the constructor of derived classes, if `this`/`super` are used before `super()` calls, it raises a reference error. @@ -12,6 +18,8 @@ This rule is aimed to flag `this`/`super` keywords before `super()` callings. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-this-before-super: "error"*/ /*eslint-env es6*/ @@ -44,8 +52,12 @@ class A extends B { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-this-before-super: "error"*/ /*eslint-env es6*/ @@ -70,6 +82,8 @@ class A extends B { } ``` +::: + ## When Not To Use It If you don't want to be notified about using `this`/`super` before `super()` in constructors, you can safely disable this rule. diff --git a/eslint/docs/rules/no-throw-literal.md b/eslint/docs/src/rules/no-throw-literal.md similarity index 93% rename from eslint/docs/rules/no-throw-literal.md rename to eslint/docs/src/rules/no-throw-literal.md index ecb19ed..6f57e36 100644 --- a/eslint/docs/rules/no-throw-literal.md +++ b/eslint/docs/src/rules/no-throw-literal.md @@ -1,4 +1,9 @@ -# Restrict what can be thrown as an exception (no-throw-literal) +--- +title: no-throw-literal +layout: doc +rule_type: suggestion +--- + It is considered good practice to only `throw` the `Error` object itself or an object using the `Error` object as base objects for user-defined exceptions. The fundamental benefit of `Error` objects is that they automatically keep track of where they were built and originated. @@ -11,6 +16,8 @@ This rule is aimed at maintaining consistency when throwing exception by disallo Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-throw-literal: "error"*/ /*eslint-env es6*/ @@ -32,8 +39,12 @@ throw `${err}` ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-throw-literal: "error"*/ @@ -51,12 +62,16 @@ try { } ``` +::: + ## Known Limitations Due to the limits of static analysis, this rule cannot guarantee that you will only throw `Error` objects. Examples of **correct** code for this rule, but which do not throw an `Error` object: +::: correct + ```js /*eslint no-throw-literal: "error"*/ @@ -75,3 +90,5 @@ var foo = { }; throw foo.bar; ``` + +::: diff --git a/eslint/docs/rules/no-trailing-spaces.md b/eslint/docs/src/rules/no-trailing-spaces.md similarity index 92% rename from eslint/docs/rules/no-trailing-spaces.md rename to eslint/docs/src/rules/no-trailing-spaces.md index e0724b7..831ab33 100644 --- a/eslint/docs/rules/no-trailing-spaces.md +++ b/eslint/docs/src/rules/no-trailing-spaces.md @@ -1,4 +1,10 @@ -# disallow trailing whitespace at the end of lines (no-trailing-spaces) +--- +title: no-trailing-spaces +layout: doc +rule_type: layout +--- + + Sometimes in the course of editing files, you can end up with extra whitespace at the end of lines. These whitespace differences can be picked up by source control systems and flagged as diffs, causing frustration for developers. While this extra whitespace causes no functional issues, many code conventions require that trailing spaces be removed before check-in. @@ -8,6 +14,8 @@ This rule disallows trailing whitespace (spaces, tabs, and other Unicode whitesp Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-trailing-spaces: "error"*/ @@ -16,8 +24,12 @@ var baz = 5;//•• //••••• ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-trailing-spaces: "error"*/ @@ -25,6 +37,8 @@ var foo = 0; var baz = 5; ``` +::: + ## Options This rule has an object option: @@ -38,6 +52,8 @@ This rule has an object option: Examples of **correct** code for this rule with the `{ "skipBlankLines": true }` option: +::: correct + ```js /*eslint no-trailing-spaces: ["error", { "skipBlankLines": true }]*/ @@ -46,10 +62,14 @@ var baz = 5; //••••• ``` +::: + ### ignoreComments Examples of **correct** code for this rule with the `{ "ignoreComments": true }` option: +::: correct + ```js /*eslint no-trailing-spaces: ["error", { "ignoreComments": true }]*/ @@ -61,3 +81,5 @@ Examples of **correct** code for this rule with the `{ "ignoreComments": true }` *•bar */ ``` + +::: diff --git a/eslint/docs/rules/no-undef-init.md b/eslint/docs/src/rules/no-undef-init.md similarity index 92% rename from eslint/docs/rules/no-undef-init.md rename to eslint/docs/src/rules/no-undef-init.md index 10bde77..9f36bc4 100644 --- a/eslint/docs/rules/no-undef-init.md +++ b/eslint/docs/src/rules/no-undef-init.md @@ -1,4 +1,13 @@ -# Disallow Initializing to undefined (no-undef-init) +--- +title: no-undef-init +layout: doc +rule_type: suggestion +related_rules: +- no-undefined +- no-void +--- + + In JavaScript, a variable that is declared and not initialized to any value automatically gets the value of `undefined`. For example: @@ -22,6 +31,8 @@ This rule aims to eliminate `var` and `let` variable declarations that initializ Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-undef-init: "error"*/ @@ -29,8 +40,12 @@ var foo = undefined; let bar = undefined; ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-undef-init: "error"*/ @@ -38,10 +53,14 @@ var foo; let bar; ``` +::: + Please note that this rule does not check `const` declarations, destructuring patterns, function parameters, and class fields. Examples of additional **correct** code for this rule: +::: correct + ```js /*eslint no-undef-init: "error"*/ @@ -58,12 +77,16 @@ class Foo { } ``` +::: + ## When Not To Use It There is one situation where initializing to `undefined` behaves differently than omitting the initialization, and that's when a `var` declaration occurs inside of a loop. For example: Example of **incorrect** code for this rule: +::: incorrect + ```js for (i = 0; i < 10; i++) { var x = undefined; @@ -72,6 +95,8 @@ for (i = 0; i < 10; i++) { } ``` +::: + In this case, the `var x` is hoisted out of the loop, effectively creating: ```js @@ -111,6 +136,8 @@ If you're using such an initialization inside of a loop, then you should disable Example of **correct** code for this rule, because it is disabled on a specific line: +::: correct + ```js /*eslint no-undef-init: "error"*/ @@ -121,7 +148,4 @@ for (i = 0; i < 10; i++) { } ``` -## Related Rules - -* [no-undefined](no-undefined.md) -* [no-void](no-void.md) +::: diff --git a/eslint/docs/rules/no-undef.md b/eslint/docs/src/rules/no-undef.md similarity index 77% rename from eslint/docs/rules/no-undef.md rename to eslint/docs/src/rules/no-undef.md index a7de805..94a7352 100644 --- a/eslint/docs/rules/no-undef.md +++ b/eslint/docs/src/rules/no-undef.md @@ -1,13 +1,24 @@ -# Disallow Undeclared Variables (no-undef) +--- +title: no-undef +layout: doc +rule_type: problem +related_rules: +- no-global-assign +- no-redeclare +--- + + This rule can help you locate potential ReferenceErrors resulting from misspellings of variable and parameter names, or accidental implicit globals (for example, from forgetting the `var` keyword in a `for` loop initializer). ## Rule Details -Any reference to an undeclared variable causes a warning, unless the variable is explicitly mentioned in a `/*global ...*/` comment, or specified in the [`globals` key in the configuration file](https://eslint.org/docs/user-guide/configuring#specifying-globals). A common use case for these is if you intentionally use globals that are defined elsewhere (e.g. in a script sourced from HTML). +Any reference to an undeclared variable causes a warning, unless the variable is explicitly mentioned in a `/*global ...*/` comment, or specified in the [`globals` key in the configuration file](../user-guide/configuring/language-options#using-configuration-files-1). A common use case for these is if you intentionally use globals that are defined elsewhere (e.g. in a script sourced from HTML). Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-undef: "error"*/ @@ -15,8 +26,12 @@ var foo = someFunction(); var bar = a + 1; ``` +::: + Examples of **correct** code for this rule with `global` declaration: +::: correct + ```js /*global someFunction, a*/ /*eslint no-undef: "error"*/ @@ -25,11 +40,13 @@ var foo = someFunction(); var bar = a + 1; ``` +::: + Note that this rule does not disallow assignments to read-only global variables. -See [no-global-assign](no-global-assign.md) if you also want to disallow those assignments. +See [no-global-assign](no-global-assign) if you also want to disallow those assignments. This rule also does not disallow redeclarations of global variables. -See [no-redeclare](no-redeclare.md) if you also want to disallow those redeclarations. +See [no-redeclare](no-redeclare) if you also want to disallow those redeclarations. ## Options @@ -39,6 +56,8 @@ See [no-redeclare](no-redeclare.md) if you also want to disallow those redeclara Examples of **correct** code for the default `{ "typeof": false }` option: +::: correct + ```js /*eslint no-undef: "error"*/ @@ -47,18 +66,26 @@ if (typeof UndefinedIdentifier === "undefined") { } ``` +::: + You can use this option if you want to prevent `typeof` check on a variable which has not been declared. Examples of **incorrect** code for the `{ "typeof": true }` option: +::: incorrect + ```js /*eslint no-undef: ["error", { "typeof": true }] */ if(typeof a === "string"){} ``` +::: + Examples of **correct** code for the `{ "typeof": true }` option with `global` declaration: +::: correct + ```js /*global a*/ /*eslint no-undef: ["error", { "typeof": true }] */ @@ -66,14 +93,18 @@ Examples of **correct** code for the `{ "typeof": true }` option with `global` d if(typeof a === "string"){} ``` +::: + ## Environments -For convenience, ESLint provides shortcuts that pre-define global variables exposed by popular libraries and runtime environments. This rule supports these environments, as listed in [Specifying Environments](../user-guide/configuring/language-options.md#specifying-environments). A few examples are given below. +For convenience, ESLint provides shortcuts that pre-define global variables exposed by popular libraries and runtime environments. This rule supports these environments, as listed in [Specifying Environments](../user-guide/configuring/language-options#specifying-environments). A few examples are given below. ### browser Examples of **correct** code for this rule with `browser` environment: +::: correct + ```js /*eslint no-undef: "error"*/ /*eslint-env browser*/ @@ -83,10 +114,14 @@ setTimeout(function() { }); ``` +::: + ### Node.js Examples of **correct** code for this rule with `node` environment: +::: correct + ```js /*eslint no-undef: "error"*/ /*eslint-env node*/ @@ -97,6 +132,8 @@ module.exports = function() { }; ``` +::: + ## When Not To Use It If explicit declaration of global variables is not to your taste. @@ -104,8 +141,3 @@ If explicit declaration of global variables is not to your taste. ## Compatibility This rule provides compatibility with treatment of global variables in [JSHint](http://jshint.com/) and [JSLint](http://www.jslint.com). - -## Related Rules - -* [no-global-assign](no-global-assign.md) -* [no-redeclare](no-redeclare.md) diff --git a/eslint/docs/rules/no-undefined.md b/eslint/docs/src/rules/no-undefined.md similarity index 67% rename from eslint/docs/rules/no-undefined.md rename to eslint/docs/src/rules/no-undefined.md index 0e67c21..978fc42 100644 --- a/eslint/docs/rules/no-undefined.md +++ b/eslint/docs/src/rules/no-undefined.md @@ -1,4 +1,18 @@ -# Disallow Use of `undefined` Variable (no-undefined) +--- +title: no-undefined +layout: doc +rule_type: suggestion +related_rules: +- no-undef-init +- no-void +- no-shadow-restricted-names +- no-global-assign +further_reading: +- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined +- https://javascriptweblog.wordpress.com/2010/08/16/understanding-undefined-and-preventing-referenceerrors/ +- https://es5.github.io/#x15.1.1.3 +--- + The `undefined` variable in JavaScript is actually a property of the global object. As such, in ECMAScript 3 it was possible to overwrite the value of `undefined`. While ECMAScript 5 disallows overwriting `undefined`, it's still possible to shadow `undefined`, such as: @@ -20,7 +34,7 @@ Because `undefined` can be overwritten or shadowed, reading `undefined` can give * Checking if a value is `undefined` should be done with `typeof`. * Using the `void` operator to generate the value of `undefined` if necessary. -As an alternative, you can use the [no-global-assign](no-global-assign.md) and [no-shadow-restricted-names](no-shadow-restricted-names.md) rules to prevent `undefined` from being shadowed or assigned a different value. This ensures that `undefined` will always hold its original, expected value. +As an alternative, you can use the [no-global-assign](no-global-assign) and [no-shadow-restricted-names](no-shadow-restricted-names) rules to prevent `undefined` from being shadowed or assigned a different value. This ensures that `undefined` will always hold its original, expected value. ## Rule Details @@ -28,6 +42,8 @@ This rule aims to eliminate the use of `undefined`, and as such, generates a war Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-undefined: "error"*/ @@ -44,8 +60,12 @@ function foo(undefined) { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-undefined: "error"*/ @@ -60,19 +80,8 @@ if (typeof foo === "undefined") { global.undefined = "foo"; ``` +::: + ## When Not To Use It If you want to allow the use of `undefined` in your code, then you can safely turn this rule off. - -## Further Reading - -* [undefined - JavaScript \| MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined) -* [Understanding JavaScript’s ‘undefined’ \| JavaScript, JavaScript...](https://javascriptweblog.wordpress.com/2010/08/16/understanding-undefined-and-preventing-referenceerrors/) -* [ECMA262 edition 5.1 &sect;15.1.1.3: undefined](https://es5.github.io/#x15.1.1.3) - -## Related Rules - -* [no-undef-init](no-undef-init.md) -* [no-void](no-void.md) -* [no-shadow-restricted-names](no-shadow-restricted-names.md) -* [no-global-assign](no-global-assign.md) diff --git a/eslint/docs/rules/no-underscore-dangle.md b/eslint/docs/src/rules/no-underscore-dangle.md similarity index 72% rename from eslint/docs/rules/no-underscore-dangle.md rename to eslint/docs/src/rules/no-underscore-dangle.md index ded4281..f74beac 100644 --- a/eslint/docs/rules/no-underscore-dangle.md +++ b/eslint/docs/src/rules/no-underscore-dangle.md @@ -1,4 +1,9 @@ -# disallow dangling underscores in identifiers (no-underscore-dangle) +--- +title: no-underscore-dangle +layout: doc +rule_type: suggestion +--- + As far as naming conventions for identifiers go, dangling underscores may be the most polarizing in JavaScript. Dangling underscores are underscores at either the beginning or end of an identifier, such as: @@ -16,6 +21,8 @@ This rule disallows dangling underscores in identifiers. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-underscore-dangle: "error"*/ @@ -24,8 +31,12 @@ var __proto__ = {}; foo._bar(); ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-underscore-dangle: "error"*/ @@ -38,21 +49,26 @@ const foo = { onClick(_bar) {} }; const foo = (_bar) => {}; ``` +::: + ## Options This rule has an object option: -- `"allow"` allows specified identifiers to have dangling underscores -- `"allowAfterThis": false` (default) disallows dangling underscores in members of the `this` object -- `"allowAfterSuper": false` (default) disallows dangling underscores in members of the `super` object -- `"allowAfterThisConstructor": false` (default) disallows dangling underscores in members of the `this.constructor` object -- `"enforceInMethodNames": false` (default) allows dangling underscores in method names -- `"allowFunctionParams": true` (default) allows dangling underscores in function parameter names +* `"allow"` allows specified identifiers to have dangling underscores +* `"allowAfterThis": false` (default) disallows dangling underscores in members of the `this` object +* `"allowAfterSuper": false` (default) disallows dangling underscores in members of the `super` object +* `"allowAfterThisConstructor": false` (default) disallows dangling underscores in members of the `this.constructor` object +* `"enforceInMethodNames": false` (default) allows dangling underscores in method names +* `"enforceInClassFields": false` (default) allows dangling underscores in es2022 class fields names +* `"allowFunctionParams": true` (default) allows dangling underscores in function parameter names ### allow Examples of additional **correct** code for this rule with the `{ "allow": ["foo_", "_bar"] }` option: +::: correct + ```js /*eslint no-underscore-dangle: ["error", { "allow": ["foo_", "_bar"] }]*/ @@ -60,10 +76,14 @@ var foo_; foo._bar(); ``` +::: + ### allowAfterThis Examples of **correct** code for this rule with the `{ "allowAfterThis": true }` option: +::: correct + ```js /*eslint no-underscore-dangle: ["error", { "allowAfterThis": true }]*/ @@ -71,10 +91,14 @@ var a = this.foo_; this._bar(); ``` +::: + ### allowAfterSuper Examples of **correct** code for this rule with the `{ "allowAfterSuper": true }` option: +::: correct + ```js /*eslint no-underscore-dangle: ["error", { "allowAfterSuper": true }]*/ @@ -82,10 +106,14 @@ var a = super.foo_; super._bar(); ``` +::: + ### allowAfterThisConstructor Examples of **correct** code for this rule with the `{ "allowAfterThisConstructor": true }` option: +::: correct + ```js /*eslint no-underscore-dangle: ["error", { "allowAfterThisConstructor": true }]*/ @@ -93,10 +121,14 @@ var a = this.constructor.foo_; this.constructor._bar(); ``` +::: + ### enforceInMethodNames Examples of **incorrect** code for this rule with the `{ "enforceInMethodNames": true }` option: +::: incorrect + ```js /*eslint no-underscore-dangle: ["error", { "enforceInMethodNames": true }]*/ @@ -117,10 +149,46 @@ const o = { }; ``` +::: + +### enforceInClassFields + +Examples of **incorrect** code for this rule with the `{ "enforceInClassFields": true }` option: + +::: incorrect + +```js +/*eslint no-underscore-dangle: ["error", { "enforceInClassFields": true }]*/ + +class Foo { + _bar; +} + +class Foo { + _bar = () => {}; +} + +class Foo { + bar_; +} + +class Foo { + #_bar; +} + +class Foo { + #bar_; +} +``` + +::: + ### allowFunctionParams Examples of **incorrect** code for this rule with the `{ "allowFunctionParams": false }` option: +::: incorrect + ```js /*eslint no-underscore-dangle: ["error", { "allowFunctionParams": false }]*/ @@ -137,6 +205,8 @@ const foo = (_bar = 0) => {}; const foo = (..._bar) => {}; ``` +::: + ## When Not To Use It If you want to allow dangling underscores in identifiers, then you can safely turn this rule off. diff --git a/eslint/docs/rules/no-unexpected-multiline.md b/eslint/docs/src/rules/no-unexpected-multiline.md similarity index 89% rename from eslint/docs/rules/no-unexpected-multiline.md rename to eslint/docs/src/rules/no-unexpected-multiline.md index a328f83..6a51c23 100644 --- a/eslint/docs/rules/no-unexpected-multiline.md +++ b/eslint/docs/src/rules/no-unexpected-multiline.md @@ -1,6 +1,16 @@ -# disallow confusing multiline expressions (no-unexpected-multiline) +--- +title: no-unexpected-multiline +layout: doc +rule_type: problem +related_rules: +- func-call-spacing +- semi +- space-unary-ops +--- -Semicolons are usually optional in JavaScript, because of automatic semicolon insertion (ASI). You can require or disallow semicolons with the [semi](./semi.md) rule. + + +Semicolons are usually optional in JavaScript, because of automatic semicolon insertion (ASI). You can require or disallow semicolons with the [semi](./semi) rule. The rules for ASI are relatively straightforward: As once described by Isaac Schlueter, a newline character always ends a statement, just like a semicolon, **except** where one of the following is true: @@ -17,6 +27,8 @@ This rule disallows confusing multiline expressions where a newline looks like i Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-unexpected-multiline: "error"*/ @@ -37,8 +49,12 @@ let x = foo /regex/g.test(bar) ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-unexpected-multiline: "error"*/ @@ -61,14 +77,10 @@ let tag = function() {} tag `hello` ``` +::: + ## When Not To Use It You can turn this rule off if you are confident that you will not accidentally introduce code like this. -Note that the patterns considered problems are **not** flagged by the [semi](semi.md) rule. - -## Related Rules - -* [func-call-spacing](func-call-spacing.md) -* [semi](semi.md) -* [space-unary-ops](space-unary-ops.md) +Note that the patterns considered problems are **not** flagged by the [semi](semi) rule. diff --git a/eslint/docs/rules/no-unmodified-loop-condition.md b/eslint/docs/src/rules/no-unmodified-loop-condition.md similarity index 94% rename from eslint/docs/rules/no-unmodified-loop-condition.md rename to eslint/docs/src/rules/no-unmodified-loop-condition.md index 7d9bcee..f214c6c 100644 --- a/eslint/docs/rules/no-unmodified-loop-condition.md +++ b/eslint/docs/src/rules/no-unmodified-loop-condition.md @@ -1,4 +1,9 @@ -# Disallow unmodified conditions of loops (no-unmodified-loop-condition) +--- +title: no-unmodified-loop-condition +layout: doc +rule_type: problem +--- + Variables in a loop condition often are modified in the loop. If not, it's possibly a mistake. @@ -28,6 +33,8 @@ If a reference is inside of a dynamic expression (e.g. `CallExpression`, Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-unmodified-loop-condition: "error"*/ @@ -47,8 +54,12 @@ while (node !== root) { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-unmodified-loop-condition: "error"*/ @@ -85,6 +96,8 @@ while (check(obj)) { } ``` +::: + ## When Not To Use It If you don't want to notified about references inside of loop conditions, then it's safe to disable this rule. diff --git a/eslint/docs/rules/no-unneeded-ternary.md b/eslint/docs/src/rules/no-unneeded-ternary.md similarity index 92% rename from eslint/docs/rules/no-unneeded-ternary.md rename to eslint/docs/src/rules/no-unneeded-ternary.md index e5d4e80..e1b0ba2 100644 --- a/eslint/docs/rules/no-unneeded-ternary.md +++ b/eslint/docs/src/rules/no-unneeded-ternary.md @@ -1,4 +1,13 @@ -# disallow ternary operators when simpler alternatives exist (no-unneeded-ternary) +--- +title: no-unneeded-ternary +layout: doc +rule_type: suggestion +related_rules: +- no-ternary +- no-nested-ternary +--- + + It's a common mistake in JavaScript to use a conditional expression to select between two Boolean values instead of using ! to convert the test to a Boolean. Here are some examples: @@ -10,7 +19,6 @@ var isYes = answer === 1 ? true : false; // Good var isYes = answer === 1; - // Bad var isNo = answer === 1 ? false : true; @@ -35,6 +43,8 @@ This rule disallow ternary operators when simpler alternatives exist. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-unneeded-ternary: "error"*/ @@ -43,8 +53,12 @@ var a = x === 2 ? true : false; var a = x ? true : false; ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-unneeded-ternary: "error"*/ @@ -59,6 +73,8 @@ var a = x ? y : x; f(x ? x : 1); // default assignment - would be disallowed if defaultAssignment option set to false. See option details below. ``` +::: + ## Options This rule has an object option: @@ -72,6 +88,8 @@ When set to `true`, which it is by default, The defaultAssignment option allows Examples of additional **incorrect** code for this rule with the `{ "defaultAssignment": false }` option: +::: incorrect + ```js /*eslint no-unneeded-ternary: ["error", { "defaultAssignment": false }]*/ @@ -80,13 +98,10 @@ var a = x ? x : 1; f(x ? x : 1); ``` +::: + Note that `defaultAssignment: false` still allows expressions of the form `x ? expr : x` (where the identifier is on the right hand side of the ternary). ## When Not To Use It You can turn this rule off if you are not concerned with unnecessary complexity in conditional expressions. - -## Related Rules - -* [no-ternary](no-ternary.md) -* [no-nested-ternary](no-nested-ternary.md) diff --git a/eslint/docs/rules/no-unreachable-loop.md b/eslint/docs/src/rules/no-unreachable-loop.md similarity index 93% rename from eslint/docs/rules/no-unreachable-loop.md rename to eslint/docs/src/rules/no-unreachable-loop.md index c58b97f..4f24e57 100644 --- a/eslint/docs/rules/no-unreachable-loop.md +++ b/eslint/docs/src/rules/no-unreachable-loop.md @@ -1,4 +1,14 @@ -# Disallow loops with a body that allows only one iteration (no-unreachable-loop) +--- +title: no-unreachable-loop +layout: doc +rule_type: problem +related_rules: +- no-unreachable +- no-constant-condition +- no-unmodified-loop-condition +- for-direction +--- + A loop that can never reach the second iteration is a possible error in the code. @@ -24,6 +34,8 @@ This rule checks `while`, `do-while`, `for`, `for-in` and `for-of` loops. You ca Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-unreachable-loop: "error"*/ @@ -71,8 +83,12 @@ for (foo of bar) { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-unreachable-loop: "error"*/ @@ -120,10 +136,14 @@ for (foo of bar) { } ``` +::: + Please note that this rule is not designed to check loop conditions, and will not warn in cases such as the following examples. Examples of additional **correct** code for this rule: +::: correct + ```js /*eslint no-unreachable-loop: "error"*/ @@ -140,13 +160,15 @@ for (const a of [1]) { } ``` +::: + ## Options This rule has an object option, with one option: * `"ignore"` - an optional array of loop types that will be ignored by this rule. -## ignore +### ignore You can specify up to 5 different elements in the `"ignore"` array: @@ -158,6 +180,8 @@ You can specify up to 5 different elements in the `"ignore"` array: Examples of **correct** code for this rule with the `"ignore"` option: +::: correct + ```js /*eslint no-unreachable-loop: ["error", { "ignore": ["ForInStatement", "ForOfStatement"] }]*/ @@ -169,6 +193,8 @@ for (var key in obj) { for (const a of b) break; ``` +::: + ## Known Limitations Static code path analysis, in general, does not evaluate conditions. Due to this fact, this rule might miss reporting cases such as the following: @@ -181,10 +207,3 @@ for (let i = 0; i < 10; i++) { } } ``` - -## Related Rules - -* [no-unreachable](no-unreachable.md) -* [no-constant-condition](no-constant-condition.md) -* [no-unmodified-loop-condition](no-unmodified-loop-condition.md) -* [for-direction](for-direction.md) diff --git a/eslint/docs/rules/no-unreachable.md b/eslint/docs/src/rules/no-unreachable.md similarity index 94% rename from eslint/docs/rules/no-unreachable.md rename to eslint/docs/src/rules/no-unreachable.md index 2fe8a69..456fea4 100644 --- a/eslint/docs/rules/no-unreachable.md +++ b/eslint/docs/src/rules/no-unreachable.md @@ -1,4 +1,10 @@ -# disallow unreachable code after `return`, `throw`, `continue`, and `break` statements (no-unreachable) +--- +title: no-unreachable +layout: doc +rule_type: problem +--- + + Because the `return`, `throw`, `break`, and `continue` statements unconditionally exit a block of code, any statements after them cannot be executed. Unreachable statements are usually a mistake. @@ -28,6 +34,8 @@ This rule disallows unreachable code after `return`, `throw`, `continue`, and `b Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-unreachable: "error"*/ @@ -62,8 +70,12 @@ for (;;) {} console.log("done"); ``` +::: + Examples of **correct** code for this rule, because of JavaScript function and variable hoisting: +::: correct + ```js /*eslint no-unreachable: "error"*/ @@ -86,8 +98,12 @@ switch (foo) { } ``` +::: + Examples of additional **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-unreachable: "error"*/ @@ -103,8 +119,12 @@ class C extends B { } ``` +::: + Examples of additional **correct** code for this rule: +::: correct + ```js /*eslint no-unreachable: "error"*/ @@ -139,3 +159,5 @@ class F extends B { } } ``` + +::: diff --git a/eslint/docs/rules/no-unsafe-finally.md b/eslint/docs/src/rules/no-unsafe-finally.md similarity index 95% rename from eslint/docs/rules/no-unsafe-finally.md rename to eslint/docs/src/rules/no-unsafe-finally.md index fb3bb1e..a2540a0 100644 --- a/eslint/docs/rules/no-unsafe-finally.md +++ b/eslint/docs/src/rules/no-unsafe-finally.md @@ -1,4 +1,10 @@ -# disallow control flow statements in `finally` blocks (no-unsafe-finally) +--- +title: no-unsafe-finally +layout: doc +rule_type: problem +--- + + JavaScript suspends the control flow statements of `try` and `catch` blocks until the execution of `finally` block finishes. So, when `return`, `throw`, `break`, or `continue` is used in `finally`, control flow statements inside `try` and `catch` are overwritten, which is considered as unexpected behavior. Such as: @@ -65,6 +71,8 @@ This rule disallows `return`, `throw`, `break`, and `continue` statements inside Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-unsafe-finally: "error"*/ let foo = function() { @@ -78,6 +86,10 @@ let foo = function() { }; ``` +::: + +::: incorrect + ```js /*eslint no-unsafe-finally: "error"*/ let foo = function() { @@ -91,8 +103,12 @@ let foo = function() { }; ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-unsafe-finally: "error"*/ let foo = function() { @@ -106,6 +122,10 @@ let foo = function() { }; ``` +::: + +::: correct + ```js /*eslint no-unsafe-finally: "error"*/ let foo = function() { @@ -121,6 +141,10 @@ let foo = function() { }; ``` +::: + +::: correct + ```js /*eslint no-unsafe-finally: "error"*/ let foo = function(a) { @@ -139,6 +163,8 @@ let foo = function(a) { }; ``` +::: + ## When Not To Use It If you want to allow control flow operations in `finally` blocks, you can turn this rule off. diff --git a/eslint/docs/rules/no-unsafe-negation.md b/eslint/docs/src/rules/no-unsafe-negation.md similarity index 85% rename from eslint/docs/rules/no-unsafe-negation.md rename to eslint/docs/src/rules/no-unsafe-negation.md index 38bb9b0..1d5a22a 100644 --- a/eslint/docs/rules/no-unsafe-negation.md +++ b/eslint/docs/src/rules/no-unsafe-negation.md @@ -1,4 +1,12 @@ -# disallow negating the left operand of relational operators (no-unsafe-negation) +--- +title: no-unsafe-negation +layout: doc +rule_type: problem +--- + + + + Just as developers might type `-a + b` when they mean `-(a + b)` for the negative of a sum, they might type `!key in object` by mistake when they almost certainly mean `!(key in object)` to test that a key is not in an object. `!obj instanceof Ctor` is similar. @@ -6,11 +14,13 @@ Just as developers might type `-a + b` when they mean `-(a + b)` for the negativ This rule disallows negating the left operand of the following relational operators: -- [`in` operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in). -- [`instanceof` operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/instanceof). +* [`in` operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in). +* [`instanceof` operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/instanceof). Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-unsafe-negation: "error"*/ @@ -25,8 +35,12 @@ if (!obj instanceof Ctor) { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-unsafe-negation: "error"*/ @@ -39,6 +53,8 @@ if (!(obj instanceof Ctor)) { } ``` +::: + ### Exception For rare situations when negating the left operand is intended, this rule allows an exception. @@ -46,6 +62,8 @@ If the whole negation is explicitly wrapped in parentheses, the rule will not re Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-unsafe-negation: "error"*/ @@ -60,8 +78,12 @@ if(("" + !foo) in object) { } ``` +::: + Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-unsafe-negation: "error"*/ @@ -70,26 +92,30 @@ if (!(foo) in object) { } ``` +::: + ## Options This rule has an object option: -- `"enforceForOrderingRelations": false` (default) allows negation of the left-hand side of ordering relational operators (`<`, `>`, `<=`, `>=`) -- `"enforceForOrderingRelations": true` disallows negation of the left-hand side of ordering relational operators +* `"enforceForOrderingRelations": false` (default) allows negation of the left-hand side of ordering relational operators (`<`, `>`, `<=`, `>=`) +* `"enforceForOrderingRelations": true` disallows negation of the left-hand side of ordering relational operators ### enforceForOrderingRelations With this option set to `true` the rule is additionally enforced for: -- `<` operator. -- `>` operator. -- `<=` operator. -- `>=` operator. +* `<` operator. +* `>` operator. +* `<=` operator. +* `>=` operator. The purpose is to avoid expressions such as `! a < b` (which is equivalent to `(a ? 0 : 1) < b`) when what is really intended is `!(a < b)`. Examples of additional **incorrect** code for this rule with the `{ "enforceForOrderingRelations": true }` option: +::: incorrect + ```js /*eslint no-unsafe-negation: ["error", { "enforceForOrderingRelations": true }]*/ @@ -102,6 +128,8 @@ foo = ! a <= b; foo = ! a >= b; ``` +::: + ## When Not To Use It If you don't want to notify unsafe logical negations, then it's safe to disable this rule. diff --git a/eslint/docs/rules/no-unsafe-optional-chaining.md b/eslint/docs/src/rules/no-unsafe-optional-chaining.md similarity index 89% rename from eslint/docs/rules/no-unsafe-optional-chaining.md rename to eslint/docs/src/rules/no-unsafe-optional-chaining.md index 49fa415..1161acc 100644 --- a/eslint/docs/rules/no-unsafe-optional-chaining.md +++ b/eslint/docs/src/rules/no-unsafe-optional-chaining.md @@ -1,4 +1,10 @@ -# disallow use of optional chaining in contexts where the `undefined` value is not allowed (no-unsafe-optional-chaining) +--- +title: no-unsafe-optional-chaining +layout: doc +rule_type: problem +--- + + The optional chaining (`?.`) expression can short-circuit with a return value of `undefined`. Therefore, treating an evaluated optional chaining expression as a function, object, number, etc., can cause TypeError or unexpected results. For example: @@ -27,6 +33,8 @@ This rule aims to detect some cases where the use of optional chaining doesn't p Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-unsafe-optional-chaining: "error"*/ @@ -79,8 +87,12 @@ async function foo () { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-unsafe-optional-chaining: "error"*/ @@ -111,22 +123,26 @@ async function foo () { } ``` +::: + ## Options This rule has an object option: -- `disallowArithmeticOperators`: Disallow arithmetic operations on optional chaining expressions (Default `false`). If this is `true`, this rule warns arithmetic operations on optional chaining expressions, which possibly result in `NaN`. +* `disallowArithmeticOperators`: Disallow arithmetic operations on optional chaining expressions (Default `false`). If this is `true`, this rule warns arithmetic operations on optional chaining expressions, which possibly result in `NaN`. ### disallowArithmeticOperators With this option set to `true` the rule is enforced for: -- Unary operators: `-`, `+` -- Arithmetic operators: `+`, `-`, `/`, `*`, `%`, `**` -- Assignment operators: `+=`, `-=`, `/=`, `*=`, `%=`, `**=` +* Unary operators: `-`, `+` +* Arithmetic operators: `+`, `-`, `/`, `*`, `%`, `**` +* Assignment operators: `+=`, `-=`, `/=`, `*=`, `%=`, `**=` Examples of additional **incorrect** code for this rule with the `{ "disallowArithmeticOperators": true }` option: +::: incorrect + ```js /*eslint no-unsafe-optional-chaining: ["error", { "disallowArithmeticOperators": true }]*/ @@ -153,3 +169,5 @@ async function foo () { baz += await obj?.foo; } ``` + +::: diff --git a/eslint/docs/rules/no-unused-expressions.md b/eslint/docs/src/rules/no-unused-expressions.md similarity index 95% rename from eslint/docs/rules/no-unused-expressions.md rename to eslint/docs/src/rules/no-unused-expressions.md index 89cfb33..cc9f311 100644 --- a/eslint/docs/rules/no-unused-expressions.md +++ b/eslint/docs/src/rules/no-unused-expressions.md @@ -1,4 +1,9 @@ -# Disallow Unused Expressions (no-unused-expressions) +--- +title: no-unused-expressions +layout: doc +rule_type: suggestion +--- + An unused expression which has no effect on the state of the program indicates a logic error. @@ -37,6 +42,8 @@ These options allow unused expressions *only if all* of the code paths either di Examples of **incorrect** code for the default `{ "allowShortCircuit": false, "allowTernary": false }` options: +::: incorrect + ```js /*eslint no-unused-expressions: "error"*/ @@ -62,8 +69,12 @@ injectGlobal`body{ color: red; }` ``` +::: + Examples of **correct** code for the default `{ "allowShortCircuit": false, "allowTernary": false }` options: +::: correct + ```js /*eslint no-unused-expressions: "error"*/ @@ -86,10 +97,14 @@ delete a.b void a ``` +::: + Note that one or more string expression statements (with or without semi-colons) will only be considered as unused if they are not in the beginning of a script, module, or function (alone and uninterrupted by other statements). Otherwise, they will be treated as part of a "directive prologue", a section potentially usable by JavaScript engines. This includes "strict mode" directives. Examples of **correct** code for this rule in regard to directives: +::: correct + ```js /*eslint no-unused-expressions: "error"*/ @@ -111,8 +126,12 @@ class Foo { } ``` +::: + Examples of **incorrect** code for this rule in regard to directives: +::: incorrect + ```js /*eslint no-unused-expressions: "error"*/ @@ -130,18 +149,26 @@ class Foo { } ``` +::: + ### allowShortCircuit Examples of **incorrect** code for the `{ "allowShortCircuit": true }` option: +::: incorrect + ```js /*eslint no-unused-expressions: ["error", { "allowShortCircuit": true }]*/ a || b ``` +::: + Examples of **correct** code for the `{ "allowShortCircuit": true }` option: +::: correct + ```js /*eslint no-unused-expressions: ["error", { "allowShortCircuit": true }]*/ @@ -149,10 +176,14 @@ a && b() a() || (b = c) ``` +::: + ### allowTernary Examples of **incorrect** code for the `{ "allowTernary": true }` option: +::: incorrect + ```js /*eslint no-unused-expressions: ["error", { "allowTernary": true }]*/ @@ -160,8 +191,12 @@ a ? b : 0 a ? b : c() ``` +::: + Examples of **correct** code for the `{ "allowTernary": true }` option: +::: correct + ```js /*eslint no-unused-expressions: ["error", { "allowTernary": true }]*/ @@ -169,40 +204,56 @@ a ? b() : c() a ? (b = c) : d() ``` +::: + ### allowShortCircuit and allowTernary Examples of **correct** code for the `{ "allowShortCircuit": true, "allowTernary": true }` options: +::: correct + ```js /*eslint no-unused-expressions: ["error", { "allowShortCircuit": true, "allowTernary": true }]*/ a ? b() || (c = d) : e() ``` +::: + ### allowTaggedTemplates Examples of **incorrect** code for the `{ "allowTaggedTemplates": true }` option: +::: incorrect + ```js /*eslint no-unused-expressions: ["error", { "allowTaggedTemplates": true }]*/ `some untagged template string`; ``` +::: + Examples of **correct** code for the `{ "allowTaggedTemplates": true }` option: +::: correct + ```js /*eslint no-unused-expressions: ["error", { "allowTaggedTemplates": true }]*/ tag`some tagged template string`; ``` +::: + ### enforceForJSX JSX is most-commonly used in the React ecosystem, where it is compiled to `React.createElement` expressions. Though free from side-effects, these calls are not automatically flagged by the `no-unused-expression` rule. If you're using React, or any other side-effect-free JSX pragma, this option can be enabled to flag these expressions. Examples of **incorrect** code for the `{ "enforceForJSX": true }` option: +::: incorrect + ```jsx /*eslint no-unused-expressions: ["error", { "enforceForJSX": true }]*/ @@ -211,8 +262,12 @@ Examples of **incorrect** code for the `{ "enforceForJSX": true }` option: <></>; ``` +::: + Examples of **correct** code for the `{ "enforceForJSX": true }` option: +::: correct + ```jsx /*eslint no-unused-expressions: ["error", { "enforceForJSX": true }]*/ @@ -220,3 +275,5 @@ var myComponentPartial = <MyComponent />; var myFragment = <></>; ``` + +::: diff --git a/eslint/docs/rules/no-unused-labels.md b/eslint/docs/src/rules/no-unused-labels.md similarity index 85% rename from eslint/docs/rules/no-unused-labels.md rename to eslint/docs/src/rules/no-unused-labels.md index 97b21ba..2b3ce7c 100644 --- a/eslint/docs/rules/no-unused-labels.md +++ b/eslint/docs/src/rules/no-unused-labels.md @@ -1,4 +1,16 @@ -# Disallow Unused Labels (no-unused-labels) +--- +title: no-unused-labels +layout: doc +rule_type: suggestion +related_rules: +- no-extra-label +- no-labels +- no-label-var +--- + + + + Labels that are declared and not used anywhere in the code are most likely an error due to incomplete refactoring. @@ -21,6 +33,8 @@ This rule is aimed at eliminating unused labels. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-unused-labels: "error"*/ @@ -36,8 +50,12 @@ for (let i = 0; i < 10; ++i) { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-unused-labels: "error"*/ @@ -57,12 +75,8 @@ for (let i = 0; i < 10; ++i) { } ``` +::: + ## When Not To Use It If you don't want to be notified about unused labels, then it's safe to disable this rule. - -## Related Rules - -* [no-extra-label](./no-extra-label.md) -* [no-labels](./no-labels.md) -* [no-label-var](./no-label-var.md) diff --git a/eslint/docs/rules/no-unused-private-class-members.md b/eslint/docs/src/rules/no-unused-private-class-members.md similarity index 92% rename from eslint/docs/rules/no-unused-private-class-members.md rename to eslint/docs/src/rules/no-unused-private-class-members.md index 2eb9f4b..bd4accb 100644 --- a/eslint/docs/rules/no-unused-private-class-members.md +++ b/eslint/docs/src/rules/no-unused-private-class-members.md @@ -1,4 +1,9 @@ -# Disallow Unused Private Class Members (no-unused-private-class-members) +--- +title: no-unused-private-class-members +layout: doc +rule_type: problem +--- + Private class members that are declared and not used anywhere in the code are most likely an error due to incomplete refactoring. Such class members take up space in the code and can lead to confusion by readers. @@ -11,6 +16,8 @@ This rule reports unused private class members. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-unused-private-class-members: "error"*/ @@ -42,8 +49,12 @@ class Foo { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-unused-private-class-members: "error"*/ @@ -73,6 +84,8 @@ class Foo { } ``` +::: + ## When Not To Use It If you don't want to be notified about unused private class members, you can safely turn this rule off. diff --git a/eslint/docs/rules/no-unused-vars.md b/eslint/docs/src/rules/no-unused-vars.md similarity index 87% rename from eslint/docs/rules/no-unused-vars.md rename to eslint/docs/src/rules/no-unused-vars.md index 24eb337..8fd4b68 100644 --- a/eslint/docs/rules/no-unused-vars.md +++ b/eslint/docs/src/rules/no-unused-vars.md @@ -1,4 +1,10 @@ -# Disallow Unused Variables (no-unused-vars) +--- +title: no-unused-vars +layout: doc +rule_type: problem +--- + + Variables that are declared and not used anywhere in the code are most likely an error due to incomplete refactoring. Such variables take up space in the code and can lead to confusion by readers. @@ -17,6 +23,8 @@ A variable is *not* considered to be used if it is only ever declared (`var foo Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-unused-vars: "error"*/ /*global some_unused_var*/ @@ -51,8 +59,12 @@ function getY([x, y]) { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-unused-vars: "error"*/ @@ -80,6 +92,8 @@ function getY([, y]) { } ``` +::: + ### exported In environments outside of CommonJS or ECMAScript modules, you may use `var` to create a global variable that may be used by other scripts. You can use the `/* exported variableName */` comment block to indicate that this variable is being exported and therefore should not be considered unused. @@ -94,12 +108,16 @@ The line comment `// exported variableName` will not work as `exported` is not l Examples of **correct** code for `/* exported variableName */` operation: +::: correct + ```js /* exported global_var */ var global_var = 42; ``` +::: + ## Options This rule takes one argument which can be a string or an object. The string settings are the same as those of the `vars` property (explained below). @@ -125,6 +143,8 @@ The `vars` option has two settings: Examples of **correct** code for the `{ "vars": "local" }` option: +::: correct + ```js /*eslint no-unused-vars: ["error", { "vars": "local" }]*/ /*global some_unused_var */ @@ -132,12 +152,16 @@ Examples of **correct** code for the `{ "vars": "local" }` option: some_unused_var = 42; ``` +::: + ### varsIgnorePattern The `varsIgnorePattern` option specifies exceptions not to check for usage: variables whose names match a regexp pattern. For example, variables whose names contain `ignored` or `Ignored`. Examples of **correct** code for the `{ "varsIgnorePattern": "[iI]gnored" }` option: +::: correct + ```js /*eslint no-unused-vars: ["error", { "varsIgnorePattern": "[iI]gnored" }]*/ @@ -146,6 +170,8 @@ var secondVar = 2; console.log(secondVar); ``` +::: + ### args The `args` option has three settings: @@ -158,6 +184,8 @@ The `args` option has three settings: Examples of **incorrect** code for the default `{ "args": "after-used" }` option: +::: incorrect + ```js /*eslint no-unused-vars: ["error", { "args": "after-used" }]*/ @@ -169,8 +197,12 @@ Examples of **incorrect** code for the default `{ "args": "after-used" }` option })(); ``` +::: + Examples of **correct** code for the default `{ "args": "after-used" }` option: +::: correct + ```js /*eslint no-unused-vars: ["error", {"args": "after-used"}]*/ @@ -179,10 +211,14 @@ Examples of **correct** code for the default `{ "args": "after-used" }` option: })(); ``` +::: + #### args: all Examples of **incorrect** code for the `{ "args": "all" }` option: +::: incorrect + ```js /*eslint no-unused-vars: ["error", { "args": "all" }]*/ @@ -194,10 +230,14 @@ Examples of **incorrect** code for the `{ "args": "all" }` option: })(); ``` +::: + #### args: none Examples of **correct** code for the `{ "args": "none" }` option: +::: correct + ```js /*eslint no-unused-vars: ["error", { "args": "none" }]*/ @@ -206,12 +246,16 @@ Examples of **correct** code for the `{ "args": "none" }` option: })(); ``` +::: + ### ignoreRestSiblings The `ignoreRestSiblings` option is a boolean (default: `false`). Using a [Rest Property](https://github.com/tc39/proposal-object-rest-spread) it is possible to "omit" properties from an object, but by default the sibling properties are marked as "unused". With this option enabled the rest property's siblings are ignored. Examples of **correct** code for the `{ "ignoreRestSiblings": true }` option: +::: correct + ```js /*eslint no-unused-vars: ["error", { "ignoreRestSiblings": true }]*/ // 'foo' and 'bar' were ignored because they have a rest property sibling. @@ -221,12 +265,16 @@ var bar; ({ bar, ...coords } = data); ``` +::: + ### argsIgnorePattern The `argsIgnorePattern` option specifies exceptions not to check for usage: arguments whose names match a regexp pattern. For example, variables whose names begin with an underscore. Examples of **correct** code for the `{ "argsIgnorePattern": "^_" }` option: +::: correct + ```js /*eslint no-unused-vars: ["error", { "argsIgnorePattern": "^_" }]*/ @@ -236,6 +284,49 @@ function foo(x, _y) { foo(); ``` +::: + +### destructuredArrayIgnorePattern + +The `destructuredArrayIgnorePattern` option specifies exceptions not to check for usage: elements of array destructuring patterns whose names match a regexp pattern. For example, variables whose names begin with an underscore. + +Examples of **correct** code for the `{ "destructuredArrayIgnorePattern": "^_" }` option: + +::: correct + +```js +/*eslint no-unused-vars: ["error", { "destructuredArrayIgnorePattern": "^_" }]*/ + +const [a, _b, c] = ["a", "b", "c"]; +console.log(a+c); + +const { x: [_a, foo] } = bar; +console.log(foo); + +function baz([_c, x]) { + x; +} +baz(); + +function test({p: [_q, r]}) { + r; +} +test(); + +let _m, n; +foo.forEach(item => { + [_m, n] = item; + console.log(n); +}); + +let _o, p; +_o = 1; +[_o, p] = foo; +p; +``` + +::: + ### caughtErrors The `caughtErrors` option is used for `catch` block arguments validation. @@ -251,6 +342,8 @@ Not specifying this rule is equivalent of assigning it to `none`. Examples of **correct** code for the `{ "caughtErrors": "none" }` option: +::: correct + ```js /*eslint no-unused-vars: ["error", { "caughtErrors": "none" }]*/ @@ -261,10 +354,14 @@ try { } ``` +::: + #### caughtErrors: all Examples of **incorrect** code for the `{ "caughtErrors": "all" }` option: +::: incorrect + ```js /*eslint no-unused-vars: ["error", { "caughtErrors": "all" }]*/ @@ -277,12 +374,16 @@ try { } ``` +::: + ### caughtErrorsIgnorePattern The `caughtErrorsIgnorePattern` option specifies exceptions not to check for usage: catch arguments whose names match a regexp pattern. For example, variables whose names begin with a string 'ignore'. Examples of **correct** code for the `{ "caughtErrorsIgnorePattern": "^ignore" }` option: +::: correct + ```js /*eslint no-unused-vars: ["error", { "caughtErrorsIgnorePattern": "^ignore" }]*/ @@ -293,6 +394,8 @@ try { } ``` +::: + ## When Not To Use It If you don't want to be notified about unused variables or function arguments, you can safely turn this rule off. diff --git a/eslint/docs/rules/no-use-before-define.md b/eslint/docs/src/rules/no-use-before-define.md similarity index 78% rename from eslint/docs/rules/no-use-before-define.md rename to eslint/docs/src/rules/no-use-before-define.md index 8af260e..9c71d09 100644 --- a/eslint/docs/rules/no-use-before-define.md +++ b/eslint/docs/src/rules/no-use-before-define.md @@ -1,4 +1,9 @@ -# Disallow Early Use (no-use-before-define) +--- +title: no-use-before-define +layout: doc +rule_type: problem +--- + In JavaScript, prior to ES6, variable and function declarations are hoisted to the top of a scope, so it's possible to use identifiers before their formal declarations in code. This can be confusing and some believe it is best to always declare variables and functions before using them. @@ -10,6 +15,8 @@ This rule will warn when it encounters a reference to an identifier that has not Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-use-before-define: "error"*/ @@ -53,10 +60,17 @@ var b = 1; } } } + +export { foo }; +const foo = 1; ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-use-before-define: "error"*/ @@ -102,13 +116,23 @@ function g() { } } } + +const foo = 1; +export { foo }; ``` +::: + ## Options ```json { - "no-use-before-define": ["error", { "functions": true, "classes": true, "variables": true }] + "no-use-before-define": ["error", { + "functions": true, + "classes": true, + "variables": true, + "allowNamedExports": false + }] } ``` @@ -129,14 +153,20 @@ function g() { If this is `true`, the rule warns every reference to a variable before the variable declaration. Otherwise, the rule ignores a reference if the declaration is in an upper scope, while still reporting the reference if it's in the same scope as the declaration. Default is `true`. +* `allowNamedExports` (`boolean`) - + If this flag is set to `true`, the rule always allows references in `export {};` declarations. + These references are safe even if the variables are declared later in the code. + Default is `false`. This rule accepts `"nofunc"` string as an option. -`"nofunc"` is the same as `{ "functions": false, "classes": true, "variables": true }`. +`"nofunc"` is the same as `{ "functions": false, "classes": true, "variables": true, "allowNamedExports": false }`. ### functions Examples of **correct** code for the `{ "functions": false }` option: +::: correct + ```js /*eslint no-use-before-define: ["error", { "functions": false }]*/ @@ -144,12 +174,16 @@ f(); function f() {} ``` +::: + This option allows references to function declarations. For function expressions and arrow functions, please see the [`variables`](#variables) option. ### classes Examples of **incorrect** code for the `{ "classes": false }` option: +::: incorrect + ```js /*eslint no-use-before-define: ["error", { "classes": false }]*/ @@ -183,8 +217,12 @@ class A { } ``` +::: + Examples of **correct** code for the `{ "classes": false }` option: +::: correct + ```js /*eslint no-use-before-define: ["error", { "classes": false }]*/ @@ -196,10 +234,14 @@ class A { } ``` +::: + ### variables Examples of **incorrect** code for the `{ "variables": false }` option: +::: incorrect + ```js /*eslint no-use-before-define: ["error", { "variables": false }]*/ @@ -235,8 +277,12 @@ const g = function() {}; } ``` +::: + Examples of **correct** code for the `{ "variables": false }` option: +::: correct + ```js /*eslint no-use-before-define: ["error", { "variables": false }]*/ @@ -260,3 +306,48 @@ const g = function() {} const foo = 1; } ``` + +::: + +### allowNamedExports + +Examples of **correct** code for the `{ "allowNamedExports": true }` option: + +::: correct + +```js +/*eslint no-use-before-define: ["error", { "allowNamedExports": true }]*/ + +export { a, b, f, C }; + +const a = 1; + +let b; + +function f () {} + +class C {} +``` + +::: + +Examples of **incorrect** code for the `{ "allowNamedExports": true }` option: + +::: incorrect + +```js +/*eslint no-use-before-define: ["error", { "allowNamedExports": true }]*/ + +export default a; +const a = 1; + +const b = c; +export const c = 1; + +export function foo() { + return d; +} +const d = 1; +``` + +::: diff --git a/eslint/docs/rules/no-useless-backreference.md b/eslint/docs/src/rules/no-useless-backreference.md similarity index 93% rename from eslint/docs/rules/no-useless-backreference.md rename to eslint/docs/src/rules/no-useless-backreference.md index d2360b3..e534ada 100644 --- a/eslint/docs/rules/no-useless-backreference.md +++ b/eslint/docs/src/rules/no-useless-backreference.md @@ -1,4 +1,16 @@ -# Disallow useless backreferences in regular expressions (no-useless-backreference) +--- +title: no-useless-backreference +layout: doc +rule_type: problem +related_rules: +- no-control-regex +- no-empty-character-class +- no-invalid-regexp +further_reading: +- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions +--- + + In JavaScript regular expressions, it's syntactically valid to define a backreference to a group that belongs to another alternative part of the pattern, a backreference to a group that appears after the backreference, a backreference to a group that contains that backreference, or a backreference to a group that is inside a negative lookaround. However, by the specification, in any of these cases the backreference always ends up matching only zero-length (the empty string), regardless of the context in which the backreference and the group appear. @@ -41,6 +53,8 @@ This might be surprising to developers coming from other languages where some of Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-useless-backreference: "error"*/ @@ -73,8 +87,12 @@ new RegExp('(\\1)'); // nested reference to (\1) /(?<!(a))b\1/; // reference to (a) into a negative lookbehind ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-useless-backreference: "error"*/ @@ -105,10 +123,14 @@ new RegExp('(.)\\1'); // reference to (.) /(?<!\1(a))b/; // reference to (a), correct as it's from within the same negative lookbehind ``` +::: + Please note that this rule does not aim to detect and disallow a potentially erroneous use of backreference syntax in regular expressions, like the use in character classes or an attempt to reference a group that doesn't exist. Depending on the context, a `\1`...`\9` sequence that is not a syntactically valid backreference may produce syntax error, or be parsed as something else (e.g., as a legacy octal escape sequence). Examples of additional **correct** code for this rule: +::: correct + ```js /*eslint no-useless-backreference: "error"*/ @@ -119,12 +141,4 @@ Examples of additional **correct** code for this rule: /^(a)\1\2$/.test("aa\x02"); // true. In this case, \1 is a backreference, \2 is an octal escape sequence. ``` -## Further Reading - -* [MDN: Regular Expressions](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions) - -## Related Rules - -* [no-control-regex](no-control-regex.md) -* [no-empty-character-class](no-empty-character-class.md) -* [no-invalid-regexp](no-invalid-regexp.md) +::: diff --git a/eslint/docs/rules/no-useless-call.md b/eslint/docs/src/rules/no-useless-call.md similarity index 91% rename from eslint/docs/rules/no-useless-call.md rename to eslint/docs/src/rules/no-useless-call.md index 196cc6d..65691d6 100644 --- a/eslint/docs/rules/no-useless-call.md +++ b/eslint/docs/src/rules/no-useless-call.md @@ -1,4 +1,11 @@ -# Disallow unnecessary `.call()` and `.apply()`. (no-useless-call) +--- +title: no-useless-call +layout: doc +rule_type: suggestion +related_rules: +- prefer-spread +--- + The function invocation can be written by `Function.prototype.call()` and `Function.prototype.apply()`. But `Function.prototype.call()` and `Function.prototype.apply()` are slower than the normal function invocation. @@ -9,6 +16,8 @@ This rule is aimed to flag usage of `Function.prototype.call()` and `Function.pr Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-useless-call: "error"*/ @@ -23,8 +32,12 @@ obj.foo.call(obj, 1, 2, 3); obj.foo.apply(obj, [1, 2, 3]); ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-useless-call: "error"*/ @@ -43,6 +56,8 @@ foo.apply(null, args); obj.foo.apply(obj, args); ``` +::: + ## Known Limitations This rule compares code statically to check whether or not `thisArg` is changed. @@ -50,24 +65,28 @@ So if the code about `thisArg` is a dynamic expression, this rule cannot judge c Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-useless-call: "error"*/ a[i++].foo.call(a[i++], 1, 2, 3); ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-useless-call: "error"*/ a[++i].foo.call(a[i], 1, 2, 3); ``` +::: + ## When Not To Use It If you don't want to be notified about unnecessary `.call()` and `.apply()`, you can safely disable this rule. - -## Related Rules - -* [prefer-spread](prefer-spread.md) diff --git a/eslint/docs/rules/no-useless-catch.md b/eslint/docs/src/rules/no-useless-catch.md similarity index 90% rename from eslint/docs/rules/no-useless-catch.md rename to eslint/docs/src/rules/no-useless-catch.md index 0562063..ee53ab6 100644 --- a/eslint/docs/rules/no-useless-catch.md +++ b/eslint/docs/src/rules/no-useless-catch.md @@ -1,4 +1,10 @@ -# Disallow unnecessary catch clauses (no-useless-catch) +--- +title: no-useless-catch +layout: doc +rule_type: suggestion +--- + + A `catch` clause that only rethrows the original error is redundant, and has no effect on the runtime behavior of the program. These redundant clauses can be a source of confusion and code bloat, so it's better to disallow these unnecessary `catch` clauses. @@ -8,6 +14,8 @@ This rule reports `catch` clauses that only `throw` the caught error. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-useless-catch: "error"*/ @@ -26,8 +34,12 @@ try { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-useless-catch: "error"*/ @@ -51,6 +63,8 @@ try { } ``` +::: + ## When Not To Use It If you don't want to be notified about unnecessary catch clauses, you can safely disable this rule. diff --git a/eslint/docs/rules/no-useless-computed-key.md b/eslint/docs/src/rules/no-useless-computed-key.md similarity index 93% rename from eslint/docs/rules/no-useless-computed-key.md rename to eslint/docs/src/rules/no-useless-computed-key.md index 2d3ddb3..2516d19 100644 --- a/eslint/docs/rules/no-useless-computed-key.md +++ b/eslint/docs/src/rules/no-useless-computed-key.md @@ -1,4 +1,10 @@ -# Disallow unnecessary computed property keys in objects and classes (no-useless-computed-key) +--- +title: no-useless-computed-key +layout: doc +rule_type: suggestion +--- + + It's unnecessary to use computed properties with literals such as: @@ -18,6 +24,8 @@ This rule disallows unnecessary usage of computed property keys. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-useless-computed-key: "error"*/ @@ -28,8 +36,12 @@ var a = { ['x']: 0 }; var a = { ['x']() {} }; ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-useless-computed-key: "error"*/ @@ -40,8 +52,12 @@ var c = { a: 0 }; var c = { '0+1,234': 0 }; ``` +::: + Examples of additional **correct** code for this rule: +::: correct + ```js /*eslint no-useless-computed-key: "error"*/ @@ -52,6 +68,8 @@ var c = { }; ``` +::: + ## Options This rule has an object option: @@ -67,6 +85,8 @@ When `enforceForClassMembers` is set to `true`, the rule will also disallow unne Examples of **incorrect** code for this rule with the `{ "enforceForClassMembers": true }` option: +::: incorrect + ```js /*eslint no-useless-computed-key: ["error", { "enforceForClassMembers": true }]*/ @@ -84,8 +104,12 @@ class Foo { } ``` +::: + Examples of **correct** code for this rule with the `{ "enforceForClassMembers": true }` option: +::: correct + ```js /*eslint no-useless-computed-key: ["error", { "enforceForClassMembers": true }]*/ @@ -103,8 +127,12 @@ class Foo { } ``` +::: + Examples of additional **correct** code for this rule with the `{ "enforceForClassMembers": true }` option: +::: correct + ```js /*eslint no-useless-computed-key: ["error", { "enforceForClassMembers": true }]*/ @@ -121,6 +149,8 @@ class Foo { } ``` +::: + ## When Not To Use It If you don't want to be notified about unnecessary computed property keys, you can safely disable this rule. diff --git a/eslint/docs/rules/no-useless-concat.md b/eslint/docs/src/rules/no-useless-concat.md similarity index 91% rename from eslint/docs/rules/no-useless-concat.md rename to eslint/docs/src/rules/no-useless-concat.md index 5dc5f1f..63062a2 100644 --- a/eslint/docs/rules/no-useless-concat.md +++ b/eslint/docs/src/rules/no-useless-concat.md @@ -1,4 +1,9 @@ -# Disallow unnecessary concatenation of strings (no-useless-concat) +--- +title: no-useless-concat +layout: doc +rule_type: suggestion +--- + It's unnecessary to concatenate two strings together, such as: @@ -18,6 +23,8 @@ This rule aims to flag the concatenation of 2 literals when they could be combin Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-useless-concat: "error"*/ /*eslint-env es6*/ @@ -31,8 +38,12 @@ var a = `1` + '0'; var a = `1` + `0`; ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-useless-concat: "error"*/ @@ -46,6 +57,8 @@ var c = "foo" + "bar"; ``` +::: + ## When Not To Use It If you don't want to be notified about unnecessary string concatenation, you can safely disable this rule. diff --git a/eslint/docs/rules/no-useless-constructor.md b/eslint/docs/src/rules/no-useless-constructor.md similarity index 91% rename from eslint/docs/rules/no-useless-constructor.md rename to eslint/docs/src/rules/no-useless-constructor.md index cdfe505..b01a86d 100644 --- a/eslint/docs/rules/no-useless-constructor.md +++ b/eslint/docs/src/rules/no-useless-constructor.md @@ -1,4 +1,9 @@ -# Disallow unnecessary constructor (no-useless-constructor) +--- +title: no-useless-constructor +layout: doc +rule_type: suggestion +--- + ES2015 provides a default class constructor if one is not specified. As such, it is unnecessary to provide an empty constructor or one that simply delegates into its parent class, as in the following examples: @@ -23,6 +28,8 @@ This rule flags class constructors that can be safely removed without changing h Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-useless-constructor: "error"*/ /*eslint-env es6*/ @@ -39,8 +46,12 @@ class B extends A { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-useless-constructor: "error"*/ @@ -66,6 +77,8 @@ class B extends A { } ``` +::: + ## When Not To Use It If you don't want to be notified about unnecessary constructors, you can safely disable this rule. diff --git a/eslint/docs/rules/no-useless-escape.md b/eslint/docs/src/rules/no-useless-escape.md similarity index 85% rename from eslint/docs/rules/no-useless-escape.md rename to eslint/docs/src/rules/no-useless-escape.md index 6088c5c..46add21 100644 --- a/eslint/docs/rules/no-useless-escape.md +++ b/eslint/docs/src/rules/no-useless-escape.md @@ -1,4 +1,12 @@ -# Disallow unnecessary escape usage (no-useless-escape) +--- +title: no-useless-escape +layout: doc +rule_type: suggestion +--- + + + + Escaping non-special characters in strings, template literals, and regular expressions doesn't have any effect, as demonstrated in the following example: @@ -14,6 +22,8 @@ This rule flags escapes that can be safely removed without changing behavior. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-useless-escape: "error"*/ @@ -26,11 +36,16 @@ Examples of **incorrect** code for this rule: `\#{foo}`; /\!/; /\@/; - +/[\[]/; +/[a-z\-]/; ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-useless-escape: "error"*/ @@ -46,9 +61,13 @@ Examples of **correct** code for this rule: /\\/g; /\t/g; /\w\$\*\^\./; - +/[[]/; +/[\]]/; +/[a-z-]/; ``` +::: + ## When Not To Use It If you don't want to be notified about unnecessary escapes, you can safely disable this rule. diff --git a/eslint/docs/rules/no-useless-rename.md b/eslint/docs/src/rules/no-useless-rename.md similarity index 80% rename from eslint/docs/rules/no-useless-rename.md rename to eslint/docs/src/rules/no-useless-rename.md index ea38e84..73a5c79 100644 --- a/eslint/docs/rules/no-useless-rename.md +++ b/eslint/docs/src/rules/no-useless-rename.md @@ -1,4 +1,12 @@ -# Disallow renaming import, export, and destructured assignments to the same name (no-useless-rename) +--- +title: no-useless-rename +layout: doc +rule_type: suggestion +related_rules: +- object-shorthand +--- + + ES2015 allows for the renaming of references in import and export statements as well as destructuring assignments. This gives programmers a concise syntax for performing these operations while renaming these references: @@ -28,17 +36,13 @@ let { foo } = bar; This rule disallows the renaming of import, export, and destructured assignments to the same name. -See Also: - -- [`object-shorthand`](https://eslint.org/docs/rules/object-shorthand) which can enforce this behavior for properties in object literals. - ## Options This rule allows for more fine-grained control with the following options: -- `ignoreImport`: When set to `true`, this rule does not check imports -- `ignoreExport`: When set to `true`, this rule does not check exports -- `ignoreDestructuring`: When set to `true`, this rule does not check destructuring assignments +* `ignoreImport`: When set to `true`, this rule does not check imports +* `ignoreExport`: When set to `true`, this rule does not check exports +* `ignoreDestructuring`: When set to `true`, this rule does not check destructuring assignments By default, all options are set to `false`: @@ -52,30 +56,42 @@ By default, all options are set to `false`: Examples of **incorrect** code for this rule by default: +::: incorrect + ```js /*eslint no-useless-rename: "error"*/ import { foo as foo } from "bar"; +import { "foo" as foo } from "bar"; export { foo as foo }; +export { foo as "foo" }; export { foo as foo } from "bar"; +export { "foo" as "foo" } from "bar"; let { foo: foo } = bar; let { 'foo': foo } = bar; function foo({ bar: bar }) {} ({ foo: foo }) => {} ``` +::: + Examples of **correct** code for this rule by default: +::: correct + ```js /*eslint no-useless-rename: "error"*/ import * as foo from "foo"; import { foo } from "bar"; import { foo as bar } from "baz"; +import { "foo" as bar } from "baz"; export { foo }; export { foo as bar }; +export { foo as "bar" }; export { foo as bar } from "foo"; +export { "foo" as "bar" } from "foo"; let { foo } = bar; let { foo: bar } = baz; @@ -88,16 +104,24 @@ function foo({ bar: baz }) {} ({ foo: bar }) => {} ``` +::: + Examples of **correct** code for this rule with `{ ignoreImport: true }`: +::: correct + ```js /*eslint no-useless-rename: ["error", { ignoreImport: true }]*/ import { foo as foo } from "bar"; ``` +::: + Examples of **correct** code for this rule with `{ ignoreExport: true }`: +::: correct + ```js /*eslint no-useless-rename: ["error", { ignoreExport: true }]*/ @@ -105,8 +129,12 @@ export { foo as foo }; export { foo as foo } from "bar"; ``` +::: + Examples of **correct** code for this rule with `{ ignoreDestructuring: true }`: +::: correct + ```js /*eslint no-useless-rename: ["error", { ignoreDestructuring: true }]*/ @@ -115,10 +143,12 @@ function foo({ bar: bar }) {} ({ foo: foo }) => {} ``` +::: + ## When Not To Use It You can safely disable this rule if you do not care about redundantly renaming import, export, and destructuring assignments. ## Compatibility -- **JSCS**: [disallowIdenticalDestructuringNames](https://jscs-dev.github.io/rule/disallowIdenticalDestructuringNames) +* **JSCS**: [disallowIdenticalDestructuringNames](https://jscs-dev.github.io/rule/disallowIdenticalDestructuringNames) diff --git a/eslint/docs/rules/no-useless-return.md b/eslint/docs/src/rules/no-useless-return.md similarity index 91% rename from eslint/docs/rules/no-useless-return.md rename to eslint/docs/src/rules/no-useless-return.md index 4e8de68..fa82a2f 100644 --- a/eslint/docs/rules/no-useless-return.md +++ b/eslint/docs/src/rules/no-useless-return.md @@ -1,4 +1,10 @@ -# Disallow redundant return statements (no-useless-return) +--- +title: no-useless-return +layout: doc +rule_type: suggestion +--- + + A `return;` statement with nothing after it is redundant, and has no effect on the runtime behavior of a function. This can be confusing, so it's better to disallow these redundant statements. @@ -8,6 +14,8 @@ This rule aims to report redundant `return` statements. Examples of **incorrect** code for this rule: +::: incorrect + ```js /* eslint no-useless-return: "error" */ @@ -39,8 +47,12 @@ function foo() { ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /* eslint no-useless-return: "error" */ @@ -78,6 +90,8 @@ function foo() { ``` +::: + ## When Not To Use It If you don't care about disallowing redundant return statements, you can turn off this rule. diff --git a/eslint/docs/rules/no-var.md b/eslint/docs/src/rules/no-var.md similarity index 92% rename from eslint/docs/rules/no-var.md rename to eslint/docs/src/rules/no-var.md index 83950c3..7ddd173 100644 --- a/eslint/docs/rules/no-var.md +++ b/eslint/docs/src/rules/no-var.md @@ -1,4 +1,10 @@ -# require `let` or `const` instead of `var` (no-var) +--- +title: no-var +layout: doc +rule_type: suggestion +--- + + ECMAScript 6 allows programmers to create variables with block scope instead of function scope using the `let` and `const` keywords. Block scope is common in many other programming languages and helps programmers avoid mistakes @@ -25,6 +31,8 @@ This rule is aimed at discouraging the use of `var` and encouraging the use of ` Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-var: "error"*/ @@ -32,8 +40,12 @@ var x = "y"; var CONFIG = {}; ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-var: "error"*/ /*eslint-env es6*/ @@ -42,6 +54,8 @@ let x = "y"; const CONFIG = {}; ``` +::: + ## When Not To Use It In addition to non-ES6 environments, existing JavaScript projects that are beginning to introduce ES6 into their diff --git a/eslint/docs/rules/no-void.md b/eslint/docs/src/rules/no-void.md similarity index 84% rename from eslint/docs/rules/no-void.md rename to eslint/docs/src/rules/no-void.md index 3f78376..5f9d24d 100644 --- a/eslint/docs/rules/no-void.md +++ b/eslint/docs/src/rules/no-void.md @@ -1,4 +1,15 @@ -# Disallow use of the void operator. (no-void) +--- +title: no-void +layout: doc +rule_type: suggestion +related_rules: +- no-undef-init +- no-undefined +further_reading: +- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/void +- https://oreilly.com/javascript/excerpts/javascript-good-parts/bad-parts.html +--- + The `void` operator takes an operand and returns `undefined`: `void expression` will evaluate `expression` and return `undefined`. It can be used to ignore any side effects `expression` may produce: @@ -50,6 +61,8 @@ This rule aims to eliminate use of void operator. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-void: "error"*/ @@ -62,6 +75,8 @@ function baz() { } ``` +::: + ## Options This rule has an object option: @@ -74,6 +89,8 @@ When `allowAsStatement` is set to true, the rule will not error on cases that th Examples of **incorrect** code for `{ "allowAsStatement": true }`: +::: incorrect + ```js /*eslint no-void: ["error", { "allowAsStatement": true }]*/ @@ -83,8 +100,12 @@ function baz() { } ``` +::: + Examples of **correct** code for `{ "allowAsStatement": true }`: +::: correct + ```js /*eslint no-void: ["error", { "allowAsStatement": true }]*/ @@ -92,16 +113,8 @@ void foo; void someFunction(); ``` +::: + ## When Not To Use It If you intentionally use the `void` operator then you can disable this rule. - -## Further Reading - -* [Mozilla Developer Network](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/void) -* [Bad Parts: Appendix B - JavaScript: The Good Parts by Douglas Crockford](https://oreilly.com/javascript/excerpts/javascript-good-parts/bad-parts.html) - -## Related Rules - -* [no-undef-init](no-undef-init.md) -* [no-undefined](no-undefined.md) diff --git a/eslint/docs/rules/no-warning-comments.md b/eslint/docs/src/rules/no-warning-comments.md similarity index 58% rename from eslint/docs/rules/no-warning-comments.md rename to eslint/docs/src/rules/no-warning-comments.md index 4836560..e3f65af 100644 --- a/eslint/docs/rules/no-warning-comments.md +++ b/eslint/docs/src/rules/no-warning-comments.md @@ -1,4 +1,9 @@ -# Disallow Warning Comments (no-warning-comments) +--- +title: no-warning-comments +layout: doc +rule_type: suggestion +--- + Developers often add comments to code which is not complete or needs review. Most likely you want to fix or review the code, and then remove the comment, before you consider the code to be production ready. @@ -15,14 +20,20 @@ This rule reports comments that include any of the predefined terms specified in This rule has an options object literal: -* `"terms"`: optional array of terms to match. Defaults to `["todo", "fixme", "xxx"]`. Terms are matched case-insensitive and as whole words: `fix` would match `FIX` but not `fixing`. Terms can consist of multiple words: `really bad idea`. -* `"location"`: optional string that configures where in your comments to check for matches. Defaults to `"start"`. The other value is match `anywhere` in comments. +* `"terms"`: optional array of terms to match. Defaults to `["todo", "fixme", "xxx"]`. Terms are matched case-insensitively and as whole words: `fix` would match `FIX` but not `fixing`. Terms can consist of multiple words: `really bad idea`. +* `"location"`: optional string that configures where in your comments to check for matches. Defaults to `"start"`. The start is from the first non-decorative character, ignoring whitespace, new lines and characters specified in `decoration`. The other value is match `anywhere` in comments. +* `"decoration"`: optional array of characters that are ignored at the start of a comment, when location is `"start"`. Defaults to `[]`. Any sequence of whitespace or the characters from this property are ignored. This option is ignored when location is `"anywhere"`. Example of **incorrect** code for the default `{ "terms": ["todo", "fixme", "xxx"], "location": "start" }` options: +::: incorrect + ```js /*eslint no-warning-comments: "error"*/ +/* +FIXME +*/ function callback(err, results) { if (err) { console.error(err); @@ -32,8 +43,12 @@ function callback(err, results) { } ``` +::: + Example of **correct** code for the default `{ "terms": ["todo", "fixme", "xxx"], "location": "start" }` options: +::: correct + ```js /*eslint no-warning-comments: "error"*/ @@ -47,25 +62,33 @@ function callback(err, results) { } ``` +::: + ### terms and location Examples of **incorrect** code for the `{ "terms": ["todo", "fixme", "any other term"], "location": "anywhere" }` options: +::: incorrect + ```js /*eslint no-warning-comments: ["error", { "terms": ["todo", "fixme", "any other term"], "location": "anywhere" }]*/ // TODO: this // todo: this too // Even this: TODO -/* /* +/* * The same goes for this TODO comment * Or a fixme * as well as any other term */ ``` +::: + Examples of **correct** code for the `{ "terms": ["todo", "fixme", "any other term"], "location": "anywhere" }` options: +::: correct + ```js /*eslint no-warning-comments: ["error", { "terms": ["todo", "fixme", "any other term"], "location": "anywhere" }]*/ @@ -79,6 +102,56 @@ Examples of **correct** code for the `{ "terms": ["todo", "fixme", "any other te */ ``` +::: + +### Decoration Characters + +Examples of **incorrect** code for the `{ "decoration": ["*"] }` options: + +::: incorrect + +```js +/*eslint no-warning-comments: ["error", { "decoration": ["*"] }]*/ + +//***** todo decorative asterisks are ignored *****// +/** + * TODO new lines and asterisks are also ignored in block comments. + */ +``` + +::: + +Examples of **incorrect** code for the `{ "decoration": ["/", "*"] }` options: + +::: incorrect + +```js +/*eslint no-warning-comments: ["error", { "decoration": ["/", "*"] }]*/ + +////// TODO decorative slashes and whitespace are ignored ////// +//***** todo decorative asterisks are also ignored *****// +/** + * TODO new lines are also ignored in block comments. + */ +``` + +::: + +Examples of **correct** code for the `{ "decoration": ["/", "*"] }` options: + +::: correct + +```js +/*eslint no-warning-comments: ["error", { "decoration": ["/", "*"] }]*/ + +//!TODO preceded by non-decoration character +/** + *!TODO preceded by non-decoration character in a block comment + */ +``` + +::: + ## When Not To Use It * If you have a large code base that was not developed with a policy to not use such warning terms, you might get hundreds of warnings / errors which might be counter-productive if you can't fix all of them (e.g. if you don't get the time to do it) as you might overlook other warnings / errors or get used to many of them and don't pay attention on it anymore. diff --git a/eslint/docs/rules/no-whitespace-before-property.md b/eslint/docs/src/rules/no-whitespace-before-property.md similarity index 90% rename from eslint/docs/rules/no-whitespace-before-property.md rename to eslint/docs/src/rules/no-whitespace-before-property.md index 70ecc14..d22e45b 100644 --- a/eslint/docs/rules/no-whitespace-before-property.md +++ b/eslint/docs/src/rules/no-whitespace-before-property.md @@ -1,4 +1,10 @@ -# disallow whitespace before properties (no-whitespace-before-property) +--- +title: no-whitespace-before-property +layout: doc +rule_type: layout +--- + + JavaScript allows whitespace between objects and their properties. However, inconsistent spacing can make code harder to read and can lead to errors. @@ -19,6 +25,8 @@ foo Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-whitespace-before-property: "error"*/ @@ -37,8 +45,12 @@ foo .bar(). baz() ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-whitespace-before-property: "error"*/ @@ -62,6 +74,8 @@ foo. baz() ``` +::: + ## When Not To Use It Turn this rule off if you do not care about allowing whitespace around the dot or before the opening bracket before properties of objects if they are on the same line. diff --git a/eslint/docs/rules/no-with.md b/eslint/docs/src/rules/no-with.md similarity index 76% rename from eslint/docs/rules/no-with.md rename to eslint/docs/src/rules/no-with.md index 979c58b..f72fbdb 100644 --- a/eslint/docs/rules/no-with.md +++ b/eslint/docs/src/rules/no-with.md @@ -1,4 +1,12 @@ -# disallow `with` statements (no-with) +--- +title: no-with +layout: doc +rule_type: suggestion +further_reading: +- https://web.archive.org/web/20200717110117/https://yuiblog.com/blog/2006/04/11/with-statement-considered-harmful/ +--- + + The `with` statement is potentially problematic because it adds members of an object to the current scope, making it impossible to tell what a variable inside the block actually refers to. @@ -10,6 +18,8 @@ If ESLint parses code in strict mode, the parser (instead of this rule) reports Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint no-with: "error"*/ @@ -18,8 +28,12 @@ with (point) { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint no-with: "error"*/ /*eslint-env es6*/ @@ -27,10 +41,8 @@ Examples of **correct** code for this rule: const r = ({x, y}) => Math.sqrt(x * x + y * y); ``` +::: + ## When Not To Use It If you intentionally use `with` statements then you can disable this rule. - -## Further Reading - -* [with Statement Considered Harmful](https://yuiblog.com/blog/2006/04/11/with-statement-considered-harmful/) diff --git a/eslint/docs/rules/no-wrap-func.md b/eslint/docs/src/rules/no-wrap-func.md similarity index 73% rename from eslint/docs/rules/no-wrap-func.md rename to eslint/docs/src/rules/no-wrap-func.md index 5193d79..76a8406 100644 --- a/eslint/docs/rules/no-wrap-func.md +++ b/eslint/docs/src/rules/no-wrap-func.md @@ -1,6 +1,12 @@ -# no-wrap-func: disallow unnecessary parentheses around function expressions +--- +title: no-wrap-func +layout: doc -(removed) This rule was **removed** in ESLint v1.0 and **replaced** by the [no-extra-parens](no-extra-parens.md) rule. The `"functions"` option in the new rule is equivalent to the removed rule. +--- + +Disallows unnecessary parentheses around function expressions. + +(removed) This rule was **removed** in ESLint v1.0 and **replaced** by the [no-extra-parens](no-extra-parens) rule. The `"functions"` option in the new rule is equivalent to the removed rule. Although it's possible to wrap functions in parentheses, this can be confusing when the code also contains immediately-invoked function expressions (IIFEs) since parentheses are often used to make this distinction. For example: @@ -20,14 +26,22 @@ This rule will raise a warning when it encounters a function expression wrapped Example of **incorrect** code for this rule: +::: incorrect + ```js var a = (function() {/*...*/}); ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js var a = function() {/*...*/}; (function() {/*...*/})(); ``` + +::: diff --git a/eslint/docs/rules/nonblock-statement-body-position.md b/eslint/docs/src/rules/nonblock-statement-body-position.md similarity index 90% rename from eslint/docs/rules/nonblock-statement-body-position.md rename to eslint/docs/src/rules/nonblock-statement-body-position.md index c2de17d..fc1189b 100644 --- a/eslint/docs/rules/nonblock-statement-body-position.md +++ b/eslint/docs/src/rules/nonblock-statement-body-position.md @@ -1,4 +1,12 @@ -# enforce the location of single-line statements (nonblock-statement-body-position) +--- +title: nonblock-statement-body-position +layout: doc +rule_type: layout +further_reading: +- https://jscs-dev.github.io/rule/requireNewlineBeforeSingleStatementsInIf +--- + + When writing `if`, `else`, `while`, `do-while`, and `for` statements, the body can be a single statement instead of a block. It can be useful to enforce a consistent location for these single statements. @@ -27,7 +35,7 @@ if (foo) bar(); This rule aims to enforce a consistent location for single-line statements. -Note that this rule does not enforce the usage of single-line statements in general. If you would like to disallow single-line statements, use the [`curly`](/docs/rules/curly.md) rule instead. +Note that this rule does not enforce the usage of single-line statements in general. If you would like to disallow single-line statements, use the [`curly`](/docs/rules/curly) rule instead. ### Options @@ -44,6 +52,8 @@ Additionally, the rule accepts an optional object option with an `"overrides"` k Examples of **incorrect** code for this rule with the default `"beside"` option: +::: incorrect + ```js /* eslint nonblock-statement-body-position: ["error", "beside"] */ @@ -64,8 +74,12 @@ while (foo) ``` +::: + Examples of **correct** code for this rule with the default `"beside"` option: +::: correct + ```js /* eslint nonblock-statement-body-position: ["error", "beside"] */ @@ -85,8 +99,12 @@ if (foo) { // block statements are always allowed with this rule } ``` +::: + Examples of **incorrect** code for this rule with the `"below"` option: +::: incorrect + ```js /* eslint nonblock-statement-body-position: ["error", "below"] */ @@ -100,8 +118,12 @@ for (let i = 1; i < foo; i++) bar(); do bar(); while (foo) ``` +::: + Examples of **correct** code for this rule with the `"below"` option: +::: correct + ```js /* eslint nonblock-statement-body-position: ["error", "below"] */ @@ -127,8 +149,12 @@ if (foo) { } ``` +::: + Examples of **incorrect** code for this rule with the `"beside", { "overrides": { "while": "below" } }` rule: +::: incorrect + ```js /* eslint nonblock-statement-body-position: ["error", "beside", { "overrides": { "while": "below" } }] */ @@ -138,8 +164,12 @@ if (foo) while (foo) bar(); ``` +::: + Examples of **correct** code for this rule with the `"beside", { "overrides": { "while": "below" } }` rule: +::: correct + ```js /* eslint nonblock-statement-body-position: ["error", "beside", { "overrides": { "while": "below" } }] */ @@ -149,10 +179,8 @@ while (foo) bar(); ``` -## When Not To Use It - -If you're not concerned about consistent locations of single-line statements, you should not turn on this rule. You can also disable this rule if you're using the `"all"` option for the [`curly`](/docs/rules/curly.md) rule, because this will disallow single-line statements entirely. +::: -## Further Reading +## When Not To Use It -* JSCS: [requireNewlineBeforeSingleStatementsInIf](https://jscs-dev.github.io/rule/requireNewlineBeforeSingleStatementsInIf) +If you're not concerned about consistent locations of single-line statements, you should not turn on this rule. You can also disable this rule if you're using the `"all"` option for the [`curly`](/docs/rules/curly) rule, because this will disallow single-line statements entirely. diff --git a/eslint/docs/rules/object-curly-newline.md b/eslint/docs/src/rules/object-curly-newline.md similarity index 95% rename from eslint/docs/rules/object-curly-newline.md rename to eslint/docs/src/rules/object-curly-newline.md index cc98b42..ece2fca 100644 --- a/eslint/docs/rules/object-curly-newline.md +++ b/eslint/docs/src/rules/object-curly-newline.md @@ -1,4 +1,15 @@ -# enforce consistent line breaks after opening and before closing braces (object-curly-newline) +--- +title: object-curly-newline +layout: doc +rule_type: layout +related_rules: +- comma-spacing +- key-spacing +- object-curly-spacing +- object-property-newline +--- + + A number of style guides require or disallow line breaks inside of object braces and other tokens. @@ -41,6 +52,8 @@ You can specify different options for object literals, destructuring assignments Examples of **incorrect** code for this rule with the `"always"` option: +::: incorrect + ```js /*eslint object-curly-newline: ["error", "always"]*/ /*eslint-env es6*/ @@ -64,8 +77,12 @@ let {k = function() { }} = obj; ``` +::: + Examples of **correct** code for this rule with the `"always"` option: +::: correct + ```js /*eslint object-curly-newline: ["error", "always"]*/ /*eslint-env es6*/ @@ -107,10 +124,14 @@ let { } = obj; ``` +::: + ### never Examples of **incorrect** code for this rule with the `"never"` option: +::: incorrect + ```js /*eslint object-curly-newline: ["error", "never"]*/ /*eslint-env es6*/ @@ -152,8 +173,12 @@ let { } = obj; ``` +::: + Examples of **correct** code for this rule with the `"never"` option: +::: correct + ```js /*eslint object-curly-newline: ["error", "never"]*/ /*eslint-env es6*/ @@ -177,10 +202,14 @@ let {k = function() { }} = obj; ``` +::: + ### multiline Examples of **incorrect** code for this rule with the `{ "multiline": true }` option: +::: incorrect + ```js /*eslint object-curly-newline: ["error", { "multiline": true }]*/ /*eslint-env es6*/ @@ -214,8 +243,12 @@ let {k = function() { }} = obj; ``` +::: + Examples of **correct** code for this rule with the `{ "multiline": true }` option: +::: correct + ```js /*eslint object-curly-newline: ["error", { "multiline": true }]*/ /*eslint-env es6*/ @@ -247,10 +280,14 @@ let { } = obj; ``` +::: + ### minProperties Examples of **incorrect** code for this rule with the `{ "minProperties": 2 }` option: +::: incorrect + ```js /*eslint object-curly-newline: ["error", { "minProperties": 2 }]*/ /*eslint-env es6*/ @@ -284,8 +321,12 @@ let { } = obj; ``` +::: + Examples of **correct** code for this rule with the `{ "minProperties": 2 }` option: +::: correct + ```js /*eslint object-curly-newline: ["error", { "minProperties": 2 }]*/ /*eslint-env es6*/ @@ -317,10 +358,14 @@ let {k = function() { }} = obj; ``` +::: + ### consistent Examples of **incorrect** code for this rule with the default `{ "consistent": true }` option: +::: incorrect + ```js /*eslint object-curly-newline: ["error", { "consistent": true }]*/ /*eslint-env es6*/ @@ -363,13 +408,16 @@ let { }} = obj; ``` +::: + Examples of **correct** code for this rule with the default `{ "consistent": true }` option: +::: correct + ```js /*eslint object-curly-newline: ["error", { "consistent": true }]*/ /*eslint-env es6*/ - let empty1 = {}; let empty2 = { }; @@ -416,10 +464,14 @@ let { } = obj; ``` +::: + ### ObjectExpression and ObjectPattern Examples of **incorrect** code for this rule with the `{ "ObjectExpression": "always", "ObjectPattern": "never" }` options: +::: incorrect + ```js /*eslint object-curly-newline: ["error", { "ObjectExpression": "always", "ObjectPattern": "never" }]*/ /*eslint-env es6*/ @@ -452,8 +504,12 @@ let { } = obj; ``` +::: + Examples of **correct** code for this rule with the `{ "ObjectExpression": "always", "ObjectPattern": "never" }` options: +::: correct + ```js /*eslint object-curly-newline: ["error", { "ObjectExpression": "always", "ObjectPattern": "never" }]*/ /*eslint-env es6*/ @@ -486,10 +542,14 @@ let {k = function() { }} = obj; ``` +::: + ### ImportDeclaration and ExportDeclaration Examples of **incorrect** code for this rule with the `{ "ImportDeclaration": "always", "ExportDeclaration": "never" }` options: +::: incorrect + ```js /*eslint object-curly-newline: ["error", { "ImportDeclaration": "always", "ExportDeclaration": "never" }]*/ /*eslint-env es6*/ @@ -509,8 +569,12 @@ export { } from 'foo-bar'; ``` +::: + Examples of **correct** code for this rule with the `{ "ImportDeclaration": "always", "ExportDeclaration": "never" }` options: +::: correct + ```js /*eslint object-curly-newline: ["error", { "ImportDeclaration": "always", "ExportDeclaration": "never" }]*/ /*eslint-env es6*/ @@ -531,18 +595,13 @@ export { foo, bar } from 'foo-bar'; export { foo as f, bar } from 'foo-bar'; ``` -## Compatibility - -* **JSCS**: [requirePaddingNewLinesInObjects](https://jscs-dev.github.io/rule/requirePaddingNewLinesInObjects) -* **JSCS**: [disallowPaddingNewLinesInObjects](https://jscs-dev.github.io/rule/disallowPaddingNewLinesInObjects) +::: ## When Not To Use It If you don't want to enforce consistent line breaks after opening and before closing braces, then it's safe to disable this rule. -## Related Rules +## Compatibility -* [comma-spacing](comma-spacing.md) -* [key-spacing](key-spacing.md) -* [object-curly-spacing](object-curly-spacing.md) -* [object-property-newline](object-property-newline.md) +* **JSCS**: [requirePaddingNewLinesInObjects](https://jscs-dev.github.io/rule/requirePaddingNewLinesInObjects) +* **JSCS**: [disallowPaddingNewLinesInObjects](https://jscs-dev.github.io/rule/disallowPaddingNewLinesInObjects) diff --git a/eslint/docs/rules/object-curly-spacing.md b/eslint/docs/src/rules/object-curly-spacing.md similarity index 92% rename from eslint/docs/rules/object-curly-spacing.md rename to eslint/docs/src/rules/object-curly-spacing.md index e7b054c..2df4727 100644 --- a/eslint/docs/rules/object-curly-spacing.md +++ b/eslint/docs/src/rules/object-curly-spacing.md @@ -1,4 +1,15 @@ -# enforce consistent spacing inside braces (object-curly-spacing) +--- +title: object-curly-spacing +layout: doc +rule_type: layout +related_rules: +- array-bracket-spacing +- comma-spacing +- computed-property-spacing +- space-in-parens +--- + + While formatting preferences are very personal, a number of style guides require or disallow spaces between curly braces in the following situations: @@ -42,6 +53,8 @@ Object option: Examples of **incorrect** code for this rule with the default `"never"` option: +::: incorrect + ```js /*eslint object-curly-spacing: ["error", "never"]*/ @@ -53,8 +66,12 @@ var {x } = y; import { foo } from 'bar'; ``` +::: + Examples of **correct** code for this rule with the default `"never"` option: +::: correct + ```js /*eslint object-curly-spacing: ["error", "never"]*/ @@ -72,10 +89,14 @@ var {x} = y; import {foo} from 'bar'; ``` +::: + ### always Examples of **incorrect** code for this rule with the `"always"` option: +::: incorrect + ```js /*eslint object-curly-spacing: ["error", "always"]*/ @@ -91,8 +112,12 @@ var {x} = y; import {foo } from 'bar'; ``` +::: + Examples of **correct** code for this rule with the `"always"` option: +::: correct + ```js /*eslint object-curly-spacing: ["error", "always"]*/ @@ -106,10 +131,14 @@ var { x } = y; import { foo } from 'bar'; ``` +::: + #### arraysInObjects Examples of additional **correct** code for this rule with the `"never", { "arraysInObjects": true }` options: +::: correct + ```js /*eslint object-curly-spacing: ["error", "never", { "arraysInObjects": true }]*/ @@ -117,8 +146,12 @@ var obj = {"foo": [ 1, 2 ] }; var obj = {"foo": [ "baz", "bar" ] }; ``` +::: + Examples of additional **correct** code for this rule with the `"always", { "arraysInObjects": false }` options: +::: correct + ```js /*eslint object-curly-spacing: ["error", "always", { "arraysInObjects": false }]*/ @@ -126,31 +159,34 @@ var obj = { "foo": [ 1, 2 ]}; var obj = { "foo": [ "baz", "bar" ]}; ``` +::: + #### objectsInObjects Examples of additional **correct** code for this rule with the `"never", { "objectsInObjects": true }` options: +::: correct + ```js /*eslint object-curly-spacing: ["error", "never", { "objectsInObjects": true }]*/ var obj = {"foo": {"baz": 1, "bar": 2} }; ``` +::: + Examples of additional **correct** code for this rule with the `"always", { "objectsInObjects": false }` options: +::: correct + ```js /*eslint object-curly-spacing: ["error", "always", { "objectsInObjects": false }]*/ var obj = { "foo": { "baz": 1, "bar": 2 }}; ``` +::: + ## When Not To Use It You can turn this rule off if you are not concerned with the consistency of spacing between curly braces. - -## Related Rules - -* [array-bracket-spacing](array-bracket-spacing.md) -* [comma-spacing](comma-spacing.md) -* [computed-property-spacing](computed-property-spacing.md) -* [space-in-parens](space-in-parens.md) diff --git a/eslint/docs/rules/object-property-newline.md b/eslint/docs/src/rules/object-property-newline.md similarity index 93% rename from eslint/docs/rules/object-property-newline.md rename to eslint/docs/src/rules/object-property-newline.md index 893e54f..314fa7b 100644 --- a/eslint/docs/rules/object-property-newline.md +++ b/eslint/docs/src/rules/object-property-newline.md @@ -1,4 +1,15 @@ -# enforce placing object properties on separate lines (object-property-newline) +--- +title: object-property-newline +layout: doc +rule_type: layout +related_rules: +- brace-style +- comma-dangle +- key-spacing +- object-curly-spacing +--- + + This rule permits you to restrict the locations of property specifications in object literals. You may prohibit any part of any property specification from appearing on the same line as any part of any other property specification. You may make this prohibition absolute, or, by invoking an object option, you may allow an exception, permitting an object literal to have all parts of all of its property specifications on a single line. @@ -90,11 +101,11 @@ will be prohibited, because two properties, but not all properties, appear on th This rule applies equally to all property specifications, regardless of notation, including: -- `a: 1` (ES5) -- `a` (ES2015 shorthand property) -- ``[`prop${a}`]`` (ES2015 computed property name) +* `a: 1` (ES5) +* `a` (ES2015 shorthand property) +* ``[`prop${a}`]`` (ES2015 computed property name) -Thus, the rule (without the object option) prohibits both of these: +Thus, the rule (without the optional exception) prohibits both of these: ```js const newObject = { @@ -174,6 +185,8 @@ As illustrated above, the `--fix` option, applied to this rule, does not comply Examples of **incorrect** code for this rule, with no object option or with `allowAllPropertiesOnSameLine` set to `false`: +::: incorrect + ```js /*eslint object-property-newline: "error"*/ @@ -208,8 +221,12 @@ const obj5 = { ]: true}; ``` +::: + Examples of **correct** code for this rule, with no object option or with `allowAllPropertiesOnSameLine` set to `false`: +::: correct + ```js /*eslint object-property-newline: "error"*/ @@ -238,8 +255,12 @@ const obj3 = { }; ``` +::: + Examples of additional **correct** code for this rule with the `{ "allowAllPropertiesOnSameLine": true }` option: +::: correct + ```js /*eslint object-property-newline: ["error", { "allowAllPropertiesOnSameLine": true }]*/ @@ -254,17 +275,12 @@ const obj3 = { }; ``` +::: + ## When Not To Use It You can turn this rule off if you want to decide, case-by-case, whether to place property specifications on separate lines. ## Compatibility -- **JSCS**: This rule provides partial compatibility with [requireObjectKeysOnNewLine](https://jscs-dev.github.io/rule/requireObjectKeysOnNewLine). - -## Related Rules - -- [brace-style](brace-style.md) -- [comma-dangle](comma-dangle.md) -- [key-spacing](key-spacing.md) -- [object-curly-spacing](object-curly-spacing.md) +* **JSCS**: This rule provides partial compatibility with [requireObjectKeysOnNewLine](https://jscs-dev.github.io/rule/requireObjectKeysOnNewLine). diff --git a/eslint/docs/rules/object-shorthand.md b/eslint/docs/src/rules/object-shorthand.md similarity index 77% rename from eslint/docs/rules/object-shorthand.md rename to eslint/docs/src/rules/object-shorthand.md index fee0e62..0865126 100644 --- a/eslint/docs/rules/object-shorthand.md +++ b/eslint/docs/src/rules/object-shorthand.md @@ -1,4 +1,14 @@ -# Require Object Literal Shorthand Syntax (object-shorthand) +--- +title: object-shorthand +layout: doc +rule_type: suggestion +related_rules: +- no-useless-rename +further_reading: +- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer +--- + + ECMAScript 6 provides a concise form for defining object literal methods and properties. This syntax can make defining complex object literals much cleaner. @@ -81,20 +91,16 @@ var foo = { }; ``` -See Also: - -- [`no-useless-rename`](https://eslint.org/docs/rules/no-useless-rename) which disallows renaming import, export, and destructured assignments to the same name. - ## Options The rule takes an option which specifies when it should be applied. It can be set to one of the following values: -- `"always"` (default) expects that the shorthand will be used whenever possible. -- `"methods"` ensures the method shorthand is used (also applies to generators). -- `"properties"` ensures the property shorthand is used (where the key and variable name match). -- `"never"` ensures that no property or method shorthand is used in any object literal. -- `"consistent"` ensures that either all shorthand or all long-form will be used in an object literal. -- `"consistent-as-needed"` ensures that either all shorthand or all long-form will be used in an object literal, but ensures all shorthand whenever possible. +* `"always"` (default) expects that the shorthand will be used whenever possible. +* `"methods"` ensures the method shorthand is used (also applies to generators). +* `"properties"` ensures the property shorthand is used (where the key and variable name match). +* `"never"` ensures that no property or method shorthand is used in any object literal. +* `"consistent"` ensures that either all shorthand or all long-form will be used in an object literal. +* `"consistent-as-needed"` ensures that either all shorthand or all long-form will be used in an object literal, but ensures all shorthand whenever possible. You can set the option in configuration like this: @@ -106,9 +112,10 @@ You can set the option in configuration like this: Additionally, the rule takes an optional object configuration: -- `"avoidQuotes": true` indicates that long-form syntax is preferred whenever the object key is a string literal (default: `false`). Note that this option can only be enabled when the string option is set to `"always"`, `"methods"`, or `"properties"`. -- `"ignoreConstructors": true` can be used to prevent the rule from reporting errors for constructor functions. (By default, the rule treats constructors the same way as other functions.) Note that this option can only be enabled when the string option is set to `"always"` or `"methods"`. -- `"avoidExplicitReturnArrows": true` indicates that methods are preferred over explicit-return arrow functions for function properties. (By default, the rule allows either of these.) Note that this option can only be enabled when the string option is set to `"always"` or `"methods"`. +* `"avoidQuotes": true` indicates that long-form syntax is preferred whenever the object key is a string literal (default: `false`). Note that this option can only be enabled when the string option is set to `"always"`, `"methods"`, or `"properties"`. +* `"ignoreConstructors": true` can be used to prevent the rule from reporting errors for constructor functions. (By default, the rule treats constructors the same way as other functions.) Note that this option can only be enabled when the string option is set to `"always"` or `"methods"`. +* `"methodsIgnorePattern"` (`string`) for methods whose names match this regex pattern, the method shorthand will not be enforced. Note that this option can only be used when the string option is set to `"always"` or `"methods"`. +* `"avoidExplicitReturnArrows": true` indicates that methods are preferred over explicit-return arrow functions for function properties. (By default, the rule allows either of these.) Note that this option can only be enabled when the string option is set to `"always"` or `"methods"`. ### `avoidQuotes` @@ -120,6 +127,8 @@ Additionally, the rule takes an optional object configuration: Example of **incorrect** code for this rule with the `"always", { "avoidQuotes": true }` option: +::: incorrect + ```js /*eslint object-shorthand: ["error", "always", { "avoidQuotes": true }]*/ /*eslint-env es6*/ @@ -129,8 +138,12 @@ var foo = { }; ``` +::: + Example of **correct** code for this rule with the `"always", { "avoidQuotes": true }` option: +::: correct + ```js /*eslint object-shorthand: ["error", "always", { "avoidQuotes": true }]*/ /*eslint-env es6*/ @@ -141,6 +154,8 @@ var foo = { }; ``` +::: + ### `ignoreConstructors` ```json @@ -151,6 +166,8 @@ var foo = { Example of **correct** code for this rule with the `"always", { "ignoreConstructors": true }` option: +::: correct + ```js /*eslint object-shorthand: ["error", "always", { "ignoreConstructors": true }]*/ /*eslint-env es6*/ @@ -160,6 +177,24 @@ var foo = { }; ``` +::: + +### `methodsIgnorePattern` + +Example of **correct** code for this rule with the `"always", { "methodsIgnorePattern": "^bar$" }` option: + +::: correct + +```js +/*eslint object-shorthand: ["error", "always", { "methodsIgnorePattern": "^bar$" }]*/ + +var foo = { + bar: function() {} +}; +``` + +::: + ### `avoidExplicitReturnArrows` ```json @@ -170,6 +205,8 @@ var foo = { Example of **incorrect** code for this rule with the `"always", { "avoidExplicitReturnArrows": true }` option: +::: incorrect + ```js /*eslint object-shorthand: ["error", "always", { "avoidExplicitReturnArrows": true }]*/ /*eslint-env es6*/ @@ -185,8 +222,12 @@ var foo = { }; ``` +::: + Example of **correct** code for this rule with the `"always", { "avoidExplicitReturnArrows": true }` option: +::: correct + ```js /*eslint object-shorthand: ["error", "always", { "avoidExplicitReturnArrows": true }]*/ /*eslint-env es6*/ @@ -200,8 +241,12 @@ var foo = { }; ``` +::: + Example of **incorrect** code for this rule with the `"consistent"` option: +::: incorrect + ```js /*eslint object-shorthand: [2, "consistent"]*/ /*eslint-env es6*/ @@ -212,8 +257,12 @@ var foo = { }; ``` +::: + Examples of **correct** code for this rule with the `"consistent"` option: +::: correct + ```js /*eslint object-shorthand: [2, "consistent"]*/ /*eslint-env es6*/ @@ -229,8 +278,12 @@ var bar = { }; ``` +::: + Example of **incorrect** code with the `"consistent-as-needed"` option, which is very similar to `"consistent"`: +::: incorrect + ```js /*eslint object-shorthand: [2, "consistent-as-needed"]*/ /*eslint-env es6*/ @@ -241,11 +294,9 @@ var foo = { }; ``` +::: + ## When Not To Use It Anyone not yet in an ES6 environment would not want to apply this rule. Others may find the terseness of the shorthand syntax harder to read and may not want to encourage it with this rule. - -## Further Reading - -[Object initializer - MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer) diff --git a/eslint/docs/rules/one-var-declaration-per-line.md b/eslint/docs/src/rules/one-var-declaration-per-line.md similarity index 89% rename from eslint/docs/rules/one-var-declaration-per-line.md rename to eslint/docs/src/rules/one-var-declaration-per-line.md index 90f67a9..46ee9ab 100644 --- a/eslint/docs/rules/one-var-declaration-per-line.md +++ b/eslint/docs/src/rules/one-var-declaration-per-line.md @@ -1,4 +1,12 @@ -# require or disallow newlines around variable declarations (one-var-declaration-per-line) +--- +title: one-var-declaration-per-line +layout: doc +rule_type: suggestion +related_rules: +- one-var +--- + + Some developers declare multiple var statements on the same line: @@ -31,6 +39,8 @@ This rule has a single string option: Examples of **incorrect** code for this rule with the default `"initializations"` option: +::: incorrect + ```js /*eslint one-var-declaration-per-line: ["error", "initializations"]*/ /*eslint-env es6*/ @@ -41,8 +51,12 @@ let a, b = 0, c; ``` +::: + Examples of **correct** code for this rule with the default `"initializations"` option: +::: correct + ```js /*eslint one-var-declaration-per-line: ["error", "initializations"]*/ /*eslint-env es6*/ @@ -56,10 +70,14 @@ let a, b = 0; ``` +::: + ### always Examples of **incorrect** code for this rule with the `"always"` option: +::: incorrect + ```js /*eslint one-var-declaration-per-line: ["error", "always"]*/ /*eslint-env es6*/ @@ -71,8 +89,12 @@ let a, b = 0; const a = 0, b = 0; ``` +::: + Examples of **correct** code for this rule with the `"always"` option: +::: correct + ```js /*eslint one-var-declaration-per-line: ["error", "always"]*/ /*eslint-env es6*/ @@ -84,6 +106,4 @@ let a, b = 0; ``` -## Related Rules - -* [one-var](one-var.md) +::: diff --git a/eslint/docs/rules/one-var.md b/eslint/docs/src/rules/one-var.md similarity index 94% rename from eslint/docs/rules/one-var.md rename to eslint/docs/src/rules/one-var.md index df7ee1f..8d95633 100644 --- a/eslint/docs/rules/one-var.md +++ b/eslint/docs/src/rules/one-var.md @@ -1,4 +1,10 @@ -# enforce variables to be declared either together or separately in functions (one-var) +--- +title: one-var +layout: doc +rule_type: suggestion +--- + + Variables can be declared at any point in JavaScript code using `var`, `let`, or `const`. There are many styles and preferences related to the declaration of variables, and one of those is deciding on how many variable declarations should be allowed in a single function. @@ -64,6 +70,8 @@ Alternate object option: Examples of **incorrect** code for this rule with the default `"always"` option: +::: incorrect + ```js /*eslint one-var: ["error", "always"]*/ @@ -109,8 +117,12 @@ class C { } ``` +::: + Examples of **correct** code for this rule with the default `"always"` option: +::: correct + ```js /*eslint one-var: ["error", "always"]*/ @@ -170,10 +182,14 @@ class C { } ``` +::: + ### never Examples of **incorrect** code for this rule with the `"never"` option: +::: incorrect + ```js /*eslint one-var: ["error", "never"]*/ @@ -206,8 +222,12 @@ class C { } ``` +::: + Examples of **correct** code for this rule with the `"never"` option: +::: correct + ```js /*eslint one-var: ["error", "never"]*/ @@ -240,12 +260,21 @@ class C { let qux; } } + +// declarations with multiple variables are allowed in for-loop initializers +for (var i = 0, len = arr.length; i < len; i++) { + doSomething(arr[i]); +} ``` +::: + ### consecutive Examples of **incorrect** code for this rule with the `"consecutive"` option: +::: incorrect + ```js /*eslint one-var: ["error", "consecutive"]*/ @@ -274,8 +303,12 @@ class C { } ``` +::: + Examples of **correct** code for this rule with the `"consecutive"` option: +::: correct + ```js /*eslint one-var: ["error", "consecutive"]*/ @@ -305,10 +338,14 @@ class C { } ``` +::: + ### var, let, and const Examples of **incorrect** code for this rule with the `{ var: "always", let: "never", const: "never" }` option: +::: incorrect + ```js /*eslint one-var: ["error", { var: "always", let: "never", const: "never" }]*/ /*eslint-env es6*/ @@ -328,8 +365,12 @@ function foo() { } ``` +::: + Examples of **correct** code for this rule with the `{ var: "always", let: "never", const: "never" }` option: +::: correct + ```js /*eslint one-var: ["error", { var: "always", let: "never", const: "never" }]*/ /*eslint-env es6*/ @@ -349,8 +390,12 @@ function foo() { } ``` +::: + Examples of **incorrect** code for this rule with the `{ var: "never" }` option: +::: incorrect + ```js /*eslint one-var: ["error", { var: "never" }]*/ /*eslint-env es6*/ @@ -361,8 +406,12 @@ function foo() { } ``` +::: + Examples of **correct** code for this rule with the `{ var: "never" }` option: +::: correct + ```js /*eslint one-var: ["error", { var: "never" }]*/ /*eslint-env es6*/ @@ -377,8 +426,12 @@ function foo() { } ``` +::: + Examples of **incorrect** code for this rule with the `{ separateRequires: true }` option: +::: incorrect + ```js /*eslint one-var: ["error", { separateRequires: true, var: "always" }]*/ /*eslint-env node*/ @@ -387,8 +440,12 @@ var foo = require("foo"), bar = "bar"; ``` +::: + Examples of **correct** code for this rule with the `{ separateRequires: true }` option: +::: correct + ```js /*eslint one-var: ["error", { separateRequires: true, var: "always" }]*/ /*eslint-env node*/ @@ -397,13 +454,21 @@ var foo = require("foo"); var bar = "bar"; ``` +::: + +::: correct + ```js var foo = require("foo"), bar = require("bar"); ``` +::: + Examples of **incorrect** code for this rule with the `{ var: "never", let: "consecutive", const: "consecutive" }` option: +::: incorrect + ```js /*eslint one-var: ["error", { var: "never", let: "consecutive", const: "consecutive" }]*/ /*eslint-env es6*/ @@ -427,8 +492,12 @@ function foo() { } ``` +::: + Examples of **correct** code for this rule with the `{ var: "never", let: "consecutive", const: "consecutive" }` option: +::: correct + ```js /*eslint one-var: ["error", { var: "never", let: "consecutive", const: "consecutive" }]*/ /*eslint-env es6*/ @@ -454,8 +523,12 @@ function foo() { } ``` +::: + Examples of **incorrect** code for this rule with the `{ var: "consecutive" }` option: +::: incorrect + ```js /*eslint one-var: ["error", { var: "consecutive" }]*/ /*eslint-env es6*/ @@ -466,8 +539,12 @@ function foo() { } ``` +::: + Examples of **correct** code for this rule with the `{ var: "consecutive" }` option: +::: correct + ```js /*eslint one-var: ["error", { var: "consecutive" }]*/ /*eslint-env es6*/ @@ -482,10 +559,14 @@ function foo() { } ``` +::: + ### initialized and uninitialized Examples of **incorrect** code for this rule with the `{ "initialized": "always", "uninitialized": "never" }` option: +::: incorrect + ```js /*eslint one-var: ["error", { "initialized": "always", "uninitialized": "never" }]*/ /*eslint-env es6*/ @@ -497,8 +578,12 @@ function foo() { } ``` +::: + Examples of **correct** code for this rule with the `{ "initialized": "always", "uninitialized": "never" }` option: +::: correct + ```js /*eslint one-var: ["error", { "initialized": "always", "uninitialized": "never" }]*/ @@ -520,8 +605,12 @@ for (z of foo) { } ``` +::: + Examples of **incorrect** code for this rule with the `{ "initialized": "never" }` option: +::: incorrect + ```js /*eslint one-var: ["error", { "initialized": "never" }]*/ /*eslint-env es6*/ @@ -532,8 +621,12 @@ function foo() { } ``` +::: + Examples of **correct** code for this rule with the `{ "initialized": "never" }` option: +::: correct + ```js /*eslint one-var: ["error", { "initialized": "never" }]*/ @@ -544,8 +637,12 @@ function foo() { } ``` +::: + Examples of **incorrect** code for this rule with the `{ "initialized": "consecutive", "uninitialized": "never" }` option: +::: incorrect + ```js /*eslint one-var: ["error", { "initialized": "consecutive", "uninitialized": "never" }]*/ @@ -559,8 +656,12 @@ function foo() { } ``` +::: + Examples of **correct** code for this rule with the `{ "initialized": "consecutive", "uninitialized": "never" }` option: +::: correct + ```js /*eslint one-var: ["error", { "initialized": "consecutive", "uninitialized": "never" }]*/ @@ -574,8 +675,12 @@ function foo() { } ``` +::: + Examples of **incorrect** code for this rule with the `{ "initialized": "consecutive" }` option: +::: incorrect + ```js /*eslint one-var: ["error", { "initialized": "consecutive" }]*/ @@ -590,8 +695,12 @@ function foo() { } ``` +::: + Examples of **correct** code for this rule with the `{ "initialized": "consecutive" }` option: +::: correct + ```js /*eslint one-var: ["error", { "initialized": "consecutive" }]*/ @@ -606,6 +715,8 @@ function foo() { } ``` +::: + ## Compatibility * **JSHint**: This rule maps to the `onevar` JSHint rule, but allows `let` and `const` to be configured separately. diff --git a/eslint/docs/rules/operator-assignment.md b/eslint/docs/src/rules/operator-assignment.md similarity index 93% rename from eslint/docs/rules/operator-assignment.md rename to eslint/docs/src/rules/operator-assignment.md index b926462..c071b19 100644 --- a/eslint/docs/rules/operator-assignment.md +++ b/eslint/docs/src/rules/operator-assignment.md @@ -1,4 +1,10 @@ -# require or disallow assignment operator shorthand where possible (operator-assignment) +--- +title: operator-assignment +layout: doc +rule_type: suggestion +--- + + JavaScript provides shorthand operators that combine variable assignment and some simple mathematical operations. For example, `x = x + 4` can be shortened to `x += 4`. The supported shorthand forms are as follows: @@ -36,6 +42,8 @@ This rule has a single string option: Examples of **incorrect** code for this rule with the default `"always"` option: +::: incorrect + ```js /*eslint operator-assignment: ["error", "always"]*/ @@ -45,8 +53,12 @@ x[0] = x[0] / y; x.y = x.y << z; ``` +::: + Examples of **correct** code for this rule with the default `"always"` option: +::: correct + ```js /*eslint operator-assignment: ["error", "always"]*/ @@ -59,10 +71,14 @@ x[foo()] = x[foo()] % 2; x = y + x; // `+` is not always commutative (e.g. x = "abc") ``` +::: + ### never Examples of **incorrect** code for this rule with the `"never"` option: +::: incorrect + ```js /*eslint operator-assignment: ["error", "never"]*/ @@ -70,8 +86,12 @@ x *= y; x ^= (y + z) / foo(); ``` +::: + Examples of **correct** code for this rule with the `"never"` option: +::: correct + ```js /*eslint operator-assignment: ["error", "never"]*/ @@ -79,6 +99,8 @@ x = x + y; x.y = x.y / a.b; ``` +::: + ## When Not To Use It Use of operator assignment shorthand is a stylistic choice. Leaving this rule turned off would allow developers to choose which style is more readable on a case-by-case basis. diff --git a/eslint/docs/rules/operator-linebreak.md b/eslint/docs/src/rules/operator-linebreak.md similarity index 94% rename from eslint/docs/rules/operator-linebreak.md rename to eslint/docs/src/rules/operator-linebreak.md index 6ae484e..3994cb4 100644 --- a/eslint/docs/rules/operator-linebreak.md +++ b/eslint/docs/src/rules/operator-linebreak.md @@ -1,4 +1,12 @@ -# enforce consistent linebreak style for operators (operator-linebreak) +--- +title: operator-linebreak +layout: doc +rule_type: layout +related_rules: +- comma-style +--- + + When a statement is too long to fit on a single line, line breaks are generally inserted next to the operators separating expressions. The first style coming to mind would be to place the operator at the end of the line, following the English punctuation rules. @@ -40,6 +48,8 @@ The default configuration is `"after", { "overrides": { "?": "before", ":": "bef Examples of **incorrect** code for this rule with the `"after"` option: +::: incorrect + ```js /*eslint operator-linebreak: ["error", "after"]*/ @@ -72,8 +82,12 @@ class Foo { } ``` +::: + Examples of **correct** code for this rule with the `"after"` option: +::: correct + ```js /*eslint operator-linebreak: ["error", "after"]*/ @@ -105,10 +119,14 @@ class Foo { } ``` +::: + ### before Examples of **incorrect** code for this rule with the `"before"` option: +::: incorrect + ```js /*eslint operator-linebreak: ["error", "before"]*/ @@ -137,8 +155,12 @@ class Foo { } ``` +::: + Examples of **correct** code for this rule with the `"before"` option: +::: correct + ```js /*eslint operator-linebreak: ["error", "before"]*/ @@ -170,10 +192,14 @@ class Foo { } ``` +::: + ### none Examples of **incorrect** code for this rule with the `"none"` option: +::: incorrect + ```js /*eslint operator-linebreak: ["error", "none"]*/ @@ -217,8 +243,12 @@ class Foo { } ``` +::: + Examples of **correct** code for this rule with the `"none"` option: +::: correct + ```js /*eslint operator-linebreak: ["error", "none"]*/ @@ -243,10 +273,14 @@ class Foo { } ``` +::: + ### overrides Examples of additional **incorrect** code for this rule with the `{ "overrides": { "+=": "before" } }` option: +::: incorrect + ```js /*eslint operator-linebreak: ["error", "after", { "overrides": { "+=": "before" } }]*/ @@ -255,8 +289,12 @@ thing += 's'; ``` +::: + Examples of additional **correct** code for this rule with the `{ "overrides": { "+=": "before" } }` option: +::: correct + ```js /*eslint operator-linebreak: ["error", "after", { "overrides": { "+=": "before" } }]*/ @@ -265,8 +303,12 @@ thing += 's'; ``` +::: + Examples of additional **correct** code for this rule with the `{ "overrides": { "?": "ignore", ":": "ignore" } }` option: +::: correct + ```js /*eslint operator-linebreak: ["error", "after", { "overrides": { "?": "ignore", ":": "ignore" } }]*/ @@ -281,8 +323,12 @@ answer = everything foo; ``` +::: + Examples of **incorrect** code for this rule with the default `"after", { "overrides": { "?": "before", ":": "before" } }` option: +::: incorrect + ```js /*eslint operator-linebreak: ["error", "after", { "overrides": { "?": "before", ":": "before" } }]*/ @@ -305,8 +351,12 @@ answer = everything ? foo; ``` +::: + Examples of **correct** code for this rule with the default `"after", { "overrides": { "?": "before", ":": "before" } }` option: +::: correct + ```js /*eslint operator-linebreak: ["error", "after", { "overrides": { "?": "before", ":": "before" } }]*/ @@ -327,10 +377,8 @@ answer = everything : foo; ``` +::: + ## When Not To Use It If your project will not be using a common operator line break style, turn this rule off. - -## Related Rules - -* [comma-style](comma-style.md) diff --git a/eslint/docs/rules/padded-blocks.md b/eslint/docs/src/rules/padded-blocks.md similarity index 92% rename from eslint/docs/rules/padded-blocks.md rename to eslint/docs/src/rules/padded-blocks.md index 85c0a8b..faa5333 100644 --- a/eslint/docs/rules/padded-blocks.md +++ b/eslint/docs/src/rules/padded-blocks.md @@ -1,4 +1,13 @@ -# require or disallow padding within blocks (padded-blocks) +--- +title: padded-blocks +layout: doc +rule_type: layout +related_rules: +- lines-between-class-members +- padding-line-between-statements +--- + + Some style guides require block statements to start and end with blank lines. The goal is to improve readability by visually separating the block content and the surrounding code. @@ -44,6 +53,8 @@ Object option: Examples of **incorrect** code for this rule with the default `"always"` option: +::: incorrect + ```js /*eslint padded-blocks: ["error", "always"]*/ @@ -76,8 +87,12 @@ class C { } ``` +::: + Examples of **correct** code for this rule with the default `"always"` option: +::: correct + ```js /*eslint padded-blocks: ["error", "always"]*/ @@ -112,10 +127,14 @@ class C { } ``` +::: + ### never Examples of **incorrect** code for this rule with the `"never"` option: +::: incorrect + ```js /*eslint padded-blocks: ["error", "never"]*/ @@ -153,8 +172,12 @@ class C { } ``` +::: + Examples of **correct** code for this rule with the `"never"` option: +::: correct + ```js /*eslint padded-blocks: ["error", "never"]*/ @@ -174,10 +197,14 @@ class C { } ``` +::: + ### blocks Examples of **incorrect** code for this rule with the `{ "blocks": "always" }` option: +::: incorrect + ```js /*eslint padded-blocks: ["error", { "blocks": "always" }]*/ @@ -217,8 +244,12 @@ class C { } ``` +::: + Examples of **correct** code for this rule with the `{ "blocks": "always" }` option: +::: correct + ```js /*eslint padded-blocks: ["error", { "blocks": "always" }]*/ @@ -262,8 +293,12 @@ class D { } ``` +::: + Examples of **incorrect** code for this rule with the `{ "blocks": "never" }` option: +::: incorrect + ```js /*eslint padded-blocks: ["error", { "blocks": "never" }]*/ @@ -299,8 +334,12 @@ class C { } ``` +::: + Examples of **correct** code for this rule with the `{ "blocks": "never" }` option: +::: correct + ```js /*eslint padded-blocks: ["error", { "blocks": "never" }]*/ @@ -328,10 +367,14 @@ class D { } ``` +::: + ### classes Examples of **incorrect** code for this rule with the `{ "classes": "always" }` option: +::: incorrect + ```js /*eslint padded-blocks: ["error", { "classes": "always" }]*/ @@ -341,8 +384,12 @@ class A { } ``` +::: + Examples of **correct** code for this rule with the `{ "classes": "always" }` option: +::: correct + ```js /*eslint padded-blocks: ["error", { "classes": "always" }]*/ @@ -354,8 +401,12 @@ class A { } ``` +::: + Examples of **incorrect** code for this rule with the `{ "classes": "never" }` option: +::: incorrect + ```js /*eslint padded-blocks: ["error", { "classes": "never" }]*/ @@ -367,8 +418,12 @@ class A { } ``` +::: + Examples of **correct** code for this rule with the `{ "classes": "never" }` option: +::: correct + ```js /*eslint padded-blocks: ["error", { "classes": "never" }]*/ @@ -378,10 +433,14 @@ class A { } ``` +::: + ### switches Examples of **incorrect** code for this rule with the `{ "switches": "always" }` option: +::: incorrect + ```js /*eslint padded-blocks: ["error", { "switches": "always" }]*/ @@ -390,8 +449,12 @@ switch (a) { } ``` +::: + Examples of **correct** code for this rule with the `{ "switches": "always" }` option: +::: correct + ```js /*eslint padded-blocks: ["error", { "switches": "always" }]*/ @@ -406,8 +469,12 @@ if (a) { } ``` +::: + Examples of **incorrect** code for this rule with the `{ "switches": "never" }` option: +::: incorrect + ```js /*eslint padded-blocks: ["error", { "switches": "never" }]*/ @@ -418,8 +485,12 @@ switch (a) { } ``` +::: + Examples of **correct** code for this rule with the `{ "switches": "never" }` option: +::: correct + ```js /*eslint padded-blocks: ["error", { "switches": "never" }]*/ @@ -434,10 +505,14 @@ if (a) { } ``` +::: + ### always + allowSingleLineBlocks Examples of **incorrect** code for this rule with the `"always", {"allowSingleLineBlocks": true}` options: +::: incorrect + ```js /*eslint padded-blocks: ["error", "always", { allowSingleLineBlocks: true }]*/ @@ -456,8 +531,12 @@ if (a) { } ``` +::: + Examples of **correct** code for this rule with the `"always", {"allowSingleLineBlocks": true}` options: +::: correct + ```js /*eslint padded-blocks: ["error", "always", { allowSingleLineBlocks: true }]*/ @@ -470,11 +549,8 @@ if (a) { } ``` +::: + ## When Not To Use It You can turn this rule off if you are not concerned with the consistency of padding within blocks. - -## Related Rules - -* [lines-between-class-members](lines-between-class-members.md) -* [padding-line-between-statements](padding-line-between-statements.md) diff --git a/eslint/docs/rules/padding-line-between-statements.md b/eslint/docs/src/rules/padding-line-between-statements.md similarity index 59% rename from eslint/docs/rules/padding-line-between-statements.md rename to eslint/docs/src/rules/padding-line-between-statements.md index 065c7d9..a66fa89 100644 --- a/eslint/docs/rules/padding-line-between-statements.md +++ b/eslint/docs/src/rules/padding-line-between-statements.md @@ -1,4 +1,10 @@ -# Require or disallow padding lines between statements (padding-line-between-statements) +--- +title: padding-line-between-statements +layout: doc +rule_type: layout +--- + + This rule requires or disallows blank lines between the given 2 kinds of statements. Properly blank lines help developers to understand the code. @@ -38,57 +44,59 @@ You can supply any number of configurations. If a statement pair matches multipl } ``` -- `LINEBREAK_TYPE` is one of the following. - - `"any"` just ignores the statement pair. - - `"never"` disallows blank lines. - - `"always"` requires one or more blank lines. Note it does not count lines that comments exist as blank lines. - -- `STATEMENT_TYPE` is one of the following, or an array of the following. - - `"*"` is wildcard. This matches any statements. - - `"block"` is lonely blocks. - - `"block-like"` is block like statements. This matches statements that the last token is the closing brace of blocks; e.g. `{ }`, `if (a) { }`, and `while (a) { }`. Also matches immediately invoked function expression statements. - - `"break"` is `break` statements. - - `"case"` is `case` clauses in `switch` statements. - - `"cjs-export"` is `export` statements of CommonJS; e.g. `module.exports = 0`, `module.exports.foo = 1`, and `exports.foo = 2`. This is a special case of assignment. - - `"cjs-import"` is `import` statements of CommonJS; e.g. `const foo = require("foo")`. This is a special case of variable declarations. - - `"class"` is `class` declarations. - - `"const"` is `const` variable declarations, both single-line and multiline. - - `"continue"` is `continue` statements. - - `"debugger"` is `debugger` statements. - - `"default"` is `default` clauses in `switch` statements. - - `"directive"` is directive prologues. This matches directives; e.g. `"use strict"`. - - `"do"` is `do-while` statements. This matches all statements that the first token is `do` keyword. - - `"empty"` is empty statements. - - `"export"` is `export` declarations. - - `"expression"` is expression statements. - - `"for"` is `for` loop families. This matches all statements that the first token is `for` keyword. - - `"function"` is function declarations. - - `"if"` is `if` statements. - - `"iife"` is immediately invoked function expression statements. This matches calls on a function expression, optionally prefixed with a unary operator. - - `"import"` is `import` declarations. - - `"let"` is `let` variable declarations, both single-line and multiline. - - `"multiline-block-like"` is block like statements. This is the same as `block-like` type, but only if the block is multiline. - - `"multiline-const"` is multiline `const` variable declarations. - - `"multiline-expression"` is expression statements. This is the same as `expression` type, but only if the statement is multiline. - - `"multiline-let"` is multiline `let` variable declarations. - - `"multiline-var"` is multiline `var` variable declarations. - - `"return"` is `return` statements. - - `"singleline-const"` is single-line `const` variable declarations. - - `"singleline-let"` is single-line `let` variable declarations. - - `"singleline-var"` is single-line `var` variable declarations. - - `"switch"` is `switch` statements. - - `"throw"` is `throw` statements. - - `"try"` is `try` statements. - - `"var"` is `var` variable declarations, both single-line and multiline. - - `"while"` is `while` loop statements. - - `"with"` is `with` statements. +* `LINEBREAK_TYPE` is one of the following. + * `"any"` just ignores the statement pair. + * `"never"` disallows blank lines. + * `"always"` requires one or more blank lines. Note it does not count lines that comments exist as blank lines. + +* `STATEMENT_TYPE` is one of the following, or an array of the following. + * `"*"` is wildcard. This matches any statements. + * `"block"` is lonely blocks. + * `"block-like"` is block like statements. This matches statements that the last token is the closing brace of blocks; e.g. `{ }`, `if (a) { }`, and `while (a) { }`. Also matches immediately invoked function expression statements. + * `"break"` is `break` statements. + * `"case"` is `case` clauses in `switch` statements. + * `"cjs-export"` is `export` statements of CommonJS; e.g. `module.exports = 0`, `module.exports.foo = 1`, and `exports.foo = 2`. This is a special case of assignment. + * `"cjs-import"` is `import` statements of CommonJS; e.g. `const foo = require("foo")`. This is a special case of variable declarations. + * `"class"` is `class` declarations. + * `"const"` is `const` variable declarations, both single-line and multiline. + * `"continue"` is `continue` statements. + * `"debugger"` is `debugger` statements. + * `"default"` is `default` clauses in `switch` statements. + * `"directive"` is directive prologues. This matches directives; e.g. `"use strict"`. + * `"do"` is `do-while` statements. This matches all statements that the first token is `do` keyword. + * `"empty"` is empty statements. + * `"export"` is `export` declarations. + * `"expression"` is expression statements. + * `"for"` is `for` loop families. This matches all statements that the first token is `for` keyword. + * `"function"` is function declarations. + * `"if"` is `if` statements. + * `"iife"` is immediately invoked function expression statements. This matches calls on a function expression, optionally prefixed with a unary operator. + * `"import"` is `import` declarations. + * `"let"` is `let` variable declarations, both single-line and multiline. + * `"multiline-block-like"` is block like statements. This is the same as `block-like` type, but only if the block is multiline. + * `"multiline-const"` is multiline `const` variable declarations. + * `"multiline-expression"` is expression statements. This is the same as `expression` type, but only if the statement is multiline. + * `"multiline-let"` is multiline `let` variable declarations. + * `"multiline-var"` is multiline `var` variable declarations. + * `"return"` is `return` statements. + * `"singleline-const"` is single-line `const` variable declarations. + * `"singleline-let"` is single-line `let` variable declarations. + * `"singleline-var"` is single-line `var` variable declarations. + * `"switch"` is `switch` statements. + * `"throw"` is `throw` statements. + * `"try"` is `try` statements. + * `"var"` is `var` variable declarations, both single-line and multiline. + * `"while"` is `while` loop statements. + * `"with"` is `with` statements. ## Examples -This configuration would require blank lines before all `return` statements, like the [newline-before-return] rule. +This configuration would require blank lines before all `return` statements, like the [newline-before-return](newline-before-return) rule. Examples of **incorrect** code for the `[{ blankLine: "always", prev: "*", next: "return" }]` configuration: +::: incorrect + ```js /*eslint padding-line-between-statements: [ "error", @@ -101,8 +109,12 @@ function foo() { } ``` +::: + Examples of **correct** code for the `[{ blankLine: "always", prev: "*", next: "return" }]` configuration: +::: correct + ```js /*eslint padding-line-between-statements: [ "error", @@ -120,12 +132,16 @@ function foo() { } ``` +::: + ---- -This configuration would require blank lines after every sequence of variable declarations, like the [newline-after-var] rule. +This configuration would require blank lines after every sequence of variable declarations, like the [newline-after-var](newline-after-var) rule. Examples of **incorrect** code for the `[{ blankLine: "always", prev: ["const", "let", "var"], next: "*"}, { blankLine: "any", prev: ["const", "let", "var"], next: ["const", "let", "var"]}]` configuration: +::: incorrect + ```js /*eslint padding-line-between-statements: [ "error", @@ -156,8 +172,12 @@ class C { } ``` +::: + Examples of **correct** code for the `[{ blankLine: "always", prev: ["const", "let", "var"], next: "*"}, { blankLine: "any", prev: ["const", "let", "var"], next: ["const", "let", "var"]}]` configuration: +::: correct + ```js /*eslint padding-line-between-statements: [ "error", @@ -196,12 +216,16 @@ class C { } ``` +::: + ---- -This configuration would require blank lines after all directive prologues, like the [lines-around-directive] rule. +This configuration would require blank lines after all directive prologues, like the [lines-around-directive](lines-around-directive) rule. Examples of **incorrect** code for the `[{ blankLine: "always", prev: "directive", next: "*" }, { blankLine: "any", prev: "directive", next: "directive" }]` configuration: +::: incorrect + ```js /*eslint padding-line-between-statements: [ "error", @@ -213,8 +237,12 @@ Examples of **incorrect** code for the `[{ blankLine: "always", prev: "directive foo(); ``` +::: + Examples of **correct** code for the `[{ blankLine: "always", prev: "directive", next: "*" }, { blankLine: "any", prev: "directive", next: "directive" }]` configuration: +::: correct + ```js /*eslint padding-line-between-statements: [ "error", @@ -228,12 +256,16 @@ Examples of **correct** code for the `[{ blankLine: "always", prev: "directive", foo(); ``` +::: + ---- This configuration would require blank lines between clauses in `switch` statements. Examples of **incorrect** code for the `[{ blankLine: "always", prev: ["case", "default"], next: "*" }]` configuration: +::: incorrect + ```js /*eslint padding-line-between-statements: [ "error", @@ -253,8 +285,12 @@ switch (foo) { } ``` +::: + Examples of **correct** code for the `[{ blankLine: "always", prev: ["case", "default"], next: "*" }]` configuration: +::: correct + ```js /*eslint padding-line-between-statements: [ "error", @@ -277,31 +313,20 @@ switch (foo) { } ``` -## Compatibility - -- **JSCS:** [requirePaddingNewLineAfterVariableDeclaration] -- **JSCS:** [requirePaddingNewLinesAfterBlocks] -- **JSCS:** [disallowPaddingNewLinesAfterBlocks] -- **JSCS:** [requirePaddingNewLinesAfterUseStrict] -- **JSCS:** [disallowPaddingNewLinesAfterUseStrict] -- **JSCS:** [requirePaddingNewLinesBeforeExport] -- **JSCS:** [disallowPaddingNewLinesBeforeExport] -- **JSCS:** [requirePaddingNewlinesBeforeKeywords] -- **JSCS:** [disallowPaddingNewlinesBeforeKeywords] +::: ## When Not To Use It If you don't want to notify warnings about linebreaks, then it's safe to disable this rule. -[lines-around-directive]: https://eslint.org/docs/rules/lines-around-directive -[newline-after-var]: https://eslint.org/docs/rules/newline-after-var -[newline-before-return]: https://eslint.org/docs/rules/newline-before-return -[requirePaddingNewLineAfterVariableDeclaration]: https://jscs-dev.github.io/rule/requirePaddingNewLineAfterVariableDeclaration -[requirePaddingNewLinesAfterBlocks]: https://jscs-dev.github.io/rule/requirePaddingNewLinesAfterBlocks -[disallowPaddingNewLinesAfterBlocks]: https://jscs-dev.github.io/rule/disallowPaddingNewLinesAfterBlocks -[requirePaddingNewLinesAfterUseStrict]: https://jscs-dev.github.io/rule/requirePaddingNewLinesAfterUseStrict -[disallowPaddingNewLinesAfterUseStrict]: https://jscs-dev.github.io/rule/disallowPaddingNewLinesAfterUseStrict -[requirePaddingNewLinesBeforeExport]: https://jscs-dev.github.io/rule/requirePaddingNewLinesBeforeExport -[disallowPaddingNewLinesBeforeExport]: https://jscs-dev.github.io/rule/disallowPaddingNewLinesBeforeExport -[requirePaddingNewlinesBeforeKeywords]: https://jscs-dev.github.io/rule/requirePaddingNewlinesBeforeKeywords -[disallowPaddingNewlinesBeforeKeywords]: https://jscs-dev.github.io/rule/disallowPaddingNewlinesBeforeKeywords +## Compatibility + +* **JSCS:** [requirePaddingNewLineAfterVariableDeclaration](https://jscs-dev.github.io/rule/requirePaddingNewLineAfterVariableDeclaration) +* **JSCS:** [requirePaddingNewLinesAfterBlocks](https://jscs-dev.github.io/rule/requirePaddingNewLinesAfterBlocks) +* **JSCS:** [disallowPaddingNewLinesAfterBlocks](https://jscs-dev.github.io/rule/disallowPaddingNewLinesAfterBlocks) +* **JSCS:** [requirePaddingNewLinesAfterUseStrict](https://jscs-dev.github.io/rule/requirePaddingNewLinesAfterUseStrict) +* **JSCS:** [disallowPaddingNewLinesAfterUseStrict](https://jscs-dev.github.io/rule/disallowPaddingNewLinesAfterUseStrict) +* **JSCS:** [requirePaddingNewLinesBeforeExport](https://jscs-dev.github.io/rule/requirePaddingNewLinesBeforeExport) +* **JSCS:** [disallowPaddingNewLinesBeforeExport](https://jscs-dev.github.io/rule/disallowPaddingNewLinesBeforeExport) +* **JSCS:** [requirePaddingNewlinesBeforeKeywords](https://jscs-dev.github.io/rule/requirePaddingNewlinesBeforeKeywords) +* **JSCS:** [disallowPaddingNewlinesBeforeKeywords](https://jscs-dev.github.io/rule/disallowPaddingNewlinesBeforeKeywords) diff --git a/eslint/docs/rules/prefer-arrow-callback.md b/eslint/docs/src/rules/prefer-arrow-callback.md similarity index 86% rename from eslint/docs/rules/prefer-arrow-callback.md rename to eslint/docs/src/rules/prefer-arrow-callback.md index 7b98aa1..0534ccd 100644 --- a/eslint/docs/rules/prefer-arrow-callback.md +++ b/eslint/docs/src/rules/prefer-arrow-callback.md @@ -1,4 +1,12 @@ -# Require using arrow functions for callbacks (prefer-arrow-callback) +--- +title: prefer-arrow-callback +layout: doc +rule_type: suggestion +further_reading: +- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions +--- + + Arrow functions can be an attractive alternative to function expressions for callbacks or function arguments. @@ -6,9 +14,9 @@ For example, arrow functions are automatically bound to their surrounding scope/ Additionally, arrow functions are: -- less verbose, and easier to reason about. +* less verbose, and easier to reason about. -- bound lexically regardless of where or when they are invoked. +* bound lexically regardless of where or when they are invoked. ## Rule Details @@ -91,10 +99,6 @@ someArray.map(function(item) { return this.doSomething(item); }, someObject); ## When Not To Use It -- In environments that have not yet adopted ES6 language features (ES3/5). - -- In ES6+ environments that allow the use of function expressions when describing callbacks or function arguments. - -## Further Reading +* In environments that have not yet adopted ES6 language features (ES3/5). -- [More on ES6 arrow functions](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions) +* In ES6+ environments that allow the use of function expressions when describing callbacks or function arguments. diff --git a/eslint/docs/rules/prefer-const.md b/eslint/docs/src/rules/prefer-const.md similarity index 94% rename from eslint/docs/rules/prefer-const.md rename to eslint/docs/src/rules/prefer-const.md index 3cdba9e..2892bea 100644 --- a/eslint/docs/rules/prefer-const.md +++ b/eslint/docs/src/rules/prefer-const.md @@ -1,4 +1,13 @@ -# Suggest using `const` (prefer-const) +--- +title: prefer-const +layout: doc +rule_type: suggestion +related_rules: +- no-var +- no-use-before-define +--- + + If a variable is never reassigned, using the `const` declaration is better. @@ -10,6 +19,8 @@ This rule is aimed at flagging variables that are declared using `let` keyword, Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint prefer-const: "error"*/ @@ -40,8 +51,12 @@ for (let a of [1, 2, 3]) { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint prefer-const: "error"*/ @@ -108,6 +123,8 @@ var b = 3; console.log(b); ``` +::: + ## Options ```json @@ -129,6 +146,8 @@ There are 2 values: Examples of **incorrect** code for the default `{"destructuring": "any"}` option: +::: incorrect + ```js /*eslint prefer-const: "error"*/ /*eslint-env es6*/ @@ -137,8 +156,12 @@ let {a, b} = obj; /*error 'b' is never reassigned, use 'const' instead.*/ a = a + 1; ``` +::: + Examples of **correct** code for the default `{"destructuring": "any"}` option: +::: correct + ```js /*eslint prefer-const: "error"*/ /*eslint-env es6*/ @@ -153,8 +176,12 @@ a = a + 1; b = b + 1; ``` +::: + Examples of **incorrect** code for the `{"destructuring": "all"}` option: +::: incorrect + ```js /*eslint prefer-const: ["error", {"destructuring": "all"}]*/ /*eslint-env es6*/ @@ -164,8 +191,12 @@ let {a, b} = obj; /*error 'a' is never reassigned, use 'const' instead. 'b' is never reassigned, use 'const' instead.*/ ``` +::: + Examples of **correct** code for the `{"destructuring": "all"}` option: +::: correct + ```js /*eslint prefer-const: ["error", {"destructuring": "all"}]*/ /*eslint-env es6*/ @@ -175,6 +206,8 @@ let {a, b} = obj; a = a + 1; ``` +::: + ### ignoreReadBeforeAssign This is an option to avoid conflicting with `no-use-before-define` rule (without `"nofunc"` option). @@ -183,6 +216,8 @@ Default is `false`. Examples of **correct** code for the `{"ignoreReadBeforeAssign": true}` option: +::: correct + ```js /*eslint prefer-const: ["error", {"ignoreReadBeforeAssign": true}]*/ /*eslint-env es6*/ @@ -196,8 +231,12 @@ function initialize() { timer = setInterval(initialize, 100); ``` +::: + Examples of **correct** code for the default `{"ignoreReadBeforeAssign": false}` option: +::: correct + ```js /*eslint prefer-const: ["error", {"ignoreReadBeforeAssign": false}]*/ /*eslint-env es6*/ @@ -210,11 +249,8 @@ function initialize() { } ``` +::: + ## When Not To Use It If you don't want to be notified about variables that are never reassigned after initial assignment, you can safely disable this rule. - -## Related Rules - -* [no-var](no-var.md) -* [no-use-before-define](no-use-before-define.md) diff --git a/eslint/docs/rules/prefer-destructuring.md b/eslint/docs/src/rules/prefer-destructuring.md similarity index 91% rename from eslint/docs/rules/prefer-destructuring.md rename to eslint/docs/src/rules/prefer-destructuring.md index b0f887c..da9e358 100644 --- a/eslint/docs/rules/prefer-destructuring.md +++ b/eslint/docs/src/rules/prefer-destructuring.md @@ -1,4 +1,13 @@ -# Prefer destructuring from arrays and objects (prefer-destructuring) +--- +title: prefer-destructuring +layout: doc +rule_type: suggestion +further_reading: +- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment +- https://2ality.com/2015/01/es6-destructuring.html +--- + + With JavaScript ES6, a new syntax was added for creating variables from an array index or object property, called [destructuring](#further-reading). This rule enforces usage of destructuring instead of accessing a property through a member expression. @@ -18,13 +27,15 @@ The rule has a second object with a single key, `enforceForRenamedProperties`, w **Note**: It is not possible to determine if a variable will be referring to an object or an array at runtime. This rule therefore guesses the assignment type by checking whether the key being accessed is an integer. This can lead to the following possibly confusing situations: -- Accessing an object property whose key is an integer will fall under the category `array` destructuring. -- Accessing an array element through a computed index will fall under the category `object` destructuring. +* Accessing an object property whose key is an integer will fall under the category `array` destructuring. +* Accessing an array element through a computed index will fall under the category `object` destructuring. The `--fix` option on the command line fixes only problems reported in variable declarations, and among them only those that fall under the category `object` destructuring. Furthermore, the name of the declared variable has to be the same as the name used for non-computed member access in the initializer. For example, `var foo = object.foo` can be automatically fixed by this rule. Problems that involve computed member access (e.g., `var foo = object[foo]`) or renamed properties (e.g., `var foo = object.bar`) are not automatically fixed. Examples of **incorrect** code for this rule: +::: incorrect + ```javascript // With `array` enabled var foo = array[0]; @@ -34,8 +45,12 @@ var foo = object.foo; var foo = object['foo']; ``` +::: + Examples of **correct** code for this rule: +::: correct + ```javascript // With `array` enabled var [ foo ] = array; @@ -50,20 +65,32 @@ let foo; ({ foo } = object); ``` +::: + Examples of **incorrect** code when `enforceForRenamedProperties` is enabled: +::: incorrect + ```javascript var foo = object.bar; ``` +::: + Examples of **correct** code when `enforceForRenamedProperties` is enabled: +::: correct + ```javascript var { bar: foo } = object; ``` +::: + Examples of additional **correct** code when `enforceForRenamedProperties` is enabled: +::: correct + ```javascript class C { #x; @@ -73,6 +100,8 @@ class C { } ``` +::: + An example configuration, with the defaults `array` and `object` filled in, looks like this: ```json @@ -147,18 +176,26 @@ For example, the following configuration enforces object destructuring in variab Examples of **correct** code when object destructuring in `VariableDeclarator` is enforced: +::: correct + ```javascript /* eslint prefer-destructuring: ["error", {VariableDeclarator: {object: true}}] */ var {bar: foo} = object; ``` +::: + Examples of **correct** code when array destructuring in `AssignmentExpression` is enforced: +::: correct + ```javascript /* eslint prefer-destructuring: ["error", {AssignmentExpression: {array: true}}] */ [bar] = array; ``` +::: + ## When Not To Use It If you want to be able to access array indices or object properties directly, you can either configure the rule to your tastes or disable the rule entirely. @@ -178,10 +215,3 @@ var $ = require('jquery'); var foo = $('body')[0]; var [bar] = $('body'); // fails with a TypeError ``` - -## Further Reading - -If you want to learn more about destructuring, check out the links below: - -- [Destructuring Assignment (MDN)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment) -- [Destructuring and parameter handling in ECMAScript 6 (2ality blog)](http://2ality.com/2015/01/es6-destructuring.html) diff --git a/eslint/docs/rules/prefer-exponentiation-operator.md b/eslint/docs/src/rules/prefer-exponentiation-operator.md similarity index 66% rename from eslint/docs/rules/prefer-exponentiation-operator.md rename to eslint/docs/src/rules/prefer-exponentiation-operator.md index f5f9e47..d29d467 100644 --- a/eslint/docs/rules/prefer-exponentiation-operator.md +++ b/eslint/docs/src/rules/prefer-exponentiation-operator.md @@ -1,4 +1,13 @@ -# Disallow the use of `Math.pow` in favor of the `**` operator (prefer-exponentiation-operator) +--- +title: prefer-exponentiation-operator +layout: doc +rule_type: suggestion +further_reading: +- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Exponentiation +- https://bugs.chromium.org/p/v8/issues/detail?id=5848 +--- + + Introduced in ES2016, the infix exponentiation operator `**` is an alternative for the standard `Math.pow` function. @@ -10,6 +19,8 @@ This rule disallows calls to `Math.pow` and suggests using the `**` operator ins Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint prefer-exponentiation-operator: "error"*/ @@ -22,8 +33,12 @@ let baz = Math.pow(a + b, c + d); let quux = Math.pow(-1, n); ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint prefer-exponentiation-operator: "error"*/ @@ -36,11 +51,8 @@ let baz = (a + b) ** (c + d); let quux = (-1) ** n; ``` +::: + ## When Not To Use It This rule should not be used unless ES2016 is supported in your codebase. - -## Further Reading - -* [MDN Arithmetic Operators - Exponentiation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Exponentiation) -* [Issue 5848: Exponentiation operator ** has different results for numbers and variables from 50 upwards](https://bugs.chromium.org/p/v8/issues/detail?id=5848) diff --git a/eslint/docs/rules/prefer-named-capture-group.md b/eslint/docs/src/rules/prefer-named-capture-group.md similarity index 89% rename from eslint/docs/rules/prefer-named-capture-group.md rename to eslint/docs/src/rules/prefer-named-capture-group.md index f48ec80..459e063 100644 --- a/eslint/docs/rules/prefer-named-capture-group.md +++ b/eslint/docs/src/rules/prefer-named-capture-group.md @@ -1,4 +1,11 @@ -# Suggest using named capture group in regular expression (prefer-named-capture-group) +--- +title: prefer-named-capture-group +layout: doc +rule_type: suggestion +related_rules: +- no-invalid-regexp +--- + ## Rule Details @@ -17,6 +24,8 @@ const regex = /(?:cauli|sun)flower/; Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint prefer-named-capture-group: "error"*/ @@ -27,8 +36,12 @@ const baz = RegExp('(ba[rz])'); foo.exec('bar')[1]; // Retrieve the group result. ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint prefer-named-capture-group: "error"*/ @@ -40,10 +53,8 @@ const xyz = /xyz(?:zy|abc)/; foo.exec('bar').groups.id; // Retrieve the group result. ``` +::: + ## When Not To Use It If you are targeting ECMAScript 2017 and/or older environments, you should not use this rule, because this ECMAScript feature is only supported in ECMAScript 2018 and/or newer environments. - -## Related Rules - -* [no-invalid-regexp](./no-invalid-regexp.md) diff --git a/eslint/docs/rules/prefer-numeric-literals.md b/eslint/docs/src/rules/prefer-numeric-literals.md similarity index 92% rename from eslint/docs/rules/prefer-numeric-literals.md rename to eslint/docs/src/rules/prefer-numeric-literals.md index bf81e5e..33109f5 100644 --- a/eslint/docs/rules/prefer-numeric-literals.md +++ b/eslint/docs/src/rules/prefer-numeric-literals.md @@ -1,4 +1,10 @@ -# disallow `parseInt()` and `Number.parseInt()` in favor of binary, octal, and hexadecimal literals (prefer-numeric-literals) +--- +title: prefer-numeric-literals +layout: doc +rule_type: suggestion +--- + + The `parseInt()` and `Number.parseInt()` functions can be used to turn binary, octal, and hexadecimal strings into integers. As binary, octal, and hexadecimal literals are supported in ES6, this rule encourages use of those numeric literals instead of `parseInt()` or `Number.parseInt()`. @@ -13,6 +19,8 @@ This rule disallows calls to `parseInt()` or `Number.parseInt()` if called with Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint prefer-numeric-literals: "error"*/ @@ -25,8 +33,12 @@ Number.parseInt("767", 8) === 503; Number.parseInt("1F7", 16) === 503; ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint prefer-numeric-literals: "error"*/ /*eslint-env es6*/ @@ -48,6 +60,8 @@ Number.parseInt(foo); Number.parseInt(foo, 2); ``` +::: + ## When Not To Use It If you want to allow use of `parseInt()` or `Number.parseInt()` for binary, octal, or hexadecimal integers, or if you are not using ES6 (because binary and octal literals are not supported in ES5 and below), you may wish to disable this rule. diff --git a/eslint/docs/src/rules/prefer-object-has-own.md b/eslint/docs/src/rules/prefer-object-has-own.md new file mode 100644 index 0000000..504847f --- /dev/null +++ b/eslint/docs/src/rules/prefer-object-has-own.md @@ -0,0 +1,65 @@ +--- +title: prefer-object-has-own +layout: doc +rule_type: suggestion +further_reading: +- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwn +--- + + + +It is very common to write code like: + +```js +if (Object.prototype.hasOwnProperty.call(object, "foo")) { + console.log("has property foo"); +} +``` + +This is a common practice because methods on `Object.prototype` can sometimes be unavailable or redefined (see the [no-prototype-builtins](no-prototype-builtins) rule). + +Introduced in ES2022, `Object.hasOwn()` is a shorter alternative to `Object.prototype.hasOwnProperty.call()`: + +```js +if (Object.hasOwn(object, "foo")) { + console.log("has property foo") +} +``` + +## Rule Details + +Examples of **incorrect** code for this rule: + +::: incorrect + +```js +/*eslint prefer-object-has-own: "error"*/ + +Object.prototype.hasOwnProperty.call(obj, "a"); + +Object.hasOwnProperty.call(obj, "a"); + +({}).hasOwnProperty.call(obj, "a"); + +const hasProperty = Object.prototype.hasOwnProperty.call(object, property); +``` + +::: + +Examples of **correct** code for this rule: + +::: correct + +```js +/*eslint prefer-object-has-own: "error"*/ + +Object.hasOwn(obj, "a"); + +const hasProperty = Object.hasOwn(object, property); +``` + +::: + +## When Not To Use It + +This rule should not be used unless ES2022 is supported in your codebase. diff --git a/eslint/docs/rules/prefer-object-spread.md b/eslint/docs/src/rules/prefer-object-spread.md similarity index 72% rename from eslint/docs/rules/prefer-object-spread.md rename to eslint/docs/src/rules/prefer-object-spread.md index 50d721b..7b447e8 100644 --- a/eslint/docs/rules/prefer-object-spread.md +++ b/eslint/docs/src/rules/prefer-object-spread.md @@ -1,4 +1,10 @@ -# Prefer use of an object spread over `Object.assign` (prefer-object-spread) +--- +title: prefer-object-spread +layout: doc +rule_type: suggestion +--- + + When Object.assign is called using an object literal as the first argument, this rule requires using the object spread syntax instead. This rule also warns on cases where an `Object.assign` call is made using a single argument that is an object literal, in this case, the `Object.assign` call is not needed. @@ -8,20 +14,20 @@ Introduced in ES2018, object spread is a declarative alternative which may perfo Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint prefer-object-spread: "error"*/ -Object.assign({}, foo) - -Object.assign({}, {foo: 'bar'}) +Object.assign({}, foo); -Object.assign({ foo: 'bar'}, baz) +Object.assign({}, {foo: 'bar'}); -Object.assign({ foo: 'bar' }, Object.assign({ bar: 'foo' })) +Object.assign({ foo: 'bar'}, baz); -Object.assign({}, { foo, bar, baz }) +Object.assign({}, baz, { foo: 'bar' }); -Object.assign({}, { ...baz }) +Object.assign({}, { ...baz }); // Object.assign with a single argument that is an object literal Object.assign({}); @@ -29,23 +35,31 @@ Object.assign({}); Object.assign({ foo: bar }); ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint prefer-object-spread: "error"*/ -Object.assign(...foo); +({ ...foo }); + +({ ...baz, foo: 'bar' }); // Any Object.assign call without an object literal as the first argument Object.assign(foo, { bar: baz }); -Object.assign(foo, Object.assign(bar)); +Object.assign(foo, bar); -Object.assign(foo, { bar, baz }) +Object.assign(foo, { bar, baz }); Object.assign(foo, { ...baz }); ``` +::: + ## When Not To Use It This rule should not be used unless ES2018 is supported in your codebase. diff --git a/eslint/docs/rules/prefer-promise-reject-errors.md b/eslint/docs/src/rules/prefer-promise-reject-errors.md similarity index 82% rename from eslint/docs/rules/prefer-promise-reject-errors.md rename to eslint/docs/src/rules/prefer-promise-reject-errors.md index 9740bc9..90164bd 100644 --- a/eslint/docs/rules/prefer-promise-reject-errors.md +++ b/eslint/docs/src/rules/prefer-promise-reject-errors.md @@ -1,4 +1,13 @@ -# require using Error objects as Promise rejection reasons (prefer-promise-reject-errors) +--- +title: prefer-promise-reject-errors +layout: doc +rule_type: suggestion +related_rules: +- no-throw-literal +further_reading: +- http://bluebirdjs.com/docs/warning-explanations.html#warning-a-promise-was-rejected-with-a-non-error +--- + It is considered good practice to only pass instances of the built-in `Error` object to the `reject()` function for user-defined errors in Promises. `Error` objects automatically store a stack trace, which can be used to debug an error by determining where it came from. If a Promise is rejected with a non-`Error` value, it can be difficult to determine where the rejection occurred. @@ -14,6 +23,8 @@ This rule takes one optional object argument: Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint prefer-promise-reject-errors: "error"*/ @@ -33,8 +44,12 @@ new Promise(function(resolve, reject) { ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint prefer-promise-reject-errors: "error"*/ @@ -50,8 +65,12 @@ var foo = getUnknownValue(); Promise.reject(foo); ``` +::: + Examples of **correct** code for this rule with the `allowEmptyReject: true` option: +::: correct + ```js /*eslint prefer-promise-reject-errors: ["error", {"allowEmptyReject": true}]*/ @@ -62,17 +81,14 @@ new Promise(function(resolve, reject) { }); ``` +::: + ## Known Limitations -Due to the limits of static analysis, this rule cannot guarantee that you will only reject Promises with `Error` objects. While the rule will report cases where it can guarantee that the rejection reason is clearly not an `Error`, it will not report cases where there is uncertainty about whether a given reason is an `Error`. For more information on this caveat, see the [similar limitations](no-throw-literal.md#known-limitations) in the `no-throw-literal` rule. +Due to the limits of static analysis, this rule cannot guarantee that you will only reject Promises with `Error` objects. While the rule will report cases where it can guarantee that the rejection reason is clearly not an `Error`, it will not report cases where there is uncertainty about whether a given reason is an `Error`. For more information on this caveat, see the [similar limitations](no-throw-literal#known-limitations) in the `no-throw-literal` rule. -To avoid conflicts between rules, this rule does not report non-error values used in `throw` statements in async functions, even though these lead to Promise rejections. To lint for these cases, use the [`no-throw-literal`](https://eslint.org/docs/rules/no-throw-literal) rule. +To avoid conflicts between rules, this rule does not report non-error values used in `throw` statements in async functions, even though these lead to Promise rejections. To lint for these cases, use the [`no-throw-literal`](no-throw-literal) rule. ## When Not To Use It If you're using custom non-error values as Promise rejection reasons, you can turn off this rule. - -## Further Reading - -* [`no-throw-literal`](https://eslint.org/docs/rules/no-throw-literal) -* [Warning: a promise was rejected with a non-error](http://bluebirdjs.com/docs/warning-explanations.html#warning-a-promise-was-rejected-with-a-non-error) diff --git a/eslint/docs/rules/prefer-reflect.md b/eslint/docs/src/rules/prefer-reflect.md similarity index 93% rename from eslint/docs/rules/prefer-reflect.md rename to eslint/docs/src/rules/prefer-reflect.md index af0838e..ea2ee7d 100644 --- a/eslint/docs/rules/prefer-reflect.md +++ b/eslint/docs/src/rules/prefer-reflect.md @@ -1,4 +1,13 @@ -# Suggest using Reflect methods where applicable (prefer-reflect) +--- +title: prefer-reflect +layout: doc +rule_type: suggestion +related_rules: +- no-useless-call +- prefer-spread +- no-delete-var +--- + This rule was **deprecated** in ESLint v3.9.0 and will not be replaced. The original intent of this rule now seems misguided as we have come to understand that `Reflect` methods are not actually intended to replace the `Object` counterparts the rule suggests, but rather exist as low-level primitives to be used with proxies in order to replicate the default behavior of various previously existing functionality. @@ -37,6 +46,8 @@ Deprecates `Function.prototype.apply()` and `Function.prototype.call()` Examples of **incorrect** code for this rule when used without exceptions: +::: incorrect + ```js /*eslint prefer-reflect: "error"*/ @@ -51,8 +62,12 @@ obj.myMethod.call(obj, arg); obj.myMethod.call(other, arg); ``` +::: + Examples of **correct** code for this rule when used without exceptions: +::: correct + ```js /*eslint prefer-reflect: "error"*/ @@ -66,8 +81,12 @@ Reflect.apply(obj.myMethod, obj, [arg]); Reflect.apply(obj.myMethod, other, [arg]); ``` +::: + Examples of **correct** code for this rule with the `{ "exceptions": ["apply"] }` option: +::: correct + ```js /*eslint prefer-reflect: ["error", { "exceptions": ["apply"] }]*/ @@ -78,8 +97,12 @@ obj.myMethod.apply(obj, args); obj.myMethod.apply(other, args); ``` +::: + Examples of **correct** code for this rule with the `{ "exceptions": ["call"] }` option: +::: correct + ```js /*eslint prefer-reflect: ["error", { "exceptions": ["call"] }]*/ @@ -90,28 +113,40 @@ obj.myMethod.call(obj, arg); obj.myMethod.call(other, arg); ``` +::: + ### Reflect.defineProperty Deprecates `Object.defineProperty()` Examples of **incorrect** code for this rule when used without exceptions: +::: incorrect + ```js /*eslint prefer-reflect: "error"*/ Object.defineProperty({}, 'foo', {value: 1}) ``` +::: + Examples of **correct** code for this rule when used without exceptions: +::: correct + ```js /*eslint prefer-reflect: "error"*/ Reflect.defineProperty({}, 'foo', {value: 1}) ``` +::: + Examples of **correct** code for this rule with the `{ "exceptions": ["defineProperty"] }` option: +::: correct + ```js /*eslint prefer-reflect: ["error", { "exceptions": ["defineProperty"] }]*/ @@ -119,28 +154,40 @@ Object.defineProperty({}, 'foo', {value: 1}) Reflect.defineProperty({}, 'foo', {value: 1}) ``` +::: + ### Reflect.getOwnPropertyDescriptor Deprecates `Object.getOwnPropertyDescriptor()` Examples of **incorrect** code for this rule when used without exceptions: +::: incorrect + ```js /*eslint prefer-reflect: "error"*/ Object.getOwnPropertyDescriptor({}, 'foo') ``` +::: + Examples of **correct** code for this rule when used without exceptions: +::: correct + ```js /*eslint prefer-reflect: "error"*/ Reflect.getOwnPropertyDescriptor({}, 'foo') ``` +::: + Examples of **correct** code for this rule with the `{ "exceptions": ["getOwnPropertyDescriptor"] }` option: +::: correct + ```js /*eslint prefer-reflect: ["error", { "exceptions": ["getOwnPropertyDescriptor"] }]*/ @@ -148,28 +195,40 @@ Object.getOwnPropertyDescriptor({}, 'foo') Reflect.getOwnPropertyDescriptor({}, 'foo') ``` +::: + ### Reflect.getPrototypeOf Deprecates `Object.getPrototypeOf()` Examples of **incorrect** code for this rule when used without exceptions: +::: incorrect + ```js /*eslint prefer-reflect: "error"*/ Object.getPrototypeOf({}, 'foo') ``` +::: + Examples of **correct** code for this rule when used without exceptions: +::: correct + ```js /*eslint prefer-reflect: "error"*/ Reflect.getPrototypeOf({}, 'foo') ``` +::: + Examples of **correct** code for this rule with the `{ "exceptions": ["getPrototypeOf"] }` option: +::: correct + ```js /*eslint prefer-reflect: ["error", { "exceptions": ["getPrototypeOf"] }]*/ @@ -177,28 +236,40 @@ Object.getPrototypeOf({}, 'foo') Reflect.getPrototypeOf({}, 'foo') ``` +::: + ### Reflect.setPrototypeOf Deprecates `Object.setPrototypeOf()` Examples of **incorrect** code for this rule when used without exceptions: +::: incorrect + ```js /*eslint prefer-reflect: "error"*/ Object.setPrototypeOf({}, Object.prototype) ``` +::: + Examples of **correct** code for this rule when used without exceptions: +::: correct + ```js /*eslint prefer-reflect: "error"*/ Reflect.setPrototypeOf({}, Object.prototype) ``` +::: + Examples of **correct** code for this rule with the `{ "exceptions": ["setPrototypeOf"] }` option: +::: correct + ```js /*eslint prefer-reflect: ["error", { "exceptions": ["setPrototypeOf"] }]*/ @@ -206,28 +277,40 @@ Object.setPrototypeOf({}, Object.prototype) Reflect.setPrototypeOf({}, Object.prototype) ``` +::: + ### Reflect.isExtensible Deprecates `Object.isExtensible` Examples of **incorrect** code for this rule when used without exceptions: +::: incorrect + ```js /*eslint prefer-reflect: "error"*/ Object.isExtensible({}) ``` +::: + Examples of **correct** code for this rule when used without exceptions: +::: correct + ```js /*eslint prefer-reflect: "error"*/ Reflect.isExtensible({}) ``` +::: + Examples of **correct** code for this rule with the `{ "exceptions": ["isExtensible"] }` option: +::: correct + ```js /*eslint prefer-reflect: ["error", { "exceptions": ["isExtensible"] }]*/ @@ -235,28 +318,40 @@ Object.isExtensible({}) Reflect.isExtensible({}) ``` +::: + ### Reflect.getOwnPropertyNames Deprecates `Object.getOwnPropertyNames()` Examples of **incorrect** code for this rule when used without exceptions: +::: incorrect + ```js /*eslint prefer-reflect: "error"*/ Object.getOwnPropertyNames({}) ``` +::: + Examples of **correct** code for this rule when used without exceptions: +::: correct + ```js /*eslint prefer-reflect: "error"*/ Reflect.getOwnPropertyNames({}) ``` +::: + Examples of **correct** code for this rule with the `{ "exceptions": ["getOwnPropertyNames"] }` option: +::: correct + ```js /*eslint prefer-reflect: ["error", { "exceptions": ["getOwnPropertyNames"] }]*/ @@ -264,28 +359,40 @@ Object.getOwnPropertyNames({}) Reflect.getOwnPropertyNames({}) ``` +::: + ### Reflect.preventExtensions Deprecates `Object.preventExtensions()` Examples of **incorrect** code for this rule when used without exceptions: +::: incorrect + ```js /*eslint prefer-reflect: "error"*/ Object.preventExtensions({}) ``` +::: + Examples of **correct** code for this rule when used without exceptions: +::: correct + ```js /*eslint prefer-reflect: "error"*/ Reflect.preventExtensions({}) ``` +::: + Examples of **correct** code for this rule with the `{ "exceptions": ["preventExtensions"] }` option: +::: correct + ```js /*eslint prefer-reflect: ["error", { "exceptions": ["preventExtensions"] }]*/ @@ -293,20 +400,28 @@ Object.preventExtensions({}) Reflect.preventExtensions({}) ``` +::: + ### Reflect.deleteProperty Deprecates the `delete` keyword Examples of **incorrect** code for this rule when used without exceptions: +::: incorrect + ```js /*eslint prefer-reflect: "error"*/ delete foo.bar; // deleting object property ``` +::: + Examples of **correct** code for this rule when used without exceptions: +::: correct + ```js /*eslint prefer-reflect: "error"*/ @@ -314,10 +429,14 @@ delete bar; // deleting variable Reflect.deleteProperty(foo, 'bar'); ``` -Note: For a rule preventing deletion of variables, see [no-delete-var instead](no-delete-var.md) +::: + +Note: For a rule preventing deletion of variables, see [no-delete-var instead](no-delete-var) Examples of **correct** code for this rule with the `{ "exceptions": ["delete"] }` option: +::: correct + ```js /*eslint prefer-reflect: ["error", { "exceptions": ["delete"] }]*/ @@ -326,14 +445,10 @@ delete foo.bar Reflect.deleteProperty(foo, 'bar'); ``` +::: + ## When Not To Use It This rule should not be used in ES3/5 environments. In ES2015 (ES6) or later, if you don't want to be notified about places where Reflect could be used, you can safely disable this rule. - -## Related Rules - -* [no-useless-call](no-useless-call.md) -* [prefer-spread](prefer-spread.md) -* [no-delete-var](no-delete-var.md) diff --git a/eslint/docs/rules/prefer-regex-literals.md b/eslint/docs/src/rules/prefer-regex-literals.md similarity index 89% rename from eslint/docs/rules/prefer-regex-literals.md rename to eslint/docs/src/rules/prefer-regex-literals.md index 2ba8cac..ed477c5 100644 --- a/eslint/docs/rules/prefer-regex-literals.md +++ b/eslint/docs/src/rules/prefer-regex-literals.md @@ -1,4 +1,13 @@ -# Disallow use of the `RegExp` constructor in favor of regular expression literals (prefer-regex-literals) +--- +title: prefer-regex-literals +layout: doc +rule_type: suggestion +further_reading: +- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions +- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp +--- + + There are two ways to create a regular expression: @@ -44,6 +53,8 @@ dynamically generated regular expressions. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint prefer-regex-literals: "error"*/ @@ -62,8 +73,12 @@ RegExp(`^\\d\\.$`); new RegExp(String.raw`^\d\.$`); ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint prefer-regex-literals: "error"*/ @@ -88,6 +103,8 @@ RegExp(`${prefix}abc`); new RegExp(String.raw`^\d\. ${suffix}`); ``` +::: + ## Options This rule has an object option: @@ -119,8 +136,3 @@ Examples of `correct` code for `{ "disallowRedundantWrapping": true }` new RegExp(/abc/, flags); ``` - -## Further Reading - -* [MDN: Regular Expressions](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions) -* [MDN: RegExp Constructor](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp) diff --git a/eslint/docs/rules/prefer-rest-params.md b/eslint/docs/src/rules/prefer-rest-params.md similarity index 91% rename from eslint/docs/rules/prefer-rest-params.md rename to eslint/docs/src/rules/prefer-rest-params.md index c67e744..2c2f05c 100644 --- a/eslint/docs/rules/prefer-rest-params.md +++ b/eslint/docs/src/rules/prefer-rest-params.md @@ -1,4 +1,11 @@ -# Suggest using the rest parameters instead of `arguments` (prefer-rest-params) +--- +title: prefer-rest-params +layout: doc +rule_type: suggestion +related_rules: +- prefer-spread +--- + There are rest parameters in ES2015. We can use that feature for variadic functions instead of the `arguments` variable. @@ -13,6 +20,8 @@ This rule is aimed to flag usage of `arguments` variables. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint prefer-rest-params: "error"*/ @@ -31,8 +40,12 @@ function foo(action) { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint prefer-rest-params: "error"*/ @@ -54,12 +67,10 @@ function foo() { } ``` +::: + ## When Not To Use It This rule should not be used in ES3/5 environments. In ES2015 (ES6) or later, if you don't want to be notified about `arguments` variables, then it's safe to disable this rule. - -## Related Rules - -* [prefer-spread](prefer-spread.md) diff --git a/eslint/docs/rules/prefer-spread.md b/eslint/docs/src/rules/prefer-spread.md similarity index 92% rename from eslint/docs/rules/prefer-spread.md rename to eslint/docs/src/rules/prefer-spread.md index 0011560..6d6bc2b 100644 --- a/eslint/docs/rules/prefer-spread.md +++ b/eslint/docs/src/rules/prefer-spread.md @@ -1,4 +1,11 @@ -# Suggest using spread syntax instead of `.apply()`. (prefer-spread) +--- +title: prefer-spread +layout: doc +rule_type: suggestion +related_rules: +- no-useless-call +--- + Before ES2015, one must use `Function.prototype.apply()` to call variadic functions. @@ -24,6 +31,8 @@ This rule is aimed to flag usage of `Function.prototype.apply()` in situations w Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint prefer-spread: "error"*/ @@ -32,8 +41,12 @@ foo.apply(null, args); obj.foo.apply(obj, args); ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint prefer-spread: "error"*/ @@ -53,6 +66,8 @@ foo.apply(null, [1, 2, 3]); obj.foo.apply(obj, [1, 2, 3]); ``` +::: + Known limitations: This rule analyzes code statically to check whether or not the `this` argument is changed. So, if the `this` argument is computed in a dynamic expression, this rule cannot detect a violation. @@ -72,7 +87,3 @@ a[++i].foo.apply(a[i], args); This rule should not be used in ES3/5 environments. In ES2015 (ES6) or later, if you don't want to be notified about `Function.prototype.apply()` callings, you can safely disable this rule. - -## Related Rules - -* [no-useless-call](no-useless-call.md) diff --git a/eslint/docs/rules/prefer-template.md b/eslint/docs/src/rules/prefer-template.md similarity index 84% rename from eslint/docs/rules/prefer-template.md rename to eslint/docs/src/rules/prefer-template.md index 234bd02..15a4c98 100644 --- a/eslint/docs/rules/prefer-template.md +++ b/eslint/docs/src/rules/prefer-template.md @@ -1,4 +1,13 @@ -# Suggest using template literals instead of string concatenation. (prefer-template) +--- +title: prefer-template +layout: doc +rule_type: suggestion +related_rules: +- no-useless-concat +- quotes +--- + + In ES2015 (ES6), we can use template literals instead of string concatenation. @@ -20,6 +29,8 @@ This rule is aimed to flag usage of `+` operators with strings. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint prefer-template: "error"*/ @@ -27,8 +38,12 @@ var str = "Hello, " + name + "!"; var str = "Time: " + (12 * 60 * 60 * 1000); ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint prefer-template: "error"*/ /*eslint-env es6*/ @@ -41,13 +56,10 @@ var str = `Time: ${12 * 60 * 60 * 1000}`; var str = "Hello, " + "World!"; ``` +::: + ## When Not To Use It This rule should not be used in ES3/5 environments. In ES2015 (ES6) or later, if you don't want to be notified about string concatenation, you can safely disable this rule. - -## Related Rules - -* [no-useless-concat](no-useless-concat.md) -* [quotes](quotes.md) diff --git a/eslint/docs/rules/quote-props.md b/eslint/docs/src/rules/quote-props.md similarity index 93% rename from eslint/docs/rules/quote-props.md rename to eslint/docs/src/rules/quote-props.md index cccb48d..f6a17e7 100644 --- a/eslint/docs/rules/quote-props.md +++ b/eslint/docs/src/rules/quote-props.md @@ -1,4 +1,13 @@ -# require quotes around object literal property names (quote-props) +--- +title: quote-props +layout: doc +rule_type: suggestion +further_reading: +- https://kangax.github.io/compat-table/es5/#Reserved_words_as_property_names +- https://mathiasbynens.be/notes/javascript-properties +--- + + Object literal property names can be defined in two ways: using literals or using strings. For example, these two objects are equivalent: @@ -56,6 +65,8 @@ Object option: Examples of **incorrect** code for this rule with the default `"always"` option: +::: incorrect + ```js /*eslint quote-props: ["error", "always"]*/ @@ -65,8 +76,12 @@ var object = { }; ``` +::: + Examples of **correct** code for this rule with the default `"always"` option: +::: correct + ```js /*eslint quote-props: ["error", "always"]*/ /*eslint-env es6*/ @@ -90,10 +105,14 @@ var object3 = { }; ``` +::: + ### as-needed Examples of **incorrect** code for this rule with the `"as-needed"` option: +::: incorrect + ```js /*eslint quote-props: ["error", "as-needed"]*/ @@ -105,8 +124,12 @@ var object = { }; ``` +::: + Examples of **correct** code for this rule with the `"as-needed"` option: +::: correct + ```js /*eslint quote-props: ["error", "as-needed"]*/ /*eslint-env es6*/ @@ -132,10 +155,14 @@ var object3 = { }; ``` +::: + ### consistent Examples of **incorrect** code for this rule with the `"consistent"` option: +::: incorrect + ```js /*eslint quote-props: ["error", "consistent"]*/ @@ -151,8 +178,12 @@ var object2 = { }; ``` +::: + Examples of **correct** code for this rule with the `"consistent"` option: +::: correct + ```js /*eslint quote-props: ["error", "consistent"]*/ @@ -173,10 +204,14 @@ var object3 = { }; ``` +::: + ### consistent-as-needed Examples of **incorrect** code for this rule with the `"consistent-as-needed"` option: +::: incorrect + ```js /*eslint quote-props: ["error", "consistent-as-needed"]*/ @@ -192,8 +227,12 @@ var object2 = { }; ``` +::: + Examples of **correct** code for this rule with the `"consistent-as-needed"` option: +::: correct + ```js /*eslint quote-props: ["error", "consistent-as-needed"]*/ @@ -209,10 +248,14 @@ var object2 = { }; ``` +::: + ### keywords Examples of additional **incorrect** code for this rule with the `"as-needed", { "keywords": true }` options: +::: incorrect + ```js /*eslint quote-props: ["error", "as-needed", { "keywords": true }]*/ @@ -222,8 +265,12 @@ var x = { }; ``` +::: + Examples of additional **incorrect** code for this rule with the `"consistent-as-needed", { "keywords": true }` options: +::: incorrect + ```js /*eslint quote-props: ["error", "consistent-as-needed", { "keywords": true }]*/ @@ -233,10 +280,14 @@ var x = { }; ``` +::: + ### unnecessary Examples of additional **correct** code for this rule with the `"as-needed", { "unnecessary": false }` options: +::: correct + ```js /*eslint quote-props: ["error", "as-needed", { "keywords": true, "unnecessary": false }]*/ @@ -246,10 +297,14 @@ var x = { }; ``` +::: + ### numbers Examples of additional **incorrect** code for this rule with the `"as-needed", { "numbers": true }` options: +::: incorrect + ```js /*eslint quote-props: ["error", "as-needed", { "numbers": true }]*/ @@ -258,11 +313,8 @@ var x = { } ``` +::: + ## When Not To Use It If you don't care if property names are consistently wrapped in quotes or not, and you don't target legacy ES3 environments, turn this rule off. - -## Further Reading - -* [Reserved words as property names](https://kangax.github.io/compat-table/es5/#Reserved_words_as_property_names) -* [Unquoted property names / object keys in JavaScript](https://mathiasbynens.be/notes/javascript-properties) diff --git a/eslint/docs/rules/quotes.md b/eslint/docs/src/rules/quotes.md similarity index 92% rename from eslint/docs/rules/quotes.md rename to eslint/docs/src/rules/quotes.md index 25a09fd..afa65a1 100644 --- a/eslint/docs/rules/quotes.md +++ b/eslint/docs/src/rules/quotes.md @@ -1,4 +1,10 @@ -# enforce the consistent use of either backticks, double, or single quotes (quotes) +--- +title: quotes +layout: doc +rule_type: layout +--- + + JavaScript allows you to define strings in one of three ways: double quotes, single quotes, and backticks (as of ECMAScript 6). For example: @@ -39,6 +45,8 @@ Object option: Examples of **incorrect** code for this rule with the default `"double"` option: +::: incorrect + ```js /*eslint quotes: ["error", "double"]*/ @@ -47,8 +55,12 @@ var unescaped = 'a string containing "double" quotes'; var backtick = `back\ntick`; // you can use \n in single or double quoted strings ``` +::: + Examples of **correct** code for this rule with the default `"double"` option: +::: correct + ```js /*eslint quotes: ["error", "double"]*/ /*eslint-env es6*/ @@ -59,10 +71,14 @@ tick`; // backticks are allowed due to newline var backtick = tag`backtick`; // backticks are allowed due to tag ``` +::: + ### single Examples of **incorrect** code for this rule with the `"single"` option: +::: incorrect + ```js /*eslint quotes: ["error", "single"]*/ @@ -70,8 +86,12 @@ var double = "double"; var unescaped = "a string containing 'single' quotes"; ``` +::: + Examples of **correct** code for this rule with the `"single"` option: +::: correct + ```js /*eslint quotes: ["error", "single"]*/ /*eslint-env es6*/ @@ -80,10 +100,14 @@ var single = 'single'; var backtick = `back${x}tick`; // backticks are allowed due to substitution ``` +::: + ### backticks Examples of **incorrect** code for this rule with the `"backtick"` option: +::: incorrect + ```js /*eslint quotes: ["error", "backtick"]*/ @@ -92,8 +116,12 @@ var double = "double"; var unescaped = 'a string containing `backticks`'; ``` +::: + Examples of **correct** code for this rule with the `"backtick"` option: +::: correct + ```js /*eslint quotes: ["error", "backtick"]*/ /*eslint-env es6*/ @@ -101,36 +129,52 @@ Examples of **correct** code for this rule with the `"backtick"` option: var backtick = `backtick`; ``` +::: + ### avoidEscape Examples of additional **correct** code for this rule with the `"double", { "avoidEscape": true }` options: +::: correct + ```js /*eslint quotes: ["error", "double", { "avoidEscape": true }]*/ var single = 'a string containing "double" quotes'; ``` +::: + Examples of additional **correct** code for this rule with the `"single", { "avoidEscape": true }` options: +::: correct + ```js /*eslint quotes: ["error", "single", { "avoidEscape": true }]*/ var double = "a string containing 'single' quotes"; ``` +::: + Examples of additional **correct** code for this rule with the `"backtick", { "avoidEscape": true }` options: +::: correct + ```js /*eslint quotes: ["error", "backtick", { "avoidEscape": true }]*/ var double = "a string containing `backtick` quotes" ``` +::: + ### allowTemplateLiterals Examples of additional **correct** code for this rule with the `"double", { "allowTemplateLiterals": true }` options: +::: correct + ```js /*eslint quotes: ["error", "double", { "allowTemplateLiterals": true }]*/ @@ -138,8 +182,12 @@ var double = "double"; var double = `double`; ``` +::: + Examples of additional **correct** code for this rule with the `"single", { "allowTemplateLiterals": true }` options: +::: correct + ```js /*eslint quotes: ["error", "single", { "allowTemplateLiterals": true }]*/ @@ -147,7 +195,9 @@ var single = 'single'; var single = `single`; ``` -`{ "allowTemplateLiterals": false }` will not disallow the usage of all template literals. If you want to forbid any instance of template literals, use [no-restricted-syntax](https://eslint.org/docs/rules/no-restricted-syntax) and target the `TemplateLiteral` selector. +::: + +`{ "allowTemplateLiterals": false }` will not disallow the usage of all template literals. If you want to forbid any instance of template literals, use [no-restricted-syntax](no-restricted-syntax) and target the `TemplateLiteral` selector. ## When Not To Use It diff --git a/eslint/docs/rules/radix.md b/eslint/docs/src/rules/radix.md similarity index 93% rename from eslint/docs/rules/radix.md rename to eslint/docs/src/rules/radix.md index 4453a64..de8b51a 100644 --- a/eslint/docs/rules/radix.md +++ b/eslint/docs/src/rules/radix.md @@ -1,4 +1,12 @@ -# Require Radix Parameter (radix) +--- +title: radix +layout: doc +rule_type: suggestion +further_reading: +- https://davidwalsh.name/parseint-radix +--- + + When using the `parseInt()` function it is common to omit the second argument, the radix, and let the function try to determine from the first argument what type of number it is. By default, `parseInt()` will autodetect decimal and hexadecimal (via `0x` prefix). Prior to ECMAScript 5, `parseInt()` also autodetected octal literals, which caused problems because many developers assumed a leading `0` would be ignored. @@ -33,6 +41,8 @@ There are two options for this rule: Examples of **incorrect** code for the default `"always"` option: +::: incorrect + ```js /*eslint radix: "error"*/ @@ -47,8 +57,12 @@ var num = parseInt("071", 37); var num = parseInt(); ``` +::: + Examples of **correct** code for the default `"always"` option: +::: correct + ```js /*eslint radix: "error"*/ @@ -59,10 +73,14 @@ var num = parseInt("071", 8); var num = parseFloat(someValue); ``` +::: + ### as-needed Examples of **incorrect** code for the `"as-needed"` option: +::: incorrect + ```js /*eslint radix: ["error", "as-needed"]*/ @@ -73,8 +91,12 @@ var num = parseInt("071", "abc"); var num = parseInt(); ``` +::: + Examples of **correct** code for the `"as-needed"` option: +::: correct + ```js /*eslint radix: ["error", "as-needed"]*/ @@ -85,10 +107,8 @@ var num = parseInt("071", 8); var num = parseFloat(someValue); ``` +::: + ## When Not To Use It If you don't want to enforce either presence or omission of the `10` radix value you can turn this rule off. - -## Further Reading - -* [parseInt and radix](https://davidwalsh.name/parseint-radix) diff --git a/eslint/docs/rules/require-atomic-updates.md b/eslint/docs/src/rules/require-atomic-updates.md similarity index 97% rename from eslint/docs/rules/require-atomic-updates.md rename to eslint/docs/src/rules/require-atomic-updates.md index 64fae21..fe0254d 100644 --- a/eslint/docs/rules/require-atomic-updates.md +++ b/eslint/docs/src/rules/require-atomic-updates.md @@ -1,4 +1,9 @@ -# Disallow assignments that can lead to race conditions due to usage of `await` or `yield` (require-atomic-updates) +--- +title: require-atomic-updates +layout: doc +rule_type: problem +--- + When writing asynchronous code, it is possible to create subtle race condition bugs. Consider the following example: @@ -57,6 +62,8 @@ Note that the rule does not report the assignment in step 3 in any of the follow Examples of **incorrect** code for this rule: +::: incorrect + ```js /* eslint require-atomic-updates: error */ @@ -85,8 +92,12 @@ function* generator() { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /* eslint require-atomic-updates: error */ @@ -120,6 +131,8 @@ function* generator() { } ``` +::: + ### Properties This rule reports an assignment to a property through a variable when it detects the following execution flow in a generator or async function: @@ -132,6 +145,8 @@ This logic is similar to the logic for variables, but stricter because the prope Example of **incorrect** code for this rule: +::: incorrect + ```js /* eslint require-atomic-updates: error */ @@ -142,8 +157,12 @@ async function foo(obj) { } ``` +::: + Example of **correct** code for this rule: +::: correct + ```js /* eslint require-atomic-updates: error */ @@ -157,6 +176,8 @@ async function foo(obj) { } ``` +::: + ## Options This rule has an object option: @@ -167,6 +188,8 @@ This rule has an object option: Example of **correct** code for this rule with the `{ "allowProperties": true }` option: +::: correct + ```js /* eslint require-atomic-updates: ["error", { "allowProperties": true }] */ @@ -177,6 +200,8 @@ async function foo(obj) { } ``` +::: + ## When Not To Use It If you don't use async or generator functions, you don't need to enable this rule. diff --git a/eslint/docs/rules/require-await.md b/eslint/docs/src/rules/require-await.md similarity index 94% rename from eslint/docs/rules/require-await.md rename to eslint/docs/src/rules/require-await.md index 9c84d43..d311518 100644 --- a/eslint/docs/rules/require-await.md +++ b/eslint/docs/src/rules/require-await.md @@ -1,4 +1,11 @@ -# Disallow async functions which have no `await` expression (require-await) +--- +title: require-await +layout: doc +rule_type: suggestion +related_rules: +- require-yield +--- + Asynchronous functions in JavaScript behave differently than other functions in two important ways: @@ -26,6 +33,8 @@ This rule warns async functions which have no `await` expression. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint require-await: "error"*/ @@ -38,8 +47,12 @@ bar(async () => { }); ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint require-await: "error"*/ @@ -63,6 +76,8 @@ bar(() => { async function noop() {} ``` +::: + ## When Not To Use It Asynchronous functions are designed to work with promises such that throwing an error will cause a promise's rejection handler (such as `catch()`) to be called. For example: @@ -80,7 +95,3 @@ fail().catch(error => { In this case, the `fail()` function throws an error that is intended to be caught by the `catch()` handler assigned later. Converting the `fail()` function into a synchronous function would require the call to `fail()` to be refactored to use a `try-catch` statement instead of a promise. If you are throwing an error inside of an asynchronous function for this purpose, then you may want to disable this rule. - -## Related Rules - -* [require-yield](require-yield.md) diff --git a/eslint/docs/rules/require-jsdoc.md b/eslint/docs/src/rules/require-jsdoc.md similarity index 96% rename from eslint/docs/rules/require-jsdoc.md rename to eslint/docs/src/rules/require-jsdoc.md index 1e31aed..4ff17df 100644 --- a/eslint/docs/rules/require-jsdoc.md +++ b/eslint/docs/src/rules/require-jsdoc.md @@ -1,4 +1,11 @@ -# require JSDoc comments (require-jsdoc) +--- +title: require-jsdoc +layout: doc +rule_type: suggestion +related_rules: +- valid-jsdoc +--- + This rule was [**deprecated**](https://eslint.org/blog/2018/11/jsdoc-end-of-life) in ESLint v5.10.0. @@ -54,6 +61,8 @@ Default option settings are: Examples of **incorrect** code for this rule with the `{ "require": { "FunctionDeclaration": true, "MethodDefinition": true, "ClassDeclaration": true, "ArrowFunctionExpression": true, "FunctionExpression": true } }` option: +::: incorrect + ```js /*eslint "require-jsdoc": ["error", { "require": { @@ -94,8 +103,12 @@ var foo = { }; ``` +::: + Examples of **correct** code for this rule with the `{ "require": { "FunctionDeclaration": true, "MethodDefinition": true, "ClassDeclaration": true, "ArrowFunctionExpression": true, "FunctionExpression": true } }` option: +::: correct + ```js /*eslint "require-jsdoc": ["error", { "require": { @@ -180,10 +193,8 @@ var foo = { setTimeout(() => {}, 10); // since it's an anonymous arrow function ``` +::: + ## When Not To Use It If you do not require JSDoc for your functions, then you can leave this rule off. - -## Related Rules - -* [valid-jsdoc](valid-jsdoc.md) diff --git a/eslint/docs/rules/require-unicode-regexp.md b/eslint/docs/src/rules/require-unicode-regexp.md similarity index 94% rename from eslint/docs/rules/require-unicode-regexp.md rename to eslint/docs/src/rules/require-unicode-regexp.md index 3077d4d..0efe1a8 100644 --- a/eslint/docs/rules/require-unicode-regexp.md +++ b/eslint/docs/src/rules/require-unicode-regexp.md @@ -1,4 +1,9 @@ -# Enforce the use of `u` flag on RegExp (require-unicode-regexp) +--- +title: require-unicode-regexp +layout: doc +rule_type: suggestion +--- + RegExp `u` flag has two effects: @@ -25,6 +30,8 @@ This rule aims to enforce the use of `u` flag on regular expressions. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint require-unicode-regexp: error */ @@ -34,8 +41,12 @@ const c = new RegExp("ccc") const d = new RegExp("ddd", "gi") ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint require-unicode-regexp: error */ @@ -50,6 +61,8 @@ function f(flags) { } ``` +::: + ## When Not To Use It If you don't want to notify regular expressions with no `u` flag, then it's safe to disable this rule. diff --git a/eslint/docs/rules/require-yield.md b/eslint/docs/src/rules/require-yield.md similarity index 83% rename from eslint/docs/rules/require-yield.md rename to eslint/docs/src/rules/require-yield.md index 22c262b..ce3cbe8 100644 --- a/eslint/docs/rules/require-yield.md +++ b/eslint/docs/src/rules/require-yield.md @@ -1,4 +1,12 @@ -# Disallow generator functions that do not have `yield` (require-yield) +--- +title: require-yield +layout: doc +rule_type: suggestion +related_rules: +- require-await +--- + + ## Rule Details @@ -8,6 +16,8 @@ This rule generates warnings for generator functions that do not have the `yield Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint require-yield: "error"*/ /*eslint-env es6*/ @@ -17,8 +27,12 @@ function* foo() { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint require-yield: "error"*/ /*eslint-env es6*/ @@ -36,10 +50,8 @@ function foo() { function* foo() { } ``` +::: + ## When Not To Use It If you don't want to notify generator functions that have no `yield` expression, then it's safe to disable this rule. - -## Related Rules - -* [require-await](require-await.md) diff --git a/eslint/docs/rules/rest-spread-spacing.md b/eslint/docs/src/rules/rest-spread-spacing.md similarity index 93% rename from eslint/docs/rules/rest-spread-spacing.md rename to eslint/docs/src/rules/rest-spread-spacing.md index d8d6063..8850bea 100644 --- a/eslint/docs/rules/rest-spread-spacing.md +++ b/eslint/docs/src/rules/rest-spread-spacing.md @@ -1,4 +1,12 @@ -# Enforce spacing between rest and spread operators and their expressions (rest-spread-spacing) +--- +title: rest-spread-spacing +layout: doc +rule_type: layout +further_reading: +- https://github.com/tc39/proposal-object-rest-spread +--- + + ES2015 introduced the rest and spread operators, which expand an iterable structure into its individual parts. Some examples of their usage are as follows: @@ -73,6 +81,8 @@ rest-spread-spacing: ["error", "never"] Examples of **incorrect** code for this rule with `"never"`: +::: incorrect + ```js /*eslint rest-spread-spacing: ["error", "never"]*/ @@ -84,8 +94,12 @@ let { x, y, ... z } = { x: 1, y: 2, a: 3, b: 4 }; let n = { x, y, ... z }; ``` +::: + Examples of **correct** code for this rule with `"never"`: +::: correct + ```js /*eslint rest-spread-spacing: ["error", "never"]*/ @@ -97,6 +111,8 @@ let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 }; let n = { x, y, ...z }; ``` +::: + ### "always" When using the `"always"` option, whitespace is required between spread operators and their expressions. @@ -107,6 +123,8 @@ rest-spread-spacing: ["error", "always"] Examples of **incorrect** code for this rule with `"always"`: +::: incorrect + ```js /*eslint rest-spread-spacing:["error", "always"]*/ @@ -118,8 +136,12 @@ let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 }; let n = { x, y, ...z }; ``` +::: + Examples of **correct** code for this rule with `"always"`: +::: correct + ```js /*eslint rest-spread-spacing: ["error", "always"]*/ @@ -131,10 +153,8 @@ let { x, y, ... z } = { x: 1, y: 2, a: 3, b: 4 }; let n = { x, y, ... z }; ``` +::: + ## When Not To Use It You can safely disable this rule if you do not care about enforcing consistent spacing between spread operators and their expressions. - -## Further Reading - -* [Object Rest/Spread Properties for ECMAScript](https://github.com/tc39/proposal-object-rest-spread) diff --git a/eslint/docs/rules/semi-spacing.md b/eslint/docs/src/rules/semi-spacing.md similarity index 92% rename from eslint/docs/rules/semi-spacing.md rename to eslint/docs/src/rules/semi-spacing.md index 4db5e18..01b3c3f 100644 --- a/eslint/docs/rules/semi-spacing.md +++ b/eslint/docs/src/rules/semi-spacing.md @@ -1,4 +1,16 @@ -# Enforce spacing before and after semicolons (semi-spacing) +--- +title: semi-spacing +layout: doc +rule_type: layout +related_rules: +- semi +- no-extra-semi +- comma-spacing +- block-spacing +- space-in-parens +--- + + JavaScript allows you to place unnecessary spaces before or after a semicolon. @@ -41,6 +53,8 @@ This is the default option. It enforces spacing after semicolons and disallows s Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint semi-spacing: "error"*/ @@ -52,8 +66,12 @@ for (i = 0 ; i < 10 ; i++) {} for (i = 0;i < 10;i++) {} ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint semi-spacing: "error"*/ @@ -67,12 +85,16 @@ if (true) {;} ;foo(); ``` +::: + ### `{"before": true, "after": false}` This option enforces spacing before semicolons and disallows spacing after semicolons. Examples of **incorrect** code for this rule with the `{"before": true, "after": false}` option: +::: incorrect + ```js /*eslint semi-spacing: ["error", { "before": true, "after": false }]*/ @@ -84,8 +106,12 @@ for (i = 0;i < 10;i++) {} for (i = 0; i < 10; i++) {} ``` +::: + Examples of **correct** code for this rule with the `{"before": true, "after": false}` option: +::: correct + ```js /*eslint semi-spacing: ["error", { "before": true, "after": false }]*/ @@ -96,14 +122,8 @@ while (a) {break ;} for (i = 0 ;i < 10 ;i++) {} ``` +::: + ## When Not To Use It You can turn this rule off if you are not concerned with the consistency of spacing before or after semicolons. - -## Related Rules - -* [semi](semi.md) -* [no-extra-semi](no-extra-semi.md) -* [comma-spacing](comma-spacing.md) -* [block-spacing](block-spacing.md) -* [space-in-parens](space-in-parens.md) diff --git a/eslint/docs/rules/semi-style.md b/eslint/docs/src/rules/semi-style.md similarity index 84% rename from eslint/docs/rules/semi-style.md rename to eslint/docs/src/rules/semi-style.md index 368bb53..0d82f30 100644 --- a/eslint/docs/rules/semi-style.md +++ b/eslint/docs/src/rules/semi-style.md @@ -1,4 +1,14 @@ -# Enforce location of semicolons (semi-style) +--- +title: semi-style +layout: doc +rule_type: layout +related_rules: +- no-extra-semi +- semi +- semi-spacing +--- + + Generally, semicolons are at the end of lines. However, in semicolon-less style, semicolons are at the beginning of lines. This rule enforces that semicolons are at the configured location. @@ -14,11 +24,13 @@ This rule has an option. } ``` -- `"last"` (Default) enforces that semicolons are at the end of statements. -- `"first"` enforces that semicolons are at the beginning of statements. Semicolons of `for` loop heads (`for(a;b;c){}`) should be at the end of lines even if you use this option. +* `"last"` (Default) enforces that semicolons are at the end of statements. +* `"first"` enforces that semicolons are at the beginning of statements. Semicolons of `for` loop heads (`for(a;b;c){}`) should be at the end of lines even if you use this option. Examples of **incorrect** code for this rule with `"last"` option: +::: incorrect + ```js /*eslint semi-style: ["error", "last"]*/ @@ -41,8 +53,12 @@ class C { } ``` +::: + Examples of **correct** code for this rule with `"last"` option: +::: correct + ```js /*eslint semi-style: ["error", "last"]*/ @@ -65,8 +81,12 @@ class C { } ``` +::: + Examples of **incorrect** code for this rule with `"first"` option: +::: incorrect + ```js /*eslint semi-style: ["error", "first"]*/ @@ -89,8 +109,12 @@ class C { } ``` +::: + Examples of **correct** code for this rule with `"first"` option: +::: correct + ```js /*eslint semi-style: ["error", "first"]*/ @@ -113,12 +137,8 @@ class C { } ``` +::: + ## When Not To Use It If you don't want to notify the location of semicolons, then it's safe to disable this rule. - -## Related rules - -- [no-extra-semi](./no-extra-semi.md) -- [semi](./semi.md) -- [semi-spacing](./semi-spacing.md) diff --git a/eslint/docs/rules/semi.md b/eslint/docs/src/rules/semi.md similarity index 91% rename from eslint/docs/rules/semi.md rename to eslint/docs/src/rules/semi.md index cb8e6dd..be01835 100644 --- a/eslint/docs/rules/semi.md +++ b/eslint/docs/src/rules/semi.md @@ -1,4 +1,17 @@ -# require or disallow semicolons instead of ASI (semi) +--- +title: semi +layout: doc +rule_type: layout +related_rules: +- no-extra-semi +- no-unexpected-multiline +- semi-spacing +further_reading: +- https://blog.izs.me/2010/12/an-open-letter-to-javascript-leaders-regarding/ +- https://web.archive.org/web/20200420230322/http://inimino.org/~inimino/blog/javascript_semicolons +--- + + JavaScript doesn't require semicolons at the end of each statement. In many cases, the JavaScript engine can determine that a semicolon should be in a certain spot and will automatically add it. This feature is known as **automatic semicolon insertion (ASI)** and is considered one of the more controversial features of JavaScript. For example, the following lines are both valid: @@ -29,7 +42,7 @@ return; } ``` -Effectively, a semicolon is inserted after the `return` statement, causing the code below it (a labeled literal inside a block) to be unreachable. This rule and the [no-unreachable](no-unreachable.md) rule will protect your code from such cases. +Effectively, a semicolon is inserted after the `return` statement, causing the code below it (a labeled literal inside a block) to be unreachable. This rule and the [no-unreachable](no-unreachable) rule will protect your code from such cases. On the other side of the argument are those who say that since semicolons are inserted automatically, they are optional and do not need to be inserted manually. However, the ASI mechanism can also be tricky to people who don't use semicolons. For example, consider this code: @@ -44,7 +57,7 @@ var globalCounter = { } })() ``` -In this example, a semicolon will not be inserted after the first line, causing a run-time error (because an empty object is called as if it's a function). The [no-unexpected-multiline](no-unexpected-multiline.md) rule can protect your code from such cases. +In this example, a semicolon will not be inserted after the first line, causing a run-time error (because an empty object is called as if it's a function). The [no-unexpected-multiline](no-unexpected-multiline) rule can protect your code from such cases. Although ASI allows for more freedom over your coding style, it can also make your code behave in an unexpected way, whether you use semicolons or not. Therefore, it is best to know when ASI takes place and when it does not, and have ESLint protect your code from these potentially unexpected cases. In short, as once described by Isaac Schlueter, a `\n` character always ends a statement (just like a semicolon) unless one of the following is true: @@ -82,6 +95,8 @@ Object option (when `"never"`): Examples of **incorrect** code for this rule with the default `"always"` option: +::: incorrect + ```js /*eslint semi: ["error", "always"]*/ @@ -96,8 +111,12 @@ class Foo { } ``` +::: + Examples of **correct** code for this rule with the default `"always"` option: +::: correct + ```js /*eslint semi: "error"*/ @@ -112,10 +131,14 @@ class Foo { } ``` +::: + ### never Examples of **incorrect** code for this rule with the `"never"` option: +::: incorrect + ```js /*eslint semi: ["error", "never"]*/ @@ -130,8 +153,12 @@ class Foo { } ``` +::: + Examples of **correct** code for this rule with the `"never"` option: +::: correct + ```js /*eslint semi: ["error", "never"]*/ @@ -162,10 +189,14 @@ class Foo { } ``` +::: + #### omitLastInOneLineBlock Examples of additional **correct** code for this rule with the `"always", { "omitLastInOneLineBlock": true }` options: +::: correct + ```js /*eslint semi: ["error", "always", { "omitLastInOneLineBlock": true}] */ @@ -182,10 +213,14 @@ class C { } ``` +::: + #### beforeStatementContinuationChars Examples of additional **incorrect** code for this rule with the `"never", { "beforeStatementContinuationChars": "always" }` options: +::: incorrect + ```js /*eslint semi: ["error", "never", { "beforeStatementContinuationChars": "always"}] */ import a from "a" @@ -195,8 +230,12 @@ import a from "a" })() ``` +::: + Examples of additional **incorrect** code for this rule with the `"never", { "beforeStatementContinuationChars": "never" }` options: +::: incorrect + ```js /*eslint semi: ["error", "never", { "beforeStatementContinuationChars": "never"}] */ import a from "a" @@ -206,17 +245,8 @@ import a from "a" })() ``` +::: + ## When Not To Use It If you do not want to enforce semicolon usage (or omission) in any particular way, then you can turn this rule off. - -## Further Reading - -* [An Open Letter to JavaScript Leaders Regarding Semicolons](http://blog.izs.me/post/2353458699/an-open-letter-to-javascript-leaders-regarding) -* [JavaScript Semicolon Insertion](http://inimino.org/~inimino/blog/javascript_semicolons) - -## Related Rules - -* [no-extra-semi](no-extra-semi.md) -* [no-unexpected-multiline](no-unexpected-multiline.md) -* [semi-spacing](semi-spacing.md) diff --git a/eslint/docs/rules/sort-imports.md b/eslint/docs/src/rules/sort-imports.md similarity index 93% rename from eslint/docs/rules/sort-imports.md rename to eslint/docs/src/rules/sort-imports.md index 08c2cf3..d42bd97 100644 --- a/eslint/docs/rules/sort-imports.md +++ b/eslint/docs/src/rules/sort-imports.md @@ -1,10 +1,20 @@ -# Import Sorting (sort-imports) +--- +title: sort-imports +layout: doc +rule_type: suggestion +related_rules: +- sort-keys +- sort-vars +--- + + The import statement is used to import members (functions, objects or primitives) that have been exported from an external module. Using a specific member syntax: ```js // single - Import single member. import myMember from "my-module.js"; +import {myOtherMember} from "my-other-module.js"; // multiple - Import multiple members. import {foo, bar} from "my-module.js"; @@ -62,6 +72,8 @@ Default option settings are: Examples of **correct** code for this rule when using default options: +::: correct + ```js /*eslint sort-imports: "error"*/ import 'module-without-export.js'; @@ -70,7 +82,7 @@ import * as foo from 'foo.js'; import {alpha, beta} from 'alpha.js'; import {delta, gamma} from 'delta.js'; import a from 'baz.js'; -import b from 'qux.js'; +import {b} from 'qux.js'; /*eslint sort-imports: "error"*/ import a from 'foo.js'; @@ -82,13 +94,18 @@ import 'foo.js' import * as bar from 'bar.js'; import {a, b} from 'baz.js'; import c from 'qux.js'; +import {d} from 'quux.js'; /*eslint sort-imports: "error"*/ import {a, b, c} from 'foo.js' ``` +::: + Examples of **incorrect** code for this rule when using default options: +::: incorrect + ```js /*eslint sort-imports: "error"*/ import b from 'foo.js'; @@ -106,6 +123,10 @@ import {a, b} from 'bar.js'; import a from 'foo.js'; import {b, c} from 'bar.js'; +/*eslint sort-imports: "error"*/ +import {a} from 'foo.js'; +import {b, c} from 'bar.js'; + /*eslint sort-imports: "error"*/ import a from 'foo.js'; import * as b from 'bar.js'; @@ -114,12 +135,16 @@ import * as b from 'bar.js'; import {b, a, c} from 'foo.js' ``` +::: + ### `ignoreCase` When `true` the rule ignores the case-sensitivity of the imports local name. Examples of **incorrect** code for this rule with the `{ "ignoreCase": true }` option: +::: incorrect + ```js /*eslint sort-imports: ["error", { "ignoreCase": true }]*/ @@ -127,8 +152,12 @@ import B from 'foo.js'; import a from 'bar.js'; ``` +::: + Examples of **correct** code for this rule with the `{ "ignoreCase": true }` option: +::: correct + ```js /*eslint sort-imports: ["error", { "ignoreCase": true }]*/ @@ -137,6 +166,8 @@ import B from 'bar.js'; import c from 'baz.js'; ``` +::: + Default is `false`. ### `ignoreDeclarationSort` @@ -145,26 +176,38 @@ Ignores the sorting of import declaration statements. Examples of **incorrect** code for this rule with the default `{ "ignoreDeclarationSort": false }` option: +::: incorrect + ```js /*eslint sort-imports: ["error", { "ignoreDeclarationSort": false }]*/ import b from 'foo.js' import a from 'bar.js' ``` +::: + Examples of **correct** code for this rule with the `{ "ignoreDeclarationSort": true }` option: +::: correct + ```js /*eslint sort-imports: ["error", { "ignoreDeclarationSort": true }]*/ import a from 'foo.js' import b from 'bar.js' ``` +::: + +::: correct + ```js /*eslint sort-imports: ["error", { "ignoreDeclarationSort": true }]*/ import b from 'foo.js' import a from 'bar.js' ``` +::: + Default is `false`. ### `ignoreMemberSort` @@ -173,18 +216,26 @@ Ignores the member sorting within a `multiple` member import declaration. Examples of **incorrect** code for this rule with the default `{ "ignoreMemberSort": false }` option: +::: incorrect + ```js /*eslint sort-imports: ["error", { "ignoreMemberSort": false }]*/ import {b, a, c} from 'foo.js' ``` +::: + Examples of **correct** code for this rule with the `{ "ignoreMemberSort": true }` option: +::: correct + ```js /*eslint sort-imports: ["error", { "ignoreMemberSort": true }]*/ import {b, a, c} from 'foo.js' ``` +::: + Default is `false`. ### `memberSyntaxSortOrder` @@ -200,14 +251,20 @@ All four options must be specified in the array, but you can customize their ord Examples of **incorrect** code for this rule with the default `{ "memberSyntaxSortOrder": ["none", "all", "multiple", "single"] }` option: +::: incorrect + ```js /*eslint sort-imports: "error"*/ import a from 'foo.js'; import * as b from 'bar.js'; ``` +::: + Examples of **correct** code for this rule with the `{ "memberSyntaxSortOrder": ['single', 'all', 'multiple', 'none'] }` option: +::: correct + ```js /*eslint sort-imports: ["error", { "memberSyntaxSortOrder": ['single', 'all', 'multiple', 'none'] }]*/ @@ -215,8 +272,12 @@ import a from 'foo.js'; import * as b from 'bar.js'; ``` +::: + Examples of **correct** code for this rule with the `{ "memberSyntaxSortOrder": ['all', 'single', 'multiple', 'none'] }` option: +::: correct + ```js /*eslint sort-imports: ["error", { "memberSyntaxSortOrder": ['all', 'single', 'multiple', 'none'] }]*/ @@ -225,6 +286,8 @@ import z from 'zoo.js'; import {a, b} from 'foo.js'; ``` +::: + Default is `["none", "all", "multiple", "single"]`. ### `allowSeparatedGroups` @@ -235,6 +298,8 @@ In other words, a blank line or a comment line or line with any other statement Examples of **incorrect** code for this rule with the `{ "allowSeparatedGroups": true }` option: +::: incorrect + ```js /*eslint sort-imports: ["error", { "allowSeparatedGroups": true }]*/ @@ -243,8 +308,12 @@ import c from 'bar.js'; import a from 'baz.js'; ``` +::: + Examples of **correct** code for this rule with the `{ "allowSeparatedGroups": true }` option: +::: correct + ```js /*eslint sort-imports: ["error", { "allowSeparatedGroups": true }]*/ @@ -254,6 +323,10 @@ import c from 'bar.js'; import a from 'baz.js'; ``` +::: + +::: correct + ```js /*eslint sort-imports: ["error", { "allowSeparatedGroups": true }]*/ @@ -263,6 +336,10 @@ import c from 'bar.js'; import a from 'baz.js'; ``` +::: + +::: correct + ```js /*eslint sort-imports: ["error", { "allowSeparatedGroups": true }]*/ @@ -272,13 +349,10 @@ quux(); import a from 'baz.js'; ``` +::: + Default is `false`. ## When Not To Use It This rule is a formatting preference and not following it won't negatively affect the quality of your code. If alphabetizing imports isn't a part of your coding standards, then you can leave this rule disabled. - -## Related Rules - -* [sort-keys](sort-keys.md) -* [sort-vars](sort-vars.md) diff --git a/eslint/docs/rules/sort-keys.md b/eslint/docs/src/rules/sort-keys.md similarity index 75% rename from eslint/docs/rules/sort-keys.md rename to eslint/docs/src/rules/sort-keys.md index 937a7da..4c90e6c 100644 --- a/eslint/docs/rules/sort-keys.md +++ b/eslint/docs/src/rules/sort-keys.md @@ -1,4 +1,12 @@ -# require object keys to be sorted (sort-keys) +--- +title: sort-keys +layout: doc +rule_type: suggestion +related_rules: +- sort-imports +- sort-vars +--- + When declaring multiple properties, some developers prefer to sort property names alphabetically to more easily find and/or diff necessary properties at a later time. Others feel that it adds complexity and becomes burden to maintain. @@ -8,6 +16,8 @@ This rule checks all property definitions of object expressions and verifies tha Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint sort-keys: "error"*/ /*eslint-env es6*/ @@ -28,8 +38,12 @@ let obj = {a: 1, ["c"]: 3, b: 2}; let obj = {a: 1, [S]: 3, b: 2}; ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint sort-keys: "error"*/ /*eslint-env es6*/ @@ -57,6 +71,8 @@ let obj = {a: 1, [tag`c`]: 3, b: 2}; let obj = {b: 1, ...c, a: 2}; ``` +::: + ## Options ```json @@ -75,6 +91,7 @@ The 2nd option is an object which has 3 properties. * `caseSensitive` - if `true`, enforce properties to be in case-sensitive order. Default is `true`. * `minKeys` - Specifies the minimum number of keys that an object should have in order for the object's unsorted keys to produce an error. Default is `2`, which means by default all objects with unsorted keys will result in lint errors. * `natural` - if `true`, enforce properties to be in natural order. Default is `false`. Natural Order compares strings containing combination of letters and numbers in the way a human being would sort. It basically sorts numerically, instead of sorting alphabetically. So the number 10 comes after the number 3 in Natural Sorting. +* `allowLineSeparatedGroups` - if `true`, the rule allows to group object keys through line breaks. In other words, a blank line after a property will reset the sorting of keys. Default is `false`. Example for a list: @@ -96,6 +113,8 @@ With `natural` as false, the ordering would be Examples of **incorrect** code for the `"desc"` option: +::: incorrect + ```js /*eslint sort-keys: ["error", "desc"]*/ /*eslint-env es6*/ @@ -110,8 +129,12 @@ let obj = {C: 1, b: 3, a: 2}; let obj = {10: b, 2: c, 1: a}; ``` +::: + Examples of **correct** code for the `"desc"` option: +::: correct + ```js /*eslint sort-keys: ["error", "desc"]*/ /*eslint-env es6*/ @@ -126,10 +149,14 @@ let obj = {b: 3, a: 2, C: 1}; let obj = {2: c, 10: b, 1: a}; ``` +::: + ### insensitive Examples of **incorrect** code for the `{caseSensitive: false}` option: +::: incorrect + ```js /*eslint sort-keys: ["error", "asc", {caseSensitive: false}]*/ /*eslint-env es6*/ @@ -138,8 +165,12 @@ let obj = {a: 1, c: 3, C: 4, b: 2}; let obj = {a: 1, C: 3, c: 4, b: 2}; ``` +::: + Examples of **correct** code for the `{caseSensitive: false}` option: +::: correct + ```js /*eslint sort-keys: ["error", "asc", {caseSensitive: false}]*/ /*eslint-env es6*/ @@ -148,10 +179,14 @@ let obj = {a: 1, b: 2, c: 3, C: 4}; let obj = {a: 1, b: 2, C: 3, c: 4}; ``` +::: + ### natural Examples of **incorrect** code for the `{natural: true}` option: +::: incorrect + ```js /*eslint sort-keys: ["error", "asc", {natural: true}]*/ /*eslint-env es6*/ @@ -159,8 +194,12 @@ Examples of **incorrect** code for the `{natural: true}` option: let obj = {1: a, 10: c, 2: b}; ``` +::: + Examples of **correct** code for the `{natural: true}` option: +::: correct + ```js /*eslint sort-keys: ["error", "asc", {natural: true}]*/ /*eslint-env es6*/ @@ -168,10 +207,14 @@ Examples of **correct** code for the `{natural: true}` option: let obj = {1: a, 2: b, 10: c}; ``` +::: + ### minKeys Examples of **incorrect** code for the `{minKeys: 4}` option: +::: incorrect + ```js /*eslint sort-keys: ["error", "asc", {minKeys: 4}]*/ /*eslint-env es6*/ @@ -194,10 +237,14 @@ let obj = { }; ``` +::: + Examples of **correct** code for the `{minKeys: 4}` option: +::: correct + ```js -/*eslint sort-keys: ["error", "asc", {minKeys: 4}]*// +/*eslint sort-keys: ["error", "asc", {minKeys: 4}]*/ /*eslint-env es6*/ // 3 keys @@ -214,14 +261,133 @@ let obj = { }; ``` -## When Not To Use It +::: -If you don't want to notify about properties' order, then it's safe to disable this rule. +### allowLineSeparatedGroups + +Examples of **incorrect** code for the `{allowLineSeparatedGroups: true}` option: + +::: incorrect + +```js +/*eslint sort-keys: ["error", "asc", {allowLineSeparatedGroups: true}]*/ +/*eslint-env es6*/ + +let obj1 = { + b: 1, + c () { + + }, + a: 3 +} -## Related Rules +let obj2 = { + b: 1, + c: 2, + + z () { + + }, + y: 3 +} + +let obj3 = { + b: 1, + c: 2, + + z () { + + }, + // comment + y: 3, +} + +let obj4 = { + b: 1 + // comment before comma + , a: 2 +}; +``` -* [sort-imports](sort-imports.md) -* [sort-vars](sort-vars.md) +::: + +Examples of **correct** code for the `{allowLineSeparatedGroups: true}` option: + +::: correct + +```js +/*eslint sort-keys: ["error", "asc", {allowLineSeparatedGroups: true}]*/ +/*eslint-env es6*/ + +let obj = { + e: 1, + f: 2, + g: 3, + + a: 4, + b: 5, + c: 6 +} + +let obj = { + b: 1, + + // comment + a: 4, + c: 5, +} + +let obj = { + c: 1, + d: 2, + + b () { + + }, + e: 3, +} + +let obj = { + c: 1, + d: 2, + // comment + + // comment + b() { + + }, + e: 4 +} + +let obj = { + b, + + [foo + bar]: 1, + a +} + +let obj = { + b: 1 + // comment before comma + + , + a: 2 +}; + +var obj = { + b: 1, + + a: 2, + ...z, + c: 3 +} +``` + +::: + +## When Not To Use It + +If you don't want to notify about properties' order, then it's safe to disable this rule. ## Compatibility diff --git a/eslint/docs/rules/sort-vars.md b/eslint/docs/src/rules/sort-vars.md similarity index 91% rename from eslint/docs/rules/sort-vars.md rename to eslint/docs/src/rules/sort-vars.md index 8a201f3..cc85f10 100644 --- a/eslint/docs/rules/sort-vars.md +++ b/eslint/docs/src/rules/sort-vars.md @@ -1,4 +1,13 @@ -# Variable Sorting (sort-vars) +--- +title: sort-vars +layout: doc +rule_type: suggestion +related_rules: +- sort-keys +- sort-imports +--- + + When declaring multiple variables within the same block, some developers prefer to sort variable names alphabetically to be able to find necessary variable easier at the later time. Others feel that it adds complexity and becomes burden to maintain. @@ -9,6 +18,8 @@ The default configuration of the rule is case-sensitive. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint sort-vars: "error"*/ @@ -19,8 +30,12 @@ var a, B, c; var a, A; ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint sort-vars: "error"*/ @@ -34,6 +49,8 @@ var A, a; var B, a, c; ``` +::: + Alphabetical list is maintained starting from the first variable and excluding any that are considered problems. So the following code will produce two problems: ```js @@ -60,6 +77,8 @@ This rule has an object option: Examples of **correct** code for this rule with the `{ "ignoreCase": true }` option: +::: correct + ```js /*eslint sort-vars: ["error", { "ignoreCase": true }]*/ @@ -68,11 +87,8 @@ var a, A; var a, B, c; ``` +::: + ## When Not To Use It This rule is a formatting preference and not following it won't negatively affect the quality of your code. If you alphabetizing variables isn't a part of your coding standards, then you can leave this rule off. - -## Related Rules - -* [sort-keys](sort-keys.md) -* [sort-imports](sort-imports.md) diff --git a/eslint/docs/rules/space-after-function-name.md b/eslint/docs/src/rules/space-after-function-name.md similarity index 85% rename from eslint/docs/rules/space-after-function-name.md rename to eslint/docs/src/rules/space-after-function-name.md index 6cceaab..b90f316 100644 --- a/eslint/docs/rules/space-after-function-name.md +++ b/eslint/docs/src/rules/space-after-function-name.md @@ -1,6 +1,12 @@ -# space-after-function-name: enforce consistent spacing after name in function definitions +--- +title: space-after-function-name +layout: doc -(removed) This rule was **removed** in ESLint v1.0 and **replaced** by the [space-before-function-paren](space-before-function-paren.md) rule. +--- + +Enforces consistent spacing after name in function definitions. + +(removed) This rule was **removed** in ESLint v1.0 and **replaced** by the [space-before-function-paren](space-before-function-paren) rule. Whitespace between a function name and its parameter list is optional. @@ -22,6 +28,8 @@ This rule aims to enforce a consistent spacing after function names. It takes on Examples of **incorrect** code for this rule: +::: incorrect + ```js function foo (x) { // ... @@ -35,8 +43,12 @@ function bar(x) { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js function foo(x) { // ... @@ -49,3 +61,5 @@ function bar (x) { // ... } ``` + +::: diff --git a/eslint/docs/rules/space-after-keywords.md b/eslint/docs/src/rules/space-after-keywords.md similarity index 84% rename from eslint/docs/rules/space-after-keywords.md rename to eslint/docs/src/rules/space-after-keywords.md index 7f6182b..ac619ed 100644 --- a/eslint/docs/rules/space-after-keywords.md +++ b/eslint/docs/src/rules/space-after-keywords.md @@ -1,6 +1,12 @@ -# space-after-keywords: enforce consistent spacing after keywords +--- +title: space-after-keywords +layout: doc -(removed) This rule was **removed** in ESLint v2.0 and replaced by the [keyword-spacing](keyword-spacing.md) rule. +--- + +Enforces consistent spacing after keywords. + +(removed) This rule was **removed** in ESLint v2.0 and replaced by the [keyword-spacing](keyword-spacing) rule. (fixable) The `--fix` option on the [command line](../user-guide/command-line-interface#--fix) automatically fixed problems reported by this rule. @@ -29,6 +35,8 @@ then there should be no spaces following. The default is `"always"`. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint space-after-keywords: "error"*/ @@ -39,14 +47,22 @@ if (a) {} else{} do{} while (a); ``` +::: + +::: incorrect + ```js /*eslint space-after-keywords: ["error", "never"]*/ if (a) {} ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint space-after-keywords: "error"*/ @@ -55,8 +71,14 @@ if (a) {} if (a) {} else {} ``` +::: + +::: correct + ```js /*eslint space-after-keywords: ["error", "never"]*/ if(a) {} ``` + +::: diff --git a/eslint/docs/rules/space-before-blocks.md b/eslint/docs/src/rules/space-before-blocks.md similarity index 92% rename from eslint/docs/rules/space-before-blocks.md rename to eslint/docs/src/rules/space-before-blocks.md index 35a4c16..de90dc0 100644 --- a/eslint/docs/rules/space-before-blocks.md +++ b/eslint/docs/src/rules/space-before-blocks.md @@ -1,4 +1,16 @@ -# Require Or Disallow Space Before Blocks (space-before-blocks) +--- +title: space-before-blocks +layout: doc +rule_type: layout +related_rules: +- keyword-spacing +- arrow-spacing +- switch-colon-spacing +- block-spacing +- brace-style +--- + + Consistency is an important part of any style guide. While it is a personal preference where to put the opening brace of blocks, @@ -28,6 +40,8 @@ The default is `"always"`. Examples of **incorrect** code for this rule with the "always" option: +::: incorrect + ```js /*eslint space-before-blocks: "error"*/ @@ -48,8 +62,12 @@ class Foo{ } ``` +::: + Examples of **correct** code for this rule with the `"always"` option: +::: correct + ```js /*eslint space-before-blocks: "error"*/ @@ -76,10 +94,14 @@ for (;;) { try {} catch(a) {} ``` +::: + ### "never" Examples of **incorrect** code for this rule with the `"never"` option: +::: incorrect + ```js /*eslint space-before-blocks: ["error", "never"]*/ @@ -96,8 +118,12 @@ for (;;) { try {} catch(a) {} ``` +::: + Examples of **correct** code for this rule with the `"never"` option: +::: correct + ```js /*eslint space-before-blocks: ["error", "never"]*/ @@ -118,8 +144,12 @@ class Foo{ } ``` +::: + Examples of **incorrect** code for this rule when configured `{ "functions": "never", "keywords": "always", "classes": "never" }`: +::: incorrect + ```js /*eslint space-before-blocks: ["error", { "functions": "never", "keywords": "always", "classes": "never" }]*/ /*eslint-env es6*/ @@ -133,8 +163,12 @@ class Foo{ } ``` +::: + Examples of **correct** code for this rule when configured `{ "functions": "never", "keywords": "always", "classes": "never" }`: +::: correct + ```js /*eslint space-before-blocks: ["error", { "functions": "never", "keywords": "always", "classes": "never" }]*/ /*eslint-env es6*/ @@ -152,8 +186,12 @@ class Foo{ } ``` +::: + Examples of **incorrect** code for this rule when configured `{ "functions": "always", "keywords": "never", "classes": "never" }`: +::: incorrect + ```js /*eslint space-before-blocks: ["error", { "functions": "always", "keywords": "never", "classes": "never" }]*/ /*eslint-env es6*/ @@ -167,8 +205,12 @@ class Foo { } ``` +::: + Examples of **correct** code for this rule when configured `{ "functions": "always", "keywords": "never", "classes": "never" }`: +::: correct + ```js /*eslint space-before-blocks: ["error", { "functions": "always", "keywords": "never", "classes": "never" }]*/ /*eslint-env es6*/ @@ -184,8 +226,12 @@ class Foo{ } ``` +::: + Examples of **incorrect** code for this rule when configured `{ "functions": "never", "keywords": "never", "classes": "always" }`: +::: incorrect + ```js /*eslint space-before-blocks: ["error", { "functions": "never", "keywords": "never", "classes": "always" }]*/ /*eslint-env es6*/ @@ -195,8 +241,12 @@ class Foo{ } ``` +::: + Examples of **correct** code for this rule when configured `{ "functions": "never", "keywords": "never", "classes": "always" }`: +::: correct + ```js /*eslint space-before-blocks: ["error", { "functions": "never", "keywords": "never", "classes": "always" }]*/ /*eslint-env es6*/ @@ -206,13 +256,8 @@ class Foo { } ``` +::: + ## When Not To Use It You can turn this rule off if you are not concerned with the consistency of spacing before blocks. - -## Related Rules - -* [keyword-spacing](keyword-spacing.md) -* [arrow-spacing](arrow-spacing.md) -* [switch-colon-spacing](switch-colon-spacing.md) -* [brace-style](brace-style.md) diff --git a/eslint/docs/rules/space-before-function-paren.md b/eslint/docs/src/rules/space-before-function-paren.md similarity index 95% rename from eslint/docs/rules/space-before-function-paren.md rename to eslint/docs/src/rules/space-before-function-paren.md index c9d0c39..e141005 100644 --- a/eslint/docs/rules/space-before-function-paren.md +++ b/eslint/docs/src/rules/space-before-function-paren.md @@ -1,4 +1,13 @@ -# Require or disallow a space before function parenthesis (space-before-function-paren) +--- +title: space-before-function-paren +layout: doc +rule_type: layout +related_rules: +- space-after-keywords +- space-return-throw-case +--- + + When formatting a function, whitespace is allowed between the function name or `function` keyword and the opening paren. Named functions also require a space between the `function` keyword and the function name, but anonymous functions require no whitespace. For example: @@ -54,6 +63,8 @@ Each of the following options can be set to `"always"`, `"never"`, or `"ignore"` Examples of **incorrect** code for this rule with the default `"always"` option: +::: incorrect + ```js /*eslint space-before-function-paren: "error"*/ /*eslint-env es6*/ @@ -85,8 +96,12 @@ var foo = { var foo = async() => 1 ``` +::: + Examples of **correct** code for this rule with the default `"always"` option: +::: correct + ```js /*eslint space-before-function-paren: "error"*/ /*eslint-env es6*/ @@ -118,10 +133,14 @@ var foo = { var foo = async () => 1 ``` +::: + ### "never" Examples of **incorrect** code for this rule with the `"never"` option: +::: incorrect + ```js /*eslint space-before-function-paren: ["error", "never"]*/ /*eslint-env es6*/ @@ -153,8 +172,12 @@ var foo = { var foo = async () => 1 ``` +::: + Examples of **correct** code for this rule with the `"never"` option: +::: correct + ```js /*eslint space-before-function-paren: ["error", "never"]*/ /*eslint-env es6*/ @@ -186,10 +209,14 @@ var foo = { var foo = async() => 1 ``` +::: + ### `{"anonymous": "always", "named": "never", "asyncArrow": "always"}` Examples of **incorrect** code for this rule with the `{"anonymous": "always", "named": "never", "asyncArrow": "always"}` option: +::: incorrect + ```js /*eslint space-before-function-paren: ["error", {"anonymous": "always", "named": "never", "asyncArrow": "always"}]*/ /*eslint-env es6*/ @@ -217,8 +244,12 @@ var foo = { var foo = async(a) => await a ``` +::: + Examples of **correct** code for this rule with the `{"anonymous": "always", "named": "never", "asyncArrow": "always"}` option: +::: correct + ```js /*eslint space-before-function-paren: ["error", {"anonymous": "always", "named": "never", "asyncArrow": "always"}]*/ /*eslint-env es6*/ @@ -246,10 +277,14 @@ var foo = { var foo = async (a) => await a ``` +::: + ### `{"anonymous": "never", "named": "always"}` Examples of **incorrect** code for this rule with the `{"anonymous": "never", "named": "always"}` option: +::: incorrect + ```js /*eslint space-before-function-paren: ["error", { "anonymous": "never", "named": "always" }]*/ /*eslint-env es6*/ @@ -275,8 +310,12 @@ var foo = { }; ``` +::: + Examples of **correct** code for this rule with the `{"anonymous": "never", "named": "always"}` option: +::: correct + ```js /*eslint space-before-function-paren: ["error", { "anonymous": "never", "named": "always" }]*/ /*eslint-env es6*/ @@ -302,10 +341,14 @@ var foo = { }; ``` +::: + ### `{"anonymous": "ignore", "named": "always"}` Examples of **incorrect** code for this rule with the `{"anonymous": "ignore", "named": "always"}` option: +::: incorrect + ```js /*eslint space-before-function-paren: ["error", { "anonymous": "ignore", "named": "always" }]*/ /*eslint-env es6*/ @@ -327,8 +370,12 @@ var foo = { }; ``` +::: + Examples of **correct** code for this rule with the `{"anonymous": "ignore", "named": "always"}` option: +::: correct + ```js /*eslint space-before-function-paren: ["error", { "anonymous": "ignore", "named": "always" }]*/ /*eslint-env es6*/ @@ -358,11 +405,8 @@ var foo = { }; ``` +::: + ## When Not To Use It You can turn this rule off if you are not concerned with the consistency of spacing before function parenthesis. - -## Related Rules - -* [space-after-keywords](space-after-keywords.md) -* [space-return-throw-case](space-return-throw-case.md) diff --git a/eslint/docs/rules/space-before-function-parentheses.md b/eslint/docs/src/rules/space-before-function-parentheses.md similarity index 89% rename from eslint/docs/rules/space-before-function-parentheses.md rename to eslint/docs/src/rules/space-before-function-parentheses.md index 3856c22..f60bd44 100644 --- a/eslint/docs/rules/space-before-function-parentheses.md +++ b/eslint/docs/src/rules/space-before-function-parentheses.md @@ -1,6 +1,15 @@ -# space-before-function-parentheses: enforce consistent spacing before opening parenthesis in function definitions +--- +title: space-before-function-parentheses +layout: doc -(removed) This rule was **removed** in ESLint v1.0 and **replaced** by the [space-before-function-paren](space-before-function-paren.md) rule. The name of the rule changed from "parentheses" to "paren" for consistency with the names of other rules. +related_rules: +- space-after-keywords +- space-return-throw-case +--- + +Enforces consistent spacing before opening parenthesis in function definitions. + +(removed) This rule was **removed** in ESLint v1.0 and **replaced** by the [space-before-function-paren](space-before-function-paren) rule. The name of the rule changed from "parentheses" to "paren" for consistency with the names of other rules. When formatting a function, whitespace is allowed between the function name or `function` keyword and the opening paren. Named functions also require a space between the `function` keyword and the function name, but anonymous functions require no whitespace. For example: @@ -28,6 +37,8 @@ This rule takes one argument. If it is `"always"`, which is the default option, Examples of **incorrect** code for this rule with the default `"always"` option: +::: incorrect + ```js /*eslint-env es6*/ @@ -56,8 +67,12 @@ var foo = { }; ``` +::: + Examples of **correct** code for this rule with the default `"always"` option: +::: correct + ```js /*eslint-env es6*/ @@ -86,8 +101,12 @@ var foo = { }; ``` +::: + Examples of **incorrect** code for this rule with the `"never"` option: +::: incorrect + ```js /*eslint-env es6*/ @@ -116,8 +135,12 @@ var foo = { }; ``` +::: + Examples of **correct** code for this rule with the `"never"` option: +::: correct + ```js /*eslint-env es6*/ @@ -146,8 +169,12 @@ var foo = { }; ``` +::: + Examples of **incorrect** code for this rule with the `{"anonymous": "always", "named": "never"}` option: +::: incorrect + ```js /*eslint-env es6*/ @@ -172,8 +199,12 @@ var foo = { }; ``` +::: + Examples of **correct** code for this rule with the `{"anonymous": "always", "named": "never"}` option: +::: correct + ```js /*eslint-env es6*/ @@ -198,8 +229,12 @@ var foo = { }; ``` +::: + Examples of **incorrect** code for this rule with the `{"anonymous": "never", "named": "always"}` option: +::: incorrect + ```js /*eslint-env es6*/ @@ -224,8 +259,12 @@ var foo = { }; ``` +::: + Examples of **correct** code for this rule with the `{"anonymous": "never", "named": "always"}` option: +::: correct + ```js /*eslint-env es6*/ @@ -250,11 +289,8 @@ var foo = { }; ``` +::: + ## When Not To Use It You can turn this rule off if you are not concerned with the consistency of spacing before function parenthesis. - -## Related Rules - -* [space-after-keywords](space-after-keywords.md) -* [space-return-throw-case](space-return-throw-case.md) diff --git a/eslint/docs/rules/space-before-keywords.md b/eslint/docs/src/rules/space-before-keywords.md similarity index 85% rename from eslint/docs/rules/space-before-keywords.md rename to eslint/docs/src/rules/space-before-keywords.md index 077c9a3..efd2b35 100644 --- a/eslint/docs/rules/space-before-keywords.md +++ b/eslint/docs/src/rules/space-before-keywords.md @@ -1,6 +1,18 @@ -# space-before-keywords: enforce consistent spacing before keywords +--- +title: space-before-keywords +layout: doc -(removed) This rule was **removed** in ESLint v2.0 and **replaced** by the [keyword-spacing](keyword-spacing.md) rule. +related_rules: +- space-after-keywords +- block-spacing +- space-return-throw-case +- space-unary-ops +- space-infix-ops +--- + +Enforces consistent spacing before keywords. + +(removed) This rule was **removed** in ESLint v2.0 and **replaced** by the [keyword-spacing](keyword-spacing) rule. (fixable) The `--fix` option on the [command line](../user-guide/command-line-interface#--fix) automatically fixed problems reported by this rule. @@ -28,10 +40,12 @@ must be preceded by at least one space. If `"never"` then no spaces will be allo the keywords `else`, `while` (do...while), `finally` and `catch`. The default value is `"always"`. This rule will allow keywords to be preceded by an opening curly brace (`{`). If you wish to alter -this behavior, consider using the [block-spacing](block-spacing.md) rule. +this behavior, consider using the [block-spacing](block-spacing) rule. Examples of **incorrect** code for this rule with the default `"always"` option: +::: incorrect + ```js /*eslint space-before-keywords: ["error", "always"]*/ /*eslint-env es6*/ @@ -49,8 +63,12 @@ function bar() { } ``` +::: + Examples of **correct** code for this rule with the default `"always"` option: +::: correct + ```js /*eslint space-before-keywords: ["error", "always"]*/ /*eslint-env es6*/ @@ -66,8 +84,12 @@ if (foo) { for (let foo of ['bar', 'baz', 'qux']) {} ``` +::: + Examples of **incorrect** code for this rule with the `"never"` option: +::: incorrect + ```js /*eslint space-before-keywords: ["error", "never"]*/ @@ -85,8 +107,12 @@ try {} finally {} try {} catch(e) {} ``` +::: + Examples of **correct** code for this rule with the `"never"` option: +::: correct + ```js /*eslint space-before-keywords: ["error", "never"]*/ @@ -101,14 +127,8 @@ try {}finally {} try{}catch(e) {} ``` +::: + ## When Not To Use It If you do not wish to enforce consistency on keyword spacing. - -## Related Rules - -* [space-after-keywords](space-after-keywords.md) -* [block-spacing](block-spacing.md) -* [space-return-throw-case](space-return-throw-case.md) -* [space-unary-ops](space-unary-ops.md) -* [space-infix-ops](space-infix-ops.md) diff --git a/eslint/docs/rules/space-in-brackets.md b/eslint/docs/src/rules/space-in-brackets.md similarity index 91% rename from eslint/docs/rules/space-in-brackets.md rename to eslint/docs/src/rules/space-in-brackets.md index 330609a..bbd2216 100644 --- a/eslint/docs/rules/space-in-brackets.md +++ b/eslint/docs/src/rules/space-in-brackets.md @@ -1,6 +1,17 @@ -# space-in-brackets: enforce consistent spacing inside braces of object literals and brackets of array literals +--- +title: space-in-brackets +layout: doc -(removed) This rule was **removed** in ESLint v1.0 and **replaced** by the [object-curly-spacing](object-curly-spacing.md) and [array-bracket-spacing](array-bracket-spacing.md) rules. +related_rules: +- array-bracket-spacing +- object-curly-spacing +- space-in-parens +- computed-property-spacing +--- + +Enforces consistent spacing inside braces of object literals and brackets of array literals. + +(removed) This rule was **removed** in ESLint v1.0 and **replaced** by the [object-curly-spacing](object-curly-spacing) and [array-bracket-spacing](array-bracket-spacing) rules. While formatting preferences are very personal, a number of style guides require or disallow spaces between brackets: @@ -35,6 +46,8 @@ Depending on your coding conventions, you can choose either option by specifying Examples of **incorrect** code for this rule with the default `"never"` option: +::: incorrect + ```js /*eslint-env es6*/ @@ -55,8 +68,12 @@ var obj = { baz: {'foo': 'qux'}, bar}; var obj = {baz: { 'foo': 'qux' }, bar}; ``` +::: + Examples of **correct** code for this rule with the default `"never"` option: +::: correct + ```js // When options are ["error", "never"] @@ -95,10 +112,14 @@ var obj = { var obj = {}; ``` +::: + ### "always" Examples of **incorrect** code for this rule with the `"always"` option: +::: incorrect + ```js /*eslint-env es6*/ @@ -128,8 +149,12 @@ var obj = { 'foo':'bar'}; ``` +::: + Examples of **correct** code for this rule with the `"always"` option: +::: correct + ```js foo[ 'bar' ]; foo[ @@ -154,6 +179,8 @@ var obj = { }; ``` +::: + Note that `"always"` has a special case where `{}` and `[]` are not considered problems. ### Exceptions @@ -201,6 +228,8 @@ In each of the following examples, the `"always"` option is assumed. Examples of **incorrect** code for this rule when `"singleValue"` is set to `false`: +::: incorrect + ```js var foo = [ 'foo' ]; var foo = [ 'foo']; @@ -212,8 +241,12 @@ var foo = [ [ 1, 2 ] ]; var foo = [ { 'foo': 'bar' } ]; ``` +::: + Examples of **correct** code for this rule when `"singleValue"` is set to `false`: +::: correct + ```js var foo = ['foo']; var foo = [1]; @@ -221,8 +254,12 @@ var foo = [[ 1, 1 ]]; var foo = [{ 'foo': 'bar' }]; ``` +::: + Examples of **incorrect** code when `"objectsInArrays"` is set to `false`: +::: incorrect + ```js var arr = [ { 'foo': 'bar' } ]; var arr = [ { @@ -230,8 +267,12 @@ var arr = [ { } ] ``` +::: + Examples of **correct** code when `"objectsInArrays"` is set to `false`: +::: correct + ```js var arr = [{ 'foo': 'bar' }]; var arr = [{ @@ -239,69 +280,96 @@ var arr = [{ }]; ``` +::: + Examples of **incorrect** code when `"arraysInArrays"` is set to `false`: +::: incorrect + ```js var arr = [ [ 1, 2 ], 2, 3, 4 ]; var arr = [ [ 1, 2 ], 2, [ 3, 4 ] ]; ``` +::: + Examples of **correct** code when `"arraysInArrays"` is set to `false`: +::: correct + ```js var arr = [[ 1, 2 ], 2, 3, 4 ]; var arr = [[ 1, 2 ], 2, [ 3, 4 ]]; ``` +::: + Examples of **incorrect** code when `"arraysInObjects"` is set to `false`: +::: incorrect + ```js var obj = { "foo": [ 1, 2 ] }; var obj = { "foo": [ "baz", "bar" ] }; ``` +::: + Examples of **correct** code when `"arraysInObjects"` is set to `false`: +::: correct + ```js var obj = { "foo": [ 1, 2 ]}; var obj = { "foo": [ "baz", "bar" ]}; ``` +::: + Examples of **incorrect** code when `"objectsInObjects"` is set to `false`: +::: incorrect + ```js var obj = { "foo": { "baz": 1, "bar": 2 } }; var obj = { "foo": [ "baz", "bar" ], "qux": { "baz": 1, "bar": 2 } }; ``` +::: + Examples of **correct** code when `"objectsInObjects"` is set to `false`: +::: correct + ```js var obj = { "foo": { "baz": 1, "bar": 2 }}; var obj = { "foo": [ "baz", "bar" ], "qux": { "baz": 1, "bar": 2 }}; ``` +::: + Examples of **incorrect** code when `"propertyName"` is set to `false`: +::: incorrect + ```js var foo = obj[ 1 ]; var foo = obj[ bar ]; ``` +::: + Examples of **correct** code when `"propertyName"` is set to `false`: +::: correct + ```js var foo = obj[bar]; var foo = obj[0, 1]; ``` +::: + ## When Not To Use It You can turn this rule off if you are not concerned with the consistency of spacing between brackets. - -## Related Rules - -* [array-bracket-spacing](array-bracket-spacing.md) -* [object-curly-spacing](object-curly-spacing.md) -* [space-in-parens](space-in-parens.md) -* [computed-property-spacing](computed-property-spacing.md) diff --git a/eslint/docs/rules/space-in-parens.md b/eslint/docs/src/rules/space-in-parens.md similarity index 92% rename from eslint/docs/rules/space-in-parens.md rename to eslint/docs/src/rules/space-in-parens.md index 3397036..5389637 100644 --- a/eslint/docs/rules/space-in-parens.md +++ b/eslint/docs/src/rules/space-in-parens.md @@ -1,4 +1,14 @@ -# Disallow or enforce spaces inside of parentheses (space-in-parens) +--- +title: space-in-parens +layout: doc +rule_type: layout +related_rules: +- array-bracket-spacing +- object-curly-spacing +- computed-property-spacing +--- + + Some style guides require or disallow spaces inside of parentheses: @@ -33,6 +43,8 @@ Depending on your coding conventions, you can choose either option by specifying Examples of **incorrect** code for this rule with the default `"never"` option: +::: incorrect + ```js /*eslint space-in-parens: ["error", "never"]*/ @@ -48,8 +60,12 @@ var foo = ( 1 + 2 ) * 3; ( function () { return 'bar'; }() ); ``` +::: + Examples of **correct** code for this rule with the default `"never"` option: +::: correct + ```js /*eslint space-in-parens: ["error", "never"]*/ @@ -63,10 +79,14 @@ var foo = (1 + 2) * 3; (function () { return 'bar'; }()); ``` +::: + ### "always" Examples of **incorrect** code for this rule with the `"always"` option: +::: incorrect + ```js /*eslint space-in-parens: ["error", "always"]*/ @@ -80,8 +100,12 @@ var foo = (1 + 2) * 3; (function () { return 'bar'; }()); ``` +::: + Examples of **correct** code for this rule with the `"always"` option: +::: correct + ```js /*eslint space-in-parens: ["error", "always"]*/ @@ -96,6 +120,8 @@ var foo = ( 1 + 2 ) * 3; ( function () { return 'bar'; }() ); ``` +::: + ### Exceptions An object literal may be used as a third array item to specify exceptions, with the key `"exceptions"` and an array as the value. These exceptions work in the context of the first option. That is, if `"always"` is set to enforce spacing, then any "exception" will *disallow* spacing. Conversely, if `"never"` is set to disallow spacing, then any "exception" will *enforce* spacing. @@ -117,6 +143,8 @@ Empty parens exception and behavior: Examples of **incorrect** code for this rule with the `"never", { "exceptions": ["{}"] }` option: +::: incorrect + ```js /*eslint space-in-parens: ["error", "never", { "exceptions": ["{}"] }]*/ @@ -124,8 +152,12 @@ foo({bar: 'baz'}); foo(1, {bar: 'baz'}); ``` +::: + Examples of **correct** code for this rule with the `"never", { "exceptions": ["{}"] }` option: +::: correct + ```js /*eslint space-in-parens: ["error", "never", { "exceptions": ["{}"] }]*/ @@ -133,8 +165,12 @@ foo( {bar: 'baz'} ); foo(1, {bar: 'baz'} ); ``` +::: + Examples of **incorrect** code for this rule with the `"always", { "exceptions": ["{}"] }` option: +::: incorrect + ```js /*eslint space-in-parens: ["error", "always", { "exceptions": ["{}"] }]*/ @@ -142,8 +178,12 @@ foo( {bar: 'baz'} ); foo( 1, {bar: 'baz'} ); ``` +::: + Examples of **correct** code for this rule with the `"always", { "exceptions": ["{}"] }` option: +::: correct + ```js /*eslint space-in-parens: ["error", "always", { "exceptions": ["{}"] }]*/ @@ -151,8 +191,12 @@ foo({bar: 'baz'}); foo( 1, {bar: 'baz'}); ``` +::: + Examples of **incorrect** code for this rule with the `"never", { "exceptions": ["[]"] }` option: +::: incorrect + ```js /*eslint space-in-parens: ["error", "never", { "exceptions": ["[]"] }]*/ @@ -160,8 +204,12 @@ foo([bar, baz]); foo([bar, baz], 1); ``` +::: + Examples of **correct** code for this rule with the `"never", { "exceptions": ["[]"] }` option: +::: correct + ```js /*eslint space-in-parens: ["error", "never", { "exceptions": ["[]"] }]*/ @@ -169,8 +217,12 @@ foo( [bar, baz] ); foo( [bar, baz], 1); ``` +::: + Examples of **incorrect** code for this rule with the `"always", { "exceptions": ["[]"] }` option: +::: incorrect + ```js /*eslint space-in-parens: ["error", "always", { "exceptions": ["[]"] }]*/ @@ -178,8 +230,12 @@ foo( [bar, baz] ); foo( [bar, baz], 1 ); ``` +::: + Examples of **correct** code for this rule with the `"always", { "exceptions": ["[]"] }` option: +::: correct + ```js /*eslint space-in-parens: ["error", "always", { "exceptions": ["[]"] }]*/ @@ -187,8 +243,12 @@ foo([bar, baz]); foo([bar, baz], 1 ); ``` +::: + Examples of **incorrect** code for this rule with the `"never", { "exceptions": ["()"] }]` option: +::: incorrect + ```js /*eslint space-in-parens: ["error", "never", { "exceptions": ["()"] }]*/ @@ -197,8 +257,12 @@ foo((1 + 2), 1); foo(bar()); ``` +::: + Examples of **correct** code for this rule with the `"never", { "exceptions": ["()"] }]` option: +::: correct + ```js /*eslint space-in-parens: ["error", "never", { "exceptions": ["()"] }]*/ @@ -207,8 +271,12 @@ foo( (1 + 2), 1); foo(bar() ); ``` +::: + Examples of **incorrect** code for this rule with the `"always", { "exceptions": ["()"] }]` option: +::: incorrect + ```js /*eslint space-in-parens: ["error", "always", { "exceptions": ["()"] }]*/ @@ -216,8 +284,12 @@ foo( ( 1 + 2 ) ); foo( ( 1 + 2 ), 1 ); ``` +::: + Examples of **correct** code for this rule with the `"always", { "exceptions": ["()"] }]` option: +::: correct + ```js /*eslint space-in-parens: ["error", "always", { "exceptions": ["()"] }]*/ @@ -225,44 +297,64 @@ foo(( 1 + 2 )); foo(( 1 + 2 ), 1 ); ``` +::: + The `"empty"` exception concerns empty parentheses, and works the same way as the other exceptions, inverting the first option. Example of **incorrect** code for this rule with the `"never", { "exceptions": ["empty"] }]` option: +::: incorrect + ```js /*eslint space-in-parens: ["error", "never", { "exceptions": ["empty"] }]*/ foo(); ``` +::: + Example of **correct** code for this rule with the `"never", { "exceptions": ["empty"] }]` option: +::: correct + ```js /*eslint space-in-parens: ["error", "never", { "exceptions": ["empty"] }]*/ foo( ); ``` +::: + Example of **incorrect** code for this rule with the `"always", { "exceptions": ["empty"] }]` option: +::: incorrect + ```js /*eslint space-in-parens: ["error", "always", { "exceptions": ["empty"] }]*/ foo( ); ``` +::: + Example of **correct** code for this rule with the `"always", { "exceptions": ["empty"] }]` option: +::: correct + ```js /*eslint space-in-parens: ["error", "always", { "exceptions": ["empty"] }]*/ foo(); ``` +::: + You can include multiple entries in the `"exceptions"` array. Examples of **incorrect** code for this rule with the `"always", { "exceptions": ["{}", "[]"] }]` option: +::: incorrect + ```js /*eslint space-in-parens: ["error", "always", { "exceptions": ["{}", "[]"] }]*/ @@ -271,8 +363,12 @@ baz( 1, [1,2] ); foo( {bar: 'baz'}, [1, 2] ); ``` +::: + Examples of **correct** code for this rule with the `"always", { "exceptions": ["{}", "[]"] }]` option: +::: correct + ```js /*eslint space-in-parens: ["error", "always", { "exceptions": ["{}", "[]"] }]*/ @@ -281,12 +377,8 @@ baz( 1, [1,2]); foo({bar: 'baz'}, [1, 2]); ``` +::: + ## When Not To Use It You can turn this rule off if you are not concerned with the consistency of spacing between parentheses. - -## Related Rules - -* [array-bracket-spacing](array-bracket-spacing.md) -* [object-curly-spacing](object-curly-spacing.md) -* [computed-property-spacing](computed-property-spacing.md) diff --git a/eslint/docs/rules/space-infix-ops.md b/eslint/docs/src/rules/space-infix-ops.md similarity index 84% rename from eslint/docs/rules/space-infix-ops.md rename to eslint/docs/src/rules/space-infix-ops.md index 6a00e50..856a87e 100644 --- a/eslint/docs/rules/space-infix-ops.md +++ b/eslint/docs/src/rules/space-infix-ops.md @@ -1,4 +1,10 @@ -# require spacing around infix operators (space-infix-ops) +--- +title: space-infix-ops +layout: doc +rule_type: layout +--- + + While formatting preferences are very personal, a number of style guides require spaces around operators, such as: @@ -6,7 +12,7 @@ While formatting preferences are very personal, a number of style guides require var sum = 1 + 2; ``` -The proponents of these extra spaces believe it make the code easier to read and can more easily highlight potential errors, such as: +Proponents of this rule believe that it makes code easier to read and can more easily highlight potential errors, such as: ```js var sum = i+++2; @@ -36,6 +42,8 @@ var foo = bar|0; // `foo` is forced to be signed 32 bit integer Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint space-infix-ops: "error"*/ /*eslint-env es6*/ @@ -55,8 +63,12 @@ var {a=0}=bar; function foo(a=0) { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint space-infix-ops: "error"*/ /*eslint-env es6*/ @@ -74,6 +86,8 @@ var {a = 0} = bar; function foo(a = 0) { } ``` +::: + ## When Not To Use It You can turn this rule off if you are not concerned with the consistency of spacing around infix operators. diff --git a/eslint/docs/rules/space-return-throw-case.md b/eslint/docs/src/rules/space-return-throw-case.md similarity index 75% rename from eslint/docs/rules/space-return-throw-case.md rename to eslint/docs/src/rules/space-return-throw-case.md index ff55f7f..898a4d6 100644 --- a/eslint/docs/rules/space-return-throw-case.md +++ b/eslint/docs/src/rules/space-return-throw-case.md @@ -1,6 +1,12 @@ -# space-return-throw-case: require spaces after `return`, `throw`, and `case` keywords +--- +title: space-return-throw-case +layout: doc -(removed) This rule was **removed** in ESLint v2.0 and **replaced** by the [keyword-spacing](keyword-spacing.md) rule. +--- + +Requires spaces after `return`, `throw`, and `case` keywords. + +(removed) This rule was **removed** in ESLint v2.0 and **replaced** by the [keyword-spacing](keyword-spacing) rule. (fixable) The `--fix` option on the [command line](../user-guide/command-line-interface#--fix) automatically fixed problems reported by this rule. @@ -10,6 +16,8 @@ Require spaces following `return`, `throw`, and `case`. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint space-return-throw-case: "error"*/ @@ -20,8 +28,12 @@ function f(){ return-a; } switch(a){ case'a': break; } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint space-return-throw-case: "error"*/ @@ -31,3 +43,5 @@ function f(){ return -a; } switch(a){ case 'a': break; } ``` + +::: diff --git a/eslint/docs/rules/space-unary-ops.md b/eslint/docs/src/rules/space-unary-ops.md similarity index 94% rename from eslint/docs/rules/space-unary-ops.md rename to eslint/docs/src/rules/space-unary-ops.md index 676a921..e775e9f 100644 --- a/eslint/docs/rules/space-unary-ops.md +++ b/eslint/docs/src/rules/space-unary-ops.md @@ -1,4 +1,10 @@ -# Require or disallow spaces before/after unary operators (space-unary-ops) +--- +title: space-unary-ops +layout: doc +rule_type: layout +--- + + Some style guides require or disallow spaces before or after unary operators. This is mainly a stylistic issue, however, some JavaScript expressions can be written without spacing which makes it harder to read and maintain. @@ -63,6 +69,8 @@ In this case, spacing will be disallowed after a `new` operator and required bef Examples of **incorrect** code for this rule with the default `{"words": true, "nonwords": false}` option: +::: incorrect + ```js /*eslint space-unary-ops: "error"*/ @@ -83,6 +91,10 @@ foo --; + "3"; ``` +::: + +::: incorrect + ```js /*eslint space-unary-ops: "error"*/ /*eslint-env es6*/ @@ -92,6 +104,10 @@ function *foo() { } ``` +::: + +::: incorrect + ```js /*eslint space-unary-ops: "error"*/ @@ -100,8 +116,12 @@ async function foo() { } ``` +::: + Examples of **correct** code for this rule with the `{"words": true, "nonwords": false}` option: +::: correct + ```js /*eslint space-unary-ops: "error"*/ @@ -130,6 +150,10 @@ foo--; +"3"; ``` +::: + +::: correct + ```js /*eslint space-unary-ops: "error"*/ /*eslint-env es6*/ @@ -139,6 +163,10 @@ function *foo() { } ``` +::: + +::: correct + ```js /*eslint space-unary-ops: "error"*/ @@ -146,3 +174,5 @@ async function foo() { await (bar); } ``` + +::: diff --git a/eslint/docs/rules/space-unary-word-ops.md b/eslint/docs/src/rules/space-unary-word-ops.md similarity index 56% rename from eslint/docs/rules/space-unary-word-ops.md rename to eslint/docs/src/rules/space-unary-word-ops.md index a155866..145141c 100644 --- a/eslint/docs/rules/space-unary-word-ops.md +++ b/eslint/docs/src/rules/space-unary-word-ops.md @@ -1,6 +1,12 @@ -# space-unary-word-ops: require spaces after unary word operators +--- +title: space-unary-word-ops +layout: doc -(removed) This rule was **removed** in ESLint v0.10.0 and **replaced** by the [space-unary-ops](space-unary-ops.md) rule. +--- + +Requires spaces after unary word operators. + +(removed) This rule was **removed** in ESLint v0.10.0 and **replaced** by the [space-unary-ops](space-unary-ops) rule. Require spaces following unary word operators. @@ -8,32 +14,60 @@ Require spaces following unary word operators. Examples of **incorrect** code for this rule: +::: incorrect + ```js typeof!a ``` +::: + +::: incorrect + ```js void{a:0} ``` +::: + +::: incorrect + ```js new[a][0] ``` +::: + +::: incorrect + ```js delete(a.b) ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js delete a.b ``` +::: + +::: correct + ```js new C ``` +::: + +::: correct + ```js void 0 ``` + +::: diff --git a/eslint/docs/rules/spaced-comment.md b/eslint/docs/src/rules/spaced-comment.md similarity index 92% rename from eslint/docs/rules/spaced-comment.md rename to eslint/docs/src/rules/spaced-comment.md index 66f8f70..f9d6381 100644 --- a/eslint/docs/rules/spaced-comment.md +++ b/eslint/docs/src/rules/spaced-comment.md @@ -1,4 +1,12 @@ -# Requires or disallows a whitespace (space or tab) beginning a comment (spaced-comment) +--- +title: spaced-comment +layout: doc +rule_type: suggestion +related_rules: +- spaced-line-comment +--- + + Some style guides require or disallow a whitespace immediately after the initial `//` or `/*` of a comment. Whitespace after the `//` or `/*` makes it easier to read text in comments. @@ -65,6 +73,8 @@ You can also define separate exceptions and markers for block and line comments. Examples of **incorrect** code for this rule with the `"always"` option: +::: incorrect + ```js /*eslint spaced-comment: ["error", "always"]*/ @@ -73,13 +83,21 @@ Examples of **incorrect** code for this rule with the `"always"` option: /*This is a comment with no whitespace at the beginning */ ``` +::: + +::: incorrect + ```js /* eslint spaced-comment: ["error", "always", { "block": { "balanced": true } }] */ /* This is a comment with whitespace at the beginning but not the end*/ ``` +::: + Examples of **correct** code for this rule with the `"always"` option: +::: correct + ```js /* eslint spaced-comment: ["error", "always"] */ @@ -96,6 +114,10 @@ This comment has a newline */ ``` +::: + +::: correct + ```js /* eslint spaced-comment: ["error", "always"] */ @@ -104,10 +126,14 @@ This comment has a newline */ ``` +::: + ### never Examples of **incorrect** code for this rule with the `"never"` option: +::: incorrect + ```js /*eslint spaced-comment: ["error", "never"]*/ @@ -118,19 +144,31 @@ Examples of **incorrect** code for this rule with the `"never"` option: /* \nThis is a comment with a whitespace at the beginning */ ``` +::: + +::: incorrect + ```js /*eslint spaced-comment: ["error", "never", { "block": { "balanced": true } }]*/ /*This is a comment with whitespace at the end */ ``` +::: + Examples of **correct** code for this rule with the `"never"` option: +::: correct + ```js /*eslint spaced-comment: ["error", "never"]*/ /*This is a comment with no whitespace at the beginning */ ``` +::: + +::: correct + ```js /*eslint spaced-comment: ["error", "never"]*/ @@ -139,10 +177,14 @@ Examples of **correct** code for this rule with the `"never"` option: */ ``` +::: + ### exceptions Examples of **incorrect** code for this rule with the `"always"` option combined with `"exceptions"`: +::: incorrect + ```js /* eslint spaced-comment: ["error", "always", { "block": { "exceptions": ["-"] } }] */ @@ -151,6 +193,10 @@ Examples of **incorrect** code for this rule with the `"always"` option combined //-------------- ``` +::: + +::: incorrect + ```js /* eslint spaced-comment: ["error", "always", { "exceptions": ["-", "+"] }] */ @@ -159,6 +205,10 @@ Examples of **incorrect** code for this rule with the `"always"` option combined //------++++++++ ``` +::: + +::: incorrect + ```js /* eslint spaced-comment: ["error", "always", { "exceptions": ["-", "+"] }] */ @@ -167,6 +217,10 @@ Examples of **incorrect** code for this rule with the `"always"` option combined /*------++++++++*/ ``` +::: + +::: incorrect + ```js /* eslint spaced-comment: ["error", "always", { "line": { "exceptions": ["-+"] } }] */ @@ -175,14 +229,22 @@ Examples of **incorrect** code for this rule with the `"always"` option combined /*-+-+-+-+-+-+-+*/ ``` +::: + +::: incorrect + ```js /* eslint spaced-comment: ["error", "always", { "block": { "exceptions": ["*"] } }] */ /******** COMMENT *******/ ``` +::: + Examples of **correct** code for this rule with the `"always"` option combined with `"exceptions"`: +::: correct + ```js /* eslint spaced-comment: ["error", "always", { "exceptions": ["-"] }] */ @@ -191,6 +253,10 @@ Examples of **correct** code for this rule with the `"always"` option combined w //-------------- ``` +::: + +::: correct + ```js /* eslint spaced-comment: ["error", "always", { "line": { "exceptions": ["-"] } }] */ @@ -199,6 +265,10 @@ Examples of **correct** code for this rule with the `"always"` option combined w //-------------- ``` +::: + +::: correct + ```js /* eslint spaced-comment: ["error", "always", { "exceptions": ["*"] }] */ @@ -207,6 +277,10 @@ Examples of **correct** code for this rule with the `"always"` option combined w ****************/ ``` +::: + +::: correct + ```js /* eslint spaced-comment: ["error", "always", { "exceptions": ["-+"] }] */ @@ -219,6 +293,10 @@ Examples of **correct** code for this rule with the `"always"` option combined w /*-+-+-+-+-+-+-+*/ ``` +::: + +::: correct + ```js /* eslint spaced-comment: ["error", "always", { "block": { "exceptions": ["-+"] } }] */ @@ -227,6 +305,10 @@ Examples of **correct** code for this rule with the `"always"` option combined w /*-+-+-+-+-+-+-+*/ ``` +::: + +::: correct + ```js /* eslint spaced-comment: ["error", "always", { "block": { "exceptions": ["*"] } }] */ @@ -237,34 +319,54 @@ COMMENT *******/ ``` +::: + ### markers Examples of **incorrect** code for this rule with the `"always"` option combined with `"markers"`: +::: incorrect + ```js /* eslint spaced-comment: ["error", "always", { "markers": ["/"] }] */ ///This is a comment with a marker but without whitespace ``` +::: + +::: incorrect + ```js /*eslint spaced-comment: ["error", "always", { "block": { "markers": ["!"], "balanced": true } }]*/ /*! This is a comment with a marker but without whitespace at the end*/ ``` +::: + +::: incorrect + ```js /*eslint spaced-comment: ["error", "never", { "block": { "markers": ["!"], "balanced": true } }]*/ /*!This is a comment with a marker but with whitespace at the end */ ``` +::: + Examples of **correct** code for this rule with the `"always"` option combined with `"markers"`: +::: correct + ```js /* eslint spaced-comment: ["error", "always", { "markers": ["/"] }] */ /// This is a comment with a marker ``` +::: + +::: correct + ```js /*eslint spaced-comment: ["error", "never", { "markers": ["!<"] }]*/ @@ -275,12 +377,14 @@ subsequent lines are ignored */ ``` +::: + +::: correct + ```js /* eslint spaced-comment: ["error", "always", { "markers": ["global"] }] */ /*global ABC*/ ``` -## Related Rules - -* [spaced-line-comment](spaced-line-comment.md) +::: diff --git a/eslint/docs/rules/spaced-line-comment.md b/eslint/docs/src/rules/spaced-line-comment.md similarity index 84% rename from eslint/docs/rules/spaced-line-comment.md rename to eslint/docs/src/rules/spaced-line-comment.md index aaaa27a..ca5a99f 100644 --- a/eslint/docs/rules/spaced-line-comment.md +++ b/eslint/docs/src/rules/spaced-line-comment.md @@ -1,6 +1,14 @@ -# spaced-line-comment: enforce consistent spacing after `//` in line comments +--- +title: spaced-line-comment +layout: doc -(removed) This rule was **removed** in ESLint v1.0 and **replaced** by the [spaced-comment](spaced-comment.md) rule. +related_rules: +- spaced-comment +--- + +Enforces consistent spacing after `//` in line comments. + +(removed) This rule was **removed** in ESLint v1.0 and **replaced** by the [spaced-comment](spaced-comment) rule. Some style guides require or disallow a whitespace immediately after the initial `//` of a line comment. Whitespace after the `//` makes it easier to read text in comments. @@ -21,17 +29,27 @@ Exceptions cannot be mixed. Examples of **incorrect** code for this rule: +::: incorrect + ```js // When ["never"] // This is a comment with a whitespace at the beginning ``` +::: + +::: incorrect + ```js //When ["always"] //This is a comment with no whitespace at the beginning var foo = 5; ``` +::: + +::: incorrect + ```js // When ["always",{"exceptions":["-","+"]}] //------++++++++ @@ -39,20 +57,32 @@ var foo = 5; //------++++++++ ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js // When ["always"] // This is a comment with a whitespace at the beginning var foo = 5; ``` +::: + +::: correct + ```js //When ["never"] //This is a comment with no whitespace at the beginning var foo = 5; ``` +::: + +::: correct + ```js // When ["always",{"exceptions":["-"]}] //-------------- @@ -60,6 +90,10 @@ var foo = 5; //-------------- ``` +::: + +::: correct + ```js // When ["always",{"exceptions":["-+"]}] //-+-+-+-+-+-+-+ @@ -67,6 +101,4 @@ var foo = 5; //-+-+-+-+-+-+-+ ``` -## Related Rules - -* [spaced-comment](spaced-comment.md) +::: diff --git a/eslint/docs/rules/strict.md b/eslint/docs/src/rules/strict.md similarity index 88% rename from eslint/docs/rules/strict.md rename to eslint/docs/src/rules/strict.md index 97285af..f811a60 100644 --- a/eslint/docs/rules/strict.md +++ b/eslint/docs/src/rules/strict.md @@ -1,4 +1,10 @@ -# require or disallow strict mode directives (strict) +--- +title: strict +layout: doc +rule_type: suggestion +--- + + A strict mode directive is a `"use strict"` literal at the beginning of a script or function body. It enables strict mode semantics. @@ -42,14 +48,14 @@ In **ECMAScript** modules, which always have strict mode semantics, the directiv This rule requires or disallows strict mode directives. -This rule disallows strict mode directives, no matter which option is specified, if ESLint configuration specifies either of the following as [parser options](/docs/user-guide/configuring/language-options.md#specifying-parser-options): +This rule disallows strict mode directives, no matter which option is specified, if ESLint configuration specifies either of the following as [parser options](/docs/user-guide/configuring/language-options#specifying-parser-options): * `"sourceType": "module"` that is, files are **ECMAScript** modules * `"impliedStrict": true` property in the `ecmaFeatures` object This rule disallows strict mode directives, no matter which option is specified, in functions with non-simple parameter lists (for example, parameter lists with default parameter values) because that is a syntax error in **ECMAScript 2016** and later. See the examples of the [function](#function) option. -This rule does not apply to class static blocks, no matter which option is specified, because class static blocks do not have directives. Therefore, a `"use strict"` statement in a class static block is not a directive, and will be reported by the [no-unused-expressions](no-unused-expressions.md) rule. +This rule does not apply to class static blocks, no matter which option is specified, because class static blocks do not have directives. Therefore, a `"use strict"` statement in a class static block is not a directive, and will be reported by the [no-unused-expressions](no-unused-expressions) rule. The `--fix` option on the command line does not insert new `"use strict"` statements, but only removes unneeded statements. @@ -68,8 +74,8 @@ This rule has a string option: The `"safe"` option corresponds to the `"global"` option if ESLint considers a file to be a **Node.js** or **CommonJS** module because the configuration specifies either of the following: -* `node` or `commonjs` [environments](/docs/user-guide/configuring/language-options.md#specifying-environments) -* `"globalReturn": true` property in the `ecmaFeatures` object of [parser options](/docs/user-guide/configuring/language-options.md#specifying-parser-options) +* `node` or `commonjs` [environments](/docs/user-guide/configuring/language-options#specifying-environments) +* `"globalReturn": true` property in the `ecmaFeatures` object of [parser options](/docs/user-guide/configuring/language-options#specifying-parser-options) Otherwise the `"safe"` option corresponds to the `"function"` option. Note that if `"globalReturn": false` is explicitly specified in the configuration, the `"safe"` option will correspond to the `"function"` option regardless of the specified environment. @@ -77,6 +83,8 @@ Otherwise the `"safe"` option corresponds to the `"function"` option. Note that Examples of **incorrect** code for this rule with the `"global"` option: +::: incorrect + ```js /*eslint strict: ["error", "global"]*/ @@ -84,6 +92,10 @@ function foo() { } ``` +::: + +::: incorrect + ```js /*eslint strict: ["error", "global"]*/ @@ -92,6 +104,10 @@ function foo() { } ``` +::: + +::: incorrect + ```js /*eslint strict: ["error", "global"]*/ @@ -102,8 +118,12 @@ function foo() { } ``` +::: + Examples of **correct** code for this rule with the `"global"` option: +::: correct + ```js /*eslint strict: ["error", "global"]*/ @@ -113,12 +133,16 @@ function foo() { } ``` +::: + ### function This option ensures that all function bodies are strict mode code, while global code is not. Particularly if a build step concatenates multiple scripts, a strict mode directive in global code of one script could unintentionally enable strict mode in another script that was not intended to be strict code. Examples of **incorrect** code for this rule with the `"function"` option: +::: incorrect + ```js /*eslint strict: ["error", "function"]*/ @@ -128,6 +152,10 @@ function foo() { } ``` +::: + +::: incorrect + ```js /*eslint strict: ["error", "function"]*/ @@ -141,6 +169,10 @@ function foo() { }()); ``` +::: + +::: incorrect + ```js /*eslint strict: ["error", "function"]*/ /*eslint-env es6*/ @@ -157,8 +189,12 @@ function foo(a = 1) { } ``` +::: + Examples of **correct** code for this rule with the `"function"` option: +::: correct + ```js /*eslint strict: ["error", "function"]*/ @@ -184,10 +220,14 @@ var foo = (function() { }()); ``` +::: + ### never Examples of **incorrect** code for this rule with the `"never"` option: +::: incorrect + ```js /*eslint strict: ["error", "never"]*/ @@ -197,6 +237,10 @@ function foo() { } ``` +::: + +::: incorrect + ```js /*eslint strict: ["error", "never"]*/ @@ -205,8 +249,12 @@ function foo() { } ``` +::: + Examples of **correct** code for this rule with the `"never"` option: +::: correct + ```js /*eslint strict: ["error", "never"]*/ @@ -214,6 +262,8 @@ function foo() { } ``` +::: + ### earlier default (removed) (removed) The default option (that is, no string option specified) for this rule was **removed** in ESLint v1.0. The `"function"` option is most similar to the removed option. @@ -222,6 +272,8 @@ This option ensures that all functions are executed in strict mode. A strict mod Examples of **incorrect** code for this rule with the earlier default option which has been removed: +::: incorrect + ```js // "strict": "error" @@ -229,6 +281,10 @@ function foo() { } ``` +::: + +::: incorrect + ```js // "strict": "error" @@ -239,8 +295,12 @@ function foo() { }()); ``` +::: + Examples of **correct** code for this rule with the earlier default option which has been removed: +::: correct + ```js // "strict": "error" @@ -250,6 +310,10 @@ function foo() { } ``` +::: + +::: correct + ```js // "strict": "error" @@ -258,6 +322,10 @@ function foo() { } ``` +::: + +::: correct + ```js // "strict": "error" @@ -269,6 +337,8 @@ function foo() { }()); ``` +::: + ## When Not To Use It -In a codebase that has both strict and non-strict code, either turn this rule off, or [selectively disable it](/docs/user-guide/configuring/rules.md#disabling-rules) where necessary. For example, functions referencing `arguments.callee` are invalid in strict mode. A [full list of strict mode differences](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode/Transitioning_to_strict_mode#Differences_from_non-strict_to_strict) is available on MDN. +In a codebase that has both strict and non-strict code, either turn this rule off, or [selectively disable it](/docs/user-guide/configuring/rules#disabling-rules) where necessary. For example, functions referencing `arguments.callee` are invalid in strict mode. A [full list of strict mode differences](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode/Transitioning_to_strict_mode#Differences_from_non-strict_to_strict) is available on MDN. diff --git a/eslint/docs/rules/switch-colon-spacing.md b/eslint/docs/src/rules/switch-colon-spacing.md similarity index 79% rename from eslint/docs/rules/switch-colon-spacing.md rename to eslint/docs/src/rules/switch-colon-spacing.md index b9872c2..6942aad 100644 --- a/eslint/docs/rules/switch-colon-spacing.md +++ b/eslint/docs/src/rules/switch-colon-spacing.md @@ -1,4 +1,10 @@ -# Enforce spacing around colons of switch statements (switch-colon-spacing) +--- +title: switch-colon-spacing +layout: doc +rule_type: layout +--- + + Spacing around colons improves readability of `case`/`default` clauses. @@ -15,13 +21,15 @@ This rule has 2 options that are boolean value. } ``` -- `"after": true` (Default) requires one or more spaces after colons. -- `"after": false` disallows spaces after colons. -- `"before": true` requires one or more spaces before colons. -- `"before": false` (Default) disallows before colons. +* `"after": true` (Default) requires one or more spaces after colons. +* `"after": false` disallows spaces after colons. +* `"before": true` requires one or more spaces before colons. +* `"before": false` (Default) disallows before colons. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint switch-colon-spacing: "error"*/ @@ -31,8 +39,12 @@ switch (a) { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint switch-colon-spacing: "error"*/ @@ -47,8 +59,12 @@ switch (a) { } ``` +::: + Examples of **incorrect** code for this rule with `{"after": false, "before": true}` option: +::: incorrect + ```js /*eslint switch-colon-spacing: ["error", {"after": false, "before": true}]*/ @@ -58,8 +74,12 @@ switch (a) { } ``` +::: + Examples of **correct** code for this rule with `{"after": false, "before": true}` option: +::: correct + ```js /*eslint switch-colon-spacing: ["error", {"after": false, "before": true}]*/ @@ -74,6 +94,8 @@ switch (a) { } ``` +::: + ## When Not To Use It If you don't want to notify spacing around colons of switch statements, then it's safe to disable this rule. diff --git a/eslint/docs/rules/symbol-description.md b/eslint/docs/src/rules/symbol-description.md similarity index 84% rename from eslint/docs/rules/symbol-description.md rename to eslint/docs/src/rules/symbol-description.md index 7743867..78e4e66 100644 --- a/eslint/docs/rules/symbol-description.md +++ b/eslint/docs/src/rules/symbol-description.md @@ -1,4 +1,11 @@ -# require symbol description (symbol-description) +--- +title: symbol-description +layout: doc +rule_type: suggestion +further_reading: +- https://www.ecma-international.org/ecma-262/6.0/#sec-symbol-description +--- + The `Symbol` function may have an optional description: @@ -28,6 +35,8 @@ This rules requires a description when creating symbols. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint symbol-description: "error"*/ /*eslint-env es6*/ @@ -35,8 +44,12 @@ Examples of **incorrect** code for this rule: var foo = Symbol(); ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint symbol-description: "error"*/ /*eslint-env es6*/ @@ -47,11 +60,9 @@ var someString = "some description"; var bar = Symbol(someString); ``` +::: + ## When Not To Use It This rule should not be used in ES3/5 environments. In addition, this rule can be safely turned off if you don't want to enforce presence of `description` when creating Symbols. - -## Further Reading - -* [Symbol Objects specification: Symbol description](https://www.ecma-international.org/ecma-262/6.0/#sec-symbol-description) diff --git a/eslint/docs/rules/template-curly-spacing.md b/eslint/docs/src/rules/template-curly-spacing.md similarity index 91% rename from eslint/docs/rules/template-curly-spacing.md rename to eslint/docs/src/rules/template-curly-spacing.md index f7e0714..f0079ee 100644 --- a/eslint/docs/rules/template-curly-spacing.md +++ b/eslint/docs/src/rules/template-curly-spacing.md @@ -1,4 +1,10 @@ -# Enforce Usage of Spacing in Template Strings (template-curly-spacing) +--- +title: template-curly-spacing +layout: doc +rule_type: layout +--- + + We can embed expressions in template strings with using a pair of `${` and `}`. @@ -31,6 +37,8 @@ This rule has one option which has either `"never"` or `"always"` as value. Examples of **incorrect** code for this rule with the default `"never"` option: +::: incorrect + ```js /*eslint template-curly-spacing: "error"*/ @@ -40,8 +48,12 @@ Examples of **incorrect** code for this rule with the default `"never"` option: `hello, ${ people.name }!`; ``` +::: + Examples of **correct** code for this rule with the default `"never"` option: +::: correct + ```js /*eslint template-curly-spacing: "error"*/ @@ -52,10 +64,14 @@ Examples of **correct** code for this rule with the default `"never"` option: }!`; ``` +::: + ### always Examples of **incorrect** code for this rule with the `"always"` option: +::: incorrect + ```js /*eslint template-curly-spacing: ["error", "always"]*/ @@ -65,8 +81,12 @@ Examples of **incorrect** code for this rule with the `"always"` option: `hello, ${people.name}!`; ``` +::: + Examples of **correct** code for this rule with the `"always"` option: +::: correct + ```js /*eslint template-curly-spacing: ["error", "always"]*/ @@ -77,6 +97,8 @@ Examples of **correct** code for this rule with the `"always"` option: }!`; ``` +::: + ## When Not To Use It If you don't want to be notified about usage of spacing inside of template strings, then it's safe to disable this rule. diff --git a/eslint/docs/rules/template-tag-spacing.md b/eslint/docs/src/rules/template-tag-spacing.md similarity index 77% rename from eslint/docs/rules/template-tag-spacing.md rename to eslint/docs/src/rules/template-tag-spacing.md index 58cd166..309474f 100644 --- a/eslint/docs/rules/template-tag-spacing.md +++ b/eslint/docs/src/rules/template-tag-spacing.md @@ -1,4 +1,13 @@ -# Require or disallow spacing between template tags and their literals (template-tag-spacing) +--- +title: template-tag-spacing +layout: doc +rule_type: layout +further_reading: +- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#Tagged_template_literals +- https://exploringjs.com/es6/ch_template-literals.html#_examples-of-using-tagged-template-literals +--- + + With ES6, it's possible to create functions called [tagged template literals](#further-reading) where the function parameters consist of a template literal's strings and expressions. @@ -32,45 +41,54 @@ This rule has one option whose value can be set to `"never"` or `"always"` Examples of **incorrect** code for this rule with the default `"never"` option: +::: incorrect + ```js /*eslint template-tag-spacing: "error"*/ func `Hello world`; ``` +::: + Examples of **correct** code for this rule with the default `"never"` option: +::: correct + ```js /*eslint template-tag-spacing: "error"*/ func`Hello world`; ``` +::: + ### always Examples of **incorrect** code for this rule with the `"always"` option: +::: incorrect + ```js /*eslint template-tag-spacing: ["error", "always"]*/ func`Hello world`; ``` +::: + Examples of **correct** code for this rule with the `"always"` option: +::: correct + ```js /*eslint template-tag-spacing: ["error", "always"]*/ func `Hello world`; ``` +::: + ## When Not To Use It If you don't want to be notified about usage of spacing between tag functions and their template literals, then it's safe to disable this rule. - -## Further Reading - -If you want to learn more about tagged template literals, check out the links below: - -* [Template literals (MDN)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#Tagged_template_literals) -* [Examples of using tagged template literals (Exploring ES6)](http://exploringjs.com/es6/ch_template-literals.html#_examples-of-using-tagged-template-literals) diff --git a/eslint/docs/rules/unicode-bom.md b/eslint/docs/src/rules/unicode-bom.md similarity index 91% rename from eslint/docs/rules/unicode-bom.md rename to eslint/docs/src/rules/unicode-bom.md index bb99252..1b8683c 100644 --- a/eslint/docs/rules/unicode-bom.md +++ b/eslint/docs/src/rules/unicode-bom.md @@ -1,4 +1,10 @@ -# Require or disallow the Unicode Byte Order Mark (BOM) (unicode-bom) +--- +title: unicode-bom +layout: doc +rule_type: layout +--- + + The Unicode Byte Order Mark (BOM) is used to specify whether code units are big endian or little endian. That is, whether the most significant or least @@ -23,6 +29,8 @@ This rule has a string option: Example of **correct** code for this rule with the `"always"` option: +::: correct + ```js /*eslint unicode-bom: ["error", "always"]*/ @@ -30,26 +38,38 @@ U+FEFF var abc; ``` +::: + Example of **incorrect** code for this rule with the `"always"` option: +::: incorrect + ```js /*eslint unicode-bom: ["error", "always"]*/ var abc; ``` +::: + ### never Example of **correct** code for this rule with the default `"never"` option: +::: correct + ```js /*eslint unicode-bom: ["error", "never"]*/ var abc; ``` +::: + Example of **incorrect** code for this rule with the `"never"` option: +::: incorrect + ```js /*eslint unicode-bom: ["error", "never"]*/ @@ -57,6 +77,8 @@ U+FEFF var abc; ``` +::: + ## When Not To Use It If you use some UTF-16 or UTF-32 files and you want to allow a file to diff --git a/eslint/docs/rules/use-isnan.md b/eslint/docs/src/rules/use-isnan.md similarity index 96% rename from eslint/docs/rules/use-isnan.md rename to eslint/docs/src/rules/use-isnan.md index 67c83c9..e76dcb4 100644 --- a/eslint/docs/rules/use-isnan.md +++ b/eslint/docs/src/rules/use-isnan.md @@ -1,4 +1,10 @@ -# require calls to `isNaN()` when checking for `NaN` (use-isnan) +--- +title: use-isnan +layout: doc +rule_type: problem +--- + + In JavaScript, `NaN` is a special value of the `Number` type. It's used to represent any of the "not-a-number" values represented by the double-precision 64-bit format as specified by the IEEE Standard for Binary Floating-Point Arithmetic. @@ -15,6 +21,8 @@ This rule disallows comparisons to 'NaN'. Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint use-isnan: "error"*/ @@ -35,8 +43,12 @@ if (foo != Number.NaN) { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint use-isnan: "error"*/ @@ -49,6 +61,8 @@ if (!isNaN(foo)) { } ``` +::: + ## Options This rule has an object option, with two options: @@ -63,6 +77,8 @@ Therefore, it can never match `case NaN`. Also, `switch(NaN)` can never match a Examples of **incorrect** code for this rule with `"enforceForSwitchCase"` option set to `true` (default): +::: incorrect + ```js /*eslint use-isnan: ["error", {"enforceForSwitchCase": true}]*/ @@ -107,8 +123,12 @@ switch (Number.NaN) { } ``` +::: + Examples of **correct** code for this rule with `"enforceForSwitchCase"` option set to `true` (default): +::: correct + ```js /*eslint use-isnan: ["error", {"enforceForSwitchCase": true}]*/ @@ -130,8 +150,12 @@ if (Number.isNaN(a)) { } // ... ``` +::: + Examples of **correct** code for this rule with `"enforceForSwitchCase"` option set to `false`: +::: correct + ```js /*eslint use-isnan: ["error", {"enforceForSwitchCase": false}]*/ @@ -176,6 +200,8 @@ switch (Number.NaN) { } ``` +::: + ### enforceForIndexOf The following methods internally use the `===` comparison to match the given value with an array element: @@ -189,6 +215,8 @@ Set `"enforceForIndexOf"` to `true` if you want this rule to report `indexOf(NaN Examples of **incorrect** code for this rule with `"enforceForIndexOf"` option set to `true`: +::: incorrect + ```js /*eslint use-isnan: ["error", {"enforceForIndexOf": true}]*/ @@ -199,8 +227,12 @@ var firstIndex = myArray.indexOf(NaN); var lastIndex = myArray.lastIndexOf(NaN); ``` +::: + Examples of **correct** code for this rule with `"enforceForIndexOf"` option set to `true`: +::: correct + ```js /*eslint use-isnan: ["error", {"enforceForIndexOf": true}]*/ @@ -244,6 +276,8 @@ var firstIndex = myArray.findIndex(Number.isNaN); var hasNaN = myArray.includes(NaN); ``` +::: + #### Known Limitations This option checks methods with the given names, *even if* the object which has the method is *not* an array. diff --git a/eslint/docs/rules/valid-jsdoc.md b/eslint/docs/src/rules/valid-jsdoc.md similarity index 97% rename from eslint/docs/rules/valid-jsdoc.md rename to eslint/docs/src/rules/valid-jsdoc.md index 2d50382..1eca97e 100644 --- a/eslint/docs/rules/valid-jsdoc.md +++ b/eslint/docs/src/rules/valid-jsdoc.md @@ -1,4 +1,14 @@ -# enforce valid JSDoc comments (valid-jsdoc) +--- +title: valid-jsdoc +layout: doc +rule_type: suggestion +related_rules: +- require-jsdoc +further_reading: +- https://jsdoc.app +--- + + This rule was [**deprecated**](https://eslint.org/blog/2018/11/jsdoc-end-of-life) in ESLint v5.10.0. @@ -37,6 +47,8 @@ This rule does not report missing JSDoc comments for classes, functions, or meth Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint valid-jsdoc: "error"*/ @@ -75,8 +87,12 @@ function sum(num1, num2) { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint valid-jsdoc: "error"*/ /*eslint-env es6*/ @@ -152,6 +168,8 @@ class WonderfulWidget extends Widget { } ``` +::: + ## Options This rule has an object option: @@ -171,6 +189,8 @@ This rule has an object option: Examples of additional **incorrect** code for this rule with sample `"prefer": { "arg": "param", "argument": "param", "class": "constructor", "return": "returns", "virtual": "abstract" }` options: +::: incorrect + ```js /*eslint valid-jsdoc: ["error", { "prefer": { "arg": "param", "argument": "param", "class": "constructor", "return": "returns", "virtual": "abstract" } }]*/ /*eslint-env es6*/ @@ -209,10 +229,14 @@ class Widget { } ``` +::: + ### preferType Examples of additional **incorrect** code for this rule with sample `"preferType": { "Boolean": "boolean", "Number": "number", "object": "Object", "String": "string" }` options: +::: incorrect + ```js /*eslint valid-jsdoc: ["error", { "preferType": { "Boolean": "boolean", "Number": "number", "object": "Object", "String": "string" } }]*/ /*eslint-env es6*/ @@ -249,10 +273,14 @@ class Widget { } ``` +::: + ### requireReturn Examples of additional **incorrect** code for this rule with the `"requireReturn": false` option: +::: incorrect + ```js /*eslint valid-jsdoc: ["error", { "requireReturn": false }]*/ @@ -278,8 +306,12 @@ class Widget { } ``` +::: + Example of additional **correct** code for this rule with the `"requireReturn": false` option: +::: correct + ```js /*eslint valid-jsdoc: ["error", { "requireReturn": false }]*/ @@ -291,10 +323,14 @@ function greet(name) { } ``` +::: + ### requireReturnType Example of additional **correct** code for this rule with the `"requireReturnType": false` option: +::: correct + ```js /*eslint valid-jsdoc: ["error", { "requireReturnType": false }]*/ @@ -309,10 +345,14 @@ function add(num1, num2) { } ``` +::: + ### requireParamType Example of additional **correct** code for this rule with the `"requireParamType": false` option: +::: correct + ```js /*eslint valid-jsdoc: ["error", { "requireParamType": false }]*/ @@ -327,10 +367,14 @@ function add(num1, num2) { } ``` +::: + ### matchDescription Example of additional **incorrect** code for this rule with a sample `"matchDescription": ".+"` option: +::: incorrect + ```js /*eslint valid-jsdoc: ["error", { "matchDescription": ".+" }]*/ @@ -344,10 +388,14 @@ function greet(name) { } ``` +::: + ### requireParamDescription Example of additional **correct** code for this rule with the `"requireParamDescription": false` option: +::: correct + ```js /*eslint valid-jsdoc: ["error", { "requireParamDescription": false }]*/ @@ -362,10 +410,14 @@ function add(num1, num2) { } ``` +::: + ### requireReturnDescription Example of additional **correct** code for this rule with the `"requireReturnDescription": false` option: +::: correct + ```js /*eslint valid-jsdoc: ["error", { "requireReturnDescription": false }]*/ @@ -380,14 +432,8 @@ function add(num1, num2) { } ``` +::: + ## When Not To Use It If you aren't using JSDoc, then you can safely turn this rule off. - -## Further Reading - -* [JSDoc](http://usejsdoc.org) - -## Related Rules - -* [require-jsdoc](require-jsdoc.md) diff --git a/eslint/docs/rules/valid-typeof.md b/eslint/docs/src/rules/valid-typeof.md similarity index 87% rename from eslint/docs/rules/valid-typeof.md rename to eslint/docs/src/rules/valid-typeof.md index 825e3bf..66f9724 100644 --- a/eslint/docs/rules/valid-typeof.md +++ b/eslint/docs/src/rules/valid-typeof.md @@ -1,4 +1,14 @@ -# enforce comparing `typeof` expressions against valid strings (valid-typeof) +--- +title: valid-typeof +layout: doc +rule_type: problem +further_reading: +- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof +--- + + + + For a vast majority of use cases, the result of the `typeof` operator is one of the following string literals: `"undefined"`, `"object"`, `"boolean"`, `"number"`, `"string"`, `"function"`, `"symbol"`, and `"bigint"`. It is usually a typing mistake to compare the result of a `typeof` operator to other string literals. @@ -14,6 +24,8 @@ This rule has an object option: Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint valid-typeof: "error"*/ @@ -23,8 +35,12 @@ typeof bar != "nunber" typeof bar !== "fucntion" ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint valid-typeof: "error"*/ @@ -34,8 +50,12 @@ typeof foo === baz typeof bar === typeof qux ``` +::: + Examples of **incorrect** code with the `{ "requireStringLiterals": true }` option: +::: incorrect + ```js /*eslint valid-typeof: ["error", { "requireStringLiterals": true }]*/ @@ -47,8 +67,12 @@ typeof baz === anotherVariable typeof foo == 5 ``` +::: + Examples of **correct** code with the `{ "requireStringLiterals": true }` option: +::: correct + ```js /*eslint valid-typeof: ["error", { "requireStringLiterals": true }]*/ @@ -58,10 +82,8 @@ typeof baz === "string" typeof bar === typeof qux ``` +::: + ## When Not To Use It You may want to turn this rule off if you will be using the `typeof` operator on host objects. - -## Further Reading - -* [MDN: `typeof` documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof) diff --git a/eslint/docs/rules/vars-on-top.md b/eslint/docs/src/rules/vars-on-top.md similarity index 79% rename from eslint/docs/rules/vars-on-top.md rename to eslint/docs/src/rules/vars-on-top.md index c8ce81e..9700600 100644 --- a/eslint/docs/rules/vars-on-top.md +++ b/eslint/docs/src/rules/vars-on-top.md @@ -1,4 +1,14 @@ -# Require Variable Declarations to be at the top of their scope (vars-on-top) +--- +title: vars-on-top +layout: doc +rule_type: suggestion +further_reading: +- https://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html +- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var#var_hoisting +- https://danhough.com/blog/single-var-pattern-rant/ +- https://benalman.com/news/2012/05/multiple-var-statements-javascript/ +--- + The `vars-on-top` rule generates warnings when variable declarations are not used serially at the top of a function scope or the top of a program. By default variable declarations are always moved (“hoisted”) invisibly to the top of their containing scope by the JavaScript interpreter. @@ -11,6 +21,8 @@ Allowing multiple declarations helps promote maintainability and is thus allowed Examples of **incorrect** code for this rule: +::: incorrect + ```js /*eslint vars-on-top: "error"*/ @@ -28,6 +40,10 @@ function doSomething() { } ``` +::: + +::: incorrect + ```js /*eslint vars-on-top: "error"*/ @@ -36,6 +52,10 @@ f(); var a; ``` +::: + +::: incorrect + ```js /*eslint vars-on-top: "error"*/ @@ -59,8 +79,12 @@ class C { } ``` +::: + Examples of **correct** code for this rule: +::: correct + ```js /*eslint vars-on-top: "error"*/ @@ -78,6 +102,10 @@ function doSomething() { } ``` +::: + +::: correct + ```js /*eslint vars-on-top: "error"*/ @@ -85,6 +113,10 @@ var a; f(); ``` +::: + +::: correct + ```js /*eslint vars-on-top: "error"*/ @@ -105,6 +137,10 @@ class C { } ``` +::: + +::: correct + ```js /*eslint vars-on-top: "error"*/ @@ -122,9 +158,4 @@ function doSomething() { } ``` -## Further Reading - -* [JavaScript Scoping and Hoisting](http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html) -* [var Hoisting](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var#var_hoisting) -* [A criticism of the Single Var Pattern in JavaScript, and a simple alternative](http://danielhough.co.uk/blog/single-var-pattern-rant/) -* [Multiple var statements in JavaScript, not superfluous](http://benalman.com/news/2012/05/multiple-var-statements-javascript/) +::: diff --git a/eslint/docs/rules/wrap-iife.md b/eslint/docs/src/rules/wrap-iife.md similarity index 93% rename from eslint/docs/rules/wrap-iife.md rename to eslint/docs/src/rules/wrap-iife.md index 28653ab..22b3b9e 100644 --- a/eslint/docs/rules/wrap-iife.md +++ b/eslint/docs/src/rules/wrap-iife.md @@ -1,4 +1,10 @@ -# Require IIFEs to be Wrapped (wrap-iife) +--- +title: wrap-iife +layout: doc +rule_type: layout +--- + + You can immediately invoke function expressions, but not function declarations. A common technique to create an immediately-invoked function expression (IIFE) is to wrap a function declaration in parentheses. The opening parentheses causes the contained function to be parsed as an expression, rather than a declaration. @@ -32,6 +38,8 @@ Object option: Examples of **incorrect** code for the default `"outside"` option: +::: incorrect + ```js /*eslint wrap-iife: ["error", "outside"]*/ @@ -39,18 +47,26 @@ var x = function () { return { y: 1 };}(); // unwrapped var x = (function () { return { y: 1 };})(); // wrapped function expression ``` +::: + Examples of **correct** code for the default `"outside"` option: +::: correct + ```js /*eslint wrap-iife: ["error", "outside"]*/ var x = (function () { return { y: 1 };}()); // wrapped call expression ``` +::: + ### inside Examples of **incorrect** code for the `"inside"` option: +::: incorrect + ```js /*eslint wrap-iife: ["error", "inside"]*/ @@ -58,26 +74,38 @@ var x = function () { return { y: 1 };}(); // unwrapped var x = (function () { return { y: 1 };}()); // wrapped call expression ``` +::: + Examples of **correct** code for the `"inside"` option: +::: correct + ```js /*eslint wrap-iife: ["error", "inside"]*/ var x = (function () { return { y: 1 };})(); // wrapped function expression ``` +::: + ### any Examples of **incorrect** code for the `"any"` option: +::: incorrect + ```js /*eslint wrap-iife: ["error", "any"]*/ var x = function () { return { y: 1 };}(); // unwrapped ``` +::: + Examples of **correct** code for the `"any"` option: +::: correct + ```js /*eslint wrap-iife: ["error", "any"]*/ @@ -85,10 +113,14 @@ var x = (function () { return { y: 1 };}()); // wrapped call expression var x = (function () { return { y: 1 };})(); // wrapped function expression ``` +::: + ### functionPrototypeMethods Examples of **incorrect** code for this rule with the `"inside", { "functionPrototypeMethods": true }` options: +::: incorrect + ```js /* eslint wrap-iife: [2, "inside", { functionPrototypeMethods: true }] */ @@ -98,11 +130,17 @@ var x = function(){ foo(); }.call(bar) var x = (function(){ foo(); }.call(bar)) ``` +::: + Examples of **correct** code for this rule with the `"inside", { "functionPrototypeMethods": true }` options: +::: correct + ```js /* eslint wrap-iife: [2, "inside", { functionPrototypeMethods: true }] */ var x = (function(){ foo(); })() var x = (function(){ foo(); }).call(bar) ``` + +::: diff --git a/eslint/docs/rules/wrap-regex.md b/eslint/docs/src/rules/wrap-regex.md similarity index 85% rename from eslint/docs/rules/wrap-regex.md rename to eslint/docs/src/rules/wrap-regex.md index df8003f..450a7d6 100644 --- a/eslint/docs/rules/wrap-regex.md +++ b/eslint/docs/src/rules/wrap-regex.md @@ -1,4 +1,10 @@ -# Require Regex Literals to be Wrapped (wrap-regex) +--- +title: wrap-regex +layout: doc +rule_type: layout +--- + + When a regular expression is used in certain situations, it can end up looking like a division operator. For example: @@ -14,6 +20,8 @@ This is used to disambiguate the slash operator and facilitates more readable co Example of **incorrect** code for this rule: +::: incorrect + ```js /*eslint wrap-regex: "error"*/ @@ -22,8 +30,12 @@ function a() { } ``` +::: + Example of **correct** code for this rule: +::: correct + ```js /*eslint wrap-regex: "error"*/ @@ -31,3 +43,5 @@ function a() { return (/foo/).test("bar"); } ``` + +::: diff --git a/eslint/docs/rules/yield-star-spacing.md b/eslint/docs/src/rules/yield-star-spacing.md similarity index 89% rename from eslint/docs/rules/yield-star-spacing.md rename to eslint/docs/src/rules/yield-star-spacing.md index f8c27e6..3c4c43e 100644 --- a/eslint/docs/rules/yield-star-spacing.md +++ b/eslint/docs/src/rules/yield-star-spacing.md @@ -1,4 +1,12 @@ -# Enforce spacing around the `*` in `yield*` expressions (yield-star-spacing) +--- +title: yield-star-spacing +layout: doc +rule_type: layout +further_reading: +- https://leanpub.com/understandinges6/read/#leanpub-auto-generators +--- + + ## Rule Details @@ -37,6 +45,8 @@ The option also has a string shorthand: Examples of **correct** code for this rule with the default `"after"` option: +::: correct + ```js /*eslint yield-star-spacing: ["error", "after"]*/ /*eslint-env es6*/ @@ -46,10 +56,14 @@ function* generator() { } ``` +::: + ### before Examples of **correct** code for this rule with the `"before"` option: +::: correct + ```js /*eslint yield-star-spacing: ["error", "before"]*/ /*eslint-env es6*/ @@ -59,10 +73,14 @@ function *generator() { } ``` +::: + ### both Examples of **correct** code for this rule with the `"both"` option: +::: correct + ```js /*eslint yield-star-spacing: ["error", "both"]*/ /*eslint-env es6*/ @@ -72,10 +90,14 @@ function * generator() { } ``` +::: + ### neither Examples of **correct** code for this rule with the `"neither"` option: +::: correct + ```js /*eslint yield-star-spacing: ["error", "neither"]*/ /*eslint-env es6*/ @@ -85,10 +107,8 @@ function*generator() { } ``` +::: + ## When Not To Use It If your project will not be using generators or you are not concerned with spacing consistency, you do not need this rule. - -## Further Reading - -* [Understanding ES6: Generators](https://leanpub.com/understandinges6/read/#leanpub-auto-generators) diff --git a/eslint/docs/rules/yoda.md b/eslint/docs/src/rules/yoda.md similarity index 93% rename from eslint/docs/rules/yoda.md rename to eslint/docs/src/rules/yoda.md index 9a23a55..60cf3e4 100644 --- a/eslint/docs/rules/yoda.md +++ b/eslint/docs/src/rules/yoda.md @@ -1,4 +1,13 @@ -# Require or disallow Yoda Conditions (yoda) +--- +title: yoda +layout: doc +rule_type: suggestion +further_reading: +- https://en.wikipedia.org/wiki/Yoda_conditions +- http://thomas.tuerke.net/on/design/?with=1249091668#msg1146181680 +--- + + Yoda conditions are so named because the literal value of the condition comes first while the variable comes second. For example, the following is a Yoda condition: @@ -44,6 +53,8 @@ The `onlyEquality` option allows a superset of the exceptions which `exceptRange Examples of **incorrect** code for the default `"never"` option: +::: incorrect + ```js /*eslint yoda: "error"*/ @@ -76,8 +87,12 @@ if (0 <= x && x < 1) { } ``` +::: + Examples of **correct** code for the default `"never"` option: +::: correct + ```js /*eslint yoda: "error"*/ @@ -98,10 +113,14 @@ if (`${value}` === `red`) { } ``` +::: + ### exceptRange Examples of **correct** code for the `"never", { "exceptRange": true }` options: +::: correct + ```js /*eslint yoda: ["error", "never", { "exceptRange": true }]*/ @@ -126,10 +145,14 @@ function howLong(arr) { } ``` +::: + ### onlyEquality Examples of **correct** code for the `"never", { "onlyEquality": true }` options: +::: correct + ```js /*eslint yoda: ["error", "never", { "onlyEquality": true }]*/ @@ -143,10 +166,14 @@ if (x !== `foo` && `bar` != x) { } ``` +::: + ### always Examples of **incorrect** code for the `"always"` option: +::: incorrect + ```js /*eslint yoda: ["error", "always"]*/ @@ -159,8 +186,12 @@ if (color == `blue`) { } ``` +::: + Examples of **correct** code for the `"always"` option: +::: correct + ```js /*eslint yoda: ["error", "always"]*/ @@ -181,7 +212,4 @@ if (-1 < str.indexOf(substr)) { } ``` -## Further Reading - -* [Yoda Conditions](https://en.wikipedia.org/wiki/Yoda_conditions) -* [Yoda Notation and Safe Switching](http://thomas.tuerke.net/on/design/?with=1249091668#msg1146181680) +::: diff --git a/eslint/docs/src/src.json b/eslint/docs/src/src.json new file mode 100644 index 0000000..be7b616 --- /dev/null +++ b/eslint/docs/src/src.json @@ -0,0 +1,3 @@ +{ + "permalink": "{{ page.filePathStem }}.html" +} diff --git a/eslint/docs/src/static/apple-touch-icon.png b/eslint/docs/src/static/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..da15497bb789f3a1a431011fa2551393d1c46524 GIT binary patch literal 6725 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 TjjkBg7GS7*U8hdl`QiToq6!U= literal 0 HcmV?d00001 diff --git a/eslint/docs/src/static/favicon-32x32.png b/eslint/docs/src/static/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..670b0cc1a0fcc0df34c4a0a7024f9a3d25f5d51e GIT binary patch literal 1944 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+0815-+XPlzi}ftTUohK7&6 zrbokF&ec@CtFQY|SNp!c{zGleyY%Qg6(z3%txv}KTm~u|3<&5{AR_1zh%#gnmlk9- za5kD^xHz1FUjZIjxD?PRI2)6JW)Yl=#(--?6Nhkd$->2v8E9INrO0Lj&HVrWztKE1 zVESV?SrX(I45X0&qgir_9h2q#XC7ROxAKR6TmR)(y5xbsr+7Fc5B)hKU;OW0owQi# z^;Vr*?`9kD@M%tY`OuuX|HpQ37B-i)+k82k)_rAnew)e1s5klD=ecHapMuvclP<se zq(O1&ZlRw`G!OkdV=y^i?!?l--+yB+sZ>Yz=-+*8Gl@g*j@9E=Z3mg`R)6`v#e?~r zf;DH<;XkKSc#RIXh?U*AFC$yE?fJ!2VKtrD-#dI**UnJAFxOOfVw2#OqZ00~K14a@ z<VJH%Y6bd)G0EHA<#fwtwgMoBy~NYkmHjCXBO52vnE)OoU?yYmba4!^IGvoZKq%qK zV{r$zCZ|I^E4W--{1-787K*U;2u)JI*f7Op5|^8sWMs#NHB;u;v@Bh4q9fqoiX}W^ zA%UU+!PhTbVJhBIDj~@B;#FhI7hWF8#sepAu&g;GlE<=mrsahE#LS~7PNd`>K5`-> zJDp#oprA!7p`^&J^3u_(XXj2ldHC|_+sCJOUOai;{=pN^lMWqR#}+)8%%`}p$0zZj z;Kb#AuCB*h3=O@G%$ncR&90rm<7-iA6gXq1rl#dn5s4+smKtv~NSk9bbLLTwqQsnU zCnsATTC=nA=kkOF3nuh#eDTC{ZPEg3NpG)4J}u!i{q+r}=dW7xh(XgLGL|_cpjxQA z$*QAi^4CK=yuCj}OgarrZa)rAP(1hGUX#D0pEh%Hv~`}lS*L-M@*<xZn->c&TyR== z(E@1^*&Z+31qBaYy?s5OVd6ZC%ugbD6Pi|DmPqVOd{vU@woKAE{Vbc5efm2aHMe~~ zx&6}G9Ue^%RAQfTMC_WuCj;H6Jt>*DjMU<eJ=JdTEJ)SRv6>yu_%?cPny#|&<y~J7 z%;35kz*Q2yLE6Ul!_1~VTM92f3!5-|+mGC{Y#+DpRGxI@o9qJ<k?qCe@{ixyiY4?_ zN(aqK5xK+RxyrXX`?jLaUeTTtC#&w)eMzZ*ppbRUqC_I}--$rC5LUnAeag+kkD>!M z%K?kz*|8a?E<N?Q2uvQTC9V-ADTyViR>?)FK#IZ0z{pV7&`8(7FvP&j%D}?P)JWUF zz{<ejgp(d9Js~vY=BH$)RpQpLQ-0bRpauny4aNCsCFO}lsSFt<B?ZM+`udr<iRr08 zoSB@hmtT~==e+D(pjru#+K`OW+$1Y2m;B_?+|;}hE2{vY(qaa~<^Ol<qp9%(nPO$- zk(!yFQNmzoY2*-F7z$J)j${s0O?YNXNd`#C<u!^NKqZn$N_;bOQ%fofQW?Om(l5wM zx8D@zhh~m%2v8M+p_#FTv9X1vu~DI{yckdkKax4YnN_I_22M^>7TLW4N`)awg$8*t zq-Ex$0==%En^%&PpRS*lSeBWbpI5Ap2y%Vnq*U`HO9Qi{6eCkhqZFewBLlN!3u7}A h6Z15)w3JjmpbkBt`!X)gumsw`;OXk;vd$@?2>>=5A-Dhl literal 0 HcmV?d00001 diff --git a/eslint/docs/src/static/favicon.ico b/eslint/docs/src/static/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..ae3d4b8d0a106c704693b03c54820525ba28827f GIT binary patch literal 15406 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 C4X;iB literal 0 HcmV?d00001 diff --git a/eslint/docs/src/static/favicon.png b/eslint/docs/src/static/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..ee761fbbf33bdb20001dcf0690b9a366db79195f GIT binary patch literal 4244 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 literal 0 HcmV?d00001 diff --git a/eslint/docs/src/static/feed.njk b/eslint/docs/src/static/feed.njk new file mode 100644 index 0000000..da59847 --- /dev/null +++ b/eslint/docs/src/static/feed.njk @@ -0,0 +1,39 @@ +---json +{ + "permalink": "feed.xml", + "eleventyExcludeFromCollections": true, + "metadata": { + "title": "ESLint Blog", + "subtitle": "feed description", + "url": "https://eslint.org/", + "feedUrl": "https://eslint.org.com/feed.xml", + "author": { + "name": "ESLint", + "email": "" + } + } +} +--- +<?xml version="1.0" encoding="utf-8"?> +<feed xmlns="http://www.w3.org/2005/Atom"> + <title>{{ metadata.title }}</title> + <subtitle>{{ metadata.subtitle }}</subtitle> + <link href="{{ metadata.feedUrl }}" rel="self"/> + <link href="{{ metadata.url }}"/> + <updated>{{ collections.blog | getNewestCollectionItemDate | dateToRfc3339 }}</updated> + <id>{{ metadata.url }}</id> + <author> + <name>{{ metadata.author.name }}</name> + <email>{{ metadata.author.email }}</email> + </author> + {%- for post in collections.blog %} + {% set absolutePostUrl %}{{ post.url | url | absoluteUrl(metadata.url) }}{% endset %} + <entry> + <title>{{ post.data.title }}</title> + <link href="{{ absolutePostUrl }}"/> + <updated>{{ post.date | dateToRfc3339 }}</updated> + <id>{{ absolutePostUrl }}</id> + <content type="html">{{ post.templateContent | htmlToAbsoluteUrls(absolutePostUrl) }}</content> + </entry> + {%- endfor %} +</feed> diff --git a/eslint/docs/src/static/icon-192.png b/eslint/docs/src/static/icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..0aa62e256ab401b5aa2844686ed9f1b9168f6254 GIT binary patch literal 15636 zcmbumWmFtdvnV?F;O;g^aCdiig1fs14eqYNf=kfg8r<F8odgN)Hozt4eD9q1-rw7^ zc2{+E$*%61*?W~lsVGS!BM=|}003lJ8Hvvyu;<?Z!hW1TZ`i|q00`I5(qe$>DWc<# zi%<(~SxZGl0Nn=;1i(OG0HFS{e0%^91OS--!T|s|2*UrtKSR*`hX)b>h_C@b|A$BS z1O7W?KE{Xie;`yo#Q$o{hx{Mzo_whP#s7(QL8y;@0C;B^9ajJV5%b@G0Ayz4eQ49M zQP+0UR#f0Kb8=uZF?TYxVDfTs{wD<x@Z$SG9W2~TKwb{^j;?%Og5>|j!S{jxBQukO z{)@%UPLNz%Q3WLK^u+?i#l*tILN0^=0)Yg+m|OCFmXP|7_{WtXxwV^{Gaoavr>7^A zCp(kV7b|8~US3{i7B*%!HpUMQM%S;7ZYExgj;<8{t>pjFBVplc_Ql58&Bn<Q^iQve zsgt{#AUXLzL;rL9_dMNfEdSS%qw9a%`f!l>-yLRFCKl%Z(fuJR@Q=!;{KdxN!}34< zLaYM+#rglC{l|^~^FQPNugUzkr~gI$a8(FFfcbwOn-BuN;qJ%Rf^R@pLR8%g;>-`; zSHmjf;p_C5h9qcR7l!?XHIwY=&ufY54rC&D?dbV`c|?VW@y~AQTNJ9~?Q|e{O={Gt z_}n25U0;Y^DYqxo5kqb1Y2no!`scXHn(kd+W_9g@PFo)sZr-~ObDc5kH(&JyB8*zr zb#foR=DmL1I@CzH1hS%;f(Aq)gV3PJV8xI^@&4}!F!2zoJC_MCLPO>VYBmHXzb@NT zSZ68$rPYN%aF{fJbtgJAlR7Rud{Y+?)Gi`&?QBn1?Hz<9(+c7MM0FMafu>A8e#CV3 zn?$9LDICO|ka*f3TejOC)Ku16#~2UrH`s&_ylQy&E9k@#fTC0ysLzc5RK4E;XZx&Z zd=`V{2_1q9*1nO@=lB{*E>Uwr*R7&&l`yydGP!j4Hv+>Yk9uX!-(D0GMlpA4%Fa~& zkT|=%#k90Ua;qT9bf&Yor8<Y}OCKSnsfdR9u1-2@`-9G+hUNutb8Xd3M!qqAk2JWx z^(?);?F*<-%aEXHiVsce+cj%#FtHx_D$HSLAY{HAc6132Ar?zKq2F}Z55(^MX-Q|} z96m}IS;`XApO3Bt2SneOaA*0EtH8*t?N-44_?;TiFvlJ3_<IH#8>=;xxCjN0$LWyY zux-GR-9A`6od_D{n6i11G0ph__c$-=XnucyIhy4*@i95;J!L8!Cm%Kv9%df25l|5V zDx}qoL~jW;1IQ6bk)|2>Jx)d!ZlN?pC=pN!8}(6e<0ZCm*;}#L9$}}aNs&KXwoVHN zeC?f83xYUBkRia2c2&1(FG&kNHSkCI6yQh`aI3~Kehzh?)9(0FNT409Nko)YL{YIc z9^W~AlK;`sfc}MW{Jg0k{>i}WHw=`Rs{yrb8TQ~MZ1Vw3C<m#o$hUcz%09_~f|lD# ze=&_1!wVkq*vHU}ZH_3=>v-6YpWz4zkI#bAhr+rtC@#I$ff~8DT5|1ooZ*^R-s||$ zL1bck%6Z=G&Tz}3&gw2$K5$M_YLQ88NE<vSzi5CUe5<X&P_4;=?$FtH+419$S>-)c z;_XVckrWaT$2xv3lEWJ3-3^L=V0w0?jv-oKIU1hGggyT!S_7UbssXUPwP)}nBE&sy zlJahz#0?g{4DNhkWE}S-uP-`GnhwAf%Zohtc3C$i_5S+jJ)cHg2OK;zoA}Y=w>?OA z;HHbIs`+o`S@L`D;3dsv9It0OJn9yI!{Pll%`a6J4-}`PBg)oq(9v&##w@guOXYTU z%`MLb`%MO-%*jBG2(F3M$vIdHo5kLB<f>ChN`EG%)_k1rBKd7;)k;vW?Q>++b`|1L zZC2zki6$B2C<kPA;C4-^Z9{kCHahkBl2z2zFD5enz3zx?LDbGWopDJ9G=C}-;(0SQ zJ36}B{92<JGDv$7$%|pqAe3@4X(t=V3b_Az4>Is*vuX>%pzGlI6#j8mQ7s=3xuGMc zx-}!>xfPfBYx6VG8XUKsG>`ZQxMade0WoUX{{a0ECsJoblYs@zX<vl!z0(Iy@-wza zP^#_>Fw1joL~6#1u?<VnJTyfA)a=b_B|o^`hCudYE7Z#G`z%@BDKACyyT9kVX}F=# zuXnA6^Bs{r9dJ(^ZDQe&#AEDFOr*=sNKF^{g>%tA1uP&*$cP?VfJBsILwN3??$pkM z=ziP_-=T1h7vmD=gfpinqwh!p*=*_Xsbi)rn0_HLog%clt@<vSgs^SzWm^9oF2E3T zIOpOaXdY0Zaz-1~-R2ioowgBNOI;r;7lbbSCwga(Xkqe%!&960sqqY@(ppgWg$qM? z90re!Om${;`{lN8{w1FAnX>485%1=qhvjEUTH@m|{bkJz3Pu3Z*Q^+ZA7vRmaI6et z83+?DN@6XA{#yn6nYtXf_)<I(VH(#WeWgQU<+Y|do6P*x4SyJi{cpcA?FHe8KSV3# z{DF*$EM1lE9yYS>ax)zMT+p&EBBEhT!h?vD9I!whl-V%A8hb@jmY<w}TRFew*?2#i zzX%V5kdgA{_B~C*(-*6t@r4YY_6cDW+L%L{b>RzgZL)fInRJ}ucEG`!a3W8~cQ0c6 zOf1#|QK=nNMn-xIb!!{<VPP}YJt@lXmQq!YU~)hBT+FgoiU~7fEZBv>vW-`=H03QB zh@Bj6A(Wvu<>oF#B#g<H&4BS#;Wzg2TBRPh7NDIHqR2C5n0^p5ku^ieEb932cEUN< ziEaY3&{))usQI}?K$P&Eta3^Uy)8<|n8%&e%#<`5D+Ut#Ub9!p0?=0?5H)_)9q+il zsw>qefziIad^O4vwnEyv#}^sIg0y3WRPfx5H#;tj*Wg`tZ9&dpG?D>s{g!WYC~aIr zpZF{s(Pz~CAafRQts5Uz)1}k@FiJ!f+Bcdx<%OrJ>R2u0g`M5(kV&H>C1q9wg9&s1 z;khatEVT;ZiUyKTekq)$72MRSFGkpbIa0#~u0rylA?;uaj}cdk#)9EP;aLr7c_AUT zpGMMaXC-EB4u>nx*{hv@byLb+JjewZG*yVAGcpDr7WpNjABjB2Hex|QKH}Y?RyUsc zKf|Szm^bI|A)X!&;T^zKbM;`Y?b!^bR_2bMpaVj48sO6>?E)m`$F>l#NsZTy270o7 zR*Mz$Lwy%Gq)&6sB01N;g|wP`Fso;+z`|l+WHE8%<Y>`-uR+<|Z99hzRb(!l7A5Zw z4Mz7JW+zlB@>UM2E&It=y@`0{{^w(%@!v=6Qor~fb#hGtdpGyHFRbB#NrTak9z&wB z6e{huF#EDEv+>3x7__<lPNBuKd@fk;j2)H7#s8@({cd7lAv*xo7J%6dl@YrJQ?g{m zsOM)kar{O;CH2jL;D<zGE13u+Xk7}aS5kXHw8?sqL*iHF)BHq6{e)mm;KALlWk)wE zrKroQ&b|$UYj#|s(M*x>I4;9|uPBGOC~mZs=p&(C0>c{<b<*e96Kw7J$>~;psc^M) zLszd{)Ae=ardul9Cw8a7Y<bado@AaV)RjSBG$==~Qk0gPN%Y)kwsk=@BVTE{Y|AS3 z-l6S}S4X}*H=pum|G6Rt=3VB?m2Tw!g}rh*s%fmgkKD$7`~4^PF$!z<`3?35U6t~b z@S3;V?qu`&ixMy?kM(v$fnh2nN3n0bqVmQn>2e@n(xfQL=jl_UZaho`YV<=UcO}c# zq&7E(VND3}W*C#1g-X(Au~=x<<-ACYRqcgE)!HG-l!_H2ZVsRQhg@wizu5lj6DJ3I z4@ECeM{PMACVoSa-b;(~pe``&II`^NEr?+l2pGWWD{OPP>khc6TXQm>cgnP{{5lWt zZ=!BnaTMkFfrODZ$K`bC6<L^bF=QNVL+MZHwB}&Kyy01NuZhuZb(rPCFU&Kbyz)9x zUz4hv!0?=6r{~Jp{z6~bQX<u3lhXV(wIviA4lQoaaM!WTLR6afl}Z@m=rz0j{iYBC zOgTOGH3HX8tdT5s7+o#%0D`1-B+#87rw|KW!V_=$y@@VmNKo4LJtr`!?5Or>RmUIq zv>zLZ=@I2=QX^uEGF1G1r)tL1<vp;EDj*If&?!`sK8fsn3)afNQyH^$$c_Yft`Aw{ zZ|DQ3z8m~~bNJFAcY(bxGkV;sOC;7CK(J#}f_=iTOOiK@M?L1%iF4YT`&~g`+H8Z5 zr8+%9TXS)12k1%oTs~zf&3*eYVN{Qf7&s#bV+T4FHJCl{e;)xK`Zn-jn&tf!{NniK z(S29`u<0Fh;Tm!Xd?N<lLSR@aEDonb!g&AXU}CW7?WT$ul^2RSWK1uWX$kX{#a?cY znu29-hz+{<@Eg6E^MS$eUx@jajQfoj_Vd>2FKMPu<G8`DKOw-i)W4Xcc?PHR$NTMw zBkqJ+bx(tLO?$caGUKVpVRKPkOD|mTMC}s4^Nz>@3q!JK_hj6-(hcwSmw)P3;=jVY z$wHANF7F7;AWgblk+qLWsx!p4n_SF>CH&UiKTwByG?|Xnt0!3<UpB?YDzZEOW@uP~ z^)dqblpxl=t)sbpRyLidyjS{MTy%SSu))((5)~%=IF1#h>_NJ{N}1Fo<bHM`>immV z2}{>2KWETZJ0yReYdE_W=aV#C`&jw!jt;lf@eJ5YdVtmf(Hm)+nQ$1gClZ=DN?$Ie zrB2mo7%d%<K8~s1P@IHE<J)iDCEVfh6bpe&43-nPjH-eHQJvPg8tgA&HqACAI&iev zga;HzQ75Qr8l=9=_W?Fsjbr2JufYL3GTXqB5w<w5n-H0NlBRZHXv|yrs7$)`<fK2n z$RW%MEAv#8hzMJ6P@#{%w%CR%`McOULb?7X+HcHRmBBE_y~H#7rX~Jq1I5g}eUry> zxU=QkiZ;y@tZ8Oww;xYCe$UJEyzpqkq{d<iNp!wxw<lfj_D|Z3&ZL%4iUmW<VV|2= z6ZizV=utje*Q2U&*$f8bhYsn^;+~ap9qv{?)dU)<&&f9r=S_+t_n%YXe?FknNI8|x z%>9-(J+*X0HVU)%Bn7>RW4wLuvFBpfnu;1!$khhE##dtM&*b-PlOo@xc=`pA-+{~O z-Rym;qT${@6o;LFDU{o8i``$}It!Z}lVmavm0mF5L(evPVY0+!m>t<VX1Stn+z@vy z!?5Hkd~m!kG>JyKDo`&O2+xuL^dS-71TWebA(;2Aj<pPm_Lbgp7#}t`9!mb+P^7H) zzySU9>pJ*$NxP`0tGhQ{R6g%VEn>~USk>a?Tx)c0siUr5E%D>}b(ura$=06Xj%})< zR?JcBoNWr}^NjKhg^{&fEnXPE9*4Uwqc7FM#iNj(CKzXm_z0a*!@kM(LJcu@6b92g z2f~*fiuFA~q{<(K%d0t(v=urC$r1n5*D<@m7e{{d*OxlpD52%qu-OA7U;uB?Tl2SX zW397CpubCnk-hYMCE4rDawUwk<tnhSQyvs#zs!bWucv)~Q;0DU1#!)Io?TB+#eZ6l zpr#?{Y0OOsPP`L_%*#UK^2<pVb}nRzt9@qNw^#<sQ$StZo`ubbsWE1XrhHqS57n^% z<b^nO{GF+ApF9rM^~0|3YCK`XdICLuxr?o;D0cp-3UiDi6iM)O=Uk$csB)w-`FF!i zyv<@W_xB9|wFnH~&vBU8ld72IeZUjn(9a^5o~#c#rUiHzinYv=Mg%feN|Gmiws5X} z(a{!(Q&gPS^CEpj_14moS8AAz5(^>RO_geN&womAk;ZFuD0nWJ&y`i2@@YGbG-(a_ z)kvcAsM1VqYAR$GF%7uWI77vg8jPqb;}5|%()nd(XWfNn6z`=_R_Nk%7~DyOM(reN zg$xvaiBE|T!RQK>i9hUdTwn5Y;rLtK@8l^~ZwInIAa$;l_$t<Dwi{`B;thX|mC44j z@B*cwLBQ=;=^Lz7qx*-T!IE>mB!fR(>D08Y<8NJeeOMcOYlx?KK5Kxn3D0E~d)oNN zvK(bkp~m&{TVPtBlZ>T-eGA?y7^r-A8TDS08M2u9!(-?|{E*w=Seeh%Tx{vEzliS- zLS6aYNHB9?tv=?1vcAxFI`F8z^l|JBF<SQm+vKE`&`~g{$YTu&(XDv2taOLHZERs7 zf`c`1F}u1RF}h)tqqI|IMW8gZMD2beB#DP*F%$Yd@a!*oPd6^rc-AhVvlF1v*IY!{ zPa6M*{v<T9?hQIk*`G=kGcJ_&RawUjz^Bf^Z~XELQkJ`)sWfitIvA^fs;u4?<qG@- zJBb)$9an>M39NGXP58Pbw{4<e-Z~z|F1HmOy0xjLWiL}(VeP3Nl_nDRv+$EkNWSr; zEIGHF+}JLuTYsKQv%bsV?KEoynsOmoM%sF<%^qZau||Yr#5YdW6|NXYhFK_DDBav~ zYR*-SY9RgA+etYLvubUI&dh<131Hh%9BcPtW~t*-u4Otp9)|68L`r4<8H~x{g}Z}K z$hOBoGFmHzuS&6YC&6M`dk0^^(9n7JlDifCDcJMN!>x5=x)LL&LEGAtG<L?Orp6`> z6O+dCOM82dbzF(g6-XJcDhM1?|2Q@%QXfE{=i)b+oEpwvivx+`KwK&bIxRaMy`r7s zWu#*$T&6?%KH09Dz^H$whm}F1HiX}ExDd{3kkmCouiRho6$&S{c8XHcJl|FY#8Z}9 zFs`eN`xAe8j+dM~5-T9ds|1~W>s4y##;Cfdc8SdJT~+3lT*g|7Z#Z*jC*HF(r7Jxa zEh<Gcd9L8xZt!Nghrv5K4}KkynPvv5_1Z^@3iG7KF(9Nc+F^vaBl)tZwFA4Q2pyPn zsOz*9P<b9@|6L5<3P37jZ(E0A>q1`$GvPf3zi<4FZwIN~p~Xzv2V}sN`nDMS(mAss z<HJ$zQ{u(epV_g%Y_!sHHQ_*$Ys19E^zJ%6bqK4&G@Rj*9S@6dj{ZXjrbI0wyv>H{ z)sC{zQRi1R7;9S5d~SBxa-Y4wWaHD;G%3q2{HG^c^PL*8sfabuCq*F2h__a2tP&2o zXpNtw;&5^EnGl6~ClT^zwbVC|KZAtZ4`%-Ownr2DU;U#u>L$efPASbg!q!%K0_E2J zL?nL@-D3|!9;+KF$p&sBC|MyBQ>b_sAqHNd_C%Q(8B29;rG0;umzVEB?1eiUxrCAX zhAZCjj_Pwuy%`JR9{*4yQS8HNBtKj^p^Nb8Kx_@#><Uzbt&W<Sq=9<$Ah3V05r6KU zJ~=OuV2O+}#=GFQZ`X<E+U>NPRd<)}caM<QCFyo#(F#@O4_IcBd>F?iAe;slS5wgc zl-#O183ZbO{7{ETNo&2__VW6E>63sip|DJWZoq8%wu9Ft{+9naJmi=(5Pd_R4bm=} z<ZnkwURXl&{)|zOvrOxysz<7L(Q#|n*oyuFV-W0=2ChP6HZAx&q*lD2*3vS7hojj+ z4;TYCz<g$c79a=5D`oa<0DRHe+I_O7v?3G6KtA=Bt6DMe?9|pYH2i`K^g}N4XH|?Z zD4+@Gm%<HY=!P>6M02H>k;37`AiARS-3pnw3CW~da##WRO92%d==Z1(>ycd)ttLS^ z9Frv8vpCNes>$xO2N?bibjk-L1L7=Ube8G4XI+S%D|?HKqw&P$8_olq_@CFQPK9e$ z%TH|ATYDhk6!UIT;a2mBh)<g>GvVBXD_dOlj~{{_^P~i}B|b+FD7!{T+X^Xq4ENR} zFyau_ULN*ve{FZ*SI#)dcxiSLX78u=XZuAh+5o4ZB_7kr5FRa8G@rYb9O)d?Rk%T9 z&>CSN(NZ0>B<1~ZS3L!Us*HYk(9vAH5*h&4^#oVMu+_~-(nLNNQF4D1MRCxw)IK)O zqH3$j*t}7^IqjXBJ2sM*y1#pU6;vIrtIJEL1jlB^jrQ=awz@co^r@I2kiix7373Hf zW)gX3H#YqEYp7kbN`fn!6t)yS#v22sk?K3DzpT(Z5`b$aq3O0Xm>eGG4#<<?qm|Ij zs(|bIEnD}RAYGmFY_7o7E>W?80mJUM+Y=;l2PvED7h}1Z+!7oLs1n;T3qo+z`E=(9 z5zjD91&ufIn};Z2WpJAI`~oG(V3-n9U&&{GW#~T(0rMuB6l1pF{z)y*Q(K$zvrE6J z^6fn^`@Cgf#7vjov3fR!xDnLw!)Hn+G!!JE-kAj(+n?g`q60$jUw<8?YEAh=I@g4? zvLlD0@^?oR12d^Lrls|Re8rJ#$Uj^33p=ZN_#tzwQW%GBrhOvV-Fg4EuN_u@lEZKJ zrR5Fu>C}Wle?O>c!!dT8+HTji#KE%E0&>>U@>GjTB=lN#;SYcbA5qyRw6!Jj=k|*p zIW<wqRJ+mF;uriBS|^w<rDPeB{CSyr%+7nHQq)7D!gA6k#II1eW(HA_IN*?Thdl7_ z@-LQ+t&icBJC~9{KH>&@g$XL8@+G*&sC#-(Fym+Q5S+-c&V$)F(>2nGcJ!ZjR9ffW zMq^jgr^<#}mneMKdcgdy$ZsTJ>fm^jl!=nb*zl?p8VIUj7g(;ln&Kf+yrZbT33@5N z*|qw58C<;G*A5t0Vk}!E2<6u_USYM`N0bz+`U-tSF13ei)bie>diVjA6!_!m$~?5B zZgCd^9gaUQ#jtM+HIP^1g{<=eoQRxhiiuto<ViNMhcC9bVpL!WiJ+EEV2-yn|1(@b zP<KrbykmnyyUUH`6`q2y<}QR}t1K54BzM?@Lj0G8IC-;IK|7bXw!=JOMbY!=eJn?p z^As#jz&8oQej0VgD2GZ!xI1<(5}8qSYX8#Kr&D2(o_EM^PS{j<O&s+KAqS#UVpWGK zc@Li1J|S-qjd>dC997L_WsS&GySPC7DB-e908+H=j*!T)fA#^l_+`0mPzqkp#d)*+ zRsrgft|aI4n0Y>Qn)Ngoo!ciHnb0s7s^DI+pXNu-baA-9Hv0`KV?Mw4TM*)VKDDh* zh|<@ugAr(Komt}6jwofuJ(*BkYEs1_=%9^nC~e7>08A5QzAh)f8wy;CCM&U|y(hy0 zZN5PB6WvC#BwhGVNQkYE0yrlLV!<;ma^9z_!L08OsWj05X4YzTShWdi1w};;`rsqf z5t^{xdOHm)&IK*^jUEDyCHPM<<3&*-;euBwGL<dx4h)74?X2oP^-C1rrL7JxO*u%1 zge6_AekO-dp<SzMUgGqiU(iu+q_mGcNw608KBs!!X+-=CEJbzQhaqzIJ${G1D@zKT zEkdRX6%9He3a?$MV?nVuW-~T{%d>UsdP5Tx!mpA0PWLFw0^tATx`<6onQo$NNC;Dc z0I6fBV)oPeNllm;z8(npY3~^sz80QU&F_mI!cH}DTOQ2$2lM3bnlT^H^Q-#{f30n| z(82ADkiyzQCY|x_S2Ea=NQg%DSd)j*vE?$TC0N7$5};a#$ItkD`b3XrZJ(ej_2&9_ zluD9JEEuxa(&*UB4za<&@uvP-g@pu$_Jf&Jp(-T{4z<0Ma9+mGbLqLW=TZjugmp{F z@lM9chHCg;UQ;k(5D0sC?U3XxjKq6w&BHXs)Yvo0Y=B~+`APX2zDwQO6#@oDiUVVm zFrhy%l43Bzc(_>v_a^(vdltaCj!6l55>0vqu1Z<_o|<;4Wkt-n?!I*`+n*)#<_V|) zsH};sNGfan%!6bblUN&uO~JfmamtTBQr=`(7^==&aH{H^#3SIg{6AOk$?l??f*$Zh zn#$PG#4)#9i>>YwE}u><xzUL**+lg8a(>gKNNkP^UGaPeWn5-Pk>I@Hn1a^vMDidf zD=<G3oNT-8a8~NFPy=J)<tI)*T&=Hsp7E(m-XmW!f%5XjU3**29k_h6F%glZU|fQq zL~HJf^30@R;G=@7tyf|aIAD`rUhOmJbW!-LdQ<d~N=r0Cl7X1?;7eTmd$vKDZ8CfH zH+0Ax;PJEvlB0MQ+`#Hx$EVCs4SE{%c)SIe0=^Mww#U?3(=MU$uLBFU2A%!2Zv|lU zZ%a4b)b4gy6Q4X~eWD#|`Y8rPAWQ&VfTqB>jh?%^MPm9<Ois@BDa4&v`IVn`P6tXL zmY~8BYK0?NTr@*5m3KE5kfKN9K@s1IH!&ZgcV~r^Z4f%rPK4k`2(mkuKhQXdzrm&~ z=Oa}jOx)J0A|;n;q18&GP;kA9i_G^WDWUuOIH?6WRAgH-pU1UWaY9STdQ9-;AFKD@ zmz)D4CMJOjJHha<puSC1hOBj=kORNH>roTfz}sbo)1KZHTAb&l!Yw#lIL`uk6GaK2 z0|{&3<ZlKz?1^-qwinGlRtl2eyDuiNN5`}e_EhUFNQ9sDL%+d+1?CL*U_M@Ieh&+v z&7-b8UevTZx>i_ki`{-6l|4|Hrjm>4ehW2k{~fC<9FIl@=`kgCIfF=~qe~G1e1iv2 z9H?c;gnO_-NI-)MOMs9)p4e{_!)eIj<4iV^y(X~?yl&Br)T!I<1@AikX`xJvOF{^c z>O=pH2K6nxZlAIOU%yo=*y$WI(ggMrVO#$y#0uvf<@5@g>(@Sv309;wLW0;3KzGB2 zCh=q#7HSOwWdQfyS9k)z@->n61_zC&`X0bvx_j9Ow;d)O85G<fxZ$|Cw8$pH)YWux z6uix{Jh%o5pn*r~@rFP5If-5}yCH4Nd3!wq=LaEQ8jQdR_4O?W_W=m3j;-?-{nj*d zEXB?b+rX-^#sL4-8MI}D>NYOR2QrlCM^$Ttr$+=ML?D!me;rOFn$y=7*IC3$AgA;h zR{#l=a~9}ll;1E8QOIpT&rIp8!F^gL_RNmB%KL9twE4x)6gd1Z3ah8MLelnb9_PFX z@zZ92Tpm};95;X)XEXfzTt^Xne;~Ho)}R2lfEW@q8dSa!jx%}q4?4S5?ghOai(K3V z{A7qSn3kI%@f`U#;8nM*RA`5g2n3NG@N;C)4U5RU^x*x^?R8J{T@p-sGmpV`f_NcU z1=t-~>oD^4pfmpFOT@AYe~iDOO$(Q~;t^gP82!^heSl(N-J)C51nw+C>w$EM_?&ry zbO`4hd80sX5zrk87S<Kx!dNTLPcZqvX(2)dw+{y@q$*zs)<0VP=+FIOk`oDmH6ZVh z7T-*wb4f8w{LJ(WnG_dpR`$aQ#~+0?(F#d><%k8NY3fbrC-PWv;y<C?tV9UsdcvBl zK<whGVaN;!4eL`Jmt1z%=b_z0G^p0WK&w5FaetY`JVg$7cJaQQl2}DD>&K6Akg&;v z=@C0~?+vlRHnt|bOT@91+jq_UBgIJSPX}J?uad^~Pqn%rpg84yW=duY^rUby3bYw~ zj{iRY+EI<e%8L^&DQ(6M&Zb6Ed3N2drCD2!=7cURv81-X1=k*014;(~Exdn2b2&aj zrow@n8A}C<reGm6pQRt982{W6L>eihTq8>}Lj}DM`Xnqg&tKi)^eDeA(6R+?Ye}M4 zN!xbEU_?pR>2d!J?U<SQod7?CZvv*nyGhic(GTTs0{->$R@Yb^@p(bcDZS37Wf##$ zl$k{}Xo!Cet~CVMh6_oX5M3efAV964jnSHl@Yn|y^O(Mf=QMSvrXjF(t99_y5qV$B zYctB-)gL|<=Ixy_i=QPvBa-tToV^G<;q|jeLYzXW<3+@kOu~-2=Q74jK5~e5b=*7^ zk*CO715hda^|8?l;#4aREs+0|s6fgJa*(zRQhg=J^u3zZ|BF`AF#H{wCs8DRAZg)t z;d?JPA#dv6j|3^NsuaCmO1XSMA;<=n1zoE+(?+oEDCH;5WG2Ghk4V}IA|VdtVOP3X z2?aV<9I6{B#o!{pO2SwP8H_zt@Ye^&#wDbpvc!|cRR{vX09d`cnLok`Iv4$S45P%d z>;R_=r}VamqdvG=z2B+^jI8<W$^Kqn@=HAKr*cT@vMm3+_4b}SrKM_EuW%YhG*WZ~ zE$f%ZdH>Z)x^!ultO9PN+~2yr<5;&oY!C<I9q+@gLLwS?Uk)XiOjn05G<wS+iA1c> zGfVy+)mY*$OMw+RB_-flM-N58>wJ?k4t}`1zu&N2pG_Vd`~!>gW(E#6V1a~t;Dwyn z;zxj($kWr;7Y)k4z03J(>^xJ&Hi_TOrKn}l%2t+XpnasPGypz%qln2ZG#W!VP-jUc zhhiDmG#lkB_|a4q&wiV?HMB~eSOSv~h>5_5`w@!J0CsSrAl+^Z4|RX~^yd^}lp?X# zC*J}bVB7WGB!wVJCIeyevDRXB5d`M<IQ{PL{ots@J{g$SZft;%#w%sIw3;3rJ3?hT zWYql)Aq^a>iLm^c(>qwrJ&sdGlo_r-lE%@cp+_fvE40mYk!~U4J8pyU#AX)vgRi^s z&Z#9@AAbSzN4R9V53h`^Y?7%*oClA1@1RXpU;pR*gJ)ikdR2s_Z(>MTB1n)2A`J}U zRfyLt5{b!rznlNnG2u?1_;zKeIjXEffE36HrNZwP`QT=FGyeSbEN`wUS}L^2Sg+xS z8yf2F`C9Qn8M0EYdLuF+^veL)!1ZP|D{z^3a4=P)ZUvM`2qpH3wWyLTgu{EfH<bV- z)TjUj$t@3J---Y0b?fx`T9{yCk%ziEFbZHNI;OrXHWPLyq)ZOH`LwrU^y?d4*Ssk} z$PES|p6_anwCS8tqis8;<<#PGB5I`ZV)DgmKeEDeINeK8anD5H(1fKgqM(~AEk(V< z+qpKKOq6d-;U4?iM2$M+GOnP&5T<0Csefkj?qu9>C*R}TEpD-5lt`4yUyP0sQJr)p zQom*HDyMQOPfO9Gh;dh;mFy~6N^kj_;iH<OjQmZ8@iIsXRjM!qW10i|8Sa}-Rwi9{ zK8>F%h)fuDuhbPNty3Kq9`Yx{hvEY5NSVdc`Y_#EQt}VMDOg&c+nd-of06P{qeB0C zaCMtE=MR(KJo=u<TC1?Y?x&nrX<R|M_v90extyR_8JmF4Ph%?GI>Hw_4%!J(2A^K$ z=OBez%eCXv&Oy{&xhQO(K*YZ>LD4z^15cigYYQ(<;^KmO?wxKhH3@?}B<11k!3|L+ zawl4REl1&%gp!iQ9G?DBb)1<8x0@aG8J!gsFeUj&P^EYIqfGHSf-4q<G*CCv+mf|g zRy`Vv$i9xI0n?*9-;W-U6iX7vsarjIu>T5b$AWoCqJ8A0c|SqRd=6P~56iPCDM+0Z zXA?_7PyEOy)VcidB2aE0<WSxY_TBaPE~zE)BR2pbJr^jZWTUS`3_&Th!v>&-@Afp# z$Grk;owH9an>E0}0<eg66D$psP*TQP##9(4^<#>l7oO8A(){kb{It{i(7@HrzmpBk zkog=iN4jZ060G<?B?DqRdaAv$xg^cy*Tl4#zi*4tAF`7twc?v<lJ3<R;X@SINJ!;p zN?KpO7#Lt{^@cw3kfSoQ+Y?axOT-47;0{i5&|{Rda4@VuT?Gi@xK?vaUNchqOLg(A z>C5;<En>PB5ua+$vPDK|jb2BmK!;0%=}!D=QHmS2x0!}nl_KDtPAT8V@t`hS+1Hh1 z#|ML0Bsq>a_M0C0VE7fOszGnN=PmbiTQ4q^lEx!35~I_rLL<OaYH{kMS*Az02XRdO zprg_B{CMn@MLs+TSlx5VzelXY@WLfFg9OPsv)0P|TwxWG+BZv8dRE}@T8g$$c*j?b zS4aHj&kgkE+8FM<9SxQh7ZJSrK?sO5fPBR_fM9FcaNwzHs#LY~6;7M^l$9(@8GJ-< zElq_~x`v=fdbRR9?utYC3#79Mr)r_jR8N0=?c38Xg?#RQzaV9e0`EQlE@0>}X=?9N zI!)#w%iPBX16gUEAWES<sgxo>L{WNZqD*ABb68kHU84zj>MH|o=!OmB5Y_WbK76qx z;#_@Pwz|h<CRdXdOOGjio4{{@Q(ieO2(@IuOd2K5_vh)FM@rdxx89yz`?W{n;*HD# z^&PJ)DwwzHt?_xrMG?y&!%{m%F@9#NjTynl$7ox{o}WTVq!=)V4?nU>nT&q9vFr8K z^(Mnptj95I@^x8U{B=eX$H6(%79W>^l6XV~=vJ=EDWHaga*wnV^WyCTciwr?wS1c- zqM&Ai!|ln_EAVTvsr*fVp~BV)kl`pgaDZI42(b{z1LLc5`=bL^d`NiMA5s3&Z&yy= z{O`z^ge*0TZvMZ@AF625`b|+nItJu<$$`Xj&K@9wLd7;DH5H$~Uz|+7>_B9oFhqvf zgv5ghWpTNzsFX&F=f+3mL95gDK$>;(L{5&5-Z<dqb5F&L#2BUjCspy2qf5!}@UP7l zt%SeqGv4ThW;oi(OO7*0z}aUZkmm)NO0DI5c^bksP`b05;e)i?iSh+aW_Z5QeSuTh zbZSjsusZJi@#o${G9sT6!jct~W+GpbS!~2Z;NQko#<xkDd;-zDo3MbRBmhiW-yQ7s zS4kwt-RLQ!2(sAaLackx#Q`fZ?uC_-pb~Vkl^*>wZ$p_A&PI+RO=}nO9VbGz<@SSY z$kiukiSNZHgU-$rEWg?U`dqj<Q%QGf+?<v3s$D)a!X_)rTniiZT-9gUq8JwP>PMIP z2huk%l%n><yGvBNbtHGVgWZAvktK!r>o$_Vs#hKczTu8KQ@M%SJ`leDtYq)0|2w>O z)biH_8-wUJtAr{Mip->S2DU9k@sybRK7dGTyXAewz5AdhH*<oRVupe5YrWbHk)q^k zWBCi;uxfLktl=Ig$zBJFBW478bggG1Ft9))l(Uqz{)V5$(^XAv@cn?t=I~de*B=^i zcFd20-o=APkPA?(DDcGR{2Tw(#$CAKS9A{ctuJvr>;+v_xdiGvUNY|p)wj<yx~~3A zge3{6I!kzgsF#bHei|>G;i^}oG=D=cdpIaVP`QjOZY8a_0ibBal#BU+3}wNE*227Q zOH7-N_akwPVIml=7OMbm?uQP<UEz-?lk9tsOC>G;7|8cn9#jv-Z?vT8C#6dFYj<m| zt8n1~-;sl8^>Lyuhi{R~-f~Hc*qgAjyJ{uK4~4rRyvR}{cuf%VmU2B)PwCy|yU-2G z^bXt>H-DxeCLkfkbsMRz>mVW(y|e|<;pB~|Q;)3x=29V8$xf|qr79k|eaG!p7h7&W zm!j!iDSssJ6iq}eHqX_Ca$%`<pin!~QA+$AmNk7=*mwm?C4m-N<S|f<CtTGs(8Tx< z^%YK&p>n&nU=KGm=fQs$ChTi;Y!;;1ez?gb4it<P+n$H(T|&+0%@q`TzD}$bt-W4k zC5bl6+;=a9QfF1=5<U;Nr!6zYd#X&mH`xr|NjfMr6=8E7Bfld}xASK@drv-Bw|F)$ zV|M3r*x=Bpz$}R2a^#NL6>s}lGNI75KuMniEP_uKur!ti{O(3_6j{Fb3K^Cwm+xgK zk_d7P-z6x{i*=xxh6X5pS4gVl87aIMU@Fw3{6Q2338XwWST6ofx%>$9gj3jmRHzPg z6&9lBZv<IHLIzVYsnn)gTNVjLjEaW~nkij`0Katn5Dg+N=LlSFpm=@isbmL`?valF z<X=;r(v9IG%Y;(TcvHsr`lHfub~f7}lTdNsB;n@S|53Dp^uh~_zdn}Ce{#4)#mWCo zfZ>l8-)YRI$jp@H@h1OBd<DK{#x%?%S*e#BweS<dRHWzA64mz7g*`aQ$;ViE!e&=p z55ae3w;uYE(hnCY3RBF_s)gzLAguF(7%#j&<)?(#^8k~kNvt2pc*2jyJX~f`1kxFH z#?!;>grNFEDXL4RyD%REzp?A~u(ABC|BCiWv(PQ;NGRhu&Sbut38v)xFZ-I-))&9T zODeowHmSA(bZZ<z74_eahV35DHbUI9DPvefn47~y#7mWq-S`V##5|S3<v&&&V|l{L zDT?1De#sqkPw6BX+92szT}Z0_$<%*x<~0GB4m`m9t>Ev1E$SkjgZ8k{#GT5%L2a}d zA<g!~nQe`$lEw*0zm$0g6cdg%&+asp6Zgx~Wul%7K6HH6(WTo$Dc1`66X}q}Z8WgQ z|DC_OHw-+%T6CXnUh@U!*YKSOP$R`ci@0TO@osWt8^Fc$X(})b7xsYN;xGXQw3dm> z`tw1LyKvg!b+l>IT*e47&Rw*mYaAcyQFmvETksyYtynN*0LNCsp3hZh7Lp|R_vPN3 zXq1}(*`$9_*?F5^4kEhp!z<LvvP<fPLHg#q;IUABc%&|*@*sJRK5t8OU`YAJH@$tj zvGocRg#-jYDB~7PNVyQwuvQcJ5Ut2$!Pvyv)~tOF;-oyi2V$MeJA3}FD6>&~sLO(W zl&g+-PLXSm1^8ZE8BX3bp4jpZxL$ZI$wpwOIjnQg4YquX;)YPN)*;5RFUi^ZNsZQm zlKR)_%t1-sR(hkIh9uFRZ<@?}nntfHw!jUl6lQ(MJ~%h)1_n%>+G)1Gr7ph@iE%Kj zSLVvzFFy*`aJ{-S(V~+*J%lclXnm8^U;%7b0#0Wl$2zaH_FWG{94DdQi0Y{woYAl0 zuo)_Nph(?b<O^^8GXYd(pt|Z$qgiloZt+eMPhuLw$lv1~(4>})k>Qe~uk<Ca!|ckD z4X5BL1j8)W5g$lv&PGztF8Z^~U@z^Rmd+Nmh<&q4QiZJBp(YS#kjBUu=DOnR^a)uV z4p9B$kNRO58s7pWkS0014(huir^mNUej>Y8&%Ap1zb>9R1xj{HYLFuX<v=PkxW8^J zaJYSpvpucQCCS+_V%!6e@wWr6Cx724jql;|Qt}00EkI5_vJ>+R_#nBjvDGL=n#}5x z5VdU_!`?|wkd}c$-(Jza*|o~@kX<P>!)Ds>evx4pev^o5yJZxvMpKPJ91}LNw$L_R zp@)L$k%)I;9v*!YvgUAfZ*OKTy(_m1xPX&mO9;EVkf9rS+EpH#T!c%~!IBm=UI4hY z)gPfL^C)Djh@SE02>&f){u^F*{36_XkJ>SotYBF666y&*lR!yTTWfD1UaOMgMQ@l% zq5H?^@yd6Hf6#VP0VySBL+5NYBzS0zSV+-)Z)$Xdf*DB!km0<`L~^G=oEJm@*2Y3{ z`MX#+iu4uiN_OxG$>n_qo6@hj^N;n}Ye{+o9y$}zJJZu^Sm-<WCcVG)eraM$f6*}F zI`J&BULTQ=lv8$ApRZ+~49a0LW_9KM@HKTwKQr@ISwJAcQ`Vzvnh@#{%8=`qAM9@x zT)Av!mlTCX_~K}WC=`4yi*?UqQXawS9Y?#?eVz+GKDErh$@MNdq!#;~PSxIEHpQl2 zz`;i!CR&L|)dSK?weWG3&jj$?jUmm%-qI&^PpAickm*2|ExbUHM_W|godA6ARV`zG z^8zIrmloO12-)ywBDbysjb_1GX`D4;1F!5n!4+36k4dX|Ps&VdZbSDDh2{1Osh%@O z>!r`%`8gP`()}~8y{7Y?9}aQa@~P~%w|+E@`-<}1`Iz5Nbg%)aV5c956dE;si8$Yu zP2X8{h7wmzO1!xXrI#GaYPB?0Dk}ASK(-QDq_4+!%s17!w_~UjiI<oa2I*6F@6sY2 z@KhToEn(PWbqzTV$~blA64Tpii$DExZt|uiJEtW?4l*EoWuql;If>;%E6k+5V=_eh zvOQM>24txsrRCM3;@SF30zQfywmymrW6X`^>NXBgRUD$PVT5DaEB{{lYOQF;Yd7OP zia+(Cg#m$#%O;aiGKy2S425O|@|A~gAN>i!xd|UpDj<}oc^8&Q)6p+C_qFZPU%p>% z(b%7Ka4yMw;e?Fe09hgVTHE2B!#HPu)OZRu#KtCcbzn|BJdm9ryj>TA#?gkIFrx4M zL%(!-by4%w>-<V45L4AGqJz~`9x`N@qtF_gn&K_H&qiAD4I`HB4Quk_(f70#EV3iT zZP}r4xC|slnn!?2wr<#rVUjy2*S#WP00tz=3wK(FJ6q$JoQX=g$mfNO82`3EKJ}Ai z!6#IeeC1fu>&{zjy25bfYw4x%r*mD2r}5gS<W7E!qUh%1%1b5!B8xyjqFl}WjdwqS zt>tVOr)~&0r5fe<PGY?d2WJ@hQnzLIvQ>&Z_RTUt;aDIiMoeij=fpec_pTgMlY~G3 z7f${U-(Jh3GzrvjMANQ#%7f>RSV7^|q2lol#r(3Rx?C}oKDDO(=t+CKa2!F7m3tE& zhLicAIp4$dTvOnzBrzhP8LOkN3%6Jsb#3t95ML6rtJrZL*>ZC-77aGE@uqT}kN%F! z$r+9Wa^FXT9ZN2bPfKV#EA;YA3<xw=$)ApeXh$B$EYbBz`1EbRF-X<B_#1No;0}jF zR`q2U<ve`c#lApD<?j$#k+aN_!)6HtTN=Bi<U!Ba)g|pv2;@D5j5Fs2-G551QYJax z*<z_N(;T>IaFRa5Qpnlz5)fXu7~79!JFZc^_@OAiDmnd&?Dc(1@1W(|fdgnkqX!sc zqDs;i_A>ylc%0kP3c2nfh2eEtKOB-;M>>dDA*BF^!QE-Y(|5N4EX1laI2{#%i~SX8 zz+|k-+UV>)0112JL_{Q&VK$JXxD}Jx2nhX387w^H)6A)*Vg1uz3tOwHu)!6LTsSHa zHWotQP9`;BiBJPrQmX{Kl;b4e(Z)pQz3ybV2`iFfr(_O5gSpzOk%)EBKO1lr6f^cq zs$5aUJoA<4f5VZd<d(i2qff-`J+hEb6<9h$8#6~0J`Srbo!^XAXgjuhG`~ohyn&Kc z?@AG&j+z#G-pmO3ldLmPC!(yz8LUghG!7O-+k$R5s(6FKXY9+1_4+8l;k*Z|RY%Pc zKD93!vW%cq3rDjWB}p=ibt>O#y_TA3HNSdCZTtva^P6b6xwQb{_r&5#Rh98x(yg=R zif+74&nVN#SYXI1;Hvog>kX6s*s(r)GecbW`ti(7>=kE+f8u;VT;G|$sT>~Yf!7{@ zRs(-e#+e^-gvaOe(2WS+znKvkX<;@IWDY=C&`PJ-e`PV<MD2-!gn}-}{ZwU>h{6Db zLhNaU9QQ^V+NA%97UR~rXDZR{?5gA4TWe{2X!!+c<|_3BnIvf62Wkk5RKB)Ico_XV z%aL`_RCI)-3BNzYz_x5DMq~=t&5<kO5j%X=iIEwDj`6XW1akl!hAysjRRgeiY(yq# z_4&{wj|!zwXhOB@<dMEz33~GOssM!nYKEy~jWQpN)DBOzx4ozDgu*Sl#u_U&5#<_= z;YB2;D~@$6yAP`d^~mP)jGi-?*UD%uz`hsr_7L0zFAB{!1O4aIH~qLeH-_BDZkh|2 zjty*ma=ysNY;uJ!`+#PBmdA(~NbN3`!Gc(xNy!zpVY-@gt)4lm08@vBNHxfNvKgeE z-La2UpnDw&*B4<5I@~~7EEcvAB%T>t{iD7t&i9>v^<W`cI`l{rNE0w*a<9O?xv#{N zwHe&O=+?~gH#F?lz>9AXNCRlSeg1~8!?i=d2y`<wNsj2f;+^)i5k;VA#{Q%WGcO)B zn!3X+oZM`1VTRDSMew+gAiN4j8d#4!_FcIzB_H7rBJy2f9>Wws0FRut-3(veLyMlc zC>4VaV0bbSj}s}OkBx>liQX~i-g8PO_E`$C?T@E*Xg>a=L^>ChOQKt@Jxx8{f1G}T zN9xC-!y`FhVd{ZG-l~&=93UNp)n+?gUF?yC7rJs~LkNce+8b<|!ZSBd>GpHh7!qRR zlm40BO~OUW?@lnBq7LwWS8M9d@5TuYV^Wip6lDd({KnJT@^pijkLw=rVn@;O`>2SD zIJCfmvbH0M0!2Nn*B`|?blgNwWd>hQB1A)Alq$s>PdY~`BL;Pfi%0OFbMpEoymr)D zFy6PUuFP?kru%2&Uw*6{zp;uS1W(blJS&IhdYGlF*jrZyOgPTpLWTRgaL>`4jbe!n z)@px@W1!;qqWZ+=HU=*MKDMVxYdJKm{-DC?nXtmbZ+Po5a>Lr0lInxIMnle^liIyU zcLR(74v+h<((c>hh1Y3*IN|$QBhWDA5FHTN$z0m>G4aFIQQ<0*EAHVMX>2-3mWgn1 zqYrP!{SPFDRDB_yL#^**#<d4VX3POQxP)Nd5LA<-X$NcCfH9+Pm-ExUuZQyzyCMRR zpD_s-y1o}Z_t+b-Iu6SH>=t!9`mErHKho7R%xzlx6%3LD+SX#7nwGnnGQR!#=#qJZ zfS@zqqXy$b1{p68L-qTteNo|_Tn$L7NL4RHj0<)k!|n=~w#ADqN7rI!Sp2dP6g_U_ zd%RKTZ(q1MQ<(dbz4qE)!4?W3NB(AU<gx28)EgMZP@`4iZ(_ZSC<+yuNoOzZZDQT5 zx<9r(%v3Bnp-P~yW&?|+Sj&Vsy*f#H-$xzsf7#>t|LYTFFx%;dpi6h0p#1$H{jW7x NR#Hi#TFf~3{{Z~Ec%}dV literal 0 HcmV?d00001 diff --git a/eslint/docs/src/static/icon-512.png b/eslint/docs/src/static/icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..ee761fbbf33bdb20001dcf0690b9a366db79195f GIT binary patch literal 4244 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 literal 0 HcmV?d00001 diff --git a/eslint/docs/src/static/icon.svg b/eslint/docs/src/static/icon.svg new file mode 100644 index 0000000..c1024b1 --- /dev/null +++ b/eslint/docs/src/static/icon.svg @@ -0,0 +1 @@ +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 294.825 258.982" xml:space="preserve"><style>@media (prefers-color-scheme:dark){path#outer{fill:#fff}path#inner{fill:#999}}</style><path fill="#8080F2" id="inner" d="m97.021 99.016 48.432-27.962c1.212-.7 2.706-.7 3.918 0l48.433 27.962a3.92 3.92 0 0 1 1.959 3.393v55.924a3.924 3.924 0 0 1-1.959 3.394l-48.433 27.962c-1.212.7-2.706.7-3.918 0l-48.432-27.962a3.92 3.92 0 0 1-1.959-3.394v-55.924a3.922 3.922 0 0 1 1.959-3.393"/><path fill="#4B32C3" id="outer" d="M273.336 124.488 215.469 23.816c-2.102-3.64-5.985-6.325-10.188-6.325H89.545c-4.204 0-8.088 2.685-10.19 6.325l-57.867 100.45c-2.102 3.641-2.102 8.236 0 11.877l57.867 99.847c2.102 3.64 5.986 5.501 10.19 5.501H205.28c4.203 0 8.087-1.805 10.188-5.446l57.867-100.01c2.104-3.639 2.104-7.907.001-11.547m-47.917 48.41c0 1.48-.891 2.849-2.174 3.59l-73.71 42.527a4.194 4.194 0 0 1-4.17 0l-73.767-42.527c-1.282-.741-2.179-2.109-2.179-3.59V87.843c0-1.481.884-2.849 2.167-3.59l73.707-42.527a4.185 4.185 0 0 1 4.168 0l73.772 42.527c1.283.741 2.186 2.109 2.186 3.59v85.055z"/></svg> \ No newline at end of file diff --git a/eslint/docs/src/static/manifest.webmanifest b/eslint/docs/src/static/manifest.webmanifest new file mode 100644 index 0000000..a893e5b --- /dev/null +++ b/eslint/docs/src/static/manifest.webmanifest @@ -0,0 +1,6 @@ +{ + "icons": [ + { "src": "/icon-192.png", "type": "image/png", "sizes": "192x192" }, + { "src": "/icon-512.png", "type": "image/png", "sizes": "512x512" } + ] +} diff --git a/eslint/docs/src/static/robots.njk b/eslint/docs/src/static/robots.njk new file mode 100644 index 0000000..a6bf247 --- /dev/null +++ b/eslint/docs/src/static/robots.njk @@ -0,0 +1,7 @@ +--- +layout: false +permalink: robots.txt +eleventyExcludeFromCollections: true +--- +User-agent: * +Disallow: / diff --git a/eslint/docs/src/static/serviceworker.js b/eslint/docs/src/static/serviceworker.js new file mode 100644 index 0000000..e69de29 diff --git a/eslint/docs/src/static/sitemap.njk b/eslint/docs/src/static/sitemap.njk new file mode 100644 index 0000000..e92a4e5 --- /dev/null +++ b/eslint/docs/src/static/sitemap.njk @@ -0,0 +1,14 @@ +--- +permalink: /sitemap.xml +eleventyExcludeFromCollections: true +--- +<?xml version="1.0" encoding="utf-8"?> +<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> + {% for page in collections.all %} + <url> + <loc>{{ ["https://", site.hostname, page.url | url | prettyURL] | join }}</loc> + <lastmod>{{ page.date.toISOString() }}</lastmod> + <changefreq>{{ page.data.changeFreq if page.data.changeFreq else "weekly" }}</changefreq> + </url> + {% endfor %} +</urlset> diff --git a/eslint/docs/user-guide/command-line-interface.md b/eslint/docs/src/user-guide/command-line-interface.md similarity index 79% rename from eslint/docs/user-guide/command-line-interface.md rename to eslint/docs/src/user-guide/command-line-interface.md index 6f350d4..c8ddefe 100644 --- a/eslint/docs/user-guide/command-line-interface.md +++ b/eslint/docs/src/user-guide/command-line-interface.md @@ -1,30 +1,43 @@ -# Command Line Interface +--- +title: Command Line Interface +layout: doc +eleventyNavigation: + key: command line interface + parent: user guide + title: Command Line Interface + order: 3 -To run ESLint on Node.js, you must have npm installed. If npm is not installed, follow the instructions here: <https://www.npmjs.com/> +--- -Once npm is installed, run the following +ESLint requires Node.js for installation. Follow the instructions in the [Getting Started Guide](getting-started) to install ESLint. - npm i -g eslint +Most users use [`npx`](https://docs.npmjs.com/cli/v8/commands/npx) to run ESLint on the command line like this: -This installs the ESLint CLI from the npm repository. To run ESLint, use the following format: - - eslint [options] [file|dir|glob]* +```shell +npx eslint [options] [file|dir|glob]* +``` Such as: - eslint file1.js file2.js - -or: +```shell +# Run on two files +npx eslint file1.js file2.js - eslint lib/** +# Run on multiple files +npx eslint lib/** +``` Please note that when passing a glob as a parameter, it will be expanded by your shell. The results of the expansion can vary depending on your shell, and its configuration. If you want to use node `glob` syntax, you have to quote your parameter (using double quotes if you need it to run in Windows), as follows: - eslint "lib/**" +```shell +npx eslint "lib/**" +``` + +**Note:** You can also use alternative package managers such as [Yarn](https://yarnpkg.com/) or [pnpm](https://pnpm.io/) to run ESLint. Please refer to your package manager's documentation for the correct syntax. ## Options -The command line utility has several options. You can view the options by running `eslint -h`. +The command line utility has several options. You can view the options by running `npx eslint -h`. ```text eslint [options] file.js [file.js] [dir] @@ -92,9 +105,11 @@ Options that accept array values can be specified by repeating the option or wit Example: - eslint --ext .jsx --ext .js lib/ +```shell +npx eslint --ext .jsx --ext .js lib/ - eslint --ext .jsx,.js lib/ +npx eslint --ext .jsx,.js lib/ +``` ### Basic configuration @@ -104,15 +119,19 @@ Disables use of configuration from `.eslintrc.*` and `package.json` files. Example: - eslint --no-eslintrc file.js +```shell +npx eslint --no-eslintrc file.js +``` #### `-c`, `--config` -This option allows you to specify an additional configuration file for ESLint (see [Configuring ESLint](configuring) for more). +This option allows you to specify an additional configuration file for ESLint (see [Configuring ESLint](configuring/) for more). Example: - eslint -c ~/my-eslint.json file.js +```shell +npx eslint -c ~/my-eslint.json file.js +``` This example uses the configuration file at `~/my-eslint.json`. @@ -120,12 +139,14 @@ If `.eslintrc.*` and/or `package.json` files are also used for configuration (i. #### `--env` -This option enables specific environments. Details about the global variables defined by each environment are available on the [Specifying Environments](configuring/language-options.md#specifying-environments) documentation. This option only enables environments; it does not disable environments set in other configuration files. To specify multiple environments, separate them using commas, or use the option multiple times. +This option enables specific environments. Details about the global variables defined by each environment are available on the [Specifying Environments](configuring/language-options#specifying-environments) documentation. This option only enables environments; it does not disable environments set in other configuration files. To specify multiple environments, separate them using commas, or use the option multiple times. Examples: - eslint --env browser,node file.js - eslint --env browser --env node file.js +```shell +npx eslint --env browser,node file.js +npx eslint --env browser --env node file.js +``` #### `--ext` @@ -134,18 +155,20 @@ By default, ESLint lints `*.js` files and the files that match the `overrides` e Examples: - # Use only .ts extension - eslint . --ext .ts +```shell +# Use only .ts extension +npx eslint . --ext .ts - # Use both .js and .ts - eslint . --ext .js --ext .ts +# Use both .js and .ts +npx eslint . --ext .js --ext .ts - # Also use both .js and .ts - eslint . --ext .js,.ts +# Also use both .js and .ts +npx eslint . --ext .js,.ts +``` **Note:** `--ext` is only used when the arguments are directories. If you use glob patterns or file names, then `--ext` is ignored. -For example, `eslint lib/* --ext .js` will match all files within the `lib/` directory, regardless of extension. +For example, `npx eslint lib/* --ext .js` will match all files within the `lib/` directory, regardless of extension. #### `--global` @@ -153,8 +176,10 @@ This option defines global variables so that they will not be flagged as undefin Examples: - eslint --global require,exports:true file.js - eslint --global require --global exports:true +```shell +npx eslint --global require,exports:true file.js +npx eslint --global require --global exports:true +``` #### `--parser` @@ -166,8 +191,10 @@ This option allows you to specify parser options to be used by ESLint. Note that Examples: - echo '3 ** 4' | eslint --stdin --parser-options=ecmaVersion:6 # will fail with a parsing error - echo '3 ** 4' | eslint --stdin --parser-options=ecmaVersion:7 # succeeds, yay! +```shell +echo '3 ** 4' | npx eslint --stdin --parser-options=ecmaVersion:6 # will fail with a parsing error +echo '3 ** 4' | npx eslint --stdin --parser-options=ecmaVersion:7 # succeeds, yay! +``` #### `--resolve-plugins-relative-to` @@ -186,8 +213,10 @@ Before using the plugin, you have to install it using npm. Examples: - eslint --plugin jquery file.js - eslint --plugin eslint-plugin-mocha file.js +```shell +npx eslint --plugin jquery file.js +npx eslint --plugin eslint-plugin-mocha file.js +``` #### `--rule` @@ -197,9 +226,11 @@ If the rule is defined within a plugin, you have to prefix the rule ID with the Examples: - eslint --rule 'quotes: [error, double]' - eslint --rule 'guard-for-in: error' --rule 'brace-style: [error, 1tbs]' - eslint --rule 'jquery/dollar-sign: error' +```shell +npx eslint --rule 'quotes: [error, double]' +npx eslint --rule 'guard-for-in: error' --rule 'brace-style: [error, 1tbs]' +npx eslint --rule 'jquery/dollar-sign: error' +``` #### `--rulesdir` @@ -209,11 +240,15 @@ This option allows you to specify another directory from which to load rules fil Example: - eslint --rulesdir my-rules/ file.js +```shell +npx eslint --rulesdir my-rules/ file.js +``` The rules in your custom rules directory must follow the same format as bundled rules to work properly. You can also specify multiple locations for custom rules by including multiple `--rulesdir` options: - eslint --rulesdir my-rules/ --rulesdir my-other-rules/ file.js +```shell +npx eslint --rulesdir my-rules/ --rulesdir my-other-rules/ file.js +``` Note that, as with core rules and plugin rules, you still need to enable the rules in configuration or via the `--rule` CLI option in order to actually run those rules during linting. Specifying a rules directory with `--rulesdir` does not automatically enable the rules within that directory. @@ -234,8 +269,8 @@ This option has the same effect as `--fix` with one difference: the fixes are no Because the default formatter does not output the fixed code, you'll have to use another one (e.g. `json`) to get the fixes. Here's an example of this pattern: -```sh -getSomeText | eslint --stdin --fix-dry-run --format=json +```shell +getSomeText | npx eslint --stdin --fix-dry-run --format=json ``` This flag can be useful for integrations (e.g. editor plugins) which need to autofix text from the command line without saving it to the filesystem. @@ -251,10 +286,10 @@ This option allows you to specify the type of fixes to apply when using either ` You can specify one or more fix type on the command line. Here are some examples: -```sh -eslint --fix --fix-type suggestion . -eslint --fix --fix-type suggestion --fix-type problem . -eslint --fix --fix-type suggestion,layout . +```shell +npx eslint --fix --fix-type suggestion . +npx eslint --fix --fix-type suggestion --fix-type problem . +npx eslint --fix --fix-type suggestion,layout . ``` This option is helpful if you are using another program to format your code but you would still like ESLint to apply other types of fixes. @@ -267,8 +302,10 @@ This option allows you to specify the file to use as your `.eslintignore`. By de Example: - eslint --ignore-path tmp/.eslintignore file.js - eslint --ignore-path .gitignore file.js +```shell +npx eslint --ignore-path tmp/.eslintignore file.js +npx eslint --ignore-path .gitignore file.js +``` #### `--no-ignore` @@ -276,15 +313,19 @@ Disables excluding of files from `.eslintignore`, `--ignore-path`, `--ignore-pat Example: - eslint --no-ignore file.js +```shell +npx eslint --no-ignore file.js +``` #### `--ignore-pattern` -This option allows you to specify patterns of files to ignore (in addition to those in `.eslintignore`). You can repeat the option to provide multiple patterns. The supported syntax is the same as for `.eslintignore` [files](configuring/ignoring-code.md#the-eslintignore-file), which use the same patterns as the `.gitignore` [specification](https://git-scm.com/docs/gitignore). You should quote your patterns in order to avoid shell interpretation of glob patterns. +This option allows you to specify patterns of files to ignore (in addition to those in `.eslintignore`). You can repeat the option to provide multiple patterns. The supported syntax is the same as for `.eslintignore` [files](configuring/ignoring-code#the-eslintignore-file), which use the same patterns as the `.gitignore` [specification](https://git-scm.com/docs/gitignore). You should quote your patterns in order to avoid shell interpretation of glob patterns. Example: - eslint --ignore-pattern '/lib/' --ignore-pattern '/src/vendor/*' . +```shell +npx eslint --ignore-pattern '/lib/' --ignore-pattern '/src/vendor/*' . +``` ### Using stdin @@ -294,7 +335,9 @@ This option tells ESLint to read and lint source code from STDIN instead of from Example: - cat myfile.js | eslint --stdin +```shell +cat myfile.js | npx eslint --stdin +``` #### `--stdin-filename` @@ -302,7 +345,9 @@ This option allows you to specify a filename to process STDIN as. This is useful Example - cat myfile.js | eslint --stdin --stdin-filename=myfile.js +```shell +cat myfile.js | npx eslint --stdin --stdin-filename=myfile.js +``` ### Handling warnings @@ -312,7 +357,9 @@ This option allows you to disable reporting on warnings. If you enable this opti Example: - eslint --quiet file.js +```shell +npx eslint --quiet file.js +``` #### `--max-warnings` @@ -322,7 +369,9 @@ Normally, if ESLint runs and finds no errors (only warnings), it will exit with Example: - eslint --max-warnings 10 file.js +```shell +npx eslint --max-warnings 10 file.js +``` ### Output @@ -332,7 +381,9 @@ Enable report to be written to a file. Example: - eslint -o ./test/test.html +```shell +npx eslint -o ./test/test.html +``` When specified, the given format is output into the provided file name. @@ -340,41 +391,49 @@ When specified, the given format is output into the provided file name. This option specifies the output format for the console. Possible formats are: -* [checkstyle](formatters.md/#checkstyle) -* [compact](formatters.md/#compact) -* [html](formatters.md/#html) -* [jslint-xml](formatters.md/#jslint-xml) -* [json](formatters.md/#json) -* [junit](formatters.md/#junit) -* [stylish](formatters.md/#stylish) (the default) -* [tap](formatters.md/#tap) -* [unix](formatters.md/#unix) -* [visualstudio](formatters.md/#visualstudio) +* [checkstyle](formatters/#checkstyle) +* [compact](formatters/#compact) +* [html](formatters/#html) +* [jslint-xml](formatters/#jslint-xml) +* [json](formatters/#json) +* [junit](formatters/#junit) +* [stylish](formatters/#stylish) (the default) +* [tap](formatters/#tap) +* [unix](formatters/#unix) +* [visualstudio](formatters/#visualstudio) Example: - eslint -f compact file.js +```shell +npx eslint -f compact file.js +``` You can also use a custom formatter from the command line by specifying a path to the custom formatter file. Example: - eslint -f ./customformat.js file.js +```shell +npx eslint -f ./customformat.js file.js +``` An npm-installed formatter is resolved with or without `eslint-formatter-` prefix. Example: - npm install eslint-formatter-pretty +```shell +npm install eslint-formatter-pretty - eslint -f pretty file.js +npx eslint -f pretty file.js - // equivalent: - eslint -f eslint-formatter-pretty file.js +// equivalent: +npx eslint -f eslint-formatter-pretty file.js +``` When specified, the given format is output to the console. If you'd like to save that output into a file, you can do so on the command line like so: - eslint -f compact file.js > results.txt +```shell +npx eslint -f compact file.js > results.txt +``` This saves the output into the `results.txt` file. @@ -384,8 +443,10 @@ This option forces the enabling/disabling of colorized output. You can use this Examples: - eslint --color file.js | cat - eslint --no-color file.js +```shell +npx eslint --color file.js | cat +npx eslint --no-color file.js +``` ### Inline configuration comments @@ -405,7 +466,9 @@ config without files modifying it. All inline config comments are ignored, e.g.: Example: - eslint --no-inline-config file.js +```shell +npx eslint --no-inline-config file.js +``` #### `--report-unused-disable-directives` @@ -415,7 +478,9 @@ This option causes ESLint to report directive comments like `// eslint-disable-l Example: - eslint --report-unused-disable-directives file.js +```shell +npx eslint --report-unused-disable-directives file.js +``` ### Caching @@ -441,7 +506,9 @@ If a directory is specified, a cache file will be created inside the specified f Example: - eslint "src/**/*.js" --cache --cache-location "/Users/user/.eslintcache/" +```shell +npx eslint "src/**/*.js" --cache --cache-location "/Users/user/.eslintcache/" +``` #### `--cache-strategy` @@ -451,13 +518,15 @@ The `content` strategy can be useful in cases where the modification time of you Example: - eslint "src/**/*.js" --cache --cache-strategy content +```shell +npx eslint "src/**/*.js" --cache --cache-strategy content +``` ### Miscellaneous #### `--init` -This option will start config initialization wizard. It's designed to help new users quickly create .eslintrc file by answering a few questions, choosing a popular style guide, or inspecting your source files and attempting to automatically generate a suitable configuration. +This option will run `npm init @eslint/config` to start config initialization wizard. It's designed to help new users quickly create .eslintrc file by answering a few questions, choosing a popular style guide. The resulting configuration file will be created in the current directory. @@ -476,7 +545,7 @@ This option causes ESLint to exit with exit code 2 if one or more fatal parsing #### `--debug` This option outputs debugging information to the console. This information is useful when you're seeing a problem and having a hard time pinpointing it. The ESLint team may ask for this debugging information to help solve bugs. -Add this flag to an ESLint command line invocation in order to get extra debug information as the command is run (e.g. `eslint --debug test.js` and `eslint test.js --debug` are equivalent) +Add this flag to an ESLint command line invocation in order to get extra debug information as the command is run (e.g. `npx eslint --debug test.js` and `npx eslint test.js --debug` are equivalent) #### `-h`, `--help` @@ -492,16 +561,20 @@ This option outputs the configuration to be used for the file passed. When prese Example: - eslint --print-config file.js +```shell +npx eslint --print-config file.js +``` ## Ignoring files from linting ESLint supports `.eslintignore` files to exclude files from the linting process when ESLint operates on a directory. Files given as individual CLI arguments will be exempt from exclusion. The `.eslintignore` file is a plain text file containing one pattern per line. It can be located in any of the target directory's ancestors; it will affect files in its containing directory as well as all sub-directories. Here's a simple example of a `.eslintignore` file: - temp.js - **/vendor/*.js +```text +temp.js +**/vendor/*.js +``` -A more detailed breakdown of supported patterns and directories ESLint ignores by default can be found in [Ignoring Code](configuring/ignoring-code.md). +A more detailed breakdown of supported patterns and directories ESLint ignores by default can be found in [Ignoring Code](configuring/ignoring-code). ## Exit codes diff --git a/eslint/docs/src/user-guide/configuring/configuration-files-new.md b/eslint/docs/src/user-guide/configuring/configuration-files-new.md new file mode 100644 index 0000000..87844f5 --- /dev/null +++ b/eslint/docs/src/user-guide/configuring/configuration-files-new.md @@ -0,0 +1,565 @@ +--- +title: Configuration Files (New) +layout: doc +eleventyNavigation: + key: configuration files + parent: configuring + title: Configuration Files (New) + order: 1 + +--- + +::: warning +This is an experimental feature. To opt-in, place a `eslint.config.js` file in the root of your project. If you are using the API, you can use the configuration system described on this page by using the `FlatESLint` class, the `FlatRuleTester` class, or by setting `configType: "flat"` in the `Linter` class. +::: + +## Configuration File + +The ESLint configuration file is named `eslint.config.js` and should be placed in the root directory of your project and export an array of configuration objects. Here's an example: + +```js +export default [ + { + rules: { + semi: "error", + "prefer-const": "error" + } + } +] +``` + +Here, the configuration array contains just one configuration object. The configuration object enables two rules: `semi` and `prefer-const`. These rules will be applied to all of the files ESLint processes using this config file. + +## Configuration Objects + +Each configuration object contains all of the information ESLint needs to execute on a set of files. Each configuration object is made up of these properties: + +* `files` - An array of glob patterns indicating the files that the configuration object should apply to. If not specified, the configuration object applies to all files. +* `ignores` - An array of glob patterns indicating the files that the configuration object should not apply to. If not specified, the configuration object applies to all files matched by `files`. +* `languageOptions` - An object containing settings related to how JavaScript is configured for linting. + * `ecmaVersion` - The version of ECMAScript to support. May be any year (i.e., `2022`) or version (i.e., `5`). Set to `"latest"` for the most recent supported version. (default: `"latest"`) + * `sourceType` - The type of JavaScript source code. Possible values are `"script"` for traditional script files, `"module"` for ECMAScript modules (ESM), and `"commonjs"` for CommonJS files. (default: `"module"` for `.js` and `.mjs` files; `"commonjs"` for `.cjs` files) + * `globals` - An object specifying additional objects that should be added to the global scope during linting. + * `parser` - Either an object containing a `parse()` method or a string indicating the name of a parser inside of a plugin (i.e., `"pluginName/parserName"`). (default: `"@/espree"`) + * `parserOptions` - An object specifying additional options that are passed directly to the `parser()` method on the parser. The available options are parser-dependent. +* `linterOptions` - An object containing settings related to the linting process. + * `noInlineConfig` - A Boolean value indicating if inline configuration is allowed. + * `reportUnusedDisableDirectives` - A Boolean value indicating if unused disable directives should be tracked and reported. +* `processor` - Either an object containing `preprocess()` and `postprocess()` methods or a string indicating the name of a processor inside of a plugin (i.e., `"pluginName/processorName"`). +* `plugins` - An object containing a name-value mapping of plugin names to plugin objects. When `files` is specified, these plugins are only available to the matching files. +* `rules` - An object containing the configured rules. When `files` or `ignores` are specified, these rule configurations are only available to the matching files. +* `settings` - An object containing name-value pairs of information that should be available to all rules. + +### Specifying `files` and `ignores` + +::: tip +Patterns specified in `files` and `ignores` use [`minimatch`](https://www.npmjs.com/package/minimatch) syntax and are evaluated relative to the location of the `eslint.config.js` file. +::: + +You can use a combination of `files` and `ignores` to determine which files should apply the configuration object and which should not. By default, ESLint matches `**/*.js`, `**/*.cjs`, and `**/*.mjs`. Because config objects that don't specify `files` or `ignores` apply to all files that have been matched by any other configuration object, by default config objects will apply to any JavaScript files passed to ESLint. For example: + +```js +export default [ + { + rules: { + semi: "error" + } + } +]; +``` + +With this configuration, the `semi` rule is enabled for all files that match the default files in ESLint. So if you pass `example.js` to ESLint, the `semi` rule will be applied. If you pass a non-JavaScript file, like `example.txt`, the `semi` rule will not be applied because there are no other configuration objects that match that filename. (ESLint will output an error message letting you know that the file was ignored due to missing configuration.) + +#### Excluding files with `ignores` + +You can limit which files a configuration object applies to by specifying a combination of `files` and `ignores` patterns. For example, you may want certain rules to apply only to files in your `src` directory, like this: + +```js +export default [ + { + files: ["src/**/*.js"], + rules: { + semi: "error" + } + } +]; +``` + +Here, only the JavaScript files in the `src` directory will have the `semi` rule applied. If you run ESLint on files in another directory, this configuration object will be skipped. By adding `ignores`, you can also remove some of the files in `src` from this configuration object: + +```js +export default [ + { + files: ["src/**/*.js"], + ignores: ["**/*.config.js"], + rules: { + semi: "error" + } + } +]; +``` + +This configuration object matches all JavaScript files in the `src` directory except those that end with `.config.js`. You can also use negation patterns in `ignores` to exclude files from the ignore patterns, such as: + +```js +export default [ + { + files: ["src/**/*.js"], + ignores: ["**/*.config.js", "!**/eslint.config.js"], + rules: { + semi: "error" + } + } +]; +``` + +Here, the configuration object excludes files ending with `.config.js` except for `eslint.config.js`. That file will still have `semi` applied. + +If `ignores` is used without `files` and any other setting, then the configuration object applies to all files except the ones specified in `ignores`, for example: + +```js +export default [ + { + ignores: ["**/*.config.js"], + rules: { + semi: "error" + } + } +]; +``` + +This configuration object applies to all files except those ending with `.config.js`. Effectively, this is like having `files` set to `**/*`. In general, it's a good idea to always include `files` if you are specifying `ignores`. + +#### Globally ignoring files with `ignores` + +If `ignores` is used without any other keys in the configuration object, then the patterns act as additional global ignores, similar to those found in `.eslintignore`. Here's an example: + +```js +export default [ + { + ignores: [".config/*"] + } +]; +``` + +This configuration specifies that all of the files in the `.config` directory should be ignored. This pattern is added after the patterns found in `.eslintignore`. + +#### Cascading configuration objects + +When more than one configuration object matches a given filename, the configuration objects are merged with later objects overriding previous objects when there is a conflict. For example: + +```js +export default [ + { + files: ["**/*.js"], + languageOptions: { + globals: { + MY_CUSTOM_GLOBAL: "readonly" + } + } + }, + { + files: ["tests/**/*.js"], + languageOptions: { + globals: { + it: "readonly", + describe: "readonly" + } + } + } +]; +``` + +Using this configuration, all JavaScript files define a custom global object defined called `MY_CUSTOM_GLOBAL` while those JavaScript files in the `tests` directory have `it` and `describe` defined as global objects in addition to `MY_CUSTOM_GLOBAL`. For any JavaScript file in the tests directory, both configuration objects are applied, so `languageOptions.globals` are merged to create a final result. + +### Configuring linter options + +Options specific to the linting process can be configured using the `linterOptions` object. These effect how linting proceeds and does not affect how the source code of the file is interpreted. + +#### Disabling inline configuration + +Inline configuration is implemented using an `/*eslint*/` comment, such as `/*eslint semi: error*/`. You can disallow inline configuration by setting `noInlineConfig` to `true`. When enabled, all inline configuration is ignored. Here's an example: + +```js +export default [ + { + files: ["**/*.js"], + linterOptions: { + noInlineConfig: true + } + } +]; +``` + +#### Reporting unused disable directives + +Disable directives such as `/*eslint-disable*/` and `/*eslint-disable-next-line*/` are used to disable ESLint rules around certain portions of code. As code changes, it's possible for these directives to no longer be needed because the code has changed in such a way that the rule will no longer be triggered. You can enable reporting of these unused disable directives by setting the `reportUnusedDisableDirectives` option to `true`, as in this example: + +```js +export default [ + { + files: ["**/*.js"], + linterOptions: { + reportUnusedDisableDirectives: true + } + } +]; +``` + +By default, unused disable directives are reported as warnings. You can change this setting using the `--report-unused-disable-directives` command line option. + +### Configuring language options + +Options specific to how ESLint evaluates your JavaScript code can be configured using the `languageOptions` object. + +#### Configuring the JavaScript version + +To configure the version of JavaScript (ECMAScript) that ESLint uses to evaluate your JavaScript, use the `ecmaVersion` property. This property determines which global variables and syntax are valid in your code and can be set to the version number (such as `6`), the year number (such as `2022`), or `"latest"` (for the most recent version that ESLint supports). By default, `ecmaVersion` is set to `"latest"` and it's recommended to keep this default unless you need to ensure that your JavaScript code is evaluated as an older version. For example, some older runtimes might only allow ECMAScript 5, in which case you can configure ESLint like this: + +```js +export default [ + { + files: ["**/*.js"], + languageOptions: { + ecmaVersion: 5 + } + } +]; +``` + +#### Configuring the JavaScript source type + +ESLint can evaluate your code in one of three ways: + +1. ECMAScript module (ESM) - Your code has a module scope and is run in strict mode. +1. CommonJS - Your code has a top-level function scope and runs in nonstrict mode. +1. Script - Your code has a shared global scope and runs in nonstrict mode. + +You can specify which of these modes your code is intended to run in by specifying the `sourceType` property. This property can be set to `"module"`, `"commonjs"`, or `"script"`. By default, `sourceType` is set to `"module"` for `.js` and `.mjs` files and is set to `"commonjs"` for `.cjs` files. Here's an example: + +```js +export default [ + { + files: ["**/*.js"], + languageOptions: { + sourceType: "script" + } + } +]; +``` + +#### Configuring a custom parser and its options + +In many cases, you can use the default parser that ESLint ships with for parsing your JavaScript code. You can optionally override the default parser by using the `parser` property. The `parser` property can be either a string in the format `"pluginName/parserName"` (indicating to retrieve the parser from a plugin) or an object containing either a `parse()` method or a `parseForESLint()` method. For example, you can use the [`@babel/eslint-parser`](https://www.npmjs.com/package/@babel/eslint-parser) package to allow ESLint to parse experimental syntax: + +```js +import babelParser from "@babel/eslint-parser"; + +export default [ + { + files: ["**/*.js", "**/*.mjs"], + languageOptions: { + parser: babelParser + } + } +]; +``` + +This configuration ensures that the Babel parser, rather than the default, will be used to parse all files ending with `.js` and `.mjs`. + +You can also pass options directly to the custom parser by using the `parserOptions` property. This property is an object whose name-value pairs are specific to the parser that you are using. For the Babel parser, you might pass in options like this: + +```js +import babelParser from "@babel/eslint-parser"; + +export default [ + { + files: ["**/*.js", "**/*.mjs"], + languageOptions: { + parser: babelParser, + parserOptions: { + requireConfigFile: false, + babelOptions: { + babelrc: false, + configFile: false, + // your babel options + presets: ["@babel/preset-env"], + } + } + } + } +]; +``` + +#### Configuring global variables + +To configure global variables inside of a configuration object, set the `globals` configuration property to an object containing keys named for each of the global variables you want to use. For each global variable key, set the corresponding value equal to `"writable"` to allow the variable to be overwritten or `"readonly"` to disallow overwriting. For example: + +```js +export default [ + { + files: ["**/*.js"], + languageOptions: { + globals: { + var1: "writable", + var2: "readonly" + } + } + } +]; +``` + +These examples allow `var1` to be overwritten in your code, but disallow it for `var2`. + +Globals can be disabled with the string `"off"`. For example, in an environment where most ES2015 globals are available but `Promise` is unavailable, you might use this config: + +```js +export default [ + { + languageOptions: { + globals: { + Promise: "off" + } + } + } +]; +``` + +For historical reasons, the boolean value `false` and the string value `"readable"` are equivalent to `"readonly"`. Similarly, the boolean value `true` and the string value `"writeable"` are equivalent to `"writable"`. However, the use of older values is deprecated. + +### Using plugins in your configuration + +Plugins are used to share rules, processors, configurations, parsers, and more across ESLint projects. Plugins are specified in a configuration object using the `plugins` key, which is an object where the name of the plugin is the property name and the value is the plugin object itself. Here's an example: + +```js +import jsdoc from "eslint-plugin-jsdoc"; + +export default [ + { + files: ["**/*.js"], + plugins: { + jsdoc: jsdoc + } + rules: { + "jsdoc/require-description": "error", + "jsdoc/check-values": "error" + } + } +]; +``` + +In this configuration, the JSDoc plugin is defined to have the name `jsdoc`. The prefix `jsdoc/` in each rule name indicates that the rule is coming from the plugin with that name rather than from ESLint itself. + +Because the name of the plugin and the plugin object are both `jsdoc`, you can also shorten the configuration to this: + +```js +import jsdoc from "eslint-plugin-jsdoc"; + +export default [ + { + files: ["**/*.js"], + plugins: { + jsdoc + } + rules: { + "jsdoc/require-description": "error", + "jsdoc/check-values": "error" + } + } +]; +``` + +While this is the most common convention, you don't need to use the same name that the plugin prescribes. You can specify any prefix that you'd like, such as: + +```js +import jsdoc from "eslint-plugin-jsdoc"; + +export default [ + { + files: ["**/*.js"], + plugins: { + jsd: jsdoc + } + rules: { + "jsd/require-description": "error", + "jsd/check-values": "error" + } + } +]; +``` + +This configuration object uses `jsd` as the prefix plugin instead of `jsdoc`. + +### Using processors + +Processors allow ESLint to transform text into pieces of code that ESLint can lint. You can specify the processor to use for a given file type by defining a `processor` property that contains either the processor name in the format `"pluginName/processorName"` to reference a processor in a plugin or an object containing both a `preprocess()` and a `postprocess()` method. For example, to extract JavaScript code blocks from a Markdown file, you might add this to your configuration: + +```js +import markdown from "eslint-plugin-markdown"; + +export default [ + { + files: ["**/*.md"], + plugins: { + markdown + }, + processor: "markdown/markdown" + settings: { + sharedData: "Hello" + } + } +]; +``` + +This configuration object specifies that there is a processor called `"markdown"` contained in the plugin named `"markdown"` and will apply the processor to all files ending with `.md`. + +Processors may make named code blocks that function as filenames in configuration objects, such as `0.js` and `1.js`. ESLint handles such a named code block as a child of the original file. You can specify additional configuration objects for named code blocks. For example, the following disables the `strict` rule for the named code blocks which end with `.js` in markdown files. + +```js +import markdown from "eslint-plugin-markdown"; + +export default [ + { + files: ["**/*.md"], + plugins: { + markdown + }, + processor: "markdown/markdown" + settings: { + sharedData: "Hello" + } + }, + + // applies only to code blocks + { + files: ["**/*.md/*.js"], + rules: { + strict: "off" + } + } +]; +``` + +### Configuring rules + +You can configure any number of rules in a configuration object by add a `rules` property containing an object with your rule configurations. The names in this object are the names of the rules and the values are the configurations for each of those rules. Here's an example: + +```js +export default [ + { + rules: { + semi: "error" + } + } +]; +``` + +This configuration object specifies that the [`semi`](/docs/latest/rules/semi) rule should be enabled with a severity of `"error"`. You can also provide options to a rule by specifying an array where the first item is the severity and each item after that is an option for the rule. For example, you can switch the `semi` rule to disallow semicolons by passing `"never"` as an option: + +```js +export default [ + { + rules: { + semi: ["error", "never"] + } + } +]; +``` + +Each rule specifies its own options and can be any valid JSON data type. Please check the documentation for the rule you want to configure for more information about its available options. + +#### Rule severities + +There are three possible severities you can specify for a rule + +* `"error"` (or `2`) - the reported problem should be treated as an error. When using the ESLint CLI, errors cause the CLI to exit with a nonzero code. +* `"warn"` (or `1`) - the reported problem should be treated as a warning. When using the ESLint CLI, warnings are reported but do not change the exit code. If only errors are reported, the exit code will be 0. +* `"off"` (or `0`) - the rule should be turned off completely. + +#### Rule configuration cascade + +When more than one configuration object specifies the same rule, the rule configuration is merged with the later object taking precedence over any previous objects. For example: + +```js +export default [ + { + rules: { + semi: ["error", "never"] + } + }, + { + rules: { + semi: ["warn", "always"] + } + } +]; +``` + +Using this configuration, the final rule configuration for `semi` is `["warn", "always"]` because it appears last in the array. The array indicates that the configuration is for the severity and any options. You can change just the severity by defining only a string or number, as in this example: + +```js +export default [ + { + rules: { + semi: ["error", "never"] + } + }, + { + rules: { + semi: "warn" + } + } +]; +``` + +Here, the second configuration object only overrides the severity, so the final configuration for `semi` is `["warn", "never"]`. + +### Configuring shared settings + +ESLint supports adding shared settings into configuration files. Plugins use `settings` to specify information that should be shared across all of its rules. You can add a `settings` object to a configuration object and it will be supplied to every rule being executed. This may be useful if you are adding custom rules and want them to have access to the same information. Here's an example: + +```js +export default [ + { + settings: { + sharedData: "Hello" + } + } +]; +``` + +### Using predefined configurations + +ESLint has two predefined configurations: + +* `eslint:recommended` - enables the rules that ESLint recommends everyone use to avoid potential errors +* `eslint:all` - enables all of the rules shipped with ESLint + +To include these predefined configurations, you can insert the string values into the returned array and then make any modifications to other properties in subsequent configuration objects: + +```js +export default [ + "eslint:recommended", + { + rules: { + semi: ["warn", "always"] + } + } +]; +``` + +Here, the `eslint:recommended` predefined configuration is applied first and then another configuration object adds the desired configuration for `semi`. + +## Configuration File Resolution + +When ESLint is run on the command line, it first checks the current working directory for `eslint.config.js`, and if not found, will look to the next parent directory for the file. This search continues until either the file is found or the root directory is reached. + +You can prevent this search for `eslint.config.js` by using the `-c` or `--config--file` option on the command line to specify an alternate configuration file, such as: + +```shell +npx eslint -c some-other-file.js **/*.js +``` + +In this case, ESLint will not search for `eslint.config.js` and will instead use `some-other-file.js`. + +Each configuration file exports one or more configuration object. A configuration object diff --git a/eslint/docs/user-guide/configuring/configuration-files.md b/eslint/docs/src/user-guide/configuring/configuration-files.md similarity index 92% rename from eslint/docs/user-guide/configuring/configuration-files.md rename to eslint/docs/src/user-guide/configuring/configuration-files.md index b1fded2..75b6d40 100644 --- a/eslint/docs/user-guide/configuring/configuration-files.md +++ b/eslint/docs/src/user-guide/configuring/configuration-files.md @@ -1,12 +1,13 @@ -# Configuration Files +--- +title: Configuration Files +layout: doc +eleventyNavigation: + key: configuration files + parent: configuring + title: Configuration Files + order: 1 -* [Configuration File Formats](#configuration-file-formats) -* [Using Configuration Files](#using-configuration-files) -* [Adding Shared Settings](#adding-shared-settings) -* [Cascading and Hierarchy](#cascading-and-hierarchy) -* [Extending Configuration Files](#extending-configuration-files) -* [Configuration Based on Glob Patterns](#configuration-based-on-glob-patterns) -* [Personal Configuration Files](#personal-configuration-files-deprecated) +--- ## Configuration File Formats @@ -31,11 +32,13 @@ If there are multiple configuration files in the same directory, ESLint will onl There are two ways to use configuration files. -The first way to use configuration files is via `.eslintrc.*` and `package.json` files. ESLint will automatically look for them in the directory of the file to be linted, and in successive parent directories all the way up to the root directory of the filesystem (unless `root: true` is specified). Configuration files can be useful when you want different configurations for different parts of a project or when you want others to be able to use ESLint directly without needing to remember to pass in the configuration file. +The first way to use configuration files is via `.eslintrc.*` and `package.json` files. ESLint will automatically look for them in the directory of the file to be linted, and in successive parent directories all the way up to the root directory of the filesystem (`/`), the home directory of the current user (`~/`), or when `root: true` is specified. See [Cascading and Hierarchy](#cascading-and-hierarchy) below for more details on this. Configuration files can be useful when you want different configurations for different parts of a project or when you want others to be able to use ESLint directly without needing to remember to pass in the configuration file. The second way to use configuration files is to save the file wherever you would like and pass its location to the CLI using the `--config` option, such as: - eslint -c myconfig.json myfiletotest.js +```shell +eslint -c myconfig.json myfiletotest.js +``` If you are using one configuration file and want ESLint to ignore any `.eslintrc.*` files, make sure to use [`--no-eslintrc`](https://eslint.org/docs/user-guide/command-line-interface#--no-eslintrc) along with the [`-c`](https://eslint.org/docs/user-guide/command-line-interface#-c---config) flag. @@ -146,7 +149,7 @@ your-project └── test.js ``` -If there is an `.eslintrc` and a `package.json` file found in the same directory, `.eslintrc` will take priority and `package.json` file will not be used. +If there is a `.eslintrc` and a `package.json` file found in the same directory, `.eslintrc` will take priority and `package.json` file will not be used. By default, ESLint will look for configuration files in all parent folders up to the root directory. This can be useful if you want all of your projects to follow a certain convention, but can sometimes lead to unexpected results. To limit ESLint to a specific project, place `"root": true` inside the `.eslintrc.*` file or `eslintConfig` field of the `package.json` file or in the `.eslintrc.*` file at your project's root level. ESLint will stop looking in parent folders once it finds a configuration with `"root": true`. @@ -191,6 +194,8 @@ The complete configuration hierarchy, from highest to lowest precedence, is as f 1. `.eslintrc.*` or `package.json` file in the same directory as the linted file 1. Continue searching for `.eslintrc.*` and `package.json` files in ancestor directories up to and including the root directory or until a config with `"root": true` is found. +Please note that the [home directory of the current user on your preferred operating system](https://nodejs.org/api/os.html#os_os_homedir) (`~/`) is also considered a root directory in this context and searching for configuration files will stop there as well. And with the [removal of support for Personal Configuration Files](https://eslint.org/docs/user-guide/configuring/configuration-files#personal-configuration-files-deprecated) from the 8.0.0 release forward, configuration files present in that directory will be ignored. + ## Extending Configuration Files A configuration file, once extended, can inherit all the traits of another configuration file (including rules, plugins, and language options) and modify all the options. As a result, there are three configurations, as defined below: @@ -230,7 +235,7 @@ A [sharable configuration](https://eslint.org/docs/developer-guide/shareable-con The `extends` property value can omit the `eslint-config-` prefix of the package name. -The `eslint --init` command can create a configuration so you can extend a popular style guide (for example, `eslint-config-standard`). +The `npm init @eslint/config` command can create a configuration so you can extend a popular style guide (for example, `eslint-config-standard`). Example of a configuration file in YAML format: @@ -275,7 +280,7 @@ module.exports = { A [plugin](https://eslint.org/docs/developer-guide/working-with-plugins) is an npm package that can add various extensions to ESLint. A plugin can perform numerous functions, including but not limited to adding new rules and exporting [shareable configurations](https://eslint.org/docs/developer-guide/working-with-plugins#configs-in-plugins). Make sure the package has been installed in a directory where ESLint can require it. -The `plugins` [property value](./plugins.md#configuring-plugins) can omit the `eslint-plugin-` prefix of the package name. +The `plugins` [property value](./plugins#configuring-plugins) can omit the `eslint-plugin-` prefix of the package name. The `extends` property value can consist of: @@ -356,6 +361,8 @@ module.exports = { <b>v4.1.0+.</b> Sometimes a more fine-controlled configuration is necessary, for example, if the configuration for files within the same directory has to be different. Therefore you can provide configurations under the `overrides` key that will only apply to files that match specific glob patterns, using the same format you would pass on the command line (e.g., `app/**/*.test.js`). +Glob patterns in overrides use [minimatch syntax](https://github.com/isaacs/minimatch). + ### How do overrides work? It is possible to override settings based on file glob patterns in your configuration by using the `overrides` key. An example of using the `overrides` key is as follows: @@ -392,7 +399,7 @@ Here is how overrides work in a configuration file: ### Relative glob patterns -```pt +```txt project-root ├── app │ ├── lib diff --git a/eslint/docs/user-guide/configuring/ignoring-code.md b/eslint/docs/src/user-guide/configuring/ignoring-code.md similarity index 87% rename from eslint/docs/user-guide/configuring/ignoring-code.md rename to eslint/docs/src/user-guide/configuring/ignoring-code.md index 35c2d25..c41422c 100644 --- a/eslint/docs/user-guide/configuring/ignoring-code.md +++ b/eslint/docs/src/user-guide/configuring/ignoring-code.md @@ -1,14 +1,17 @@ -# Ignoring Code +--- +title: Ignoring Code +layout: doc +eleventyNavigation: + key: ignoring code + parent: configuring + title: Ignoring Code + order: 5 -* [`ignorePatterns` in Config Files](#ignorepatterns-in-config-files) -* [The `.eslintignore` File](#the-eslintignore-file) -* [Using an Alternate File](#using-an-alternate-file) -* [Using eslintIgnore in package.json](#using-eslintignore-in-packagejson) -* [Ignored File Warnings](#ignored-file-warnings) +--- ## `ignorePatterns` in Config Files -You can tell ESLint to ignore specific files and directories using `ignorePatterns` in your config files. `ignorePatterns` patterns follow the same rules as `.eslintignore`. Please see the [the `.eslintignore` file documentation](./ignoring-code.md#the-eslintignore-file) to learn more. +You can tell ESLint to ignore specific files and directories using `ignorePatterns` in your config files. `ignorePatterns` patterns follow the same rules as `.eslintignore`. Please see the [the `.eslintignore` file documentation](./ignoring-code#the-eslintignore-file) to learn more. ```json { @@ -40,7 +43,7 @@ When ESLint is run, it looks in the current working directory to find an `.eslin Globs are matched using [node-ignore](https://github.com/kaelzhang/node-ignore), so a number of features are available: * Lines beginning with `#` are treated as comments and do not affect the ignore patterns. -* Paths are relative to the current working directory. This is also true of paths passed in via the `--ignore-pattern` [command](https://eslint.org/docs/user-guide/command-line-interface#--ignore-pattern). +* Paths are relative to the current working directory. This is also true of paths passed in via the `--ignore-pattern` [command](../command-line-interface#--ignore-pattern). * Lines preceded by `!` are negated patterns that re-include a pattern that was ignored by an earlier pattern. * Ignore patterns behave according to the `.gitignore` [specification](https://git-scm.com/docs/gitignore). @@ -85,17 +88,23 @@ There are also some exceptions to these rules: The following `--ignore-pattern` is also equivalent: - eslint --ignore-pattern '!.build' --ignore-pattern '.build/*' --ignore-pattern '!.build/test.js' parent-folder/ + ```shell + eslint --ignore-pattern '!.build' --ignore-pattern '.build/*' --ignore-pattern '!.build/test.js' parent-folder/ + ``` ## Using an Alternate File If you'd prefer to use a different file than the `.eslintignore` in the current working directory, you can specify it on the command line using the `--ignore-path` option. For example, you can use `.jshintignore` file because it has the same format: - eslint --ignore-path .jshintignore file.js +```shell +eslint --ignore-path .jshintignore file.js +``` You can also use your `.gitignore` file: - eslint --ignore-path .gitignore file.js +```shell +eslint --ignore-path .gitignore file.js +``` Any file that follows the standard ignore file format can be used. Keep in mind that specifying `--ignore-path` means that any existing `.eslintignore` file will not be used. Note that globbing rules in `.eslintignore` follow those of `.gitignore`. @@ -103,17 +112,19 @@ Any file that follows the standard ignore file format can be used. Keep in mind If an `.eslintignore` file is not found and an alternate file is not specified, ESLint will look in package.json for an `eslintIgnore` key to check for files to ignore. - { - "name": "mypackage", - "version": "0.0.1", - "eslintConfig": { - "env": { - "browser": true, - "node": true - } - }, - "eslintIgnore": ["hello.js", "world.js"] - } +```json +{ + "name": "mypackage", + "version": "0.0.1", + "eslintConfig": { + "env": { + "browser": true, + "node": true + } + }, + "eslintIgnore": ["hello.js", "world.js"] +} +``` ## Ignored File Warnings @@ -125,7 +136,9 @@ foo.js And then you run: - eslint foo.js +```shell +eslint foo.js +``` You'll see this warning: @@ -140,7 +153,9 @@ This message occurs because ESLint is unsure if you wanted to actually lint the Consider another scenario where you may want to run ESLint on a specific dot-file or dot-folder, but have forgotten to specifically allow those files in your `.eslintignore` file. You would run something like this: - eslint .config/foo.js +```shell +eslint .config/foo.js +``` You would see this warning: diff --git a/eslint/docs/src/user-guide/configuring/index.md b/eslint/docs/src/user-guide/configuring/index.md new file mode 100644 index 0000000..2eaad9c --- /dev/null +++ b/eslint/docs/src/user-guide/configuring/index.md @@ -0,0 +1,61 @@ +--- +title: Configuring ESLint +layout: doc +eleventyNavigation: + key: configuring + parent: user guide + title: Configuring + order: 2 + +--- + +ESLint is designed to be flexible and configurable for your use case. You can turn off every rule and run only with basic syntax validation or mix and match the bundled rules and your custom rules to fit the needs of your project. There are two primary ways to configure ESLint: + +1. **Configuration Comments** - use JavaScript comments to embed configuration information directly into a file. +2. **Configuration Files** - use a JavaScript, JSON, or YAML file to specify configuration information for an entire directory and all of its subdirectories. This can be in the form of a [`.eslintrc.*`](./configuration-files#configuration-file-formats) file or an `eslintConfig` field in a [`package.json`](https://docs.npmjs.com/files/package.json) file, both of which ESLint will look for and read automatically, or you can specify a configuration file on the [command line](../command-line-interface). + +Here are some of the options that you can configure in ESLint: + +* [**Environments**](./language-options#specifying-environments) - which environments your script is designed to run in. Each environment brings with it a certain set of predefined global variables. +* [**Globals**](./language-options#specifying-globals) - the additional global variables your script accesses during execution. +* [**Rules**](rules) - which rules are enabled and at what error level. +* [**Plugins**](plugins) - which third-party plugins define additional rules, environments, configs, etc. for ESLint to use. + +All of these options give you fine-grained control over how ESLint treats your code. + +## Table of Contents + +[**Configuration Files**](configuration-files) + +* [Configuration File Formats](./configuration-files#configuration-file-formats) +* [Using Configuration Files](./configuration-files#using-configuration-files) +* [Adding Shared Settings](./configuration-files#adding-shared-settings) +* [Cascading and Hierarchy](./configuration-files#cascading-and-hierarchy) +* [Extending Configuration Files](./configuration-files#extending-configuration-files) +* [Configuration Based on Glob Patterns](./configuration-files#configuration-based-on-glob-patterns) +* [Personal Configuration Files](./configuration-files#personal-configuration-files-deprecated) + +[**Language Options**](language-options) + +* [Specifying Environments](./language-options#specifying-environments) +* [Specifying Globals](./language-options#specifying-globals) +* [Specifying Parser Options](./language-options#specifying-parser-options) + +[**Rules**](rules) + +* [Configuring Rules](./rules#configuring-rules) +* [Disabling Rules](./rules#disabling-rules) + +[**Plugins**](plugins) + +* [Specifying Parser](./plugins#specifying-parser) +* [Specifying Processor](./plugins#specifying-processor) +* [Configuring Plugins](./plugins#configuring-plugins) + +[**Ignoring Code**](ignoring-code) + +* [`ignorePatterns` in Config Files](./ignoring-code#ignorepatterns-in-config-files) +* [The `.eslintignore` File](./ignoring-code#the-eslintignore-file) +* [Using an Alternate File](./ignoring-code#using-an-alternate-file) +* [Using eslintIgnore in package.json](./ignoring-code#using-eslintignore-in-packagejson) +* [Ignored File Warnings](./ignoring-code#ignored-file-warnings) diff --git a/eslint/docs/user-guide/configuring/language-options.md b/eslint/docs/src/user-guide/configuring/language-options.md similarity index 87% rename from eslint/docs/user-guide/configuring/language-options.md rename to eslint/docs/src/user-guide/configuring/language-options.md index d44959d..1ec3233 100644 --- a/eslint/docs/user-guide/configuring/language-options.md +++ b/eslint/docs/src/user-guide/configuring/language-options.md @@ -1,8 +1,13 @@ -# Language Options +--- +title: Language Options +layout: doc +eleventyNavigation: + key: configuring language options + parent: configuring + title: Configuring Language Options + order: 2 -* [Specifying Environments](#specifying-environments) -* [Specifying Globals](#specifying-globals) -* [Specifying Parser Options](#specifying-parser-options) +--- ## Specifying Environments @@ -13,9 +18,13 @@ An environment provides predefined global variables. The available environments * `commonjs` - CommonJS global variables and CommonJS scoping (use this for browser-only code that uses Browserify/WebPack). * `shared-node-browser` - Globals common to both Node.js and Browser. * `es6` - enable all ECMAScript 6 features except for modules (this automatically sets the `ecmaVersion` parser option to 6). +* `es2016` - adds all ECMAScript 2016 globals and automatically sets the `ecmaVersion` parser option to 7. * `es2017` - adds all ECMAScript 2017 globals and automatically sets the `ecmaVersion` parser option to 8. +* `es2018` - adds all ECMAScript 2018 globals and automatically sets the `ecmaVersion` parser option to 9. +* `es2019` - adds all ECMAScript 2019 globals and automatically sets the `ecmaVersion` parser option to 10. * `es2020` - adds all ECMAScript 2020 globals and automatically sets the `ecmaVersion` parser option to 11. * `es2021` - adds all ECMAScript 2021 globals and automatically sets the `ecmaVersion` parser option to 12. +* `es2022` - adds all ECMAScript 2022 globals and automatically sets the `ecmaVersion` parser option to 13. * `worker` - web workers global variables. * `amd` - defines `require()` and `define()` as global variables as per the [amd](https://github.com/amdjs/amdjs-api/wiki/AMD) spec. * `mocha` - adds all of the Mocha testing global variables. @@ -39,7 +48,7 @@ An environment provides predefined global variables. The available environments These environments are not mutually exclusive, so you can define more than one at a time. -Environments can be specified inside of a file, in configuration files or using the `--env` [command line](https://eslint.org/docs/user-guide/command-line-interface) flag. +Environments can be specified inside of a file, in configuration files or using the `--env` [command line](../command-line-interface) flag. ### Using configuration comments @@ -185,7 +194,7 @@ For ES6 syntax, use `{ "parserOptions": { "ecmaVersion": 6 } }`; for new ES6 glo Parser options are set in your `.eslintrc.*` file by using the `parserOptions` property. The available options are: -* `ecmaVersion` - set to 3, 5 (default), 6, 7, 8, 9, 10, 11, 12, or 13 to specify the version of ECMAScript syntax you want to use. You can also set to 2015 (same as 6), 2016 (same as 7), 2017 (same as 8), 2018 (same as 9), 2019 (same as 10), 2020 (same as 11), 2021 (same as 12), or 2022 (same as 13) to use the year-based naming. You can also set "latest" to use the most recently supported version. +* `ecmaVersion` - set to 3, 5 (default), 6, 7, 8, 9, 10, 11, 12, 13, or 14 to specify the version of ECMAScript syntax you want to use. You can also set to 2015 (same as 6), 2016 (same as 7), 2017 (same as 8), 2018 (same as 9), 2019 (same as 10), 2020 (same as 11), 2021 (same as 12), 2022 (same as 13), or 2023 (same as 14) to use the year-based naming. You can also set "latest" to use the most recently supported version. * `sourceType` - set to `"script"` (default) or `"module"` if your code is in ECMAScript modules. * `allowReserved` - allow the use of reserved words as identifiers (if `ecmaVersion` is 3). * `ecmaFeatures` - an object indicating which additional language features you'd like to use: diff --git a/eslint/docs/user-guide/configuring/plugins.md b/eslint/docs/src/user-guide/configuring/plugins.md similarity index 95% rename from eslint/docs/user-guide/configuring/plugins.md rename to eslint/docs/src/user-guide/configuring/plugins.md index 9d2c929..12eef7e 100644 --- a/eslint/docs/user-guide/configuring/plugins.md +++ b/eslint/docs/src/user-guide/configuring/plugins.md @@ -1,15 +1,20 @@ -# Plugins +--- +title: Plugins +layout: doc +eleventyNavigation: + key: configuring plugins + parent: configuring + title: Configuring Plugins + order: 4 -* [Specifying Parser](#specifying-parser) -* [Specifying Processor](#specifying-processor) -* [Configuring Plugins](#configuring-plugins) +--- ## Specifying Parser By default, ESLint uses [Espree](https://github.com/eslint/espree) as its parser. You can optionally specify that a different parser should be used in your configuration file so long as the parser meets the following requirements: 1. It must be a Node module loadable from the config file where the parser is used. Usually, this means you should install the parser package separately using npm. -1. It must conform to the [parser interface](https://eslint.org/docs/developer-guide/working-with-custom-parsers). +1. It must conform to the [parser interface](../../developer-guide/working-with-custom-parsers). Note that even with these compatibilities, there are no guarantees that an external parser will work correctly with ESLint and ESLint will not fix bugs related to incompatibilities with other parsers. diff --git a/eslint/docs/user-guide/configuring/rules.md b/eslint/docs/src/user-guide/configuring/rules.md similarity index 83% rename from eslint/docs/user-guide/configuring/rules.md rename to eslint/docs/src/user-guide/configuring/rules.md index 4f45b4a..e504a53 100644 --- a/eslint/docs/user-guide/configuring/rules.md +++ b/eslint/docs/src/user-guide/configuring/rules.md @@ -1,7 +1,13 @@ -# Rules +--- +title: Rules +layout: doc +eleventyNavigation: + key: configuring rules + parent: configuring + title: Configuring Rules + order: 3 -* [Configuring Rules](#configuring-rules) -* [Disabling Rules](#disabling-rules) +--- ## Configuring Rules @@ -19,7 +25,7 @@ To configure rules inside of a file using configuration comments, use a comment /* eslint eqeqeq: "off", curly: "error" */ ``` -In this example, [`eqeqeq`](https://eslint.org/docs/rules/eqeqeq) is turned off and [`curly`](https://eslint.org/docs/rules/curly) is turned on as an error. You can also use the numeric equivalent for the rule severity: +In this example, [`eqeqeq`](../../rules/eqeqeq) is turned off and [`curly`](../../rules/curly) is turned on as an error. You can also use the numeric equivalent for the rule severity: ```js /* eslint eqeqeq: 0, curly: 2 */ @@ -33,7 +39,7 @@ If a rule has additional options, you can specify them using array literal synta /* eslint quotes: ["error", "double"], curly: 2 */ ``` -This comment specifies the "double" option for the [`quotes`](https://eslint.org/docs/rules/quotes) rule. The first item in the array is always the rule severity (number or string). +This comment specifies the "double" option for the [`quotes`](../../rules/quotes) rule. The first item in the array is always the rule severity (number or string). Configuration comments can include descriptions to explain why the comment is necessary. The description must occur after the configuration and is separated from the configuration by two or more consecutive `-` characters. For example: @@ -144,6 +150,8 @@ console.log('bar'); /* eslint-enable no-alert, no-console */ ``` +**Note:** `/* eslint-enable */` without any specific rules listed will cause all disabled rules to be re-enabled. + To disable rule warnings in an entire file, put a `/* eslint-disable */` block comment at the top of the file: ```js @@ -160,6 +168,14 @@ You can also disable or enable specific rules for an entire file: alert('foo'); ``` +To ensure that a rule is never applied (regardless of any future enable/disable lines): + +```js +/* eslint no-alert: "off" */ + +alert('foo'); +``` + To disable all rules on a specific line, use a line or block comment in one of the following formats: ```js @@ -200,6 +216,13 @@ alert('foo'); /* eslint-disable-line no-alert, quotes, semi */ /* eslint-disable-next-line no-alert, quotes, semi */ alert('foo'); + +/* eslint-disable-next-line + no-alert, + quotes, + semi +*/ +alert('foo'); ``` All of the above methods also work for plugin rules. For example, to disable `eslint-plugin-example`'s `rule-name` rule, combine the plugin's name (`example`) and the rule's name (`rule-name`) into `example/rule-name`: @@ -214,6 +237,12 @@ Configuration comments can include descriptions to explain why the comment is ne ```js // eslint-disable-next-line no-console -- Here's a description about why this configuration is necessary. console.log('hello'); + +/* eslint-disable-next-line no-console -- + * Here's a very long description about why this configuration is necessary + * along with some additional information +**/ +console.log('hello'); ``` **Note:** Comments that disable warnings for a portion of a file tell ESLint not to report rule violations for the disabled code. ESLint still parses the entire file, however, so disabled code still needs to be syntactically valid JavaScript. @@ -247,7 +276,7 @@ To disable all inline config comments, use the `noInlineConfig` setting. For exa } ``` -This setting is similar to [--no-inline-config](https://eslint.org/docs/user-guide/command-line-interface#--no-inline-config) CLI option. +This setting is similar to [--no-inline-config](../command-line-interface#--no-inline-config) CLI option. #### Report unused `eslint-disable` comments @@ -260,4 +289,4 @@ To report unused `eslint-disable` comments, use the `reportUnusedDisableDirectiv } ``` -This setting is similar to [--report-unused-disable-directives](https://eslint.org/docs/user-guide/command-line-interface#--report-unused-disable-directives) CLI option, but doesn't fail linting (reports as `"warn"` severity). +This setting is similar to [--report-unused-disable-directives](../command-line-interface#--report-unused-disable-directives) CLI option, but doesn't fail linting (reports as `"warn"` severity). diff --git a/eslint/docs/src/user-guide/formatters/html-formatter-example.html b/eslint/docs/src/user-guide/formatters/html-formatter-example.html new file mode 100644 index 0000000..9efd6e1 --- /dev/null +++ b/eslint/docs/src/user-guide/formatters/html-formatter-example.html @@ -0,0 +1,203 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="UTF-8"> + <title>ESLint Report</title> + <link rel="icon" type="image/png" sizes="any" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAHaAAAB2gGFomX7AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAABD1JREFUWMPFl11sk2UUx3/nbYtjxS1MF7MLMTECMgSTtSSyrQkLhAj7UBPnDSEGoxegGzMwojhXVpmTAA5iYpSoMQa8GBhFOrMFk03buei6yRAlcmOM0SEmU9d90b19jxcM1o5+sGnsc/e+z/l6ztf/HFFVMnns6QieeOCHBePGsHM+wrOtvLG2C4WRVDSSygNV7sCjlspxwDnPB44aols/DXk+mbMBmx/6OseITF1CuOtfevkPh2Uu+/jbdX8lujSScRlT5r7/QDlAfsRmfzmpnkQ/H3H13gf6bBrBn1uqK8WylgEnU8eZmk1repbfchJG1TyKyIKEwuBHFd3lD3naY3O1siiwXsVoBV2VgM1ht/QQUJk2ByqKghsQziYQ8ifKgexIXmuyzC4r67Y7R+xPAfuB/Nn3Cpva+0s7khpQVtZtd4bt51BWxtBYAiciprG7c7D4SixzU9PYalDL6110Ifb/w8W9eY7JqFeFHbO8fPGyLHwwFHJNJTSgwtVTB9oaw9BlQ+tO93vOxypoaQnfEYlI43SeCHDC4TDq9+51/h5fxr33q0ZfV9g04wat9Q943rjJgCp3952W2i8Bi6eDvdsfKj0cK/DYMRyXL4/sUJUmIHd2zYMezsvLaamp4WpcWN3BXSiHpuMwbGbZlnZ8tXY4rgosy+G7oRwQ0cAsd28YGgqfU5UjCZQDLALxDg+Hv/P5Rqvj4hwrS8izXzWb4spwc1GgENFnkpWRzxeuB+ssUHgLdb9UVdt8vpGdKQpze7n7y1U3DBChNRUuqOo9c+0+qpKKxyZqtAIYla7gY4JszAAQri93BSsMRZoyBcUC+w3Q3AyOA4sNhAOZ0q7Iq0b2vUNvK5zPgP+/H8+Zetdoa6uOikhdGurxebwvJY8Iz3V1rTMNAH+opEuQj5KTT/qA1yC+wyUjBm12OidaUtCcPNNX2h0Hx2JG69VulANZAJZJwfU7rzd/FHixuXniTdM0m4GtSQT7bTartqEh9yfImUEzkwKZmTwmo5a5JwkYBfcDL01/RkR5y8iWhtPBknB8ZxwtU9UjwOrrKCeizzc25nTGg1F/turEHoU9wMLpDvWKf8DTmNCAKnd/tqUTF4ElMXJ+A5rWDJS+41WsGWzALhJ+ErBWrLj9g+pqojHxlXJX8HGUg0BsR/x1yhxf3jm4cSzpQFLp6tmi6PEE7g1ZhtZ91ufpSZUAFa6gC+UoQslNaSmypT1U8mHKiUgEKS8KfgF4EpYunFI16tsHin+OG0LcgQK7yj7g6cSzpva2D3hKVNG0Y3mVO1BkqfSlmJrHBQ4uvM12gJHc6ETW8HZVfMRmXvyxxNC1Z/o839zyXlDuCr4nsC11J+MXueaVJWn6yPv+/pJtc9oLTNN4AeTvNGByd3rlhE2x9s5pLwDoHCy+grDzWmOZ95lUtLYj5Bma126Y8eX0/zj/ADxGyViSg4BXAAAAAElFTkSuQmCC"> + <link rel="icon" type="image/svg+xml" href="data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PScwIDAgMjk0LjgyNSAyNTguOTgyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnPg0KPHBhdGggZmlsbD0nIzgwODBGMicgZD0nTTk3LjAyMSw5OS4wMTZsNDguNDMyLTI3Ljk2MmMxLjIxMi0wLjcsMi43MDYtMC43LDMuOTE4LDBsNDguNDMzLDI3Ljk2MiBjMS4yMTEsMC43LDEuOTU5LDEuOTkzLDEuOTU5LDMuMzkzdjU1LjkyNGMwLDEuMzk5LTAuNzQ4LDIuNjkzLTEuOTU5LDMuMzk0bC00OC40MzMsMjcuOTYyYy0xLjIxMiwwLjctMi43MDYsMC43LTMuOTE4LDAgbC00OC40MzItMjcuOTYyYy0xLjIxMi0wLjctMS45NTktMS45OTQtMS45NTktMy4zOTR2LTU1LjkyNEM5NS4wNjMsMTAxLjAwOSw5NS44MSw5OS43MTYsOTcuMDIxLDk5LjAxNicvPg0KPHBhdGggZmlsbD0nIzRCMzJDMycgZD0nTTI3My4zMzYsMTI0LjQ4OEwyMTUuNDY5LDIzLjgxNmMtMi4xMDItMy42NC01Ljk4NS02LjMyNS0xMC4xODgtNi4zMjVIODkuNTQ1IGMtNC4yMDQsMC04LjA4OCwyLjY4NS0xMC4xOSw2LjMyNWwtNTcuODY3LDEwMC40NWMtMi4xMDIsMy42NDEtMi4xMDIsOC4yMzYsMCwxMS44NzdsNTcuODY3LDk5Ljg0NyBjMi4xMDIsMy42NCw1Ljk4Niw1LjUwMSwxMC4xOSw1LjUwMWgxMTUuNzM1YzQuMjAzLDAsOC4wODctMS44MDUsMTAuMTg4LTUuNDQ2bDU3Ljg2Ny0xMDAuMDEgQzI3NS40MzksMTMyLjM5NiwyNzUuNDM5LDEyOC4xMjgsMjczLjMzNiwxMjQuNDg4IE0yMjUuNDE5LDE3Mi44OThjMCwxLjQ4LTAuODkxLDIuODQ5LTIuMTc0LDMuNTlsLTczLjcxLDQyLjUyNyBjLTEuMjgyLDAuNzQtMi44ODgsMC43NC00LjE3LDBsLTczLjc2Ny00Mi41MjdjLTEuMjgyLTAuNzQxLTIuMTc5LTIuMTA5LTIuMTc5LTMuNTlWODcuODQzYzAtMS40ODEsMC44ODQtMi44NDksMi4xNjctMy41OSBsNzMuNzA3LTQyLjUyN2MxLjI4Mi0wLjc0MSwyLjg4Ni0wLjc0MSw0LjE2OCwwbDczLjc3Miw0Mi41MjdjMS4yODMsMC43NDEsMi4xODYsMi4xMDksMi4xODYsMy41OVYxNzIuODk4eicvPg0KPC9zdmc+"> + <style> + body { + font-family:Arial, "Helvetica Neue", Helvetica, sans-serif; + font-size:16px; + font-weight:normal; + margin:0; + padding:0; + color:#333 + } + #overview { + padding:20px 30px + } + td, th { + padding:5px 10px + } + h1 { + margin:0 + } + table { + margin:30px; + width:calc(100% - 60px); + max-width:1000px; + border-radius:5px; + border:1px solid #ddd; + border-spacing:0px; + } + th { + font-weight:400; + font-size:medium; + text-align:left; + cursor:pointer + } + td.clr-1, td.clr-2, th span { + font-weight:700 + } + th span { + float:right; + margin-left:20px + } + th span:after { + content:""; + clear:both; + display:block + } + tr:last-child td { + border-bottom:none + } + tr td:first-child, tr td:last-child { + color:#9da0a4 + } + #overview.bg-0, tr.bg-0 th { + color:#468847; + background:#dff0d8; + border-bottom:1px solid #d6e9c6 + } + #overview.bg-1, tr.bg-1 th { + color:#f0ad4e; + background:#fcf8e3; + border-bottom:1px solid #fbeed5 + } + #overview.bg-2, tr.bg-2 th { + color:#b94a48; + background:#f2dede; + border-bottom:1px solid #eed3d7 + } + td { + border-bottom:1px solid #ddd + } + td.clr-1 { + color:#f0ad4e + } + td.clr-2 { + color:#b94a48 + } + td a { + color:#3a33d1; + text-decoration:none + } + td a:hover { + color:#272296; + text-decoration:underline + } + </style> + </head> + <body> + <div id="overview" class="bg-2"> + <h1>ESLint Report</h1> + <div> + <span>9 problems (5 errors, 4 warnings)</span> - Generated on Mon Sep 12 2022 01:24:39 GMT-0400 (Eastern Daylight Time) + </div> + </div> + <table> + <tbody> + <tr class="bg-2" data-group="f-0"> + <th colspan="4"> + [+] /var/lib/jenkins/workspace/Releases/eslint Release/eslint/fullOfProblems.js + <span>9 problems (5 errors, 4 warnings)</span> + </th> +</tr> +<tr style="display:none" class="f-0"> + <td>1:10</td> + <td class="clr-2">Error</td> + <td>&#39;addOne&#39; is defined but never used.</td> + <td> + <a href="" target="_blank" rel="noopener noreferrer">no-unused-vars</a> + </td> +</tr> + +<tr style="display:none" class="f-0"> + <td>2:9</td> + <td class="clr-2">Error</td> + <td>Use the isNaN function to compare with NaN.</td> + <td> + <a href="" target="_blank" rel="noopener noreferrer">use-isnan</a> + </td> +</tr> + +<tr style="display:none" class="f-0"> + <td>3:16</td> + <td class="clr-2">Error</td> + <td>Unexpected space before unary operator &#39;++&#39;.</td> + <td> + <a href="https://eslint.org/docs/rules/space-unary-ops" target="_blank" rel="noopener noreferrer">space-unary-ops</a> + </td> +</tr> + +<tr style="display:none" class="f-0"> + <td>3:20</td> + <td class="clr-1">Warning</td> + <td>Missing semicolon.</td> + <td> + <a href="https://eslint.org/docs/rules/semi" target="_blank" rel="noopener noreferrer">semi</a> + </td> +</tr> + +<tr style="display:none" class="f-0"> + <td>4:12</td> + <td class="clr-1">Warning</td> + <td>Unnecessary &#39;else&#39; after &#39;return&#39;.</td> + <td> + <a href="https://eslint.org/docs/rules/no-else-return" target="_blank" rel="noopener noreferrer">no-else-return</a> + </td> +</tr> + +<tr style="display:none" class="f-0"> + <td>5:1</td> + <td class="clr-1">Warning</td> + <td>Expected indentation of 8 spaces but found 6.</td> + <td> + <a href="https://eslint.org/docs/rules/indent" target="_blank" rel="noopener noreferrer">indent</a> + </td> +</tr> + +<tr style="display:none" class="f-0"> + <td>5:7</td> + <td class="clr-2">Error</td> + <td>Function &#39;addOne&#39; expected a return value.</td> + <td> + <a href="https://eslint.org/docs/rules/consistent-return" target="_blank" rel="noopener noreferrer">consistent-return</a> + </td> +</tr> + +<tr style="display:none" class="f-0"> + <td>5:13</td> + <td class="clr-1">Warning</td> + <td>Missing semicolon.</td> + <td> + <a href="https://eslint.org/docs/rules/semi" target="_blank" rel="noopener noreferrer">semi</a> + </td> +</tr> + +<tr style="display:none" class="f-0"> + <td>7:2</td> + <td class="clr-2">Error</td> + <td>Unnecessary semicolon.</td> + <td> + <a href="" target="_blank" rel="noopener noreferrer">no-extra-semi</a> + </td> +</tr> + + </tbody> + </table> + <script type="text/javascript"> + var groups = document.querySelectorAll("tr[data-group]"); + for (i = 0; i < groups.length; i++) { + groups[i].addEventListener("click", function() { + var inGroup = document.getElementsByClassName(this.getAttribute("data-group")); + this.innerHTML = (this.innerHTML.indexOf("+") > -1) ? this.innerHTML.replace("+", "-") : this.innerHTML.replace("-", "+"); + for (var j = 0; j < inGroup.length; j++) { + inGroup[j].style.display = (inGroup[j].style.display !== "none") ? "none" : "table-row"; + } + }); + } + </script> + </body> +</html> diff --git a/eslint/docs/src/user-guide/formatters/index.md b/eslint/docs/src/user-guide/formatters/index.md new file mode 100644 index 0000000..074b04a --- /dev/null +++ b/eslint/docs/src/user-guide/formatters/index.md @@ -0,0 +1,243 @@ +--- +title: Formatters +layout: doc +eleventyNavigation: + key: formatters + parent: user guide + title: Formatters + order: 5 +edit_link: https://github.com/eslint/eslint/edit/main/templates/formatter-examples.md.ejs +--- + +ESLint comes with several built-in formatters to control the appearance of the linting results, and supports third-party formatters as well. + +You can specify a formatter using the `--format` or `-f` flag on the command line. For example, `--format json` uses the `json` formatter. + +The built-in formatter options are: + +* [checkstyle](#checkstyle) +* [compact](#compact) +* [html](#html) +* [jslint-xml](#jslint-xml) +* [json-with-metadata](#json-with-metadata) +* [json](#json) +* [junit](#junit) +* [stylish](#stylish) +* [tap](#tap) +* [unix](#unix) +* [visualstudio](#visualstudio) + +## Example Source + +Examples of each formatter were created from linting `fullOfProblems.js` using the `.eslintrc` configuration shown below. + +### `fullOfProblems.js` + +```js +function addOne(i) { + if (i != NaN) { + return i ++ + } else { + return + } +}; +``` + +### `.eslintrc`: + +```json +{ + "extends": "eslint:recommended", + "rules": { + "consistent-return": 2, + "indent" : [1, 4], + "no-else-return" : 1, + "semi" : [1, "always"], + "space-unary-ops" : 2 + } +} +``` + +## Output Examples + +### checkstyle + +```text +&lt;?xml version=&#34;1.0&#34; encoding=&#34;utf-8&#34;?&gt;&lt;checkstyle version=&#34;4.3&#34;&gt;&lt;file name=&#34;/var/lib/jenkins/workspace/Releases/eslint Release/eslint/fullOfProblems.js&#34;&gt;&lt;error line=&#34;1&#34; column=&#34;10&#34; severity=&#34;error&#34; message=&#34;&amp;apos;addOne&amp;apos; is defined but never used. (no-unused-vars)&#34; source=&#34;eslint.rules.no-unused-vars&#34; /&gt;&lt;error line=&#34;2&#34; column=&#34;9&#34; severity=&#34;error&#34; message=&#34;Use the isNaN function to compare with NaN. (use-isnan)&#34; source=&#34;eslint.rules.use-isnan&#34; /&gt;&lt;error line=&#34;3&#34; column=&#34;16&#34; severity=&#34;error&#34; message=&#34;Unexpected space before unary operator &amp;apos;++&amp;apos;. (space-unary-ops)&#34; source=&#34;eslint.rules.space-unary-ops&#34; /&gt;&lt;error line=&#34;3&#34; column=&#34;20&#34; severity=&#34;warning&#34; message=&#34;Missing semicolon. (semi)&#34; source=&#34;eslint.rules.semi&#34; /&gt;&lt;error line=&#34;4&#34; column=&#34;12&#34; severity=&#34;warning&#34; message=&#34;Unnecessary &amp;apos;else&amp;apos; after &amp;apos;return&amp;apos;. (no-else-return)&#34; source=&#34;eslint.rules.no-else-return&#34; /&gt;&lt;error line=&#34;5&#34; column=&#34;1&#34; severity=&#34;warning&#34; message=&#34;Expected indentation of 8 spaces but found 6. (indent)&#34; source=&#34;eslint.rules.indent&#34; /&gt;&lt;error line=&#34;5&#34; column=&#34;7&#34; severity=&#34;error&#34; message=&#34;Function &amp;apos;addOne&amp;apos; expected a return value. (consistent-return)&#34; source=&#34;eslint.rules.consistent-return&#34; /&gt;&lt;error line=&#34;5&#34; column=&#34;13&#34; severity=&#34;warning&#34; message=&#34;Missing semicolon. (semi)&#34; source=&#34;eslint.rules.semi&#34; /&gt;&lt;error line=&#34;7&#34; column=&#34;2&#34; severity=&#34;error&#34; message=&#34;Unnecessary semicolon. (no-extra-semi)&#34; source=&#34;eslint.rules.no-extra-semi&#34; /&gt;&lt;/file&gt;&lt;/checkstyle&gt; +``` + +### compact + +```text +/var/lib/jenkins/workspace/Releases/eslint Release/eslint/fullOfProblems.js: line 1, col 10, Error - &#39;addOne&#39; is defined but never used. (no-unused-vars) +/var/lib/jenkins/workspace/Releases/eslint Release/eslint/fullOfProblems.js: line 2, col 9, Error - Use the isNaN function to compare with NaN. (use-isnan) +/var/lib/jenkins/workspace/Releases/eslint Release/eslint/fullOfProblems.js: line 3, col 16, Error - Unexpected space before unary operator &#39;++&#39;. (space-unary-ops) +/var/lib/jenkins/workspace/Releases/eslint Release/eslint/fullOfProblems.js: line 3, col 20, Warning - Missing semicolon. (semi) +/var/lib/jenkins/workspace/Releases/eslint Release/eslint/fullOfProblems.js: line 4, col 12, Warning - Unnecessary &#39;else&#39; after &#39;return&#39;. (no-else-return) +/var/lib/jenkins/workspace/Releases/eslint Release/eslint/fullOfProblems.js: line 5, col 1, Warning - Expected indentation of 8 spaces but found 6. (indent) +/var/lib/jenkins/workspace/Releases/eslint Release/eslint/fullOfProblems.js: line 5, col 7, Error - Function &#39;addOne&#39; expected a return value. (consistent-return) +/var/lib/jenkins/workspace/Releases/eslint Release/eslint/fullOfProblems.js: line 5, col 13, Warning - Missing semicolon. (semi) +/var/lib/jenkins/workspace/Releases/eslint Release/eslint/fullOfProblems.js: line 7, col 2, Error - Unnecessary semicolon. (no-extra-semi) + +9 problems +``` + +### html + +<iframe src="html-formatter-example.html" width="100%" height="460px"></iframe> + +### jslint-xml + +```text +&lt;?xml version=&#34;1.0&#34; encoding=&#34;utf-8&#34;?&gt;&lt;jslint&gt;&lt;file name=&#34;/var/lib/jenkins/workspace/Releases/eslint Release/eslint/fullOfProblems.js&#34;&gt;&lt;issue line=&#34;1&#34; char=&#34;10&#34; evidence=&#34;&#34; reason=&#34;&amp;apos;addOne&amp;apos; is defined but never used. (no-unused-vars)&#34; /&gt;&lt;issue line=&#34;2&#34; char=&#34;9&#34; evidence=&#34;&#34; reason=&#34;Use the isNaN function to compare with NaN. (use-isnan)&#34; /&gt;&lt;issue line=&#34;3&#34; char=&#34;16&#34; evidence=&#34;&#34; reason=&#34;Unexpected space before unary operator &amp;apos;++&amp;apos;. (space-unary-ops)&#34; /&gt;&lt;issue line=&#34;3&#34; char=&#34;20&#34; evidence=&#34;&#34; reason=&#34;Missing semicolon. (semi)&#34; /&gt;&lt;issue line=&#34;4&#34; char=&#34;12&#34; evidence=&#34;&#34; reason=&#34;Unnecessary &amp;apos;else&amp;apos; after &amp;apos;return&amp;apos;. (no-else-return)&#34; /&gt;&lt;issue line=&#34;5&#34; char=&#34;1&#34; evidence=&#34;&#34; reason=&#34;Expected indentation of 8 spaces but found 6. (indent)&#34; /&gt;&lt;issue line=&#34;5&#34; char=&#34;7&#34; evidence=&#34;&#34; reason=&#34;Function &amp;apos;addOne&amp;apos; expected a return value. (consistent-return)&#34; /&gt;&lt;issue line=&#34;5&#34; char=&#34;13&#34; evidence=&#34;&#34; reason=&#34;Missing semicolon. (semi)&#34; /&gt;&lt;issue line=&#34;7&#34; char=&#34;2&#34; evidence=&#34;&#34; reason=&#34;Unnecessary semicolon. (no-extra-semi)&#34; /&gt;&lt;/file&gt;&lt;/jslint&gt; +``` + +### json-with-metadata + +```text +{&#34;results&#34;:[{&#34;filePath&#34;:&#34;/var/lib/jenkins/workspace/Releases/eslint Release/eslint/fullOfProblems.js&#34;,&#34;messages&#34;:[{&#34;ruleId&#34;:&#34;no-unused-vars&#34;,&#34;severity&#34;:2,&#34;message&#34;:&#34;&#39;addOne&#39; is defined but never used.&#34;,&#34;line&#34;:1,&#34;column&#34;:10,&#34;nodeType&#34;:&#34;Identifier&#34;,&#34;messageId&#34;:&#34;unusedVar&#34;,&#34;endLine&#34;:1,&#34;endColumn&#34;:16},{&#34;ruleId&#34;:&#34;use-isnan&#34;,&#34;severity&#34;:2,&#34;message&#34;:&#34;Use the isNaN function to compare with NaN.&#34;,&#34;line&#34;:2,&#34;column&#34;:9,&#34;nodeType&#34;:&#34;BinaryExpression&#34;,&#34;messageId&#34;:&#34;comparisonWithNaN&#34;,&#34;endLine&#34;:2,&#34;endColumn&#34;:17},{&#34;ruleId&#34;:&#34;space-unary-ops&#34;,&#34;severity&#34;:2,&#34;message&#34;:&#34;Unexpected space before unary operator &#39;++&#39;.&#34;,&#34;line&#34;:3,&#34;column&#34;:16,&#34;nodeType&#34;:&#34;UpdateExpression&#34;,&#34;messageId&#34;:&#34;unexpectedBefore&#34;,&#34;endLine&#34;:3,&#34;endColumn&#34;:20,&#34;fix&#34;:{&#34;range&#34;:[57,58],&#34;text&#34;:&#34;&#34;}},{&#34;ruleId&#34;:&#34;semi&#34;,&#34;severity&#34;:1,&#34;message&#34;:&#34;Missing semicolon.&#34;,&#34;line&#34;:3,&#34;column&#34;:20,&#34;nodeType&#34;:&#34;ReturnStatement&#34;,&#34;messageId&#34;:&#34;missingSemi&#34;,&#34;endLine&#34;:4,&#34;endColumn&#34;:1,&#34;fix&#34;:{&#34;range&#34;:[60,60],&#34;text&#34;:&#34;;&#34;}},{&#34;ruleId&#34;:&#34;no-else-return&#34;,&#34;severity&#34;:1,&#34;message&#34;:&#34;Unnecessary &#39;else&#39; after &#39;return&#39;.&#34;,&#34;line&#34;:4,&#34;column&#34;:12,&#34;nodeType&#34;:&#34;BlockStatement&#34;,&#34;messageId&#34;:&#34;unexpected&#34;,&#34;endLine&#34;:6,&#34;endColumn&#34;:6,&#34;fix&#34;:{&#34;range&#34;:[0,94],&#34;text&#34;:&#34;function addOne(i) {\n if (i != NaN) {\n return i ++\n } \n return\n \n}&#34;}},{&#34;ruleId&#34;:&#34;indent&#34;,&#34;severity&#34;:1,&#34;message&#34;:&#34;Expected indentation of 8 spaces but found 6.&#34;,&#34;line&#34;:5,&#34;column&#34;:1,&#34;nodeType&#34;:&#34;Keyword&#34;,&#34;messageId&#34;:&#34;wrongIndentation&#34;,&#34;endLine&#34;:5,&#34;endColumn&#34;:7,&#34;fix&#34;:{&#34;range&#34;:[74,80],&#34;text&#34;:&#34; &#34;}},{&#34;ruleId&#34;:&#34;consistent-return&#34;,&#34;severity&#34;:2,&#34;message&#34;:&#34;Function &#39;addOne&#39; expected a return value.&#34;,&#34;line&#34;:5,&#34;column&#34;:7,&#34;nodeType&#34;:&#34;ReturnStatement&#34;,&#34;messageId&#34;:&#34;missingReturnValue&#34;,&#34;endLine&#34;:5,&#34;endColumn&#34;:13},{&#34;ruleId&#34;:&#34;semi&#34;,&#34;severity&#34;:1,&#34;message&#34;:&#34;Missing semicolon.&#34;,&#34;line&#34;:5,&#34;column&#34;:13,&#34;nodeType&#34;:&#34;ReturnStatement&#34;,&#34;messageId&#34;:&#34;missingSemi&#34;,&#34;endLine&#34;:6,&#34;endColumn&#34;:1,&#34;fix&#34;:{&#34;range&#34;:[86,86],&#34;text&#34;:&#34;;&#34;}},{&#34;ruleId&#34;:&#34;no-extra-semi&#34;,&#34;severity&#34;:2,&#34;message&#34;:&#34;Unnecessary semicolon.&#34;,&#34;line&#34;:7,&#34;column&#34;:2,&#34;nodeType&#34;:&#34;EmptyStatement&#34;,&#34;messageId&#34;:&#34;unexpected&#34;,&#34;endLine&#34;:7,&#34;endColumn&#34;:3,&#34;fix&#34;:{&#34;range&#34;:[93,95],&#34;text&#34;:&#34;}&#34;}}],&#34;suppressedMessages&#34;:[],&#34;errorCount&#34;:5,&#34;fatalErrorCount&#34;:0,&#34;warningCount&#34;:4,&#34;fixableErrorCount&#34;:2,&#34;fixableWarningCount&#34;:4,&#34;source&#34;:&#34;function addOne(i) {\n if (i != NaN) {\n return i ++\n } else {\n return\n }\n};&#34;}],&#34;metadata&#34;:{&#34;rulesMeta&#34;:{&#34;no-else-return&#34;:{&#34;type&#34;:&#34;suggestion&#34;,&#34;docs&#34;:{&#34;description&#34;:&#34;Disallow `else` blocks after `return` statements in `if` statements&#34;,&#34;recommended&#34;:false,&#34;url&#34;:&#34;https://eslint.org/docs/rules/no-else-return&#34;},&#34;schema&#34;:[{&#34;type&#34;:&#34;object&#34;,&#34;properties&#34;:{&#34;allowElseIf&#34;:{&#34;type&#34;:&#34;boolean&#34;,&#34;default&#34;:true}},&#34;additionalProperties&#34;:false}],&#34;fixable&#34;:&#34;code&#34;,&#34;messages&#34;:{&#34;unexpected&#34;:&#34;Unnecessary &#39;else&#39; after &#39;return&#39;.&#34;}},&#34;indent&#34;:{&#34;type&#34;:&#34;layout&#34;,&#34;docs&#34;:{&#34;description&#34;:&#34;Enforce consistent indentation&#34;,&#34;recommended&#34;:false,&#34;url&#34;:&#34;https://eslint.org/docs/rules/indent&#34;},&#34;fixable&#34;:&#34;whitespace&#34;,&#34;schema&#34;:[{&#34;oneOf&#34;:[{&#34;enum&#34;:[&#34;tab&#34;]},{&#34;type&#34;:&#34;integer&#34;,&#34;minimum&#34;:0}]},{&#34;type&#34;:&#34;object&#34;,&#34;properties&#34;:{&#34;SwitchCase&#34;:{&#34;type&#34;:&#34;integer&#34;,&#34;minimum&#34;:0,&#34;default&#34;:0},&#34;VariableDeclarator&#34;:{&#34;oneOf&#34;:[{&#34;oneOf&#34;:[{&#34;type&#34;:&#34;integer&#34;,&#34;minimum&#34;:0},{&#34;enum&#34;:[&#34;first&#34;,&#34;off&#34;]}]},{&#34;type&#34;:&#34;object&#34;,&#34;properties&#34;:{&#34;var&#34;:{&#34;oneOf&#34;:[{&#34;type&#34;:&#34;integer&#34;,&#34;minimum&#34;:0},{&#34;enum&#34;:[&#34;first&#34;,&#34;off&#34;]}]},&#34;let&#34;:{&#34;oneOf&#34;:[{&#34;type&#34;:&#34;integer&#34;,&#34;minimum&#34;:0},{&#34;enum&#34;:[&#34;first&#34;,&#34;off&#34;]}]},&#34;const&#34;:{&#34;oneOf&#34;:[{&#34;type&#34;:&#34;integer&#34;,&#34;minimum&#34;:0},{&#34;enum&#34;:[&#34;first&#34;,&#34;off&#34;]}]}},&#34;additionalProperties&#34;:false}]},&#34;outerIIFEBody&#34;:{&#34;oneOf&#34;:[{&#34;type&#34;:&#34;integer&#34;,&#34;minimum&#34;:0},{&#34;enum&#34;:[&#34;off&#34;]}]},&#34;MemberExpression&#34;:{&#34;oneOf&#34;:[{&#34;type&#34;:&#34;integer&#34;,&#34;minimum&#34;:0},{&#34;enum&#34;:[&#34;off&#34;]}]},&#34;FunctionDeclaration&#34;:{&#34;type&#34;:&#34;object&#34;,&#34;properties&#34;:{&#34;parameters&#34;:{&#34;oneOf&#34;:[{&#34;type&#34;:&#34;integer&#34;,&#34;minimum&#34;:0},{&#34;enum&#34;:[&#34;first&#34;,&#34;off&#34;]}]},&#34;body&#34;:{&#34;type&#34;:&#34;integer&#34;,&#34;minimum&#34;:0}},&#34;additionalProperties&#34;:false},&#34;FunctionExpression&#34;:{&#34;type&#34;:&#34;object&#34;,&#34;properties&#34;:{&#34;parameters&#34;:{&#34;oneOf&#34;:[{&#34;type&#34;:&#34;integer&#34;,&#34;minimum&#34;:0},{&#34;enum&#34;:[&#34;first&#34;,&#34;off&#34;]}]},&#34;body&#34;:{&#34;type&#34;:&#34;integer&#34;,&#34;minimum&#34;:0}},&#34;additionalProperties&#34;:false},&#34;StaticBlock&#34;:{&#34;type&#34;:&#34;object&#34;,&#34;properties&#34;:{&#34;body&#34;:{&#34;type&#34;:&#34;integer&#34;,&#34;minimum&#34;:0}},&#34;additionalProperties&#34;:false},&#34;CallExpression&#34;:{&#34;type&#34;:&#34;object&#34;,&#34;properties&#34;:{&#34;arguments&#34;:{&#34;oneOf&#34;:[{&#34;type&#34;:&#34;integer&#34;,&#34;minimum&#34;:0},{&#34;enum&#34;:[&#34;first&#34;,&#34;off&#34;]}]}},&#34;additionalProperties&#34;:false},&#34;ArrayExpression&#34;:{&#34;oneOf&#34;:[{&#34;type&#34;:&#34;integer&#34;,&#34;minimum&#34;:0},{&#34;enum&#34;:[&#34;first&#34;,&#34;off&#34;]}]},&#34;ObjectExpression&#34;:{&#34;oneOf&#34;:[{&#34;type&#34;:&#34;integer&#34;,&#34;minimum&#34;:0},{&#34;enum&#34;:[&#34;first&#34;,&#34;off&#34;]}]},&#34;ImportDeclaration&#34;:{&#34;oneOf&#34;:[{&#34;type&#34;:&#34;integer&#34;,&#34;minimum&#34;:0},{&#34;enum&#34;:[&#34;first&#34;,&#34;off&#34;]}]},&#34;flatTernaryExpressions&#34;:{&#34;type&#34;:&#34;boolean&#34;,&#34;default&#34;:false},&#34;offsetTernaryExpressions&#34;:{&#34;type&#34;:&#34;boolean&#34;,&#34;default&#34;:false},&#34;ignoredNodes&#34;:{&#34;type&#34;:&#34;array&#34;,&#34;items&#34;:{&#34;type&#34;:&#34;string&#34;,&#34;not&#34;:{&#34;pattern&#34;:&#34;:exit$&#34;}}},&#34;ignoreComments&#34;:{&#34;type&#34;:&#34;boolean&#34;,&#34;default&#34;:false}},&#34;additionalProperties&#34;:false}],&#34;messages&#34;:{&#34;wrongIndentation&#34;:&#34;Expected indentation of {{expected}} but found {{actual}}.&#34;}},&#34;space-unary-ops&#34;:{&#34;type&#34;:&#34;layout&#34;,&#34;docs&#34;:{&#34;description&#34;:&#34;Enforce consistent spacing before or after unary operators&#34;,&#34;recommended&#34;:false,&#34;url&#34;:&#34;https://eslint.org/docs/rules/space-unary-ops&#34;},&#34;fixable&#34;:&#34;whitespace&#34;,&#34;schema&#34;:[{&#34;type&#34;:&#34;object&#34;,&#34;properties&#34;:{&#34;words&#34;:{&#34;type&#34;:&#34;boolean&#34;,&#34;default&#34;:true},&#34;nonwords&#34;:{&#34;type&#34;:&#34;boolean&#34;,&#34;default&#34;:false},&#34;overrides&#34;:{&#34;type&#34;:&#34;object&#34;,&#34;additionalProperties&#34;:{&#34;type&#34;:&#34;boolean&#34;}}},&#34;additionalProperties&#34;:false}],&#34;messages&#34;:{&#34;unexpectedBefore&#34;:&#34;Unexpected space before unary operator &#39;{{operator}}&#39;.&#34;,&#34;unexpectedAfter&#34;:&#34;Unexpected space after unary operator &#39;{{operator}}&#39;.&#34;,&#34;unexpectedAfterWord&#34;:&#34;Unexpected space after unary word operator &#39;{{word}}&#39;.&#34;,&#34;wordOperator&#34;:&#34;Unary word operator &#39;{{word}}&#39; must be followed by whitespace.&#34;,&#34;operator&#34;:&#34;Unary operator &#39;{{operator}}&#39; must be followed by whitespace.&#34;,&#34;beforeUnaryExpressions&#34;:&#34;Space is required before unary expressions &#39;{{token}}&#39;.&#34;}},&#34;semi&#34;:{&#34;type&#34;:&#34;layout&#34;,&#34;docs&#34;:{&#34;description&#34;:&#34;Require or disallow semicolons instead of ASI&#34;,&#34;recommended&#34;:false,&#34;url&#34;:&#34;https://eslint.org/docs/rules/semi&#34;},&#34;fixable&#34;:&#34;code&#34;,&#34;schema&#34;:{&#34;anyOf&#34;:[{&#34;type&#34;:&#34;array&#34;,&#34;items&#34;:[{&#34;enum&#34;:[&#34;never&#34;]},{&#34;type&#34;:&#34;object&#34;,&#34;properties&#34;:{&#34;beforeStatementContinuationChars&#34;:{&#34;enum&#34;:[&#34;always&#34;,&#34;any&#34;,&#34;never&#34;]}},&#34;additionalProperties&#34;:false}],&#34;minItems&#34;:0,&#34;maxItems&#34;:2},{&#34;type&#34;:&#34;array&#34;,&#34;items&#34;:[{&#34;enum&#34;:[&#34;always&#34;]},{&#34;type&#34;:&#34;object&#34;,&#34;properties&#34;:{&#34;omitLastInOneLineBlock&#34;:{&#34;type&#34;:&#34;boolean&#34;}},&#34;additionalProperties&#34;:false}],&#34;minItems&#34;:0,&#34;maxItems&#34;:2}]},&#34;messages&#34;:{&#34;missingSemi&#34;:&#34;Missing semicolon.&#34;,&#34;extraSemi&#34;:&#34;Extra semicolon.&#34;}},&#34;consistent-return&#34;:{&#34;type&#34;:&#34;suggestion&#34;,&#34;docs&#34;:{&#34;description&#34;:&#34;Require `return` statements to either always or never specify values&#34;,&#34;recommended&#34;:false,&#34;url&#34;:&#34;https://eslint.org/docs/rules/consistent-return&#34;},&#34;schema&#34;:[{&#34;type&#34;:&#34;object&#34;,&#34;properties&#34;:{&#34;treatUndefinedAsUnspecified&#34;:{&#34;type&#34;:&#34;boolean&#34;,&#34;default&#34;:false}},&#34;additionalProperties&#34;:false}],&#34;messages&#34;:{&#34;missingReturn&#34;:&#34;Expected to return a value at the end of {{name}}.&#34;,&#34;missingReturnValue&#34;:&#34;{{name}} expected a return value.&#34;,&#34;unexpectedReturnValue&#34;:&#34;{{name}} expected no return value.&#34;}}}}} +``` + +### json + +```text +[{&#34;filePath&#34;:&#34;/var/lib/jenkins/workspace/Releases/eslint Release/eslint/fullOfProblems.js&#34;,&#34;messages&#34;:[{&#34;ruleId&#34;:&#34;no-unused-vars&#34;,&#34;severity&#34;:2,&#34;message&#34;:&#34;&#39;addOne&#39; is defined but never used.&#34;,&#34;line&#34;:1,&#34;column&#34;:10,&#34;nodeType&#34;:&#34;Identifier&#34;,&#34;messageId&#34;:&#34;unusedVar&#34;,&#34;endLine&#34;:1,&#34;endColumn&#34;:16},{&#34;ruleId&#34;:&#34;use-isnan&#34;,&#34;severity&#34;:2,&#34;message&#34;:&#34;Use the isNaN function to compare with NaN.&#34;,&#34;line&#34;:2,&#34;column&#34;:9,&#34;nodeType&#34;:&#34;BinaryExpression&#34;,&#34;messageId&#34;:&#34;comparisonWithNaN&#34;,&#34;endLine&#34;:2,&#34;endColumn&#34;:17},{&#34;ruleId&#34;:&#34;space-unary-ops&#34;,&#34;severity&#34;:2,&#34;message&#34;:&#34;Unexpected space before unary operator &#39;++&#39;.&#34;,&#34;line&#34;:3,&#34;column&#34;:16,&#34;nodeType&#34;:&#34;UpdateExpression&#34;,&#34;messageId&#34;:&#34;unexpectedBefore&#34;,&#34;endLine&#34;:3,&#34;endColumn&#34;:20,&#34;fix&#34;:{&#34;range&#34;:[57,58],&#34;text&#34;:&#34;&#34;}},{&#34;ruleId&#34;:&#34;semi&#34;,&#34;severity&#34;:1,&#34;message&#34;:&#34;Missing semicolon.&#34;,&#34;line&#34;:3,&#34;column&#34;:20,&#34;nodeType&#34;:&#34;ReturnStatement&#34;,&#34;messageId&#34;:&#34;missingSemi&#34;,&#34;endLine&#34;:4,&#34;endColumn&#34;:1,&#34;fix&#34;:{&#34;range&#34;:[60,60],&#34;text&#34;:&#34;;&#34;}},{&#34;ruleId&#34;:&#34;no-else-return&#34;,&#34;severity&#34;:1,&#34;message&#34;:&#34;Unnecessary &#39;else&#39; after &#39;return&#39;.&#34;,&#34;line&#34;:4,&#34;column&#34;:12,&#34;nodeType&#34;:&#34;BlockStatement&#34;,&#34;messageId&#34;:&#34;unexpected&#34;,&#34;endLine&#34;:6,&#34;endColumn&#34;:6,&#34;fix&#34;:{&#34;range&#34;:[0,94],&#34;text&#34;:&#34;function addOne(i) {\n if (i != NaN) {\n return i ++\n } \n return\n \n}&#34;}},{&#34;ruleId&#34;:&#34;indent&#34;,&#34;severity&#34;:1,&#34;message&#34;:&#34;Expected indentation of 8 spaces but found 6.&#34;,&#34;line&#34;:5,&#34;column&#34;:1,&#34;nodeType&#34;:&#34;Keyword&#34;,&#34;messageId&#34;:&#34;wrongIndentation&#34;,&#34;endLine&#34;:5,&#34;endColumn&#34;:7,&#34;fix&#34;:{&#34;range&#34;:[74,80],&#34;text&#34;:&#34; &#34;}},{&#34;ruleId&#34;:&#34;consistent-return&#34;,&#34;severity&#34;:2,&#34;message&#34;:&#34;Function &#39;addOne&#39; expected a return value.&#34;,&#34;line&#34;:5,&#34;column&#34;:7,&#34;nodeType&#34;:&#34;ReturnStatement&#34;,&#34;messageId&#34;:&#34;missingReturnValue&#34;,&#34;endLine&#34;:5,&#34;endColumn&#34;:13},{&#34;ruleId&#34;:&#34;semi&#34;,&#34;severity&#34;:1,&#34;message&#34;:&#34;Missing semicolon.&#34;,&#34;line&#34;:5,&#34;column&#34;:13,&#34;nodeType&#34;:&#34;ReturnStatement&#34;,&#34;messageId&#34;:&#34;missingSemi&#34;,&#34;endLine&#34;:6,&#34;endColumn&#34;:1,&#34;fix&#34;:{&#34;range&#34;:[86,86],&#34;text&#34;:&#34;;&#34;}},{&#34;ruleId&#34;:&#34;no-extra-semi&#34;,&#34;severity&#34;:2,&#34;message&#34;:&#34;Unnecessary semicolon.&#34;,&#34;line&#34;:7,&#34;column&#34;:2,&#34;nodeType&#34;:&#34;EmptyStatement&#34;,&#34;messageId&#34;:&#34;unexpected&#34;,&#34;endLine&#34;:7,&#34;endColumn&#34;:3,&#34;fix&#34;:{&#34;range&#34;:[93,95],&#34;text&#34;:&#34;}&#34;}}],&#34;suppressedMessages&#34;:[],&#34;errorCount&#34;:5,&#34;fatalErrorCount&#34;:0,&#34;warningCount&#34;:4,&#34;fixableErrorCount&#34;:2,&#34;fixableWarningCount&#34;:4,&#34;source&#34;:&#34;function addOne(i) {\n if (i != NaN) {\n return i ++\n } else {\n return\n }\n};&#34;}] +``` + +### junit + +```text +&lt;?xml version=&#34;1.0&#34; encoding=&#34;utf-8&#34;?&gt; +&lt;testsuites&gt; +&lt;testsuite package=&#34;org.eslint&#34; time=&#34;0&#34; tests=&#34;9&#34; errors=&#34;9&#34; name=&#34;/var/lib/jenkins/workspace/Releases/eslint Release/eslint/fullOfProblems.js&#34;&gt; +&lt;testcase time=&#34;0&#34; name=&#34;org.eslint.no-unused-vars&#34; classname=&#34;/var/lib/jenkins/workspace/Releases/eslint Release/eslint/fullOfProblems&#34;&gt;&lt;failure message=&#34;&amp;apos;addOne&amp;apos; is defined but never used.&#34;&gt;&lt;![CDATA[line 1, col 10, Error - &amp;apos;addOne&amp;apos; is defined but never used. (no-unused-vars)]]&gt;&lt;/failure&gt;&lt;/testcase&gt; +&lt;testcase time=&#34;0&#34; name=&#34;org.eslint.use-isnan&#34; classname=&#34;/var/lib/jenkins/workspace/Releases/eslint Release/eslint/fullOfProblems&#34;&gt;&lt;failure message=&#34;Use the isNaN function to compare with NaN.&#34;&gt;&lt;![CDATA[line 2, col 9, Error - Use the isNaN function to compare with NaN. (use-isnan)]]&gt;&lt;/failure&gt;&lt;/testcase&gt; +&lt;testcase time=&#34;0&#34; name=&#34;org.eslint.space-unary-ops&#34; classname=&#34;/var/lib/jenkins/workspace/Releases/eslint Release/eslint/fullOfProblems&#34;&gt;&lt;failure message=&#34;Unexpected space before unary operator &amp;apos;++&amp;apos;.&#34;&gt;&lt;![CDATA[line 3, col 16, Error - Unexpected space before unary operator &amp;apos;++&amp;apos;. (space-unary-ops)]]&gt;&lt;/failure&gt;&lt;/testcase&gt; +&lt;testcase time=&#34;0&#34; name=&#34;org.eslint.semi&#34; classname=&#34;/var/lib/jenkins/workspace/Releases/eslint Release/eslint/fullOfProblems&#34;&gt;&lt;failure message=&#34;Missing semicolon.&#34;&gt;&lt;![CDATA[line 3, col 20, Warning - Missing semicolon. (semi)]]&gt;&lt;/failure&gt;&lt;/testcase&gt; +&lt;testcase time=&#34;0&#34; name=&#34;org.eslint.no-else-return&#34; classname=&#34;/var/lib/jenkins/workspace/Releases/eslint Release/eslint/fullOfProblems&#34;&gt;&lt;failure message=&#34;Unnecessary &amp;apos;else&amp;apos; after &amp;apos;return&amp;apos;.&#34;&gt;&lt;![CDATA[line 4, col 12, Warning - Unnecessary &amp;apos;else&amp;apos; after &amp;apos;return&amp;apos;. (no-else-return)]]&gt;&lt;/failure&gt;&lt;/testcase&gt; +&lt;testcase time=&#34;0&#34; name=&#34;org.eslint.indent&#34; classname=&#34;/var/lib/jenkins/workspace/Releases/eslint Release/eslint/fullOfProblems&#34;&gt;&lt;failure message=&#34;Expected indentation of 8 spaces but found 6.&#34;&gt;&lt;![CDATA[line 5, col 1, Warning - Expected indentation of 8 spaces but found 6. (indent)]]&gt;&lt;/failure&gt;&lt;/testcase&gt; +&lt;testcase time=&#34;0&#34; name=&#34;org.eslint.consistent-return&#34; classname=&#34;/var/lib/jenkins/workspace/Releases/eslint Release/eslint/fullOfProblems&#34;&gt;&lt;failure message=&#34;Function &amp;apos;addOne&amp;apos; expected a return value.&#34;&gt;&lt;![CDATA[line 5, col 7, Error - Function &amp;apos;addOne&amp;apos; expected a return value. (consistent-return)]]&gt;&lt;/failure&gt;&lt;/testcase&gt; +&lt;testcase time=&#34;0&#34; name=&#34;org.eslint.semi&#34; classname=&#34;/var/lib/jenkins/workspace/Releases/eslint Release/eslint/fullOfProblems&#34;&gt;&lt;failure message=&#34;Missing semicolon.&#34;&gt;&lt;![CDATA[line 5, col 13, Warning - Missing semicolon. (semi)]]&gt;&lt;/failure&gt;&lt;/testcase&gt; +&lt;testcase time=&#34;0&#34; name=&#34;org.eslint.no-extra-semi&#34; classname=&#34;/var/lib/jenkins/workspace/Releases/eslint Release/eslint/fullOfProblems&#34;&gt;&lt;failure message=&#34;Unnecessary semicolon.&#34;&gt;&lt;![CDATA[line 7, col 2, Error - Unnecessary semicolon. (no-extra-semi)]]&gt;&lt;/failure&gt;&lt;/testcase&gt; +&lt;/testsuite&gt; +&lt;/testsuites&gt; + +``` + +### stylish + +```text + +/var/lib/jenkins/workspace/Releases/eslint Release/eslint/fullOfProblems.js + 1:10 error &#39;addOne&#39; is defined but never used no-unused-vars + 2:9 error Use the isNaN function to compare with NaN use-isnan + 3:16 error Unexpected space before unary operator &#39;++&#39; space-unary-ops + 3:20 warning Missing semicolon semi + 4:12 warning Unnecessary &#39;else&#39; after &#39;return&#39; no-else-return + 5:1 warning Expected indentation of 8 spaces but found 6 indent + 5:7 error Function &#39;addOne&#39; expected a return value consistent-return + 5:13 warning Missing semicolon semi + 7:2 error Unnecessary semicolon no-extra-semi + +✖ 9 problems (5 errors, 4 warnings) + 2 errors and 4 warnings potentially fixable with the `--fix` option. + +``` + +### tap + +```text +TAP version 13 +1..1 +not ok 1 - /var/lib/jenkins/workspace/Releases/eslint Release/eslint/fullOfProblems.js + --- + message: &#39;&#39;&#39;addOne&#39;&#39; is defined but never used.&#39; + severity: error + data: + line: 1 + column: 10 + ruleId: no-unused-vars + messages: + - message: Use the isNaN function to compare with NaN. + severity: error + data: + line: 2 + column: 9 + ruleId: use-isnan + - message: Unexpected space before unary operator &#39;++&#39;. + severity: error + data: + line: 3 + column: 16 + ruleId: space-unary-ops + - message: Missing semicolon. + severity: warning + data: + line: 3 + column: 20 + ruleId: semi + - message: Unnecessary &#39;else&#39; after &#39;return&#39;. + severity: warning + data: + line: 4 + column: 12 + ruleId: no-else-return + - message: Expected indentation of 8 spaces but found 6. + severity: warning + data: + line: 5 + column: 1 + ruleId: indent + - message: Function &#39;addOne&#39; expected a return value. + severity: error + data: + line: 5 + column: 7 + ruleId: consistent-return + - message: Missing semicolon. + severity: warning + data: + line: 5 + column: 13 + ruleId: semi + - message: Unnecessary semicolon. + severity: error + data: + line: 7 + column: 2 + ruleId: no-extra-semi + ... + +``` + +### unix + +```text +/var/lib/jenkins/workspace/Releases/eslint Release/eslint/fullOfProblems.js:1:10: &#39;addOne&#39; is defined but never used. [Error/no-unused-vars] +/var/lib/jenkins/workspace/Releases/eslint Release/eslint/fullOfProblems.js:2:9: Use the isNaN function to compare with NaN. [Error/use-isnan] +/var/lib/jenkins/workspace/Releases/eslint Release/eslint/fullOfProblems.js:3:16: Unexpected space before unary operator &#39;++&#39;. [Error/space-unary-ops] +/var/lib/jenkins/workspace/Releases/eslint Release/eslint/fullOfProblems.js:3:20: Missing semicolon. [Warning/semi] +/var/lib/jenkins/workspace/Releases/eslint Release/eslint/fullOfProblems.js:4:12: Unnecessary &#39;else&#39; after &#39;return&#39;. [Warning/no-else-return] +/var/lib/jenkins/workspace/Releases/eslint Release/eslint/fullOfProblems.js:5:1: Expected indentation of 8 spaces but found 6. [Warning/indent] +/var/lib/jenkins/workspace/Releases/eslint Release/eslint/fullOfProblems.js:5:7: Function &#39;addOne&#39; expected a return value. [Error/consistent-return] +/var/lib/jenkins/workspace/Releases/eslint Release/eslint/fullOfProblems.js:5:13: Missing semicolon. [Warning/semi] +/var/lib/jenkins/workspace/Releases/eslint Release/eslint/fullOfProblems.js:7:2: Unnecessary semicolon. [Error/no-extra-semi] + +9 problems +``` + +### visualstudio + +```text +/var/lib/jenkins/workspace/Releases/eslint Release/eslint/fullOfProblems.js(1,10): error no-unused-vars : &#39;addOne&#39; is defined but never used. +/var/lib/jenkins/workspace/Releases/eslint Release/eslint/fullOfProblems.js(2,9): error use-isnan : Use the isNaN function to compare with NaN. +/var/lib/jenkins/workspace/Releases/eslint Release/eslint/fullOfProblems.js(3,16): error space-unary-ops : Unexpected space before unary operator &#39;++&#39;. +/var/lib/jenkins/workspace/Releases/eslint Release/eslint/fullOfProblems.js(3,20): warning semi : Missing semicolon. +/var/lib/jenkins/workspace/Releases/eslint Release/eslint/fullOfProblems.js(4,12): warning no-else-return : Unnecessary &#39;else&#39; after &#39;return&#39;. +/var/lib/jenkins/workspace/Releases/eslint Release/eslint/fullOfProblems.js(5,1): warning indent : Expected indentation of 8 spaces but found 6. +/var/lib/jenkins/workspace/Releases/eslint Release/eslint/fullOfProblems.js(5,7): error consistent-return : Function &#39;addOne&#39; expected a return value. +/var/lib/jenkins/workspace/Releases/eslint Release/eslint/fullOfProblems.js(5,13): warning semi : Missing semicolon. +/var/lib/jenkins/workspace/Releases/eslint Release/eslint/fullOfProblems.js(7,2): error no-extra-semi : Unnecessary semicolon. + +9 problems +``` diff --git a/eslint/docs/user-guide/getting-started.md b/eslint/docs/src/user-guide/getting-started.md similarity index 74% rename from eslint/docs/user-guide/getting-started.md rename to eslint/docs/src/user-guide/getting-started.md index cf808dd..675e94f 100644 --- a/eslint/docs/user-guide/getting-started.md +++ b/eslint/docs/src/user-guide/getting-started.md @@ -1,4 +1,13 @@ -# Getting Started with ESLint +--- +title: Getting Started with ESLint +layout: doc +eleventyNavigation: + key: getting started + parent: user guide + title: Getting Started + order: 1 + +--- ESLint is a tool for identifying and reporting on patterns found in ECMAScript/JavaScript code, with the goal of making code more consistent and avoiding bugs. In many ways, it is similar to JSLint and JSHint with a few exceptions: @@ -10,45 +19,31 @@ ESLint is a tool for identifying and reporting on patterns found in ECMAScript/J Prerequisites: [Node.js](https://nodejs.org/en/) (`^12.22.0`, `^14.17.0`, or `>=16.0.0`) built with SSL support. (If you are using an official Node.js distribution, SSL is always built in.) -You can install ESLint using npm or yarn: - -```sh -npm install eslint --save-dev - -# or - -yarn add eslint --dev -``` - -You should then set up a configuration file, and the easiest way to do that is to use the `--init` flag: - -```sh -$ npx eslint --init - -# or +You can install and configure ESLint using this command: -$ yarn run eslint --init +```shell +npm init @eslint/config ``` -**Note:** `--init` assumes you have a `package.json` file already. If you don't, make sure to run `npm init` or `yarn init` beforehand. +**Note:** `npm init @eslint/config` assumes you have a `package.json` file already. If you don't, make sure to run `npm init` or `yarn init` beforehand. After that, you can run ESLint on any file or directory like this: -```sh -$ npx eslint yourfile.js +```shell +npx eslint yourfile.js # or -$ yarn run eslint yourfile.js +yarn run eslint yourfile.js ``` It is also possible to install ESLint globally rather than locally (using `npm install eslint --global`). However, this is not recommended, and any plugins or shareable configs that you use must be installed locally in either case. ## Configuration -**Note:** If you are coming from a version before 1.0.0 please see the [migration guide](migrating-to-1.0.0.md). +**Note:** If you are coming from a version before 1.0.0 please see the [migration guide](migrating-to-1.0.0). -After running `eslint --init`, you'll have a `.eslintrc.{js,yml,json}` file in your directory. In it, you'll see some rules configured like this: +After running `npm init @eslint/config`, you'll have a `.eslintrc.{js,yml,json}` file in your directory. In it, you'll see some rules configured like this: ```json { @@ -82,7 +77,7 @@ Because of this line, all of the rules marked "(recommended)" on the [rules page ## Next Steps * Learn about [advanced configuration](configuring/) of ESLint. -* Get familiar with the [command line options](command-line-interface.md). -* Explore [ESLint integrations](integrations.md) into other tools like editors, build systems, and more. -* Can't find just the right rule? Make your own [custom rule](/docs/developer-guide/working-with-rules.md). +* Get familiar with the [command line options](command-line-interface). +* Explore [ESLint integrations](integrations) into other tools like editors, build systems, and more. +* Can't find just the right rule? Make your own [custom rule](/docs/developer-guide/working-with-rules). * Make ESLint even better by [contributing](/docs/developer-guide/contributing/). diff --git a/eslint/docs/user-guide/README.md b/eslint/docs/src/user-guide/index.md similarity index 66% rename from eslint/docs/user-guide/README.md rename to eslint/docs/src/user-guide/index.md index 1fcb0df..3b26ee5 100644 --- a/eslint/docs/user-guide/README.md +++ b/eslint/docs/src/user-guide/index.md @@ -1,12 +1,19 @@ -# User Guide +--- +title: User Guide +layout: doc +eleventyNavigation: + key: user guide + title: User Guide + order: 1 +--- -This guide is intended for those who wish to use ESLint as an end-user. If you're looking for how to extend ESLint or work with the ESLint source code, please see the [Developer Guide](../developer-guide). +This guide is intended for those who wish to use ESLint as an end-user. If you're looking for how to extend ESLint or work with the ESLint source code, please see the [Developer Guide](../developer-guide/). -## [Getting Started](getting-started.md) +## [Getting Started](getting-started) Want to skip ahead and just start using ESLint? This section gives a high-level overview of installation, setup, and configuration options. -## [Rules](../rules) +## [Rules](../rules/) ESLint has a lot of rules that you can configure to fine-tune it to your project. This section is an exhaustive list of every rule and link to each rule's documentation. @@ -14,15 +21,15 @@ ESLint has a lot of rules that you can configure to fine-tune it to your project Once you've got ESLint running, you'll probably want to adjust the configuration to better suit your project. This section explains all the different ways you can configure ESLint. -## [Command Line Interface](command-line-interface.md) +## [Command Line Interface](command-line-interface) There are a lot of command line flags for ESLint and this section explains what they do. -## [Integrations](integrations.md) +## [Integrations](integrations) Wondering if ESLint will work with your favorite editor or build system? This section has a list of all known integrations (submitted by their authors). -## [Rule Deprecation](rule-deprecation.md) +## [Rule Deprecation](rule-deprecation) The ESLint team is committed to making upgrading as easy and painless as possible. This section outlines the guidelines the team has set in place for the deprecation of rules in future releases. @@ -30,10 +37,11 @@ The ESLint team is committed to making upgrading as easy and painless as possibl If you were using a prior version of ESLint, you can get help with the transition by reading: -- [migrating-to-1.0.0](migrating-to-1.0.0.md) -- [migrating-to-2.0.0](migrating-to-2.0.0.md) -- [migrating-to-3.0.0](migrating-to-3.0.0.md) -- [migrating-to-4.0.0](migrating-to-4.0.0.md) -- [migrating-to-5.0.0](migrating-to-5.0.0.md) -- [migrating-to-6.0.0](migrating-to-6.0.0.md) -- [migrating-to-7.0.0](migrating-to-7.0.0.md) +* [migrating-to-1.0.0](migrating-to-1.0.0) +* [migrating-to-2.0.0](migrating-to-2.0.0) +* [migrating-to-3.0.0](migrating-to-3.0.0) +* [migrating-to-4.0.0](migrating-to-4.0.0) +* [migrating-to-5.0.0](migrating-to-5.0.0) +* [migrating-to-6.0.0](migrating-to-6.0.0) +* [migrating-to-7.0.0](migrating-to-7.0.0) +* [migrating-to-8.0.0](migrating-to-8.0.0) diff --git a/eslint/docs/user-guide/integrations.md b/eslint/docs/src/user-guide/integrations.md similarity index 92% rename from eslint/docs/user-guide/integrations.md rename to eslint/docs/src/user-guide/integrations.md index f7680be..5d73484 100644 --- a/eslint/docs/user-guide/integrations.md +++ b/eslint/docs/src/user-guide/integrations.md @@ -1,4 +1,13 @@ -# Integrations +--- +title: Integrations +layout: doc +eleventyNavigation: + key: integrations + parent: user guide + title: Integrations + order: 6 + +--- ## Editors @@ -14,7 +23,9 @@ * TextMate 2: * [eslint.tmbundle](https://github.com/ryanfitzer/eslint.tmbundle) * [javascript-eslint.tmbundle](https://github.com/natesilva/javascript-eslint.tmbundle) -* Atom: [linter-eslint](https://atom.io/packages/linter-eslint) +* Atom: + * [linter-eslint](https://atom.io/packages/linter-eslint) + * [fast-eslint-8](https://atom.io/packages/fast-eslint-8) * IntelliJ IDEA, WebStorm, PhpStorm, PyCharm, RubyMine, and other JetBrains IDEs: [How to use ESLint](https://www.jetbrains.com/help/webstorm/eslint.html) * Visual Studio Code: [ESLint Extension](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint) * Brackets: Included and [Brackets ESLint](https://github.com/brackets-userland/brackets-eslint) diff --git a/eslint/docs/user-guide/migrating-from-jscs.md b/eslint/docs/src/user-guide/migrating-from-jscs.md similarity index 88% rename from eslint/docs/user-guide/migrating-from-jscs.md rename to eslint/docs/src/user-guide/migrating-from-jscs.md index e05ee70..bcb0761 100644 --- a/eslint/docs/user-guide/migrating-from-jscs.md +++ b/eslint/docs/src/user-guide/migrating-from-jscs.md @@ -1,4 +1,8 @@ -# Migrating from JSCS +--- +title: Migrating from JSCS +layout: doc + +--- In April 2016, we [announced](https://eslint.org/blog/2016/04/welcoming-jscs-to-eslint) that the JSCS project was shutting down and the JSCS team would be joining the ESLint team. This guide is intended to help those who are using JSCS to migrate their settings and projects to use ESLint. We've tried to automate as much of the conversion as possible, but there are some manual changes that are needed. @@ -7,7 +11,7 @@ In April 2016, we [announced](https://eslint.org/blog/2016/04/welcoming-jscs-to- Before beginning the process of migrating to ESLint, it's helpful to understand some of the terminology that ESLint uses and how it relates to terminology that JSCS uses. * **Configuration File** - In JSCS, the configuration file is `.jscsrc`, `.jscsrc.json`, `.jscsrc.yaml`, or `.jscsrs.js`. In ESLint, the configuration file can be `.eslintrc.json`, `.eslintrc.yml`, `.eslintrc.yaml`, or `.eslintrc.js` (there is also a deprecated `.eslintrc` file format). -* **Presets** - In JSCS, there were numerous predefined configurations shipped directly within JSCS. ESLint ships with just one predefined configuration (`eslint:recommended`) that has no style rules enabled. However, ESLint does support [shareable configs](https://eslint.org/docs/developer-guide/shareable-configs). Shareable configs are configurations that are published on their own to npm and there are shareable configs available for almost all of the JSCS presets (see the "Converting Presets" section below). Additionally, the "preset" option in a configuration file is the equivalent of the ESLint "extends" option. +* **Presets** - In JSCS, there were numerous predefined configurations shipped directly within JSCS. ESLint ships with just one predefined configuration (`eslint:recommended`) that has no style rules enabled. However, ESLint does support [shareable configs](https://eslint.org/docs/developer-guide/shareable-configs). Shareable configs are configurations that are published on their own to npm and there are shareable configs available for almost all of the JSCS presets (see [the "Converting Presets" section](#converting-presets) below). Additionally, the `preset` option in a configuration file is the equivalent of the ESLint `extends` option. ## Convert Configuration Files Using Polyjuice @@ -15,34 +19,34 @@ Before beginning the process of migrating to ESLint, it's helpful to understand To install Polyjuice: -```sh -$ npm install -g polyjuice +```shell +npm install -g polyjuice ``` Polyjuice works with JSON configuration files, so if you're using a JavaScript or YAML JSCS configuration file, you should first convert it into a JSON configuration file. To convert your configuration file, pass in the location of your `.jscs.json` file using the `--jscs` flag: -```sh -$ polyjuice --jscs .jscsrc.json > .eslintrc.json +```shell +polyjuice --jscs .jscsrc.json > .eslintrc.json ``` This creates a `.eslintrc.json` with the equivalent rules from `.jscsrc.json`. If you have multiple `.jscsrc.json` files, you can pass them all and Polyjuice will combine them into one `.eslintrc.json` file: -```sh -$ polyjuice --jscs .jscsrc.json ./foo/.jscsrc.json > .eslintrc.json +```shell +polyjuice --jscs .jscsrc.json ./foo/.jscsrc.json > .eslintrc.json ``` -**Note:** Polyjuice does a good job of creating a reasonable ESLint configuration from your JSCS configuration, but it may not be 100%. You may still see different warnings than you saw with JSCS, and so you may need to further modify your configuration after using Polyjuice. This is especially true if you're using inline comments to enable/disable certain rules in JSCS (you'll need to manually convert those to use ESLint-style comments instead, see "Disabling Rules Inline" later in this page). +**Note:** Polyjuice does a good job of creating a reasonable ESLint configuration from your JSCS configuration, but it may not be 100%. You may still see different warnings than you saw with JSCS, and so you may need to further modify your configuration after using Polyjuice. This is especially true if you're using inline comments to enable/disable certain rules in JSCS (you'll need to manually convert those to use ESLint-style comments instead, [see "Disabling Rules Inline"](#disabling-rules-inline) later in this page). ### Creating a New Configuration From Scratch If you don't want to convert your JSCS configuration directly into an ESLint configuration, then you can use ESLint's built-in wizard to get you started. Just run: -```sh -$ eslint --init +```shell +npm init @eslint/config ``` You'll be guided through a series of questions that will help you setup a basic configuration file to get you started. @@ -74,8 +78,8 @@ As an example, suppose that you are using the `airbnb` preset, so your `.jscsrc` In order to get the same functionality in ESLint, you would first need to install the `eslint-config-airbnb` shareable config package: -```sh -$ npm install eslint-config-airbnb-base --save-dev +```shell +npm install eslint-config-airbnb-base --save-dev ``` And then you would modify your configuration file like this: @@ -110,28 +114,28 @@ Both JSCS and ESLint have command line arguments corresponding to many of their JSCS uses the `--fix` option to apply automatic fixes to code: -```sh -$ jscs --fix file.js +```shell +jscs --fix file.js ``` ESLint has the same option: -```sh -$ eslint --fix file.js +```shell +eslint --fix file.js ``` ### `--auto-configure` The JSCS `--auto-configure` option created a configuration based on what it found in a given file: -```sh -$ jscs --auto-configure file.js +```shell +jscs --auto-configure file.js ``` In ESLint, there's a similar option when you use `--init`. Just select "Inspect your JavaScript file(s)": -```sh -$ eslint --init +```shell +eslint --init ? How would you like to configure ESLint? (Use arrow keys) > Answer questions about your style Use a popular style guide @@ -142,28 +146,28 @@ $ eslint --init JSCS allows you to specify a configuration file to use on the command line using either `--config` or `-c`, such as: -```sh -$ jscs --config myconfig.json file.js -$ jscs -c myconfig.json file.js +```shell +jscs --config myconfig.json file.js +jscs -c myconfig.json file.js ``` Both flags are also supported by ESLint: -```sh -$ eslint --config myconfig.json file.js -$ eslint -c myconfig.json file.js +```shell +eslint --config myconfig.json file.js +eslint -c myconfig.json file.js ``` ## Piping Code Into ESLint In JSCS, you can pipe code in like this: -```sh -$ cat file.js | jscs +```shell +cat file.js | jscs ``` In ESLint, you can also pipe in code, but you need to use the `--stdin` flag: -```sh -$ cat file.js | eslint --stdin +```shell +cat file.js | eslint --stdin ``` diff --git a/eslint/docs/user-guide/migrating-to-1.0.0.md b/eslint/docs/src/user-guide/migrating-to-1.0.0.md similarity index 99% rename from eslint/docs/user-guide/migrating-to-1.0.0.md rename to eslint/docs/src/user-guide/migrating-to-1.0.0.md index 637e305..70bdb5b 100644 --- a/eslint/docs/user-guide/migrating-to-1.0.0.md +++ b/eslint/docs/src/user-guide/migrating-to-1.0.0.md @@ -1,4 +1,8 @@ -# Migrating to v1.0.0 +--- +title: Migrating to v1.0.0 +layout: doc + +--- ESLint v1.0.0 is the first major version release. As a result, there are some significant changes between how ESLint worked during its life in 0.x and how it will work going forward. These changes are the direct result of feedback from the ESLint community of users and were not made without due consideration for the upgrade path. We believe that these changes make ESLint even better, and while some work is necessary to upgrade, we hope the pain of this upgrade is small enough that you will see the benefit of upgrading. diff --git a/eslint/docs/user-guide/migrating-to-2.0.0.md b/eslint/docs/src/user-guide/migrating-to-2.0.0.md similarity index 97% rename from eslint/docs/user-guide/migrating-to-2.0.0.md rename to eslint/docs/src/user-guide/migrating-to-2.0.0.md index c5f50b3..974e89f 100644 --- a/eslint/docs/user-guide/migrating-to-2.0.0.md +++ b/eslint/docs/src/user-guide/migrating-to-2.0.0.md @@ -1,4 +1,8 @@ -# Migrating to v2.0.0 +--- +title: Migrating to v2.0.0 +layout: doc + +--- ESLint v2.0.0 is the second major version release. As a result, there are some significant changes between how ESLint worked during its life in 0.x and 1.x and how it will work going forward. These changes are the direct result of feedback from the ESLint community of users and were not made without due consideration for the upgrade path. We believe that these changes make ESLint even better, and while some work is necessary to upgrade, we hope the pain of this upgrade is small enough that you will see the benefit of upgrading. @@ -307,7 +311,7 @@ The rule `func-style` has a default configuration of `"expression"`, but in ESLi ESLint 2.0.0 removes these conflicting defaults, and so you may begin seeing linting errors related to these rules. -**To address:** If you would like to maintain the previous behavior, update your configuration for `no-multiple-empty-lines` by adding `{"max": 2}`, and change `func-style` to `"declaration"`. For example: +**To address:** If you would like to maintain the previous behavior, update your configuration for `no-multiple-empty-lines` by adding `{"max": 2}`, and change `func-style` to `"declaration"`. For example: ```json { @@ -347,7 +351,7 @@ var sourceCode = new SourceCode(text, ast); ## Rule Changes -* [`strict`](../rules/strict.md) - defaults to `"safe"` (previous default was `"function"`) +* [`strict`](../rules/strict) - defaults to `"safe"` (previous default was `"function"`) ## Plugins No Longer Have Default Configurations diff --git a/eslint/docs/user-guide/migrating-to-3.0.0.md b/eslint/docs/src/user-guide/migrating-to-3.0.0.md similarity index 99% rename from eslint/docs/user-guide/migrating-to-3.0.0.md rename to eslint/docs/src/user-guide/migrating-to-3.0.0.md index af19c76..ab31a4c 100644 --- a/eslint/docs/user-guide/migrating-to-3.0.0.md +++ b/eslint/docs/src/user-guide/migrating-to-3.0.0.md @@ -1,4 +1,8 @@ -# Migrating to v3.0.0 +--- +title: Migrating to v3.0.0 +layout: doc + +--- ESLint v3.0.0 is the third major version release. We have made several breaking changes in this release, however, we believe the changes to be small enough that they should not require significant changes for ESLint users. This guide is intended to walk you through the changes. diff --git a/eslint/docs/user-guide/migrating-to-4.0.0.md b/eslint/docs/src/user-guide/migrating-to-4.0.0.md similarity index 99% rename from eslint/docs/user-guide/migrating-to-4.0.0.md rename to eslint/docs/src/user-guide/migrating-to-4.0.0.md index 8f78291..e96b8ac 100644 --- a/eslint/docs/user-guide/migrating-to-4.0.0.md +++ b/eslint/docs/src/user-guide/migrating-to-4.0.0.md @@ -1,4 +1,8 @@ -# Migrating to v4.0.0 +--- +title: Migrating to v4.0.0 +layout: doc + +--- ESLint v4.0.0 is the fourth major version release. We have made several breaking changes in this release; however, we expect that most of the changes will only affect a very small percentage of users. This guide is intended to walk you through the changes. diff --git a/eslint/docs/user-guide/migrating-to-5.0.0.md b/eslint/docs/src/user-guide/migrating-to-5.0.0.md similarity index 99% rename from eslint/docs/user-guide/migrating-to-5.0.0.md rename to eslint/docs/src/user-guide/migrating-to-5.0.0.md index 3729631..36db7d4 100644 --- a/eslint/docs/user-guide/migrating-to-5.0.0.md +++ b/eslint/docs/src/user-guide/migrating-to-5.0.0.md @@ -1,4 +1,8 @@ -# Migrating to v5.0.0 +--- +title: Migrating to v5.0.0 +layout: doc + +--- ESLint v5.0.0 is the fifth major version release. We have made a few breaking changes in this release, but we expect that most users will be able to upgrade without any modifications to their build. This guide is intended to walk you through the breaking changes. @@ -100,7 +104,7 @@ For compatibility, ESLint v5 will treat `ecmaFeatures: { experimentalObjectRestS Previous versions of ESLint silently ignored any nonexistent files and globs provided on the command line: ```bash -$ eslint nonexistent-file.js 'nonexistent-folder/**/*.js' # exits without any errors in ESLint v4 +eslint nonexistent-file.js 'nonexistent-folder/**/*.js' # exits without any errors in ESLint v4 ``` Many users found this behavior confusing, because if they made a typo in a filename, ESLint would appear to lint that file successfully while actually not linting anything. diff --git a/eslint/docs/user-guide/migrating-to-6.0.0.md b/eslint/docs/src/user-guide/migrating-to-6.0.0.md similarity index 99% rename from eslint/docs/user-guide/migrating-to-6.0.0.md rename to eslint/docs/src/user-guide/migrating-to-6.0.0.md index 225cc4c..84c74e4 100644 --- a/eslint/docs/user-guide/migrating-to-6.0.0.md +++ b/eslint/docs/src/user-guide/migrating-to-6.0.0.md @@ -1,4 +1,8 @@ -# Migrating to v6.0.0 +--- +title: Migrating to v6.0.0 +layout: doc + +--- ESLint v6.0.0 is a major release of ESLint. We have made a few breaking changes in this release. This guide is intended to walk you through the breaking changes. diff --git a/eslint/docs/user-guide/migrating-to-7.0.0.md b/eslint/docs/src/user-guide/migrating-to-7.0.0.md similarity index 84% rename from eslint/docs/user-guide/migrating-to-7.0.0.md rename to eslint/docs/src/user-guide/migrating-to-7.0.0.md index 2a640a7..9e2a702 100644 --- a/eslint/docs/user-guide/migrating-to-7.0.0.md +++ b/eslint/docs/src/user-guide/migrating-to-7.0.0.md @@ -1,4 +1,8 @@ -# Migrating to v7.0.0 +--- +title: Migrating to v7.0.0 +layout: doc + +--- ESLint v7.0.0 is a major release of ESLint. We have made a few breaking changes in this release. This guide is intended to walk you through the breaking changes. @@ -8,29 +12,29 @@ The lists below are ordered roughly by the number of users each change is expect ### Breaking changes for users -- [Node.js 8 is no longer supported](#drop-node-8) -- [Lint files matched by `overrides[].files` by default](#additional-lint-targets) -- [The base path of `overrides` and `ignorePatterns` is changed if the config file is given by the `--config`/`--ignore-path` options](#base-path-change) -- [The place where ESLint loads plugins from is changed](#plugin-loading-change) -- [Runtime deprecation warnings for `~/.eslintrc.*` config files](#runtime-deprecation-on-personal-config-files) -- [Default ignore patterns have changed](#default-ignore-patterns) -- [Description in directive comments](#description-in-directive-comments) -- [Node.js/CommonJS rules are deprecated](#deprecate-node-rules) -- [Several rules have been updated to cover more cases](#rules-strict) -- [`eslint:recommended` has been updated](#eslint-recommended) +* [Node.js 8 is no longer supported](#drop-node-8) +* [Lint files matched by `overrides[].files` by default](#additional-lint-targets) +* [The base path of `overrides` and `ignorePatterns` is changed if the config file is given by the `--config`/`--ignore-path` options](#base-path-change) +* [The place where ESLint loads plugins from is changed](#plugin-loading-change) +* [Runtime deprecation warnings for `~/.eslintrc.*` config files](#runtime-deprecation-on-personal-config-files) +* [Default ignore patterns have changed](#default-ignore-patterns) +* [Description in directive comments](#description-in-directive-comments) +* [Node.js/CommonJS rules are deprecated](#deprecate-node-rules) +* [Several rules have been updated to cover more cases](#rules-strict) +* [`eslint:recommended` has been updated](#eslint-recommended) ### Breaking changes for plugin developers -- [Node.js 8 is no longer supported](#drop-node-8) -- [Lint files matched by `overrides[].files` by default](#additional-lint-targets) -- [Plugin resolution has been updated](#plugin-loading-change) -- [Additional validation added to the `RuleTester` class](#rule-tester-strict) +* [Node.js 8 is no longer supported](#drop-node-8) +* [Lint files matched by `overrides[].files` by default](#additional-lint-targets) +* [Plugin resolution has been updated](#plugin-loading-change) +* [Additional validation added to the `RuleTester` class](#rule-tester-strict) ### Breaking changes for integration developers -- [Node.js 8 is no longer supported](#drop-node-8) -- [Plugin resolution has been updated](#plugin-loading-change) -- [The `CLIEngine` class has been deprecated](#deprecate-cliengine) +* [Node.js 8 is no longer supported](#drop-node-8) +* [Plugin resolution has been updated](#plugin-loading-change) +* [The `CLIEngine` class has been deprecated](#deprecate-cliengine) --- @@ -38,8 +42,8 @@ The lists below are ordered roughly by the number of users each change is expect Node.js 8 reached EOL in December 2019, and we are officially dropping support for it in this release. ESLint now supports the following versions of Node.js: -- Node.js 10 (`10.12.0` and above) -- Node.js 12 and above +* Node.js 10 (`10.12.0` and above) +* Node.js 12 and above **To address:** Make sure you upgrade to at least Node.js `10.12.0` when using ESLint v7.0.0. One important thing to double check is the Node.js version supported by your editor when using ESLint via editor integrations. If you are unable to upgrade, we recommend continuing to use ESLint 6 until you are able to upgrade Node.js. @@ -71,12 +75,12 @@ If you maintain plugins that check files with extensions other than `.js`, this Up until now, ESLint has resolved the following paths relative to the directory path of the _entry_ configuration file: -- Configuration files (`.eslintrc.*`) - - relative paths in the `overrides[].files` setting - - relative paths in the `overrides[].excludedFiles` setting - - paths which start with `/` in the `ignorePatterns` setting -- Ignore files (`.eslintignore`) - - paths which start with `/` +* Configuration files (`.eslintrc.*`) + * relative paths in the `overrides[].files` setting + * relative paths in the `overrides[].excludedFiles` setting + * paths which start with `/` in the `ignorePatterns` setting +* Ignore files (`.eslintignore`) + * paths which start with `/` Starting in ESLint v7.0.0, configuration files and ignore files passed to ESLint using the `--config path/to/a-config` and `--ignore-path path/to/a-ignore` CLI flags, respectively, will resolve from the current working directory rather than the file location. This allows for users to utilize shared plugins without having to install them directly in their project. @@ -113,14 +117,14 @@ Personal config files have been deprecated since [v6.7.0](https://eslint.org/blo Up until now, ESLint has ignored the following files by default: -- Dotfiles (`.*`) -- `node_modules` in the current working directory (`/node_modules/*`) -- `bower_components` in the current working directory (`/bower_components/*`) +* Dotfiles (`.*`) +* `node_modules` in the current working directory (`/node_modules/*`) +* `bower_components` in the current working directory (`/bower_components/*`) ESLint v7.0.0 ignores `node_modules/*` of subdirectories as well, but no longer ignores `bower_components/*` and `.eslintrc.js`. Therefore, the new default ignore patterns are: -- Dotfiles except `.eslintrc.*` (`.*` but not `.eslintrc.*`) -- `node_modules` (`/**/node_modules/*`) +* Dotfiles except `.eslintrc.*` (`.*` but not `.eslintrc.*`) +* `node_modules` (`/**/node_modules/*`) **To address:** Modify your `.eslintignore` or the `ignorePatterns` property of your config file if you don't want to lint `bower_components/*` and `.eslintrc.js`. @@ -165,16 +169,16 @@ The ten Node.js/CommonJS rules in core have been deprecated and moved to the [es Several rules have been enhanced and now report additional errors: -- [accessor-pairs](https://eslint.org/docs/rules/accessor-pairs) rule now recognizes class members by default. -- [array-callback-return](https://eslint.org/docs/rules/array-callback-return) rule now recognizes `flatMap` method. -- [computed-property-spacing](https://eslint.org/docs/rules/computed-property-spacing) rule now recognizes class members by default. -- [func-names](https://eslint.org/docs/rules/func-names) rule now recognizes function declarations in default exports. -- [no-extra-parens](https://eslint.org/docs/rules/no-extra-parens) rule now recognizes parentheses in assignment targets. -- [no-dupe-class-members](https://eslint.org/docs/rules/no-dupe-class-members) rule now recognizes computed keys for static class members. -- [no-magic-numbers](https://eslint.org/docs/rules/no-magic-numbers) rule now recognizes bigint literals. -- [radix](https://eslint.org/docs/rules/radix) rule now recognizes invalid numbers for the second parameter of `parseInt()`. -- [use-isnan](https://eslint.org/docs/rules/use-isnan) rule now recognizes class members by default. -- [yoda](https://eslint.org/docs/rules/yoda) rule now recognizes bigint literals. +* [accessor-pairs](https://eslint.org/docs/rules/accessor-pairs) rule now recognizes class members by default. +* [array-callback-return](https://eslint.org/docs/rules/array-callback-return) rule now recognizes `flatMap` method. +* [computed-property-spacing](https://eslint.org/docs/rules/computed-property-spacing) rule now recognizes class members by default. +* [func-names](https://eslint.org/docs/rules/func-names) rule now recognizes function declarations in default exports. +* [no-extra-parens](https://eslint.org/docs/rules/no-extra-parens) rule now recognizes parentheses in assignment targets. +* [no-dupe-class-members](https://eslint.org/docs/rules/no-dupe-class-members) rule now recognizes computed keys for static class members. +* [no-magic-numbers](https://eslint.org/docs/rules/no-magic-numbers) rule now recognizes bigint literals. +* [radix](https://eslint.org/docs/rules/radix) rule now recognizes invalid numbers for the second parameter of `parseInt()`. +* [use-isnan](https://eslint.org/docs/rules/use-isnan) rule now recognizes class members by default. +* [yoda](https://eslint.org/docs/rules/yoda) rule now recognizes bigint literals. **To address:** Fix errors or disable these rules. @@ -184,9 +188,9 @@ Several rules have been enhanced and now report additional errors: Three new rules have been enabled in the `eslint:recommended` preset. -- [no-dupe-else-if](https://eslint.org/docs/rules/no-dupe-else-if) -- [no-import-assign](https://eslint.org/docs/rules/no-import-assign) -- [no-setter-return](https://eslint.org/docs/rules/no-setter-return) +* [no-dupe-else-if](https://eslint.org/docs/rules/no-dupe-else-if) +* [no-import-assign](https://eslint.org/docs/rules/no-import-assign) +* [no-setter-return](https://eslint.org/docs/rules/no-setter-return) **To address:** Fix errors or disable these rules. @@ -196,9 +200,9 @@ Three new rules have been enabled in the `eslint:recommended` preset. The `RuleTester` now validates the following: -- It fails test cases if the rule under test uses the non-standard `node.start` or `node.end` properties. Rules should use `node.range` instead. -- It fails test cases if the rule under test provides an autofix but a test case doesn't have an `output` property. Add an `output` property to test cases to test the rule's autofix functionality. -- It fails test cases if any unknown properties are found in the objects in the `errors` property. +* It fails test cases if the rule under test uses the non-standard `node.start` or `node.end` properties. Rules should use `node.range` instead. +* It fails test cases if the rule under test provides an autofix but a test case doesn't have an `output` property. Add an `output` property to test cases to test the rule's autofix functionality. +* It fails test cases if any unknown properties are found in the objects in the `errors` property. **To address:** Modify your rule or test case if existing test cases fail. @@ -226,7 +230,7 @@ The `CLIEngine` class provides a synchronous API that is blocking the implementa | `getRules()` | (not implemented yet) | | `resolveFileGlobPatterns()` | (removed ※2) | -- ※1 The `engine.getFormatter()` method currently returns the object of loaded packages as-is, which made it difficult to add new features to formatters for backward compatibility reasons. The new `eslint.loadFormatter()` method returns an adapter object that wraps the object of loaded packages, to ease the process of adding new features. Additionally, the adapter object has access to the `ESLint` instance to calculate default data (using loaded plugin rules to make `rulesMeta`, for example). As a result, the `ESLint` class only implements an instance version of the `loadFormatter()` method. -- ※2 Since ESLint 6, ESLint uses different logic from the `resolveFileGlobPatterns()` method to iterate files, making this method obsolete. +* ※1 The `engine.getFormatter()` method currently returns the object of loaded packages as-is, which made it difficult to add new features to formatters for backward compatibility reasons. The new `eslint.loadFormatter()` method returns an adapter object that wraps the object of loaded packages, to ease the process of adding new features. Additionally, the adapter object has access to the `ESLint` instance to calculate default data (using loaded plugin rules to make `rulesMeta`, for example). As a result, the `ESLint` class only implements an instance version of the `loadFormatter()` method. +* ※2 Since ESLint 6, ESLint uses different logic from the `resolveFileGlobPatterns()` method to iterate files, making this method obsolete. **Related issue(s):** [RFC40](https://github.com/eslint/rfcs/blob/master/designs/2019-move-to-async-api/README.md), [#12939](https://github.com/eslint/eslint/pull/12939) diff --git a/eslint/docs/user-guide/migrating-to-8.0.0.md b/eslint/docs/src/user-guide/migrating-to-8.0.0.md similarity index 89% rename from eslint/docs/user-guide/migrating-to-8.0.0.md rename to eslint/docs/src/user-guide/migrating-to-8.0.0.md index 444ac12..2b263e4 100644 --- a/eslint/docs/user-guide/migrating-to-8.0.0.md +++ b/eslint/docs/src/user-guide/migrating-to-8.0.0.md @@ -1,4 +1,13 @@ -# Migrating to v8.0.0 +--- +title: Migrating to v8.0.0 +layout: doc +eleventyNavigation: + key: migrating to v8 + parent: user guide + title: Migrating to v8.x + order: 6 + +--- ESLint v8.0.0 is a major release of ESLint. We have made a few breaking changes in this release. This guide is intended to walk you through the breaking changes. @@ -8,26 +17,26 @@ The lists below are ordered roughly by the number of users each change is expect ### Breaking changes for users -- [Node.js 10, 13, and 15 are no longer supported](#drop-old-node) -- [Removed `codeframe` and `table` formatters](#removed-formatters) -- [`comma-dangle` rule schema is stricter](#comma-dangle) -- [Unused disable directives are now fixable](#directives) -- [`eslint:recommended` has been updated](#eslint-recommended) +* [Node.js 10, 13, and 15 are no longer supported](#drop-old-node) +* [Removed `codeframe` and `table` formatters](#removed-formatters) +* [`comma-dangle` rule schema is stricter](#comma-dangle) +* [Unused disable directives are now fixable](#directives) +* [`eslint:recommended` has been updated](#eslint-recommended) ### Breaking changes for plugin developers -- [Node.js 10, 13, and 15 are no longer supported](#drop-old-node) -- [Rules require `meta.hasSuggestions` to provide suggestions](#suggestions) -- [Rules require `meta.fixable` to provide fixes](#fixes) -- [`SourceCode#getComments()` fails in `RuleTester`](#get-comments) -- [Changes to shorthand property AST format](#ast-format) +* [Node.js 10, 13, and 15 are no longer supported](#drop-old-node) +* [Rules require `meta.hasSuggestions` to provide suggestions](#suggestions) +* [Rules require `meta.fixable` to provide fixes](#fixes) +* [`SourceCode#getComments()` fails in `RuleTester`](#get-comments) +* [Changes to shorthand property AST format](#ast-format) ### Breaking changes for integration developers -- [Node.js 10, 13, and 15 are no longer supported](#drop-old-node) -- [The `CLIEngine` class has been removed](#remove-cliengine) -- [The `linter` object has been removed](#remove-linter) -- [The `/lib` entrypoint has been removed](#remove-lib) +* [Node.js 10, 13, and 15 are no longer supported](#drop-old-node) +* [The `CLIEngine` class has been removed](#remove-cliengine) +* [The `linter` object has been removed](#remove-linter) +* [The `/lib` entrypoint has been removed](#remove-lib) --- @@ -35,9 +44,9 @@ The lists below are ordered roughly by the number of users each change is expect Node.js 10, 13, 15 all reached end of life either in 2020 or early 2021. ESLint is officially dropping support for these versions of Node.js starting with ESLint v8.0.0. ESLint now supports the following versions of Node.js: -- Node.js 12.22 and above -- Node.js 14 and above -- Node.js 16 and above +* Node.js 12.22 and above +* Node.js 14 and above +* Node.js 16 and above **To address:** Make sure you upgrade to at least Node.js `12.22.0` when using ESLint v8.0.0. One important thing to double check is the Node.js version supported by your editor when using ESLint via editor integrations. If you are unable to upgrade, we recommend continuing to use ESLint 7 until you are able to upgrade Node.js. @@ -67,10 +76,16 @@ With this configuration, the rule would ignore the third element in the array be **To address:** Change your rule configuration so that there are only two elements in the array, and the second element is either a string or an object, such as: -```jsonc +```json { "comma-dangle": ["error", "never"], - // or +} +``` + +or + +```json +{ "comma-dangle": ["error", { "arrays": "never", "objects": "never", @@ -95,10 +110,10 @@ In ESLint v7.0.0, using both `--report-unused-disable-directives` and `--fix` on Four new rules have been enabled in the `eslint:recommended` preset. -- [`no-loss-of-precision`](https://eslint.org/docs/rules/no-loss-of-precision) -- [`no-nonoctal-decimal-escape`](https://eslint.org/docs/rules/no-nonoctal-decimal-escape) -- [`no-unsafe-optional-chaining`](https://eslint.org/docs/rules/no-unsafe-optional-chaining) -- [`no-useless-backreference`](https://eslint.org/docs/rules/no-useless-backreference) +* [`no-loss-of-precision`](https://eslint.org/docs/rules/no-loss-of-precision) +* [`no-nonoctal-decimal-escape`](https://eslint.org/docs/rules/no-nonoctal-decimal-escape) +* [`no-unsafe-optional-chaining`](https://eslint.org/docs/rules/no-unsafe-optional-chaining) +* [`no-useless-backreference`](https://eslint.org/docs/rules/no-useless-backreference) **To address:** Fix errors or disable these rules. @@ -237,9 +252,9 @@ The `CLIEngine` class has been removed and replaced by the [`ESLint` class](http | `getRules()` | (removed ※2) | | `resolveFileGlobPatterns()` | (removed ※3) | -- ※1 The `engine.getFormatter()` method currently returns the object of loaded packages as-is, which made it difficult to add new features to formatters for backward compatibility reasons. The new `eslint.loadFormatter()` method returns an adapter object that wraps the object of loaded packages, to ease the process of adding new features. Additionally, the adapter object has access to the `ESLint` instance to calculate default data (using loaded plugin rules to make `rulesMeta`, for example). As a result, the `ESLint` class only implements an instance version of the `loadFormatter()` method. -- ※2 The `CLIEngine#getRules()` method had side effects and so was removed. If you were using `CLIEngine#getRules()` to retrieve meta information about rules based on linting results, use `ESLint#getRulesMetaForResults()` instead. If you were using `CLIEngine#getRules()` to retrieve all built-in rules, import `builtinRules` from `eslint/use-at-your-own-risk` for an unsupported API that allows access to internal rules. -- ※3 Since ESLint v6.0.0, ESLint uses different logic from the `resolveFileGlobPatterns()` method to iterate files, making this method obsolete. +* ※1 The `engine.getFormatter()` method currently returns the object of loaded packages as-is, which made it difficult to add new features to formatters for backward compatibility reasons. The new `eslint.loadFormatter()` method returns an adapter object that wraps the object of loaded packages, to ease the process of adding new features. Additionally, the adapter object has access to the `ESLint` instance to calculate default data (using loaded plugin rules to make `rulesMeta`, for example). As a result, the `ESLint` class only implements an instance version of the `loadFormatter()` method. +* ※2 The `CLIEngine#getRules()` method had side effects and so was removed. If you were using `CLIEngine#getRules()` to retrieve meta information about rules based on linting results, use `ESLint#getRulesMetaForResults()` instead. If you were using `CLIEngine#getRules()` to retrieve all built-in rules, import `builtinRules` from `eslint/use-at-your-own-risk` for an unsupported API that allows access to internal rules. +* ※3 Since ESLint v6.0.0, ESLint uses different logic from the `resolveFileGlobPatterns()` method to iterate files, making this method obsolete. **Related issue(s):** [RFC80](https://github.com/eslint/rfcs/tree/main/designs/2021-package-exports), [#14716](https://github.com/eslint/eslint/pull/14716), [#13654](https://github.com/eslint/eslint/issues/13654) diff --git a/eslint/docs/user-guide/rule-deprecation.md b/eslint/docs/src/user-guide/rule-deprecation.md similarity index 96% rename from eslint/docs/user-guide/rule-deprecation.md rename to eslint/docs/src/user-guide/rule-deprecation.md index e306916..7766b55 100644 --- a/eslint/docs/user-guide/rule-deprecation.md +++ b/eslint/docs/src/user-guide/rule-deprecation.md @@ -1,4 +1,8 @@ -# Rule Deprecation +--- +title: Rule Deprecation +layout: doc + +--- Balancing the trade-offs of improving a tool and the frustration these changes can cause is a difficult task. One key area in which this affects our users is in the removal of rules. diff --git a/eslint/docs/user-guide/configuring/README.md b/eslint/docs/user-guide/configuring/README.md deleted file mode 100644 index 2d22421..0000000 --- a/eslint/docs/user-guide/configuring/README.md +++ /dev/null @@ -1,52 +0,0 @@ -# Configuring ESLint - -ESLint is designed to be flexible and configurable for your use case. You can turn off every rule and run only with basic syntax validation or mix and match the bundled rules and your custom rules to fit the needs of your project. There are two primary ways to configure ESLint: - -1. **Configuration Comments** - use JavaScript comments to embed configuration information directly into a file. -1. **Configuration Files** - use a JavaScript, JSON, or YAML file to specify configuration information for an entire directory and all of its subdirectories. This can be in the form of an [`.eslintrc.*`](./configuration-files.md#configuration-file-formats) file or an `eslintConfig` field in a [`package.json`](https://docs.npmjs.com/files/package.json) file, both of which ESLint will look for and read automatically, or you can specify a configuration file on the [command line](https://eslint.org/docs/user-guide/command-line-interface). - -Here are some of the options that you can configure in ESLint: - -* [**Environments**](./language-options.md#specifying-environments) - which environments your script is designed to run in. Each environment brings with it a certain set of predefined global variables. -* [**Globals**](./language-options.md#specifying-globals) - the additional global variables your script accesses during execution. -* [**Rules**](rules.md) - which rules are enabled and at what error level. -* [**Plugins**](plugins.md) - which third-party plugins define additional rules, environments, configs, etc. for ESLint to use. - -All of these options give you fine-grained control over how ESLint treats your code. - -## Table of Contents - -[**Configuration Files**](configuration-files.md) - -* [Configuration File Formats](./configuration-files.md#configuration-file-formats) -* [Using Configuration Files](./configuration-files.md#using-configuration-files) -* [Adding Shared Settings](./configuration-files.md#adding-shared-settings) -* [Cascading and Hierarchy](./configuration-files.md#cascading-and-hierarchy) -* [Extending Configuration Files](./configuration-files.md#extending-configuration-files) -* [Configuration Based on Glob Patterns](./configuration-files.md#configuration-based-on-glob-patterns) -* [Personal Configuration Files](./configuration-files.md#personal-configuration-files-deprecated) - -[**Language Options**](language-options.md) - -* [Specifying Environments](./language-options.md#specifying-environments) -* [Specifying Globals](./language-options.md#specifying-globals) -* [Specifying Parser Options](./language-options.md#specifying-parser-options) - -[**Rules**](rules.md) - -* [Configuring Rules](./rules.md#configuring-rules) -* [Disabling Rules](./rules.md#disabling-rules) - -[**Plugins**](plugins.md) - -* [Specifying Parser](./plugins.md#specifying-parser) -* [Specifying Processor](./plugins.md#specifying-processor) -* [Configuring Plugins](./plugins.md#configuring-plugins) - -[**Ignoring Code**](ignoring-code.md) - -* [`ignorePatterns` in Config Files](./ignoring-code.md#ignorepatterns-in-config-files) -* [The `.eslintignore` File](./ignoring-code.md#the-eslintignore-file) -* [Using an Alternate File](./ignoring-code.md#using-an-alternate-file) -* [Using eslintIgnore in package.json](./ignoring-code.md#using-eslintignore-in-packagejson) -* [Ignored File Warnings](./ignoring-code.md#ignored-file-warnings) diff --git a/eslint/eslint.config.js b/eslint/eslint.config.js new file mode 100644 index 0000000..2156ebe --- /dev/null +++ b/eslint/eslint.config.js @@ -0,0 +1,231 @@ +/** + * @fileoverview ESLint configuration file + * @author Nicholas C. Zakas + */ + +"use strict"; + +/* + * IMPORTANT! + * + * Any changes made to this file must also be made to .eslintrc.js. + * + * Internally, ESLint is using the eslint.config.js file to lint itself. + * The .eslintrc.js file is needed too, because: + * + * 1. There are tests that expect .eslintrc.js to be present to actually run. + * 2. ESLint VS Code extension expects eslintrc config files to be + * present to work correctly. + * + * Once we no longer need to support both eslintrc and flat config, we will + * remove .eslintrc.js. + */ + +//----------------------------------------------------------------------------- +// Requirements +//----------------------------------------------------------------------------- + +const path = require("path"); +const internalPlugin = require("eslint-plugin-internal-rules"); +const eslintPlugin = require("eslint-plugin-eslint-plugin"); +const { FlatCompat } = require("@eslint/eslintrc"); +const globals = require("globals"); + +//----------------------------------------------------------------------------- +// Helpers +//----------------------------------------------------------------------------- + +const compat = new FlatCompat({ + baseDirectory: __dirname +}); + +const INTERNAL_FILES = { + CLI_ENGINE_PATTERN: "lib/cli-engine/**/*", + LINTER_PATTERN: "lib/linter/**/*", + RULE_TESTER_PATTERN: "lib/rule-tester/**/*", + RULES_PATTERN: "lib/rules/**/*", + SOURCE_CODE_PATTERN: "lib/source-code/**/*" +}; + +/** + * Resolve an absolute path or glob pattern. + * @param {string} pathOrPattern the path or glob pattern. + * @returns {string} The resolved path or glob pattern. + */ +function resolveAbsolutePath(pathOrPattern) { + return path.resolve(__dirname, pathOrPattern); +} + +/** + * Create an array of `no-restricted-require` entries for ESLint's core files. + * @param {string} [pattern] The glob pattern to create the entries for. + * @returns {Object[]} The array of `no-restricted-require` entries. + */ +function createInternalFilesPatterns(pattern = null) { + return Object.values(INTERNAL_FILES) + .filter(p => p !== pattern) + .map(p => ({ + name: [ + + // Disallow all children modules. + resolveAbsolutePath(p), + + // Allow the main `index.js` module. + `!${resolveAbsolutePath(p.replace(/\*\*\/\*$/u, "index.js"))}` + ] + })); +} + +module.exports = [ + ...compat.extends("eslint"), + { + plugins: { + "internal-rules": internalPlugin, + "eslint-plugin": eslintPlugin + }, + languageOptions: { + ecmaVersion: "latest" + }, + + /* + * it fixes eslint-plugin-jsdoc's reports: "Invalid JSDoc tag name "template" jsdoc/check-tag-names" + * refs: https://github.com/gajus/eslint-plugin-jsdoc#check-tag-names + */ + settings: { + jsdoc: { + mode: "typescript" + } + }, + rules: { + "internal-rules/multiline-comment-style": "error" + } + }, + { + files: ["tools/*.js"], + rules: { + "no-console": "off" + } + }, + { + files: ["lib/rules/*", "tools/internal-rules/*"], + ignores: ["**/index.js"], + rules: { + ...eslintPlugin.configs["rules-recommended"].rules, + "eslint-plugin/no-missing-message-ids": "error", + "eslint-plugin/no-unused-message-ids": "error", + "eslint-plugin/prefer-message-ids": "error", + "eslint-plugin/prefer-placeholders": "error", + "eslint-plugin/prefer-replace-text": "error", + "eslint-plugin/report-message-format": ["error", "[^a-z].*\\.$"], + "eslint-plugin/require-meta-docs-description": ["error", { pattern: "^(Enforce|Require|Disallow)" }], + "internal-rules/no-invalid-meta": "error" + } + }, + { + files: ["lib/rules/*"], + ignores: ["index.js"], + rules: { + "eslint-plugin/require-meta-docs-url": ["error", { pattern: "https://eslint.org/docs/rules/{{name}}" }] + } + }, + { + files: ["tests/lib/rules/*", "tests/tools/internal-rules/*"], + rules: { + ...eslintPlugin.configs["tests-recommended"].rules, + "eslint-plugin/prefer-output-null": "error", + "eslint-plugin/test-case-property-ordering": "error", + "eslint-plugin/test-case-shorthand-strings": "error" + } + }, + { + files: ["tests/**/*.js"], + languageOptions: { + globals: { + ...globals.mocha + } + }, + rules: { + "no-restricted-syntax": ["error", { + selector: "CallExpression[callee.object.name='assert'][callee.property.name='doesNotThrow']", + message: "`assert.doesNotThrow()` should be replaced with a comment next to the code." + }] + } + }, + + // Restrict relative path imports + { + files: ["lib/*"], + ignores: ["lib/unsupported-api.js"], + rules: { + "n/no-restricted-require": ["error", [ + ...createInternalFilesPatterns() + ]] + } + }, + { + files: [INTERNAL_FILES.CLI_ENGINE_PATTERN], + rules: { + "n/no-restricted-require": ["error", [ + ...createInternalFilesPatterns(INTERNAL_FILES.CLI_ENGINE_PATTERN) + ]] + } + }, + { + files: [INTERNAL_FILES.LINTER_PATTERN], + rules: { + "n/no-restricted-require": ["error", [ + ...createInternalFilesPatterns(INTERNAL_FILES.LINTER_PATTERN), + "fs", + resolveAbsolutePath("lib/cli-engine/index.js"), + resolveAbsolutePath("lib/rule-tester/index.js") + ]] + } + }, + { + files: [INTERNAL_FILES.RULES_PATTERN], + rules: { + "n/no-restricted-require": ["error", [ + ...createInternalFilesPatterns(INTERNAL_FILES.RULES_PATTERN), + "fs", + resolveAbsolutePath("lib/cli-engine/index.js"), + resolveAbsolutePath("lib/linter/index.js"), + resolveAbsolutePath("lib/rule-tester/index.js"), + resolveAbsolutePath("lib/source-code/index.js") + ]] + } + }, + { + files: ["lib/shared/**/*"], + rules: { + "n/no-restricted-require": ["error", [ + ...createInternalFilesPatterns(), + resolveAbsolutePath("lib/cli-engine/index.js"), + resolveAbsolutePath("lib/linter/index.js"), + resolveAbsolutePath("lib/rule-tester/index.js"), + resolveAbsolutePath("lib/source-code/index.js") + ]] + } + }, + { + files: [INTERNAL_FILES.SOURCE_CODE_PATTERN], + rules: { + "n/no-restricted-require": ["error", [ + ...createInternalFilesPatterns(INTERNAL_FILES.SOURCE_CODE_PATTERN), + "fs", + resolveAbsolutePath("lib/cli-engine/index.js"), + resolveAbsolutePath("lib/linter/index.js"), + resolveAbsolutePath("lib/rule-tester/index.js"), + resolveAbsolutePath("lib/rules/index.js") + ]] + } + }, + { + files: [INTERNAL_FILES.RULE_TESTER_PATTERN], + rules: { + "n/no-restricted-require": ["error", [ + ...createInternalFilesPatterns(INTERNAL_FILES.RULE_TESTER_PATTERN), + resolveAbsolutePath("lib/cli-engine/index.js") + ]] + } + } +]; diff --git a/eslint/lib/cli-engine/cli-engine.js b/eslint/lib/cli-engine/cli-engine.js index e364701..fdc6619 100644 --- a/eslint/lib/cli-engine/cli-engine.js +++ b/eslint/lib/cli-engine/cli-engine.js @@ -51,10 +51,12 @@ const validFixTypes = new Set(["directive", "problem", "suggestion", "layout"]); /** @typedef {import("../shared/types").ConfigData} ConfigData */ /** @typedef {import("../shared/types").DeprecatedRuleInfo} DeprecatedRuleInfo */ /** @typedef {import("../shared/types").LintMessage} LintMessage */ +/** @typedef {import("../shared/types").SuppressedLintMessage} SuppressedLintMessage */ /** @typedef {import("../shared/types").ParserOptions} ParserOptions */ /** @typedef {import("../shared/types").Plugin} Plugin */ /** @typedef {import("../shared/types").RuleConf} RuleConf */ /** @typedef {import("../shared/types").Rule} Rule */ +/** @typedef {import("../shared/types").FormatterFunction} FormatterFunction */ /** @typedef {ReturnType<CascadingConfigArrayFactory.getConfigArrayForFile>} ConfigArray */ /** @typedef {ReturnType<ConfigArray.extractConfig>} ExtractedConfig */ @@ -91,7 +93,9 @@ const validFixTypes = new Set(["directive", "problem", "suggestion", "layout"]); * @typedef {Object} LintResult * @property {string} filePath The path to the file that was linted. * @property {LintMessage[]} messages All of the messages for the result. + * @property {SuppressedLintMessage[]} suppressedMessages All of the suppressed messages for the result. * @property {number} errorCount Number of errors for the result. + * @property {number} fatalErrorCount Number of fatal errors for the result. * @property {number} warningCount Number of warnings for the result. * @property {number} fixableErrorCount Number of fixable errors for the result. * @property {number} fixableWarningCount Number of fixable warnings for the result. @@ -104,6 +108,7 @@ const validFixTypes = new Set(["directive", "problem", "suggestion", "layout"]); * @typedef {Object} LintReport * @property {LintResult[]} results All of the result. * @property {number} errorCount Number of errors for the result. + * @property {number} fatalErrorCount Number of fatal errors for the result. * @property {number} warningCount Number of warnings for the result. * @property {number} fixableErrorCount Number of fixable errors for the result. * @property {number} fixableWarningCount Number of fixable warnings for the result. @@ -261,6 +266,7 @@ function verifyText({ const result = { filePath, messages, + suppressedMessages: linter.getSuppressedMessages(), ...calculateStatsPerFile(messages) }; @@ -307,7 +313,9 @@ function createIgnoreResult(filePath, baseDir) { message } ], + suppressedMessages: [], errorCount: 0, + fatalErrorCount: 0, warningCount: 1, fixableErrorCount: 0, fixableWarningCount: 0 @@ -358,9 +366,7 @@ function *iterateRuleDeprecationWarnings(usedConfigArrays) { // Flatten used configs. /** @type {ExtractedConfig[]} */ - const configs = [].concat( - ...usedConfigArrays.map(getUsedExtractedConfigs) - ); + const configs = usedConfigArrays.flatMap(getUsedExtractedConfigs); // Traverse rule configs. for (const config of configs) { @@ -408,7 +414,7 @@ function isErrorMessage(message) { * a directory or looks like a directory (ends in `path.sep`), in which case the file * name will be the `cacheFile/.cache_hashOfCWD` * - * if cacheFile points to a file or looks like a file then in will just use that file + * if cacheFile points to a file or looks like a file then it will just use that file * @param {string} cacheFile The name of file to be used to store the cache * @param {string} cwd Current working directory * @returns {string} the resolved path to the cache file @@ -609,8 +615,8 @@ class CLIEngine { useEslintrc: options.useEslintrc, builtInRules, loadRules, - eslintRecommendedPath: path.resolve(__dirname, "../../conf/eslint-recommended.js"), - eslintAllPath: path.resolve(__dirname, "../../conf/eslint-all.js") + getEslintRecommendedConfig: () => require("../../conf/eslint-recommended.js"), + getEslintAllConfig: () => require("../../conf/eslint-all.js") }); const fileEnumerator = new FileEnumerator({ configArrayFactory, @@ -680,11 +686,13 @@ class CLIEngine { results.forEach(result => { const filteredMessages = result.messages.filter(isErrorMessage); + const filteredSuppressedMessages = result.suppressedMessages.filter(isErrorMessage); if (filteredMessages.length > 0) { filtered.push({ ...result, messages: filteredMessages, + suppressedMessages: filteredSuppressedMessages, errorCount: filteredMessages.length, warningCount: 0, fixableErrorCount: result.fixableErrorCount, @@ -993,7 +1001,7 @@ class CLIEngine { * @param {string} [format] The name of the format to load or the path to a * custom formatter. * @throws {any} As may be thrown by requiring of formatter - * @returns {(Function|null)} The formatter function or null if the `format` is not a string. + * @returns {(FormatterFunction|null)} The formatter function or null if the `format` is not a string. */ getFormatter(format) { @@ -1013,7 +1021,7 @@ class CLIEngine { let formatterPath; // if there's a slash, then it's a file (TODO: this check seems dubious for scoped npm packages) - if (!namespace && normalizedFormatName.indexOf("/") > -1) { + if (!namespace && normalizedFormatName.includes("/")) { formatterPath = path.resolve(cwd, normalizedFormatName); } else { try { diff --git a/eslint/lib/cli-engine/file-enumerator.js b/eslint/lib/cli-engine/file-enumerator.js index f1442d1..b65d0a2 100644 --- a/eslint/lib/cli-engine/file-enumerator.js +++ b/eslint/lib/cli-engine/file-enumerator.js @@ -122,7 +122,8 @@ function statSafeSync(filePath) { try { return fs.statSync(filePath); } catch (error) { - /* istanbul ignore next */ + + /* c8 ignore next */ if (error.code !== "ENOENT") { throw error; } @@ -141,7 +142,8 @@ function readdirSafeSync(directoryPath) { try { return fs.readdirSync(directoryPath, { withFileTypes: true }); } catch (error) { - /* istanbul ignore next */ + + /* c8 ignore next */ if (error.code !== "ENOENT") { throw error; } @@ -215,8 +217,8 @@ class FileEnumerator { cwd = process.cwd(), configArrayFactory = new CascadingConfigArrayFactory({ cwd, - eslintRecommendedPath: path.resolve(__dirname, "../../conf/eslint-recommended.js"), - eslintAllPath: path.resolve(__dirname, "../../conf/eslint-all.js") + getEslintRecommendedConfig: () => require("../../conf/eslint-recommended.js"), + getEslintAllConfig: () => require("../../conf/eslint-all.js") }), extensions = null, globInputPaths = true, diff --git a/eslint/lib/cli-engine/formatters/html.js b/eslint/lib/cli-engine/formatters/html.js index e28996f..6e40bbe 100644 --- a/eslint/lib/cli-engine/formatters/html.js +++ b/eslint/lib/cli-engine/formatters/html.js @@ -39,6 +39,8 @@ function pageTemplate(it) { <head> <meta charset="UTF-8"> <title>ESLint Report</title> + <link rel="icon" type="image/png" sizes="any" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAHaAAAB2gGFomX7AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAABD1JREFUWMPFl11sk2UUx3/nbYtjxS1MF7MLMTECMgSTtSSyrQkLhAj7UBPnDSEGoxegGzMwojhXVpmTAA5iYpSoMQa8GBhFOrMFk03buei6yRAlcmOM0SEmU9d90b19jxcM1o5+sGnsc/e+z/l6ztf/HFFVMnns6QieeOCHBePGsHM+wrOtvLG2C4WRVDSSygNV7sCjlspxwDnPB44aols/DXk+mbMBmx/6OseITF1CuOtfevkPh2Uu+/jbdX8lujSScRlT5r7/QDlAfsRmfzmpnkQ/H3H13gf6bBrBn1uqK8WylgEnU8eZmk1repbfchJG1TyKyIKEwuBHFd3lD3naY3O1siiwXsVoBV2VgM1ht/QQUJk2ByqKghsQziYQ8ifKgexIXmuyzC4r67Y7R+xPAfuB/Nn3Cpva+0s7khpQVtZtd4bt51BWxtBYAiciprG7c7D4SixzU9PYalDL6110Ifb/w8W9eY7JqFeFHbO8fPGyLHwwFHJNJTSgwtVTB9oaw9BlQ+tO93vOxypoaQnfEYlI43SeCHDC4TDq9+51/h5fxr33q0ZfV9g04wat9Q943rjJgCp3952W2i8Bi6eDvdsfKj0cK/DYMRyXL4/sUJUmIHd2zYMezsvLaamp4WpcWN3BXSiHpuMwbGbZlnZ8tXY4rgosy+G7oRwQ0cAsd28YGgqfU5UjCZQDLALxDg+Hv/P5Rqvj4hwrS8izXzWb4spwc1GgENFnkpWRzxeuB+ssUHgLdb9UVdt8vpGdKQpze7n7y1U3DBChNRUuqOo9c+0+qpKKxyZqtAIYla7gY4JszAAQri93BSsMRZoyBcUC+w3Q3AyOA4sNhAOZ0q7Iq0b2vUNvK5zPgP+/H8+Zetdoa6uOikhdGurxebwvJY8Iz3V1rTMNAH+opEuQj5KTT/qA1yC+wyUjBm12OidaUtCcPNNX2h0Hx2JG69VulANZAJZJwfU7rzd/FHixuXniTdM0m4GtSQT7bTartqEh9yfImUEzkwKZmTwmo5a5JwkYBfcDL01/RkR5y8iWhtPBknB8ZxwtU9UjwOrrKCeizzc25nTGg1F/turEHoU9wMLpDvWKf8DTmNCAKnd/tqUTF4ElMXJ+A5rWDJS+41WsGWzALhJ+ErBWrLj9g+pqojHxlXJX8HGUg0BsR/x1yhxf3jm4cSzpQFLp6tmi6PEE7g1ZhtZ91ufpSZUAFa6gC+UoQslNaSmypT1U8mHKiUgEKS8KfgF4EpYunFI16tsHin+OG0LcgQK7yj7g6cSzpva2D3hKVNG0Y3mVO1BkqfSlmJrHBQ4uvM12gJHc6ETW8HZVfMRmXvyxxNC1Z/o839zyXlDuCr4nsC11J+MXueaVJWn6yPv+/pJtc9oLTNN4AeTvNGByd3rlhE2x9s5pLwDoHCy+grDzWmOZ95lUtLYj5Bma126Y8eX0/zj/ADxGyViSg4BXAAAAAElFTkSuQmCC"> + <link rel="icon" type="image/svg+xml" href="data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PScwIDAgMjk0LjgyNSAyNTguOTgyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnPg0KPHBhdGggZmlsbD0nIzgwODBGMicgZD0nTTk3LjAyMSw5OS4wMTZsNDguNDMyLTI3Ljk2MmMxLjIxMi0wLjcsMi43MDYtMC43LDMuOTE4LDBsNDguNDMzLDI3Ljk2MiBjMS4yMTEsMC43LDEuOTU5LDEuOTkzLDEuOTU5LDMuMzkzdjU1LjkyNGMwLDEuMzk5LTAuNzQ4LDIuNjkzLTEuOTU5LDMuMzk0bC00OC40MzMsMjcuOTYyYy0xLjIxMiwwLjctMi43MDYsMC43LTMuOTE4LDAgbC00OC40MzItMjcuOTYyYy0xLjIxMi0wLjctMS45NTktMS45OTQtMS45NTktMy4zOTR2LTU1LjkyNEM5NS4wNjMsMTAxLjAwOSw5NS44MSw5OS43MTYsOTcuMDIxLDk5LjAxNicvPg0KPHBhdGggZmlsbD0nIzRCMzJDMycgZD0nTTI3My4zMzYsMTI0LjQ4OEwyMTUuNDY5LDIzLjgxNmMtMi4xMDItMy42NC01Ljk4NS02LjMyNS0xMC4xODgtNi4zMjVIODkuNTQ1IGMtNC4yMDQsMC04LjA4OCwyLjY4NS0xMC4xOSw2LjMyNWwtNTcuODY3LDEwMC40NWMtMi4xMDIsMy42NDEtMi4xMDIsOC4yMzYsMCwxMS44NzdsNTcuODY3LDk5Ljg0NyBjMi4xMDIsMy42NCw1Ljk4Niw1LjUwMSwxMC4xOSw1LjUwMWgxMTUuNzM1YzQuMjAzLDAsOC4wODctMS44MDUsMTAuMTg4LTUuNDQ2bDU3Ljg2Ny0xMDAuMDEgQzI3NS40MzksMTMyLjM5NiwyNzUuNDM5LDEyOC4xMjgsMjczLjMzNiwxMjQuNDg4IE0yMjUuNDE5LDE3Mi44OThjMCwxLjQ4LTAuODkxLDIuODQ5LTIuMTc0LDMuNTlsLTczLjcxLDQyLjUyNyBjLTEuMjgyLDAuNzQtMi44ODgsMC43NC00LjE3LDBsLTczLjc2Ny00Mi41MjdjLTEuMjgyLTAuNzQxLTIuMTc5LTIuMTA5LTIuMTc5LTMuNTlWODcuODQzYzAtMS40ODEsMC44ODQtMi44NDksMi4xNjctMy41OSBsNzMuNzA3LTQyLjUyN2MxLjI4Mi0wLjc0MSwyLjg4Ni0wLjc0MSw0LjE2OCwwbDczLjc3Miw0Mi41MjdjMS4yODMsMC43NDEsMi4xODYsMi4xMDksMi4xODYsMy41OVYxNzIuODk4eicvPg0KPC9zdmc+"> <style> body { font-family:Arial, "Helvetica Neue", Helvetica, sans-serif; @@ -149,7 +151,7 @@ function pageTemplate(it) { </script> </body> </html> -`.trimLeft(); +`.trimStart(); } /** @@ -220,7 +222,7 @@ function messageTemplate(it) { <a href="${ruleUrl ? ruleUrl : ""}" target="_blank" rel="noopener noreferrer">${ruleId ? ruleId : ""}</a> </td> </tr> -`.trimLeft(); +`.trimStart(); } /** @@ -278,7 +280,7 @@ function resultTemplate(it) { <span>${encodeHTML(summary)}</span> </th> </tr> -`.trimLeft(); +`.trimStart(); } /** diff --git a/eslint/lib/cli-engine/lint-result-cache.js b/eslint/lib/cli-engine/lint-result-cache.js index 3304d42..e36eb74 100644 --- a/eslint/lib/cli-engine/lint-result-cache.js +++ b/eslint/lib/cli-engine/lint-result-cache.js @@ -36,7 +36,7 @@ const invalidCacheStrategyErrorMessage = `Cache strategy must be one of: ${valid */ function isValidCacheStrategy(cacheStrategy) { return ( - validCacheStrategies.indexOf(cacheStrategy) !== -1 + validCacheStrategies.includes(cacheStrategy) ); } diff --git a/eslint/lib/cli.js b/eslint/lib/cli.js index f09d143..2fca65c 100644 --- a/eslint/lib/cli.js +++ b/eslint/lib/cli.js @@ -6,7 +6,7 @@ "use strict"; /* - * The CLI object should *not* call process.exit() directly. It should only return + * NOTE: The CLI object should *not* call process.exit() directly. It should only return * exit codes. This allows other programs to use the CLI object and still control * when the program exits. */ @@ -19,9 +19,14 @@ const fs = require("fs"), path = require("path"), { promisify } = require("util"), { ESLint } = require("./eslint"), - CLIOptions = require("./options"), + { FlatESLint } = require("./eslint/flat-eslint"), + createCLIOptions = require("./options"), log = require("./shared/logging"), RuntimeInfo = require("./shared/runtime-info"); +const { Legacy: { naming } } = require("@eslint/eslintrc"); +const { findFlatConfigFile } = require("./eslint/flat-eslint"); +const { gitignoreToMinimatch } = require("@humanwhocodes/gitignore-to-minimatch"); +const { ModuleImporter } = require("@humanwhocodes/module-importer"); const debug = require("debug")("eslint:cli"); @@ -54,17 +59,20 @@ function quietFixPredicate(message) { } /** - * Translates the CLI options into the options expected by the CLIEngine. + * Translates the CLI options into the options expected by the ESLint constructor. * @param {ParsedCLIOptions} cliOptions The CLI options to translate. - * @returns {ESLintOptions} The options object for the CLIEngine. + * @param {"flat"|"eslintrc"} [configType="eslintrc"] The format of the + * config to generate. + * @returns {Promise<ESLintOptions>} The options object for the ESLint constructor. * @private */ -function translateOptions({ +async function translateOptions({ cache, cacheFile, cacheLocation, cacheStrategy, config, + configLookup, env, errorOnUnmatchedPattern, eslintrc, @@ -85,19 +93,66 @@ function translateOptions({ resolvePluginsRelativeTo, rule, rulesdir -}) { - return { - allowInlineConfig: inlineConfig, - cache, - cacheLocation: cacheLocation || cacheFile, - cacheStrategy, - errorOnUnmatchedPattern, - extensions: ext, - fix: (fix || fixDryRun) && (quiet ? quietFixPredicate : true), - fixTypes: fixType, - ignore, - ignorePath, - overrideConfig: { +}, configType) { + + let overrideConfig, overrideConfigFile; + const importer = new ModuleImporter(); + + if (configType === "flat") { + overrideConfigFile = (typeof config === "string") ? config : !configLookup; + if (overrideConfigFile === false) { + overrideConfigFile = void 0; + } + + let globals = {}; + + if (global) { + globals = global.reduce((obj, name) => { + if (name.endsWith(":true")) { + obj[name.slice(0, -5)] = "writable"; + } else { + obj[name] = "readonly"; + } + return obj; + }, globals); + } + + overrideConfig = [{ + languageOptions: { + globals, + parserOptions: parserOptions || {} + }, + rules: rule ? rule : {} + }]; + + if (parser) { + overrideConfig[0].languageOptions.parser = await importer.import(parser); + } + + if (plugin) { + const plugins = {}; + + for (const pluginName of plugin) { + + const shortName = naming.getShorthandName(pluginName, "eslint-plugin"); + const longName = naming.normalizePackageName(pluginName, "eslint-plugin"); + + plugins[shortName] = await importer.import(longName); + } + + overrideConfig[0].plugins = plugins; + } + + if (ignorePattern) { + overrideConfig.push({ + ignores: ignorePattern.map(gitignoreToMinimatch) + }); + } + + } else { + overrideConfigFile = config; + + overrideConfig = { env: env && env.reduce((obj, name) => { obj[name] = true; return obj; @@ -115,13 +170,32 @@ function translateOptions({ parserOptions, plugins: plugin, rules: rule - }, - overrideConfigFile: config, - reportUnusedDisableDirectives: reportUnusedDisableDirectives ? "error" : void 0, - resolvePluginsRelativeTo, - rulePaths: rulesdir, - useEslintrc: eslintrc + }; + } + + const options = { + allowInlineConfig: inlineConfig, + cache, + cacheLocation: cacheLocation || cacheFile, + cacheStrategy, + errorOnUnmatchedPattern, + fix: (fix || fixDryRun) && (quiet ? quietFixPredicate : true), + fixTypes: fixType, + ignore, + ignorePath, + overrideConfig, + overrideConfigFile, + reportUnusedDisableDirectives: reportUnusedDisableDirectives ? "error" : void 0 }; + + if (configType !== "flat") { + options.resolvePluginsRelativeTo = resolvePluginsRelativeTo; + options.rulePaths = rulesdir; + options.useEslintrc = eslintrc; + options.extensions = ext; + } + + return options; } /** @@ -218,19 +292,34 @@ const cli = { * Executes the CLI based on an array of arguments that is passed in. * @param {string|Array|Object} args The arguments to process. * @param {string} [text] The text to lint (used for TTY). + * @param {boolean} [allowFlatConfig] Whether or not to allow flat config. * @returns {Promise<number>} The exit code for the operation. */ - async execute(args, text) { + async execute(args, text, allowFlatConfig) { if (Array.isArray(args)) { debug("CLI args: %o", args.slice(2)); } + /* + * Before doing anything, we need to see if we are using a + * flat config file. If so, then we need to change the way command + * line args are parsed. This is temporary, and when we fully + * switch to flat config we can remove this logic. + */ + + const usingFlatConfig = allowFlatConfig && !!(await findFlatConfigFile(process.cwd())); + + debug("Using flat config?", usingFlatConfig); + + const CLIOptions = createCLIOptions(usingFlatConfig); + /** @type {ParsedCLIOptions} */ let options; try { options = CLIOptions.parse(args); } catch (error) { + debug("Error parsing CLI options:", error.message); log.error(error.message); return 2; } @@ -251,6 +340,7 @@ const cli = { log.info(RuntimeInfo.environment()); return 0; } catch (err) { + debug("Error retrieving environment info"); log.error(err.message); return 2; } @@ -266,7 +356,9 @@ const cli = { return 2; } - const engine = new ESLint(translateOptions(options)); + const engine = usingFlatConfig + ? new FlatESLint(await translateOptions(options, "flat")) + : new ESLint(await translateOptions(options)); const fileConfig = await engine.calculateConfigForFile(options.printConfig); @@ -289,7 +381,9 @@ const cli = { return 2; } - const engine = new ESLint(translateOptions(options)); + const ActiveESLint = usingFlatConfig ? FlatESLint : ESLint; + + const engine = new ActiveESLint(await translateOptions(options, usingFlatConfig ? "flat" : "eslintrc")); let results; if (useStdin) { @@ -303,14 +397,14 @@ const cli = { if (options.fix) { debug("Fix mode enabled - applying fixes"); - await ESLint.outputFixes(results); + await ActiveESLint.outputFixes(results); } let resultsToPrint = results; if (options.quiet) { debug("Quiet mode enabled - filtering out warnings"); - resultsToPrint = ESLint.getErrorResults(resultsToPrint); + resultsToPrint = ActiveESLint.getErrorResults(resultsToPrint); } if (await printResults(engine, resultsToPrint, options.format, options.outputFile)) { diff --git a/eslint/lib/config/default-config.js b/eslint/lib/config/default-config.js index a655a6d..c48551a 100644 --- a/eslint/lib/config/default-config.js +++ b/eslint/lib/config/default-config.js @@ -15,7 +15,6 @@ const Rules = require("../rules"); // Helpers //----------------------------------------------------------------------------- - exports.defaultConfig = [ { plugins: { @@ -41,21 +40,31 @@ exports.defaultConfig = [ }) } }, - ignores: [ - "**/node_modules/**", - ".git/**" - ], languageOptions: { - ecmaVersion: "latest", sourceType: "module", + ecmaVersion: "latest", parser: "@/espree", parserOptions: {} } }, + + // default ignores are listed here + { + ignores: [ + "**/node_modules/**", + ".git/**" + ] + }, + + // intentionally empty config to ensure these files are globbed by default + { + files: ["**/*.js", "**/*.mjs"] + }, { files: ["**/*.cjs"], languageOptions: { - sourceType: "commonjs" + sourceType: "commonjs", + ecmaVersion: "latest" } } ]; diff --git a/eslint/lib/config/flat-config-array.js b/eslint/lib/config/flat-config-array.js index c06fd92..ad8986f 100644 --- a/eslint/lib/config/flat-config-array.js +++ b/eslint/lib/config/flat-config-array.js @@ -14,7 +14,6 @@ const { flatConfigSchema } = require("./flat-config-schema"); const { RuleValidator } = require("./rule-validator"); const { defaultConfig } = require("./default-config"); const recommendedConfig = require("../../conf/eslint-recommended"); -const allConfig = require("../../conf/eslint-all"); //----------------------------------------------------------------------------- // Helpers @@ -37,6 +36,8 @@ function splitPluginIdentifier(identifier) { }; } +const originalBaseConfig = Symbol("originalBaseConfig"); + //----------------------------------------------------------------------------- // Exports //----------------------------------------------------------------------------- @@ -49,16 +50,40 @@ class FlatConfigArray extends ConfigArray { /** * Creates a new instance. * @param {*[]} configs An array of configuration information. - * @param {{basePath: string, baseConfig: FlatConfig}} options The options + * @param {{basePath: string, shouldIgnore: boolean, baseConfig: FlatConfig}} options The options * to use for the config array instance. */ - constructor(configs, { basePath, baseConfig = defaultConfig } = {}) { + constructor(configs, { + basePath, + shouldIgnore = true, + baseConfig = defaultConfig + } = {}) { super(configs, { basePath, schema: flatConfigSchema }); - this.unshift(...baseConfig); + if (baseConfig[Symbol.iterator]) { + this.unshift(...baseConfig); + } else { + this.unshift(baseConfig); + } + + /** + * The baes config used to build the config array. + * @type {Array<FlatConfig>} + */ + this[originalBaseConfig] = baseConfig; + Object.defineProperty(this, originalBaseConfig, { writable: false }); + + /** + * Determines if `ignores` fields should be honored. + * If true, then all `ignores` fields are honored. + * if false, then only `ignores` fields in the baseConfig are honored. + * @type {boolean} + */ + this.shouldIgnore = shouldIgnore; + Object.defineProperty(this, "shouldIgnore", { writable: false }); } /* eslint-disable class-methods-use-this -- Desired as instance method */ @@ -75,7 +100,30 @@ class FlatConfigArray extends ConfigArray { } if (config === "eslint:all") { - return allConfig; + + /* + * Load `eslint-all.js` here instead of at the top level to avoid loading all rule modules + * when it isn't necessary. `eslint-all.js` reads `meta` of rule objects to filter out deprecated ones, + * so requiring `eslint-all.js` module loads all rule modules as a consequence. + */ + return require("../../conf/eslint-all"); + } + + /* + * If `shouldIgnore` is false, we remove any ignore patterns specified + * in the config so long as it's not a default config and it doesn't + * have a `files` entry. + */ + if ( + !this.shouldIgnore && + !this[originalBaseConfig].includes(config) && + config.ignores && + !config.files + ) { + /* eslint-disable-next-line no-unused-vars -- need to strip off other keys */ + const { ignores, ...otherKeys } = config; + + return otherKeys; } return config; @@ -91,31 +139,72 @@ class FlatConfigArray extends ConfigArray { [ConfigArraySymbol.finalizeConfig](config) { const { plugins, languageOptions, processor } = config; + let parserName, processorName; + let invalidParser = false, + invalidProcessor = false; // Check parser value - if (languageOptions && languageOptions.parser && typeof languageOptions.parser === "string") { - const { pluginName, objectName: parserName } = splitPluginIdentifier(languageOptions.parser); + if (languageOptions && languageOptions.parser) { + if (typeof languageOptions.parser === "string") { + const { pluginName, objectName: localParserName } = splitPluginIdentifier(languageOptions.parser); - if (!plugins || !plugins[pluginName] || !plugins[pluginName].parsers || !plugins[pluginName].parsers[parserName]) { - throw new TypeError(`Key "parser": Could not find "${parserName}" in plugin "${pluginName}".`); - } + parserName = languageOptions.parser; + + if (!plugins || !plugins[pluginName] || !plugins[pluginName].parsers || !plugins[pluginName].parsers[localParserName]) { + throw new TypeError(`Key "parser": Could not find "${localParserName}" in plugin "${pluginName}".`); + } - languageOptions.parser = plugins[pluginName].parsers[parserName]; + languageOptions.parser = plugins[pluginName].parsers[localParserName]; + } else { + invalidParser = true; + } } // Check processor value - if (processor && typeof processor === "string") { - const { pluginName, objectName: processorName } = splitPluginIdentifier(processor); + if (processor) { + if (typeof processor === "string") { + const { pluginName, objectName: localProcessorName } = splitPluginIdentifier(processor); - if (!plugins || !plugins[pluginName] || !plugins[pluginName].processors || !plugins[pluginName].processors[processorName]) { - throw new TypeError(`Key "processor": Could not find "${processorName}" in plugin "${pluginName}".`); - } + processorName = processor; - config.processor = plugins[pluginName].processors[processorName]; + if (!plugins || !plugins[pluginName] || !plugins[pluginName].processors || !plugins[pluginName].processors[localProcessorName]) { + throw new TypeError(`Key "processor": Could not find "${localProcessorName}" in plugin "${pluginName}".`); + } + + config.processor = plugins[pluginName].processors[localProcessorName]; + } else { + invalidProcessor = true; + } } ruleValidator.validate(config); + // apply special logic for serialization into JSON + /* eslint-disable object-shorthand -- shorthand would change "this" value */ + Object.defineProperty(config, "toJSON", { + value: function() { + + if (invalidParser) { + throw new Error("Caching is not supported when parser is an object."); + } + + if (invalidProcessor) { + throw new Error("Caching is not supported when processor is an object."); + } + + return { + ...this, + plugins: Object.keys(plugins), + languageOptions: { + ...languageOptions, + parser: parserName + }, + processor: processorName + }; + } + }); + /* eslint-enable object-shorthand -- ok to enable now */ + return config; } /* eslint-enable class-methods-use-this -- Desired as instance method */ diff --git a/eslint/lib/config/flat-config-helpers.js b/eslint/lib/config/flat-config-helpers.js index 778f129..e00c564 100644 --- a/eslint/lib/config/flat-config-helpers.js +++ b/eslint/lib/config/flat-config-helpers.js @@ -20,7 +20,14 @@ function parseRuleId(ruleId) { // distinguish between core rules and plugin rules if (ruleId.includes("/")) { - pluginName = ruleId.slice(0, ruleId.lastIndexOf("/")); + + // mimic scoped npm packages + if (ruleId.startsWith("@")) { + pluginName = ruleId.slice(0, ruleId.lastIndexOf("/")); + } else { + pluginName = ruleId.slice(0, ruleId.indexOf("/")); + } + ruleName = ruleId.slice(pluginName.length + 1); } else { pluginName = "@"; @@ -47,6 +54,7 @@ function getRuleFromConfig(ruleId, config) { const plugin = config.plugins && config.plugins[pluginName]; let rule = plugin && plugin.rules && plugin.rules[ruleName]; + // normalize function rules into objects if (rule && typeof rule === "function") { rule = { @@ -57,11 +65,47 @@ function getRuleFromConfig(ruleId, config) { return rule; } +/** + * Gets a complete options schema for a rule. + * @param {{create: Function, schema: (Array|null)}} rule A new-style rule object + * @returns {Object} JSON Schema for the rule's options. + */ +function getRuleOptionsSchema(rule) { + + if (!rule) { + return null; + } + + const schema = rule.schema || rule.meta && rule.meta.schema; + + if (Array.isArray(schema)) { + if (schema.length) { + return { + type: "array", + items: schema, + minItems: 0, + maxItems: schema.length + }; + } + return { + type: "array", + minItems: 0, + maxItems: 0 + }; + + } + + // Given a full schema, leave it alone + return schema || null; +} + + //----------------------------------------------------------------------------- // Exports //----------------------------------------------------------------------------- module.exports = { parseRuleId, - getRuleFromConfig + getRuleFromConfig, + getRuleOptionsSchema }; diff --git a/eslint/lib/config/rule-validator.js b/eslint/lib/config/rule-validator.js index 9172f93..0b5858f 100644 --- a/eslint/lib/config/rule-validator.js +++ b/eslint/lib/config/rule-validator.js @@ -10,7 +10,11 @@ //----------------------------------------------------------------------------- const ajv = require("../shared/ajv")(); -const { parseRuleId, getRuleFromConfig } = require("./flat-config-helpers"); +const { + parseRuleId, + getRuleFromConfig, + getRuleOptionsSchema +} = require("./flat-config-helpers"); const ruleReplacements = require("../../conf/replacements.json"); //----------------------------------------------------------------------------- @@ -61,40 +65,6 @@ function throwRuleNotFoundError({ pluginName, ruleName }, config) { throw new TypeError(errorMessage); } -/** - * Gets a complete options schema for a rule. - * @param {{create: Function, schema: (Array|null)}} rule A new-style rule object - * @returns {Object} JSON Schema for the rule's options. - */ -function getRuleOptionsSchema(rule) { - - if (!rule) { - return null; - } - - const schema = rule.schema || rule.meta && rule.meta.schema; - - if (Array.isArray(schema)) { - if (schema.length) { - return { - type: "array", - items: schema, - minItems: 0, - maxItems: schema.length - }; - } - return { - type: "array", - minItems: 0, - maxItems: 0 - }; - - } - - // Given a full schema, leave it alone - return schema || null; -} - //----------------------------------------------------------------------------- // Exports //----------------------------------------------------------------------------- diff --git a/eslint/lib/eslint/eslint.js b/eslint/lib/eslint/eslint.js index 6274772..9a3bd66 100644 --- a/eslint/lib/eslint/eslint.js +++ b/eslint/lib/eslint/eslint.js @@ -32,12 +32,14 @@ const { version } = require("../../package.json"); /** @typedef {import("../shared/types").DeprecatedRuleInfo} DeprecatedRuleInfo */ /** @typedef {import("../shared/types").ConfigData} ConfigData */ /** @typedef {import("../shared/types").LintMessage} LintMessage */ +/** @typedef {import("../shared/types").SuppressedLintMessage} SuppressedLintMessage */ /** @typedef {import("../shared/types").Plugin} Plugin */ /** @typedef {import("../shared/types").Rule} Rule */ +/** @typedef {import("../shared/types").LintResult} LintResult */ /** * The main formatter object. - * @typedef Formatter + * @typedef LoadedFormatter * @property {function(LintResult[]): string | Promise<string>} format format function. */ @@ -73,20 +75,6 @@ const { version } = require("../../package.json"); * @property {Object} definition The plugin definition. */ -/** - * A linting result. - * @typedef {Object} LintResult - * @property {string} filePath The path to the file that was linted. - * @property {LintMessage[]} messages All of the messages for the result. - * @property {number} errorCount Number of errors for the result. - * @property {number} warningCount Number of warnings for the result. - * @property {number} fixableErrorCount Number of fixable errors for the result. - * @property {number} fixableWarningCount Number of fixable warnings for the result. - * @property {string} [source] The source code of the file that was linted. - * @property {string} [output] The source code of the file that was linted, with as many fixes applied as possible. - * @property {DeprecatedRuleInfo[]} usedDeprecatedRules The list of used deprecated rules. - */ - /** * Private members for the `ESLint` instance. * @typedef {Object} ESLintPrivateMembers @@ -116,9 +104,9 @@ function isNonEmptyString(x) { } /** - * Check if a given value is an array of non-empty stringss or not. + * Check if a given value is an array of non-empty strings or not. * @param {any} x The value to check. - * @returns {boolean} `true` if `x` is an array of non-empty stringss. + * @returns {boolean} `true` if `x` is an array of non-empty strings. */ function isArrayOfNonEmptyString(x) { return Array.isArray(x) && x.every(isNonEmptyString); @@ -525,6 +513,9 @@ class ESLint { for (const { ruleId } of result.messages) { resultRuleIds.add(ruleId); } + for (const { ruleId } of result.suppressedMessages) { + resultRuleIds.add(ruleId); + } } // create a map of all rules in the results @@ -608,12 +599,12 @@ class ESLint { * The following values are allowed: * - `undefined` ... Load `stylish` builtin formatter. * - A builtin formatter name ... Load the builtin formatter. - * - A thirdparty formatter name: + * - A third-party formatter name: * - `foo` → `eslint-formatter-foo` * - `@foo` → `@foo/eslint-formatter` * - `@foo/bar` → `@foo/eslint-formatter-bar` * - A file path ... Load the file. - * @returns {Promise<Formatter>} A promise resolving to the formatter object. + * @returns {Promise<LoadedFormatter>} A promise resolving to the formatter object. * This promise will be rejected if the given formatter was not found or not * a function. */ @@ -633,7 +624,7 @@ class ESLint { /** * The main formatter method. - * @param {LintResults[]} results The lint results to format. + * @param {LintResult[]} results The lint results to format. * @returns {string | Promise<string>} The formatted lint results. */ format(results) { diff --git a/eslint/lib/eslint/flat-eslint.js b/eslint/lib/eslint/flat-eslint.js new file mode 100644 index 0000000..e436c46 --- /dev/null +++ b/eslint/lib/eslint/flat-eslint.js @@ -0,0 +1,1176 @@ +/** + * @fileoverview Main class using flat config + * @author Nicholas C. Zakas + */ + +"use strict"; + +//------------------------------------------------------------------------------ +// Requirements +//------------------------------------------------------------------------------ + +// Note: Node.js 12 does not support fs/promises. +const fs = require("fs").promises; +const path = require("path"); +const findUp = require("find-up"); +const { version } = require("../../package.json"); +const { Linter } = require("../linter"); +const { getRuleFromConfig } = require("../config/flat-config-helpers"); +const { gitignoreToMinimatch } = require("@humanwhocodes/gitignore-to-minimatch"); +const { + Legacy: { + ConfigOps: { + getRuleSeverity + }, + ModuleResolver, + naming + } +} = require("@eslint/eslintrc"); + +const { + fileExists, + findFiles, + getCacheFile, + + isNonEmptyString, + isArrayOfNonEmptyString, + + createIgnoreResult, + isErrorMessage, + + processOptions +} = require("./eslint-helpers"); +const { pathToFileURL } = require("url"); +const { FlatConfigArray } = require("../config/flat-config-array"); +const LintResultCache = require("../cli-engine/lint-result-cache"); + +/* + * This is necessary to allow overwriting writeFile for testing purposes. + * We can just use fs/promises once we drop Node.js 12 support. + */ + +//------------------------------------------------------------------------------ +// Typedefs +//------------------------------------------------------------------------------ + +// For VSCode IntelliSense +/** @typedef {import("../shared/types").ConfigData} ConfigData */ +/** @typedef {import("../shared/types").DeprecatedRuleInfo} DeprecatedRuleInfo */ +/** @typedef {import("../shared/types").LintMessage} LintMessage */ +/** @typedef {import("../shared/types").ParserOptions} ParserOptions */ +/** @typedef {import("../shared/types").Plugin} Plugin */ +/** @typedef {import("../shared/types").RuleConf} RuleConf */ +/** @typedef {import("../shared/types").Rule} Rule */ +/** @typedef {ReturnType<ConfigArray.extractConfig>} ExtractedConfig */ + +/** + * The options with which to configure the ESLint instance. + * @typedef {Object} FlatESLintOptions + * @property {boolean} [allowInlineConfig] Enable or disable inline configuration comments. + * @property {ConfigData} [baseConfig] Base config object, extended by all configs used with this instance + * @property {boolean} [cache] Enable result caching. + * @property {string} [cacheLocation] The cache file to use instead of .eslintcache. + * @property {"metadata" | "content"} [cacheStrategy] The strategy used to detect changed files. + * @property {string} [cwd] The value to use for the current working directory. + * @property {boolean} [errorOnUnmatchedPattern] If `false` then `ESLint#lintFiles()` doesn't throw even if no target files found. Defaults to `true`. + * @property {boolean|Function} [fix] Execute in autofix mode. If a function, should return a boolean. + * @property {string[]} [fixTypes] Array of rule types to apply fixes for. + * @property {boolean} [globInputPaths] Set to false to skip glob resolution of input file paths to lint (default: true). If false, each input file paths is assumed to be a non-glob path to an existing file. + * @property {boolean} [ignore] False disables use of .eslintignore. + * @property {string} [ignorePath] The ignore file to use instead of .eslintignore. + * @property {string[]} [ignorePatterns] Ignore file patterns to use in addition to .eslintignore. + * @property {ConfigData} [overrideConfig] Override config object, overrides all configs used with this instance + * @property {boolean|string} [overrideConfigFile] Searches for default config file when falsy; + * doesn't do any config file lookup when `true`; considered to be a config filename + * when a string. + * @property {Record<string,Plugin>} [plugins] An array of plugin implementations. + * @property {"error" | "warn" | "off"} [reportUnusedDisableDirectives] the severity to report unused eslint-disable directives. + */ + +//------------------------------------------------------------------------------ +// Helpers +//------------------------------------------------------------------------------ + +const FLAT_CONFIG_FILENAME = "eslint.config.js"; +const debug = require("debug")("eslint:flat-eslint"); +const removedFormatters = new Set(["table", "codeframe"]); +const privateMembers = new WeakMap(); + +/** + * It will calculate the error and warning count for collection of messages per file + * @param {LintMessage[]} messages Collection of messages + * @returns {Object} Contains the stats + * @private + */ +function calculateStatsPerFile(messages) { + return messages.reduce((stat, message) => { + if (message.fatal || message.severity === 2) { + stat.errorCount++; + if (message.fatal) { + stat.fatalErrorCount++; + } + if (message.fix) { + stat.fixableErrorCount++; + } + } else { + stat.warningCount++; + if (message.fix) { + stat.fixableWarningCount++; + } + } + return stat; + }, { + errorCount: 0, + fatalErrorCount: 0, + warningCount: 0, + fixableErrorCount: 0, + fixableWarningCount: 0 + }); +} + +/** + * It will calculate the error and warning count for collection of results from all files + * @param {LintResult[]} results Collection of messages from all the files + * @returns {Object} Contains the stats + * @private + */ +function calculateStatsPerRun(results) { + return results.reduce((stat, result) => { + stat.errorCount += result.errorCount; + stat.fatalErrorCount += result.fatalErrorCount; + stat.warningCount += result.warningCount; + stat.fixableErrorCount += result.fixableErrorCount; + stat.fixableWarningCount += result.fixableWarningCount; + return stat; + }, { + errorCount: 0, + fatalErrorCount: 0, + warningCount: 0, + fixableErrorCount: 0, + fixableWarningCount: 0 + }); +} + +/** + * Loads global ignore patterns from an ignore file (usually .eslintignore). + * @param {string} filePath The filename to load. + * @returns {ignore} A function encapsulating the ignore patterns. + * @throws {Error} If the file cannot be read. + * @private + */ +async function loadIgnoreFilePatterns(filePath) { + debug(`Loading ignore file: ${filePath}`); + + try { + const ignoreFileText = await fs.readFile(filePath, { encoding: "utf8" }); + + return ignoreFileText + .split(/\r?\n/gu) + .filter(line => line.trim() !== "" && !line.startsWith("#")); + + } catch (e) { + debug(`Error reading ignore file: ${filePath}`); + e.message = `Cannot read ignore file: ${filePath}\nError: ${e.message}`; + throw e; + } +} + +/** + * Create rulesMeta object. + * @param {Map<string,Rule>} rules a map of rules from which to generate the object. + * @returns {Object} metadata for all enabled rules. + */ +function createRulesMeta(rules) { + return Array.from(rules).reduce((retVal, [id, rule]) => { + retVal[id] = rule.meta; + return retVal; + }, {}); +} + +/** @type {WeakMap<ExtractedConfig, DeprecatedRuleInfo[]>} */ +const usedDeprecatedRulesCache = new WeakMap(); + +/** + * Create used deprecated rule list. + * @param {CLIEngine} eslint The CLIEngine instance. + * @param {string} maybeFilePath The absolute path to a lint target file or `"<text>"`. + * @returns {DeprecatedRuleInfo[]} The used deprecated rule list. + */ +function getOrFindUsedDeprecatedRules(eslint, maybeFilePath) { + const { + configs, + options: { cwd } + } = privateMembers.get(eslint); + const filePath = path.isAbsolute(maybeFilePath) + ? maybeFilePath + : path.join(cwd, "__placeholder__.js"); + const config = configs.getConfig(filePath); + + // Most files use the same config, so cache it. + if (config && !usedDeprecatedRulesCache.has(config)) { + const retv = []; + + if (config.rules) { + for (const [ruleId, ruleConf] of Object.entries(config.rules)) { + if (getRuleSeverity(ruleConf) === 0) { + continue; + } + const rule = getRuleFromConfig(ruleId, config); + const meta = rule && rule.meta; + + if (meta && meta.deprecated) { + retv.push({ ruleId, replacedBy: meta.replacedBy || [] }); + } + } + } + + + usedDeprecatedRulesCache.set(config, Object.freeze(retv)); + } + + return config ? usedDeprecatedRulesCache.get(config) : Object.freeze([]); +} + +/** + * Processes the linting results generated by a CLIEngine linting report to + * match the ESLint class's API. + * @param {CLIEngine} eslint The CLIEngine instance. + * @param {CLIEngineLintReport} report The CLIEngine linting report to process. + * @returns {LintResult[]} The processed linting results. + */ +function processLintReport(eslint, { results }) { + const descriptor = { + configurable: true, + enumerable: true, + get() { + return getOrFindUsedDeprecatedRules(eslint, this.filePath); + } + }; + + for (const result of results) { + Object.defineProperty(result, "usedDeprecatedRules", descriptor); + } + + return results; +} + +/** + * An Array.prototype.sort() compatible compare function to order results by their file path. + * @param {LintResult} a The first lint result. + * @param {LintResult} b The second lint result. + * @returns {number} An integer representing the order in which the two results should occur. + */ +function compareResultsByFilePath(a, b) { + if (a.filePath < b.filePath) { + return -1; + } + + if (a.filePath > b.filePath) { + return 1; + } + + return 0; +} + +/** + * Searches from the current working directory up until finding the + * given flat config filename. + * @param {string} cwd The current working directory to search from. + * @returns {Promise<string|null>} The filename if found or `null` if not. + */ +function findFlatConfigFile(cwd) { + return findUp( + FLAT_CONFIG_FILENAME, + { cwd } + ); +} + +/** + * Load the config array from the given filename. + * @param {string} filePath The filename to load from. + * @param {Object} options Options to help load the config file. + * @param {string} options.basePath The base path for the config array. + * @param {boolean} options.shouldIgnore Whether to honor ignore patterns. + * @returns {Promise<FlatConfigArray>} The config array loaded from the config file. + */ +async function loadFlatConfigFile(filePath, { basePath, shouldIgnore }) { + debug(`Loading config from ${filePath}`); + + const fileURL = pathToFileURL(filePath); + + debug(`Config file URL is ${fileURL}`); + + const module = await import(fileURL); + + return new FlatConfigArray(module.default, { + basePath, + shouldIgnore + }); +} + +/** + * Calculates the config array for this run based on inputs. + * @param {FlatESLint} eslint The instance to create the config array for. + * @param {import("./eslint").ESLintOptions} options The ESLint instance options. + * @returns {FlatConfigArray} The config array for `eslint``. + */ +async function calculateConfigArray(eslint, { + cwd, + overrideConfig, + configFile, + ignore: shouldIgnore, + ignorePath, + ignorePatterns +}) { + + // check for cached instance + const slots = privateMembers.get(eslint); + + if (slots.configs) { + return slots.configs; + } + + // determine where to load config file from + let configFilePath; + let basePath = cwd; + + if (typeof configFile === "string") { + debug(`Override config file path is ${configFile}`); + configFilePath = path.resolve(cwd, configFile); + } else if (configFile !== false) { + debug("Searching for eslint.config.js"); + configFilePath = await findFlatConfigFile(cwd); + + if (!configFilePath) { + throw new Error("Could not find config file."); + } + + basePath = path.resolve(path.dirname(configFilePath)); + } + + // load config array + let configs; + + if (configFilePath) { + configs = await loadFlatConfigFile(configFilePath, { + basePath, + shouldIgnore + }); + } else { + configs = new FlatConfigArray([], { basePath, shouldIgnore }); + } + + // add in any configured defaults + configs.push(...slots.defaultConfigs); + + let allIgnorePatterns = []; + let ignoreFilePath; + + // load ignore file if necessary + if (shouldIgnore) { + if (ignorePath) { + ignoreFilePath = path.resolve(cwd, ignorePath); + allIgnorePatterns = await loadIgnoreFilePatterns(ignoreFilePath); + } else { + ignoreFilePath = path.resolve(cwd, ".eslintignore"); + + // no error if .eslintignore doesn't exist` + if (fileExists(ignoreFilePath)) { + allIgnorePatterns = await loadIgnoreFilePatterns(ignoreFilePath); + } + } + } + + // append command line ignore patterns + if (ignorePatterns) { + if (typeof ignorePatterns === "string") { + allIgnorePatterns.push(ignorePatterns); + } else { + allIgnorePatterns.push(...ignorePatterns); + } + } + + /* + * If the config file basePath is different than the cwd, then + * the ignore patterns won't work correctly. Here, we adjust the + * ignore pattern to include the correct relative path. Patterns + * loaded from ignore files are always relative to the cwd, whereas + * the config file basePath can be an ancestor of the cwd. + */ + if (basePath !== cwd && allIgnorePatterns.length) { + + const relativeIgnorePath = path.relative(basePath, cwd); + + allIgnorePatterns = allIgnorePatterns.map(pattern => { + const negated = pattern.startsWith("!"); + const basePattern = negated ? pattern.slice(1) : pattern; + + /* + * Ignore patterns are considered relative to a directory + * when the pattern contains a slash in a position other + * than the last character. If that's the case, we need to + * add the relative ignore path to the current pattern to + * get the correct behavior. Otherwise, no change is needed. + */ + if (!basePattern.includes("/") || basePattern.endsWith("/")) { + return pattern; + } + + return (negated ? "!" : "") + + path.posix.join(relativeIgnorePath, basePattern); + }); + } + + if (allIgnorePatterns.length) { + + /* + * Ignore patterns are added to the end of the config array + * so they can override default ignores. + */ + configs.push({ + ignores: allIgnorePatterns.map(gitignoreToMinimatch) + }); + } + + if (overrideConfig) { + if (Array.isArray(overrideConfig)) { + configs.push(...overrideConfig); + } else { + configs.push(overrideConfig); + } + } + + await configs.normalize(); + + // cache the config array for this instance + slots.configs = configs; + + return configs; +} + +/** + * Processes an source code using ESLint. + * @param {Object} config The config object. + * @param {string} config.text The source code to verify. + * @param {string} config.cwd The path to the current working directory. + * @param {string|undefined} config.filePath The path to the file of `text`. If this is undefined, it uses `<text>`. + * @param {FlatConfigArray} config.configs The config. + * @param {boolean} config.fix If `true` then it does fix. + * @param {boolean} config.allowInlineConfig If `true` then it uses directive comments. + * @param {boolean} config.reportUnusedDisableDirectives If `true` then it reports unused `eslint-disable` comments. + * @param {Linter} config.linter The linter instance to verify. + * @returns {LintResult} The result of linting. + * @private + */ +function verifyText({ + text, + cwd, + filePath: providedFilePath, + configs, + fix, + allowInlineConfig, + reportUnusedDisableDirectives, + linter +}) { + const filePath = providedFilePath || "<text>"; + + debug(`Lint ${filePath}`); + + /* + * Verify. + * `config.extractConfig(filePath)` requires an absolute path, but `linter` + * doesn't know CWD, so it gives `linter` an absolute path always. + */ + const filePathToVerify = filePath === "<text>" ? path.join(cwd, "__placeholder__.js") : filePath; + const { fixed, messages, output } = linter.verifyAndFix( + text, + configs, + { + allowInlineConfig, + filename: filePathToVerify, + fix, + reportUnusedDisableDirectives, + + /** + * Check if the linter should adopt a given code block or not. + * @param {string} blockFilename The virtual filename of a code block. + * @returns {boolean} `true` if the linter should adopt the code block. + */ + filterCodeBlock(blockFilename) { + return configs.isExplicitMatch(blockFilename); + } + } + ); + + // Tweak and return. + const result = { + filePath: filePath === "<text>" ? filePath : path.resolve(filePath), + messages, + suppressedMessages: linter.getSuppressedMessages(), + ...calculateStatsPerFile(messages) + }; + + if (fixed) { + result.output = output; + } + + if ( + result.errorCount + result.warningCount > 0 && + typeof result.output === "undefined" + ) { + result.source = text; + } + + return result; +} + +/** + * Checks whether a message's rule type should be fixed. + * @param {LintMessage} message The message to check. + * @param {FlatConfig} config The config for the file that generated the message. + * @param {string[]} fixTypes An array of fix types to check. + * @returns {boolean} Whether the message should be fixed. + */ +function shouldMessageBeFixed(message, config, fixTypes) { + if (!message.ruleId) { + return fixTypes.has("directive"); + } + + const rule = message.ruleId && getRuleFromConfig(message.ruleId, config); + + return Boolean(rule && rule.meta && fixTypes.has(rule.meta.type)); +} + +/** + * Collect used deprecated rules. + * @param {Array<FlatConfig>} configs The configs to evaluate. + * @returns {IterableIterator<DeprecatedRuleInfo>} Used deprecated rules. + */ +function *iterateRuleDeprecationWarnings(configs) { + const processedRuleIds = new Set(); + + for (const config of configs) { + for (const [ruleId, ruleConfig] of Object.entries(config.rules)) { + + // Skip if it was processed. + if (processedRuleIds.has(ruleId)) { + continue; + } + processedRuleIds.add(ruleId); + + // Skip if it's not used. + if (!getRuleSeverity(ruleConfig)) { + continue; + } + const rule = getRuleFromConfig(ruleId, config); + + // Skip if it's not deprecated. + if (!(rule && rule.meta && rule.meta.deprecated)) { + continue; + } + + // This rule was used and deprecated. + yield { + ruleId, + replacedBy: rule.meta.replacedBy || [] + }; + } + } +} + +//----------------------------------------------------------------------------- +// Main API +//----------------------------------------------------------------------------- + +/** + * Primary Node.js API for ESLint. + */ +class FlatESLint { + + /** + * Creates a new instance of the main ESLint API. + * @param {FlatESLintOptions} options The options for this instance. + */ + constructor(options = {}) { + + const defaultConfigs = []; + const processedOptions = processOptions(options); + const linter = new Linter({ + cwd: processedOptions.cwd, + configType: "flat" + }); + + const cacheFilePath = getCacheFile( + processedOptions.cacheLocation, + processedOptions.cwd + ); + + const lintResultCache = processedOptions.cache + ? new LintResultCache(cacheFilePath, processedOptions.cacheStrategy) + : null; + + privateMembers.set(this, { + options: processedOptions, + linter, + cacheFilePath, + lintResultCache, + defaultConfigs, + defaultIgnores: () => false, + configs: null + }); + + /** + * If additional plugins are passed in, add that to the default + * configs for this instance. + */ + if (options.plugins) { + + const plugins = {}; + + for (const [pluginName, plugin] of Object.entries(options.plugins)) { + plugins[naming.getShorthandName(pluginName, "eslint-plugin")] = plugin; + } + + defaultConfigs.push({ + plugins + }); + } + + } + + /** + * The version text. + * @type {string} + */ + static get version() { + return version; + } + + /** + * Outputs fixes from the given results to files. + * @param {LintResult[]} results The lint results. + * @returns {Promise<void>} Returns a promise that is used to track side effects. + */ + static async outputFixes(results) { + if (!Array.isArray(results)) { + throw new Error("'results' must be an array"); + } + + await Promise.all( + results + .filter(result => { + if (typeof result !== "object" || result === null) { + throw new Error("'results' must include only objects"); + } + return ( + typeof result.output === "string" && + path.isAbsolute(result.filePath) + ); + }) + .map(r => fs.writeFile(r.filePath, r.output)) + ); + } + + /** + * Returns results that only contains errors. + * @param {LintResult[]} results The results to filter. + * @returns {LintResult[]} The filtered results. + */ + static getErrorResults(results) { + const filtered = []; + + results.forEach(result => { + const filteredMessages = result.messages.filter(isErrorMessage); + const filteredSuppressedMessages = result.suppressedMessages.filter(isErrorMessage); + + if (filteredMessages.length > 0) { + filtered.push({ + ...result, + messages: filteredMessages, + suppressedMessages: filteredSuppressedMessages, + errorCount: filteredMessages.length, + warningCount: 0, + fixableErrorCount: result.fixableErrorCount, + fixableWarningCount: 0 + }); + } + }); + + return filtered; + } + + /** + * Returns meta objects for each rule represented in the lint results. + * @param {LintResult[]} results The results to fetch rules meta for. + * @returns {Object} A mapping of ruleIds to rule meta objects. + * @throws {TypeError} When the results object wasn't created from this ESLint instance. + * @throws {TypeError} When a plugin or rule is missing. + */ + getRulesMetaForResults(results) { + + const resultRules = new Map(); + + // short-circuit simple case + if (results.length === 0) { + return resultRules; + } + + const { configs } = privateMembers.get(this); + + /* + * We can only accurately return rules meta information for linting results if the + * results were created by this instance. Otherwise, the necessary rules data is + * not available. So if the config array doesn't already exist, just throw an error + * to let the user know we can't do anything here. + */ + if (!configs) { + throw new TypeError("Results object was not created from this ESLint instance."); + } + + for (const result of results) { + + /* + * Normalize filename for <text>. + */ + const filePath = result.filePath === "<text>" + ? "__placeholder__.js" : result.filePath; + + /* + * All of the plugin and rule information is contained within the + * calculated config for the given file. + */ + const config = configs.getConfig(filePath); + const allMessages = result.messages.concat(result.suppressedMessages); + + for (const { ruleId } of allMessages) { + const rule = getRuleFromConfig(ruleId, config); + + // ensure the rule exists + if (!rule) { + throw new TypeError(`Could not find the rule "${ruleId}".`); + } + + resultRules.set(ruleId, rule); + } + } + + return createRulesMeta(resultRules); + } + + /** + * Executes the current configuration on an array of file and directory names. + * @param {string|string[]} patterns An array of file and directory names. + * @returns {Promise<LintResult[]>} The results of linting the file patterns given. + */ + async lintFiles(patterns) { + if (!isNonEmptyString(patterns) && !isArrayOfNonEmptyString(patterns)) { + throw new Error("'patterns' must be a non-empty string or an array of non-empty strings"); + } + + const { + cacheFilePath, + lintResultCache, + linter, + options: eslintOptions + } = privateMembers.get(this); + const configs = await calculateConfigArray(this, eslintOptions); + const { + allowInlineConfig, + cache, + cwd, + fix, + fixTypes, + reportUnusedDisableDirectives, + globInputPaths, + errorOnUnmatchedPattern + } = eslintOptions; + const startTime = Date.now(); + const usedConfigs = []; + const fixTypesSet = fixTypes ? new Set(fixTypes) : null; + + // Delete cache file; should this be done here? + if (!cache && cacheFilePath) { + debug(`Deleting cache file at ${cacheFilePath}`); + + try { + await fs.unlink(cacheFilePath); + } catch (error) { + const errorCode = error && error.code; + + // Ignore errors when no such file exists or file system is read only (and cache file does not exist) + if (errorCode !== "ENOENT" && !(errorCode === "EROFS" && !(await fs.exists(cacheFilePath)))) { + throw error; + } + } + } + + const filePaths = await findFiles({ + patterns: typeof patterns === "string" ? [patterns] : patterns, + cwd, + globInputPaths, + configs, + errorOnUnmatchedPattern + }); + + debug(`${filePaths.length} files found in: ${Date.now() - startTime}ms`); + + /* + * Because we need to process multiple files, including reading from disk, + * it is most efficient to start by reading each file via promises so that + * they can be done in parallel. Then, we can lint the returned text. This + * ensures we are waiting the minimum amount of time in between lints. + */ + const results = await Promise.all( + + filePaths.map(({ filePath, ignored }) => { + + /* + * If a filename was entered that matches an ignore + * pattern, then notify the user. + */ + if (ignored) { + return createIgnoreResult(filePath, cwd); + } + + const config = configs.getConfig(filePath); + + /* + * Sometimes a file found through a glob pattern will + * be ignored. In this case, `config` will be undefined + * and we just silently ignore the file. + */ + if (!config) { + return void 0; + } + + /* + * Store used configs for: + * - this method uses to collect used deprecated rules. + * - `--fix-type` option uses to get the loaded rule's meta data. + */ + if (!usedConfigs.includes(config)) { + usedConfigs.push(config); + } + + // Skip if there is cached result. + if (lintResultCache) { + const cachedResult = + lintResultCache.getCachedLintResults(filePath, config); + + if (cachedResult) { + const hadMessages = + cachedResult.messages && + cachedResult.messages.length > 0; + + if (hadMessages && fix) { + debug(`Reprocessing cached file to allow autofix: ${filePath}`); + } else { + debug(`Skipping file since it hasn't changed: ${filePath}`); + return cachedResult; + } + } + } + + + // set up fixer for fixtypes if necessary + let fixer = fix; + + if (fix && fixTypesSet) { + + // save original value of options.fix in case it's a function + const originalFix = (typeof fix === "function") + ? fix : () => true; + + fixer = message => shouldMessageBeFixed(message, config, fixTypesSet) && originalFix(message); + } + + return fs.readFile(filePath, "utf8") + .then(text => { + + // do the linting + const result = verifyText({ + text, + filePath, + configs, + cwd, + fix: fixer, + allowInlineConfig, + reportUnusedDisableDirectives, + linter + }); + + /* + * Store the lint result in the LintResultCache. + * NOTE: The LintResultCache will remove the file source and any + * other properties that are difficult to serialize, and will + * hydrate those properties back in on future lint runs. + */ + if (lintResultCache) { + lintResultCache.setCachedLintResults(filePath, config, result); + } + + return result; + }); + + }) + ); + + // Persist the cache to disk. + if (lintResultCache) { + lintResultCache.reconcile(); + } + + let usedDeprecatedRules; + const finalResults = results.filter(result => !!result); + + return processLintReport(this, { + results: finalResults, + ...calculateStatsPerRun(finalResults), + + // Initialize it lazily because CLI and `ESLint` API don't use it. + get usedDeprecatedRules() { + if (!usedDeprecatedRules) { + usedDeprecatedRules = Array.from( + iterateRuleDeprecationWarnings(usedConfigs) + ); + } + return usedDeprecatedRules; + } + }); + } + + /** + * Executes the current configuration on text. + * @param {string} code A string of JavaScript code to lint. + * @param {Object} [options] The options. + * @param {string} [options.filePath] The path to the file of the source code. + * @param {boolean} [options.warnIgnored] When set to true, warn if given filePath is an ignored path. + * @returns {Promise<LintResult[]>} The results of linting the string of code given. + */ + async lintText(code, options = {}) { + + // Parameter validation + + if (typeof code !== "string") { + throw new Error("'code' must be a string"); + } + + if (typeof options !== "object") { + throw new Error("'options' must be an object, null, or undefined"); + } + + // Options validation + + const { + filePath, + warnIgnored = false, + ...unknownOptions + } = options || {}; + + const unknownOptionKeys = Object.keys(unknownOptions); + + if (unknownOptionKeys.length > 0) { + throw new Error(`'options' must not include the unknown option(s): ${unknownOptionKeys.join(", ")}`); + } + + if (filePath !== void 0 && !isNonEmptyString(filePath)) { + throw new Error("'options.filePath' must be a non-empty string or undefined"); + } + + if (typeof warnIgnored !== "boolean") { + throw new Error("'options.warnIgnored' must be a boolean or undefined"); + } + + // Now we can get down to linting + + const { + linter, + options: eslintOptions + } = privateMembers.get(this); + const configs = await calculateConfigArray(this, eslintOptions); + const { + allowInlineConfig, + cwd, + fix, + reportUnusedDisableDirectives + } = eslintOptions; + const results = []; + const startTime = Date.now(); + const resolvedFilename = path.resolve(cwd, filePath || "__placeholder__.js"); + let config; + + // Clear the last used config arrays. + if (resolvedFilename && await this.isPathIgnored(resolvedFilename)) { + if (warnIgnored) { + results.push(createIgnoreResult(resolvedFilename, cwd)); + } + } else { + + // TODO: Needed? + config = configs.getConfig(resolvedFilename); + + // Do lint. + results.push(verifyText({ + text: code, + filePath: resolvedFilename.endsWith("__placeholder__.js") ? "<text>" : resolvedFilename, + configs, + cwd, + fix, + allowInlineConfig, + reportUnusedDisableDirectives, + linter + })); + } + + debug(`Linting complete in: ${Date.now() - startTime}ms`); + let usedDeprecatedRules; + + return processLintReport(this, { + results, + ...calculateStatsPerRun(results), + + // Initialize it lazily because CLI and `ESLint` API don't use it. + get usedDeprecatedRules() { + if (!usedDeprecatedRules) { + usedDeprecatedRules = Array.from( + iterateRuleDeprecationWarnings(config) + ); + } + return usedDeprecatedRules; + } + }); + + } + + /** + * Returns the formatter representing the given formatter name. + * @param {string} [name] The name of the formatter to load. + * The following values are allowed: + * - `undefined` ... Load `stylish` builtin formatter. + * - A builtin formatter name ... Load the builtin formatter. + * - A thirdparty formatter name: + * - `foo` → `eslint-formatter-foo` + * - `@foo` → `@foo/eslint-formatter` + * - `@foo/bar` → `@foo/eslint-formatter-bar` + * - A file path ... Load the file. + * @returns {Promise<Formatter>} A promise resolving to the formatter object. + * This promise will be rejected if the given formatter was not found or not + * a function. + */ + async loadFormatter(name = "stylish") { + if (typeof name !== "string") { + throw new Error("'name' must be a string"); + } + + // replace \ with / for Windows compatibility + const normalizedFormatName = name.replace(/\\/gu, "/"); + const namespace = naming.getNamespaceFromTerm(normalizedFormatName); + + // grab our options + const { cwd } = privateMembers.get(this).options; + + + let formatterPath; + + // if there's a slash, then it's a file (TODO: this check seems dubious for scoped npm packages) + if (!namespace && normalizedFormatName.includes("/")) { + formatterPath = path.resolve(cwd, normalizedFormatName); + } else { + try { + const npmFormat = naming.normalizePackageName(normalizedFormatName, "eslint-formatter"); + + // TODO: This is pretty dirty...would be nice to clean up at some point. + formatterPath = ModuleResolver.resolve(npmFormat, path.join(cwd, "__placeholder__.js")); + } catch { + formatterPath = path.resolve(__dirname, "../", "cli-engine", "formatters", `${normalizedFormatName}.js`); + } + } + + let formatter; + + try { + formatter = (await import(pathToFileURL(formatterPath))).default; + } catch (ex) { + + // check for formatters that have been removed + if (removedFormatters.has(name)) { + ex.message = `The ${name} formatter is no longer part of core ESLint. Install it manually with \`npm install -D eslint-formatter-${name}\``; + } else { + ex.message = `There was a problem loading formatter: ${formatterPath}\nError: ${ex.message}`; + } + + throw ex; + } + + + if (typeof formatter !== "function") { + throw new TypeError(`Formatter must be a function, but got a ${typeof formatter}.`); + } + + const eslint = this; + + return { + + /** + * The main formatter method. + * @param {LintResults[]} results The lint results to format. + * @returns {string} The formatted lint results. + */ + format(results) { + let rulesMeta = null; + + results.sort(compareResultsByFilePath); + + return formatter(results, { + cwd, + get rulesMeta() { + if (!rulesMeta) { + rulesMeta = eslint.getRulesMetaForResults(results); + } + + return rulesMeta; + } + }); + } + }; + } + + /** + * Returns a configuration object for the given file based on the CLI options. + * This is the same logic used by the ESLint CLI executable to determine + * configuration for each file it processes. + * @param {string} filePath The path of the file to retrieve a config object for. + * @returns {Promise<ConfigData|undefined>} A configuration object for the file + * or `undefined` if there is no configuration data for the object. + */ + async calculateConfigForFile(filePath) { + if (!isNonEmptyString(filePath)) { + throw new Error("'filePath' must be a non-empty string"); + } + const options = privateMembers.get(this).options; + const absolutePath = path.resolve(options.cwd, filePath); + const configs = await calculateConfigArray(this, options); + + return configs.getConfig(absolutePath); + } + + /** + * Checks if a given path is ignored by ESLint. + * @param {string} filePath The path of the file to check. + * @returns {Promise<boolean>} Whether or not the given path is ignored. + */ + async isPathIgnored(filePath) { + const config = await this.calculateConfigForFile(filePath); + + return config === void 0; + } +} + +//------------------------------------------------------------------------------ +// Public Interface +//------------------------------------------------------------------------------ + +module.exports = { + FlatESLint, + findFlatConfigFile +}; diff --git a/eslint/lib/eslint/index.js b/eslint/lib/eslint/index.js index c9185ee..017b768 100644 --- a/eslint/lib/eslint/index.js +++ b/eslint/lib/eslint/index.js @@ -1,7 +1,9 @@ "use strict"; const { ESLint } = require("./eslint"); +const { FlatESLint } = require("./flat-eslint"); module.exports = { - ESLint + ESLint, + FlatESLint }; diff --git a/eslint/lib/init/autoconfig.js b/eslint/lib/init/autoconfig.js deleted file mode 100644 index ea25234..0000000 --- a/eslint/lib/init/autoconfig.js +++ /dev/null @@ -1,351 +0,0 @@ -/** - * @fileoverview Used for creating a suggested configuration based on project code. - * @author Ian VanSchooten - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const equal = require("fast-deep-equal"), - recConfig = require("../../conf/eslint-recommended"), - { - Legacy: { - ConfigOps - } - } = require("@eslint/eslintrc"), - { Linter } = require("../linter"), - configRule = require("./config-rule"); - -const debug = require("debug")("eslint:autoconfig"); -const linter = new Linter(); - -//------------------------------------------------------------------------------ -// Data -//------------------------------------------------------------------------------ - -const MAX_CONFIG_COMBINATIONS = 17, // 16 combinations + 1 for severity only - RECOMMENDED_CONFIG_NAME = "eslint:recommended"; - -//------------------------------------------------------------------------------ -// Private -//------------------------------------------------------------------------------ - -/** - * Information about a rule configuration, in the context of a Registry. - * @typedef {Object} registryItem - * @property {ruleConfig} config A valid configuration for the rule - * @property {number} specificity The number of elements in the ruleConfig array - * @property {number} errorCount The number of errors encountered when linting with the config - */ - -/** - * This callback is used to measure execution status in a progress bar - * @callback progressCallback - * @param {number} The total number of times the callback will be called. - */ - -/** - * Create registryItems for rules - * @param {rulesConfig} rulesConfig Hash of rule names and arrays of ruleConfig items - * @returns {Object} registryItems for each rule in provided rulesConfig - */ -function makeRegistryItems(rulesConfig) { - return Object.keys(rulesConfig).reduce((accumulator, ruleId) => { - accumulator[ruleId] = rulesConfig[ruleId].map(config => ({ - config, - specificity: config.length || 1, - errorCount: void 0 - })); - return accumulator; - }, {}); -} - -/** - * Creates an object in which to store rule configs and error counts - * - * Unless a rulesConfig is provided at construction, the registry will not contain - * any rules, only methods. This will be useful for building up registries manually. - * - * Registry class - */ -class Registry { - - /** - * @param {rulesConfig} [rulesConfig] Hash of rule names and arrays of possible configurations - */ - constructor(rulesConfig) { - this.rules = (rulesConfig) ? makeRegistryItems(rulesConfig) : {}; - } - - /** - * Populate the registry with core rule configs. - * - * It will set the registry's `rule` property to an object having rule names - * as keys and an array of registryItems as values. - * @returns {void} - */ - populateFromCoreRules() { - const rulesConfig = configRule.createCoreRuleConfigs(/* noDeprecated = */ true); - - this.rules = makeRegistryItems(rulesConfig); - } - - /** - * Creates sets of rule configurations which can be used for linting - * and initializes registry errors to zero for those configurations (side effect). - * - * This combines as many rules together as possible, such that the first sets - * in the array will have the highest number of rules configured, and later sets - * will have fewer and fewer, as not all rules have the same number of possible - * configurations. - * - * The length of the returned array will be <= MAX_CONFIG_COMBINATIONS. - * @returns {Object[]} "rules" configurations to use for linting - */ - buildRuleSets() { - let idx = 0; - const ruleIds = Object.keys(this.rules), - ruleSets = []; - - /** - * Add a rule configuration from the registry to the ruleSets - * - * This is broken out into its own function so that it doesn't need to be - * created inside of the while loop. - * @param {string} rule The ruleId to add. - * @returns {void} - */ - const addRuleToRuleSet = function(rule) { - - /* - * This check ensures that there is a rule configuration and that - * it has fewer than the max combinations allowed. - * If it has too many configs, we will only use the most basic of - * the possible configurations. - */ - const hasFewCombos = (this.rules[rule].length <= MAX_CONFIG_COMBINATIONS); - - if (this.rules[rule][idx] && (hasFewCombos || this.rules[rule][idx].specificity <= 2)) { - - /* - * If the rule has too many possible combinations, only take - * simple ones, avoiding objects. - */ - if (!hasFewCombos && typeof this.rules[rule][idx].config[1] === "object") { - return; - } - - ruleSets[idx] = ruleSets[idx] || {}; - ruleSets[idx][rule] = this.rules[rule][idx].config; - - /* - * Initialize errorCount to zero, since this is a config which - * will be linted. - */ - this.rules[rule][idx].errorCount = 0; - } - }.bind(this); - - while (ruleSets.length === idx) { - ruleIds.forEach(addRuleToRuleSet); - idx += 1; - } - - return ruleSets; - } - - /** - * Remove all items from the registry with a non-zero number of errors - * - * Note: this also removes rule configurations which were not linted - * (meaning, they have an undefined errorCount). - * @returns {void} - */ - stripFailingConfigs() { - const ruleIds = Object.keys(this.rules), - newRegistry = new Registry(); - - newRegistry.rules = Object.assign({}, this.rules); - ruleIds.forEach(ruleId => { - const errorFreeItems = newRegistry.rules[ruleId].filter(registryItem => (registryItem.errorCount === 0)); - - if (errorFreeItems.length > 0) { - newRegistry.rules[ruleId] = errorFreeItems; - } else { - delete newRegistry.rules[ruleId]; - } - }); - - return newRegistry; - } - - /** - * Removes rule configurations which were not included in a ruleSet - * @returns {void} - */ - stripExtraConfigs() { - const ruleIds = Object.keys(this.rules), - newRegistry = new Registry(); - - newRegistry.rules = Object.assign({}, this.rules); - ruleIds.forEach(ruleId => { - newRegistry.rules[ruleId] = newRegistry.rules[ruleId].filter(registryItem => (typeof registryItem.errorCount !== "undefined")); - }); - - return newRegistry; - } - - /** - * Creates a registry of rules which had no error-free configs. - * The new registry is intended to be analyzed to determine whether its rules - * should be disabled or set to warning. - * @returns {Registry} A registry of failing rules. - */ - getFailingRulesRegistry() { - const ruleIds = Object.keys(this.rules), - failingRegistry = new Registry(); - - ruleIds.forEach(ruleId => { - const failingConfigs = this.rules[ruleId].filter(registryItem => (registryItem.errorCount > 0)); - - if (failingConfigs && failingConfigs.length === this.rules[ruleId].length) { - failingRegistry.rules[ruleId] = failingConfigs; - } - }); - - return failingRegistry; - } - - /** - * Create an eslint config for any rules which only have one configuration - * in the registry. - * @returns {Object} An eslint config with rules section populated - */ - createConfig() { - const ruleIds = Object.keys(this.rules), - config = { rules: {} }; - - ruleIds.forEach(ruleId => { - if (this.rules[ruleId].length === 1) { - config.rules[ruleId] = this.rules[ruleId][0].config; - } - }); - - return config; - } - - /** - * Return a cloned registry containing only configs with a desired specificity - * @param {number} specificity Only keep configs with this specificity - * @returns {Registry} A registry of rules - */ - filterBySpecificity(specificity) { - const ruleIds = Object.keys(this.rules), - newRegistry = new Registry(); - - newRegistry.rules = Object.assign({}, this.rules); - ruleIds.forEach(ruleId => { - newRegistry.rules[ruleId] = this.rules[ruleId].filter(registryItem => (registryItem.specificity === specificity)); - }); - - return newRegistry; - } - - /** - * Lint SourceCodes against all configurations in the registry, and record results - * @param {Object[]} sourceCodes SourceCode objects for each filename - * @param {Object} config ESLint config object - * @param {progressCallback} [cb] Optional callback for reporting execution status - * @returns {Registry} New registry with errorCount populated - */ - lintSourceCode(sourceCodes, config, cb) { - let lintedRegistry = new Registry(); - - lintedRegistry.rules = Object.assign({}, this.rules); - - const ruleSets = lintedRegistry.buildRuleSets(); - - lintedRegistry = lintedRegistry.stripExtraConfigs(); - - debug("Linting with all possible rule combinations"); - - const filenames = Object.keys(sourceCodes); - const totalFilesLinting = filenames.length * ruleSets.length; - - filenames.forEach(filename => { - debug(`Linting file: ${filename}`); - - let ruleSetIdx = 0; - - ruleSets.forEach(ruleSet => { - const lintConfig = Object.assign({}, config, { rules: ruleSet }); - const lintResults = linter.verify(sourceCodes[filename], lintConfig); - - lintResults.forEach(result => { - - /* - * It is possible that the error is from a configuration comment - * in a linted file, in which case there may not be a config - * set in this ruleSetIdx. - * (https://github.com/eslint/eslint/issues/5992) - * (https://github.com/eslint/eslint/issues/7860) - */ - if ( - lintedRegistry.rules[result.ruleId] && - lintedRegistry.rules[result.ruleId][ruleSetIdx] - ) { - lintedRegistry.rules[result.ruleId][ruleSetIdx].errorCount += 1; - } - }); - - ruleSetIdx += 1; - - if (cb) { - cb(totalFilesLinting); // eslint-disable-line node/callback-return -- End of function - } - }); - - // Deallocate for GC - sourceCodes[filename] = null; - }); - - return lintedRegistry; - } -} - -/** - * Extract rule configuration into eslint:recommended where possible. - * - * This will return a new config with `["extends": [ ..., "eslint:recommended"]` and - * only the rules which have configurations different from the recommended config. - * @param {Object} config config object - * @returns {Object} config object using `"extends": ["eslint:recommended"]` - */ -function extendFromRecommended(config) { - const newConfig = Object.assign({}, config); - - ConfigOps.normalizeToStrings(newConfig); - - const recRules = Object.keys(recConfig.rules).filter(ruleId => ConfigOps.isErrorSeverity(recConfig.rules[ruleId])); - - recRules.forEach(ruleId => { - if (equal(recConfig.rules[ruleId], newConfig.rules[ruleId])) { - delete newConfig.rules[ruleId]; - } - }); - newConfig.extends.unshift(RECOMMENDED_CONFIG_NAME); - return newConfig; -} - - -//------------------------------------------------------------------------------ -// Public Interface -//------------------------------------------------------------------------------ - -module.exports = { - Registry, - extendFromRecommended -}; diff --git a/eslint/lib/init/config-file.js b/eslint/lib/init/config-file.js deleted file mode 100644 index 9eb10fa..0000000 --- a/eslint/lib/init/config-file.js +++ /dev/null @@ -1,144 +0,0 @@ -/** - * @fileoverview Helper to locate and load configuration files. - * @author Nicholas C. Zakas - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const fs = require("fs"), - path = require("path"), - stringify = require("json-stable-stringify-without-jsonify"); - -const debug = require("debug")("eslint:config-file"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -/** - * Determines sort order for object keys for json-stable-stringify - * - * see: https://github.com/samn/json-stable-stringify#cmp - * @param {Object} a The first comparison object ({key: akey, value: avalue}) - * @param {Object} b The second comparison object ({key: bkey, value: bvalue}) - * @returns {number} 1 or -1, used in stringify cmp method - */ -function sortByKey(a, b) { - return a.key > b.key ? 1 : -1; -} - -//------------------------------------------------------------------------------ -// Private -//------------------------------------------------------------------------------ - -/** - * Writes a configuration file in JSON format. - * @param {Object} config The configuration object to write. - * @param {string} filePath The filename to write to. - * @returns {void} - * @private - */ -function writeJSONConfigFile(config, filePath) { - debug(`Writing JSON config file: ${filePath}`); - - const content = `${stringify(config, { cmp: sortByKey, space: 4 })}\n`; - - fs.writeFileSync(filePath, content, "utf8"); -} - -/** - * Writes a configuration file in YAML format. - * @param {Object} config The configuration object to write. - * @param {string} filePath The filename to write to. - * @returns {void} - * @private - */ -function writeYAMLConfigFile(config, filePath) { - debug(`Writing YAML config file: ${filePath}`); - - // lazy load YAML to improve performance when not used - const yaml = require("js-yaml"); - - const content = yaml.dump(config, { sortKeys: true }); - - fs.writeFileSync(filePath, content, "utf8"); -} - -/** - * Writes a configuration file in JavaScript format. - * @param {Object} config The configuration object to write. - * @param {string} filePath The filename to write to. - * @throws {Error} If an error occurs linting the config file contents. - * @returns {void} - * @private - */ -function writeJSConfigFile(config, filePath) { - debug(`Writing JS config file: ${filePath}`); - - let contentToWrite; - const stringifiedContent = `module.exports = ${stringify(config, { cmp: sortByKey, space: 4 })};\n`; - - try { - const { CLIEngine } = require("../cli-engine"); - const linter = new CLIEngine({ - baseConfig: config, - fix: true, - useEslintrc: false - }); - const report = linter.executeOnText(stringifiedContent); - - contentToWrite = report.results[0].output || stringifiedContent; - } catch (e) { - debug("Error linting JavaScript config file, writing unlinted version"); - const errorMessage = e.message; - - contentToWrite = stringifiedContent; - e.message = "An error occurred while generating your JavaScript config file. "; - e.message += "A config file was still generated, but the config file itself may not follow your linting rules."; - e.message += `\nError: ${errorMessage}`; - throw e; - } finally { - fs.writeFileSync(filePath, contentToWrite, "utf8"); - } -} - -/** - * Writes a configuration file. - * @param {Object} config The configuration object to write. - * @param {string} filePath The filename to write to. - * @returns {void} - * @throws {Error} When an unknown file type is specified. - * @private - */ -function write(config, filePath) { - switch (path.extname(filePath)) { - case ".js": - case ".cjs": - writeJSConfigFile(config, filePath); - break; - - case ".json": - writeJSONConfigFile(config, filePath); - break; - - case ".yaml": - case ".yml": - writeYAMLConfigFile(config, filePath); - break; - - default: - throw new Error("Can't write to unknown file type."); - } -} - -//------------------------------------------------------------------------------ -// Public Interface -//------------------------------------------------------------------------------ - -module.exports = { - write -}; diff --git a/eslint/lib/init/config-initializer.js b/eslint/lib/init/config-initializer.js deleted file mode 100644 index 3c244b7..0000000 --- a/eslint/lib/init/config-initializer.js +++ /dev/null @@ -1,709 +0,0 @@ -/** - * @fileoverview Config initialization wizard. - * @author Ilya Volodin - */ - - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const util = require("util"), - path = require("path"), - fs = require("fs"), - enquirer = require("enquirer"), - ProgressBar = require("progress"), - semver = require("semver"), - espree = require("espree"), - recConfig = require("../../conf/eslint-recommended"), - { - Legacy: { - ConfigOps, - naming - } - } = require("@eslint/eslintrc"), - log = require("../shared/logging"), - ModuleResolver = require("../shared/relative-module-resolver"), - autoconfig = require("./autoconfig.js"), - ConfigFile = require("./config-file"), - npmUtils = require("./npm-utils"), - { getSourceCodeOfFiles } = require("./source-code-utils"); - -const debug = require("debug")("eslint:config-initializer"); - -//------------------------------------------------------------------------------ -// Private -//------------------------------------------------------------------------------ - -/* istanbul ignore next: hard to test fs function */ -/** - * Create .eslintrc file in the current working directory - * @param {Object} config object that contains user's answers - * @param {string} format The file format to write to. - * @returns {void} - */ -function writeFile(config, format) { - - // default is .js - let extname = ".js"; - - if (format === "YAML") { - extname = ".yml"; - } else if (format === "JSON") { - extname = ".json"; - } else if (format === "JavaScript") { - const pkgJSONPath = npmUtils.findPackageJson(); - - if (pkgJSONPath) { - const pkgJSONContents = JSON.parse(fs.readFileSync(pkgJSONPath, "utf8")); - - if (pkgJSONContents.type === "module") { - extname = ".cjs"; - } - } - } - - const installedESLint = config.installedESLint; - - delete config.installedESLint; - - ConfigFile.write(config, `./.eslintrc${extname}`); - log.info(`Successfully created .eslintrc${extname} file in ${process.cwd()}`); - - if (installedESLint) { - log.info("ESLint was installed locally. We recommend using this local copy instead of your globally-installed copy."); - } -} - -/** - * Get the peer dependencies of the given module. - * This adds the gotten value to cache at the first time, then reuses it. - * In a process, this function is called twice, but `npmUtils.fetchPeerDependencies` needs to access network which is relatively slow. - * @param {string} moduleName The module name to get. - * @returns {Object} The peer dependencies of the given module. - * This object is the object of `peerDependencies` field of `package.json`. - * Returns null if npm was not found. - */ -function getPeerDependencies(moduleName) { - let result = getPeerDependencies.cache.get(moduleName); - - if (!result) { - log.info(`Checking peerDependencies of ${moduleName}`); - - result = npmUtils.fetchPeerDependencies(moduleName); - getPeerDependencies.cache.set(moduleName, result); - } - - return result; -} -getPeerDependencies.cache = new Map(); - -/** - * Return necessary plugins, configs, parsers, etc. based on the config - * @param {Object} config config object - * @param {boolean} [installESLint=true] If `false` is given, it does not install eslint. - * @returns {string[]} An array of modules to be installed. - */ -function getModulesList(config, installESLint) { - const modules = {}; - - // Create a list of modules which should be installed based on config - if (config.plugins) { - for (const plugin of config.plugins) { - const moduleName = naming.normalizePackageName(plugin, "eslint-plugin"); - - modules[moduleName] = "latest"; - } - } - if (config.extends) { - const extendList = Array.isArray(config.extends) ? config.extends : [config.extends]; - - for (const extend of extendList) { - if (extend.startsWith("eslint:") || extend.startsWith("plugin:")) { - continue; - } - const moduleName = naming.normalizePackageName(extend, "eslint-config"); - - modules[moduleName] = "latest"; - Object.assign( - modules, - getPeerDependencies(`${moduleName}@latest`) - ); - } - } - - const parser = config.parser || (config.parserOptions && config.parserOptions.parser); - - if (parser) { - modules[parser] = "latest"; - } - - if (installESLint === false) { - delete modules.eslint; - } else { - const installStatus = npmUtils.checkDevDeps(["eslint"]); - - // Mark to show messages if it's new installation of eslint. - if (installStatus.eslint === false) { - log.info("Local ESLint installation not found."); - modules.eslint = modules.eslint || "latest"; - config.installedESLint = true; - } - } - - return Object.keys(modules).map(name => `${name}@${modules[name]}`); -} - -/** - * Set the `rules` of a config by examining a user's source code - * - * Note: This clones the config object and returns a new config to avoid mutating - * the original config parameter. - * @param {Object} answers answers received from enquirer - * @param {Object} config config object - * @throws {Error} If source code retrieval fails or source code file count is 0. - * @returns {Object} config object with configured rules - */ -function configureRules(answers, config) { - const BAR_TOTAL = 20, - BAR_SOURCE_CODE_TOTAL = 4, - newConfig = Object.assign({}, config), - disabledConfigs = {}; - let sourceCodes, - registry; - - // Set up a progress bar, as this process can take a long time - const bar = new ProgressBar("Determining Config: :percent [:bar] :elapseds elapsed, eta :etas ", { - width: 30, - total: BAR_TOTAL - }); - - bar.tick(0); // Shows the progress bar - - // Get the SourceCode of all chosen files - const patterns = answers.patterns.split(/[\s]+/u); - - try { - sourceCodes = getSourceCodeOfFiles(patterns, { baseConfig: newConfig, useEslintrc: false }, total => { - bar.tick((BAR_SOURCE_CODE_TOTAL / total)); - }); - } catch (e) { - log.info("\n"); - throw e; - } - const fileQty = Object.keys(sourceCodes).length; - - if (fileQty === 0) { - log.info("\n"); - throw new Error("Automatic Configuration failed. No files were able to be parsed."); - } - - // Create a registry of rule configs - registry = new autoconfig.Registry(); - registry.populateFromCoreRules(); - - // Lint all files with each rule config in the registry - registry = registry.lintSourceCode(sourceCodes, newConfig, total => { - bar.tick((BAR_TOTAL - BAR_SOURCE_CODE_TOTAL) / total); // Subtract out ticks used at beginning - }); - debug(`\nRegistry: ${util.inspect(registry.rules, { depth: null })}`); - - // Create a list of recommended rules, because we don't want to disable them - const recRules = Object.keys(recConfig.rules).filter(ruleId => ConfigOps.isErrorSeverity(recConfig.rules[ruleId])); - - // Find and disable rules which had no error-free configuration - const failingRegistry = registry.getFailingRulesRegistry(); - - Object.keys(failingRegistry.rules).forEach(ruleId => { - - // If the rule is recommended, set it to error, otherwise disable it - disabledConfigs[ruleId] = (recRules.indexOf(ruleId) !== -1) ? 2 : 0; - }); - - // Now that we know which rules to disable, strip out configs with errors - registry = registry.stripFailingConfigs(); - - /* - * If there is only one config that results in no errors for a rule, we should use it. - * createConfig will only add rules that have one configuration in the registry. - */ - const singleConfigs = registry.createConfig().rules; - - /* - * The "sweet spot" for number of options in a config seems to be two (severity plus one option). - * Very often, a third option (usually an object) is available to address - * edge cases, exceptions, or unique situations. We will prefer to use a config with - * specificity of two. - */ - const specTwoConfigs = registry.filterBySpecificity(2).createConfig().rules; - - // Maybe a specific combination using all three options works - const specThreeConfigs = registry.filterBySpecificity(3).createConfig().rules; - - // If all else fails, try to use the default (severity only) - const defaultConfigs = registry.filterBySpecificity(1).createConfig().rules; - - // Combine configs in reverse priority order (later take precedence) - newConfig.rules = Object.assign({}, disabledConfigs, defaultConfigs, specThreeConfigs, specTwoConfigs, singleConfigs); - - // Make sure progress bar has finished (floating point rounding) - bar.update(BAR_TOTAL); - - // Log out some stats to let the user know what happened - const finalRuleIds = Object.keys(newConfig.rules); - const totalRules = finalRuleIds.length; - const enabledRules = finalRuleIds.filter(ruleId => (newConfig.rules[ruleId] !== 0)).length; - const resultMessage = [ - `\nEnabled ${enabledRules} out of ${totalRules}`, - `rules based on ${fileQty}`, - `file${(fileQty === 1) ? "." : "s."}` - ].join(" "); - - log.info(resultMessage); - - ConfigOps.normalizeToStrings(newConfig); - return newConfig; -} - -/** - * process user's answers and create config object - * @param {Object} answers answers received from enquirer - * @returns {Object} config object - */ -function processAnswers(answers) { - let config = { - rules: {}, - env: {}, - parserOptions: {}, - extends: [] - }; - - config.parserOptions.ecmaVersion = espree.latestEcmaVersion; - config.env.es2021 = true; - - // set the module type - if (answers.moduleType === "esm") { - config.parserOptions.sourceType = "module"; - } else if (answers.moduleType === "commonjs") { - config.env.commonjs = true; - } - - // add in browser and node environments if necessary - answers.env.forEach(env => { - config.env[env] = true; - }); - - // add in library information - if (answers.framework === "react") { - config.parserOptions.ecmaFeatures = { - jsx: true - }; - config.plugins = ["react"]; - config.extends.push("plugin:react/recommended"); - } else if (answers.framework === "vue") { - config.plugins = ["vue"]; - config.extends.push("plugin:vue/essential"); - } - - if (answers.typescript) { - if (answers.framework === "vue") { - config.parserOptions.parser = "@typescript-eslint/parser"; - } else { - config.parser = "@typescript-eslint/parser"; - } - - if (Array.isArray(config.plugins)) { - config.plugins.push("@typescript-eslint"); - } else { - config.plugins = ["@typescript-eslint"]; - } - } - - // setup rules based on problems/style enforcement preferences - if (answers.purpose === "problems") { - config.extends.unshift("eslint:recommended"); - } else if (answers.purpose === "style") { - if (answers.source === "prompt") { - config.extends.unshift("eslint:recommended"); - config.rules.indent = ["error", answers.indent]; - config.rules.quotes = ["error", answers.quotes]; - config.rules["linebreak-style"] = ["error", answers.linebreak]; - config.rules.semi = ["error", answers.semi ? "always" : "never"]; - } else if (answers.source === "auto") { - config = configureRules(answers, config); - config = autoconfig.extendFromRecommended(config); - } - } - if (answers.typescript && config.extends.includes("eslint:recommended")) { - config.extends.push("plugin:@typescript-eslint/recommended"); - } - - // normalize extends - if (config.extends.length === 0) { - delete config.extends; - } else if (config.extends.length === 1) { - config.extends = config.extends[0]; - } - - ConfigOps.normalizeToStrings(config); - return config; -} - -/** - * Get the version of the local ESLint. - * @returns {string|null} The version. If the local ESLint was not found, returns null. - */ -function getLocalESLintVersion() { - try { - const eslintPath = ModuleResolver.resolve("eslint", path.join(process.cwd(), "__placeholder__.js")); - const eslint = require(eslintPath); - - return eslint.linter.version || null; - } catch { - return null; - } -} - -/** - * Get the shareable config name of the chosen style guide. - * @param {Object} answers The answers object. - * @returns {string} The shareable config name. - */ -function getStyleGuideName(answers) { - if (answers.styleguide === "airbnb" && answers.framework !== "react") { - return "airbnb-base"; - } - return answers.styleguide; -} - -/** - * Check whether the local ESLint version conflicts with the required version of the chosen shareable config. - * @param {Object} answers The answers object. - * @returns {boolean} `true` if the local ESLint is found then it conflicts with the required version of the chosen shareable config. - */ -function hasESLintVersionConflict(answers) { - - // Get the local ESLint version. - const localESLintVersion = getLocalESLintVersion(); - - if (!localESLintVersion) { - return false; - } - - // Get the required range of ESLint version. - const configName = getStyleGuideName(answers); - const moduleName = `eslint-config-${configName}@latest`; - const peerDependencies = getPeerDependencies(moduleName) || {}; - const requiredESLintVersionRange = peerDependencies.eslint; - - if (!requiredESLintVersionRange) { - return false; - } - - answers.localESLintVersion = localESLintVersion; - answers.requiredESLintVersionRange = requiredESLintVersionRange; - - // Check the version. - if (semver.satisfies(localESLintVersion, requiredESLintVersionRange)) { - answers.installESLint = false; - return false; - } - - return true; -} - -/** - * Install modules. - * @param {string[]} modules Modules to be installed. - * @returns {void} - */ -function installModules(modules) { - log.info(`Installing ${modules.join(", ")}`); - npmUtils.installSyncSaveDev(modules); -} - -/* istanbul ignore next: no need to test enquirer */ -/** - * Ask user to install modules. - * @param {string[]} modules Array of modules to be installed. - * @param {boolean} packageJsonExists Indicates if package.json is existed. - * @returns {Promise<void>} Answer that indicates if user wants to install. - */ -function askInstallModules(modules, packageJsonExists) { - - // If no modules, do nothing. - if (modules.length === 0) { - return Promise.resolve(); - } - - log.info("The config that you've selected requires the following dependencies:\n"); - log.info(modules.join(" ")); - return enquirer.prompt([ - { - type: "toggle", - name: "executeInstallation", - message: "Would you like to install them now with npm?", - enabled: "Yes", - disabled: "No", - initial: 1, - skip() { - return !(modules.length && packageJsonExists); - }, - result(input) { - return this.skipped ? null : input; - } - } - ]).then(({ executeInstallation }) => { - if (executeInstallation) { - installModules(modules); - } - }); -} - -/* istanbul ignore next: no need to test enquirer */ -/** - * Ask use a few questions on command prompt - * @returns {Promise<void>} The promise with the result of the prompt - */ -function promptUser() { - - return enquirer.prompt([ - { - type: "select", - name: "purpose", - message: "How would you like to use ESLint?", - - // The returned number matches the name value of nth in the choices array. - initial: 1, - choices: [ - { message: "To check syntax only", name: "syntax" }, - { message: "To check syntax and find problems", name: "problems" }, - { message: "To check syntax, find problems, and enforce code style", name: "style" } - ] - }, - { - type: "select", - name: "moduleType", - message: "What type of modules does your project use?", - initial: 0, - choices: [ - { message: "JavaScript modules (import/export)", name: "esm" }, - { message: "CommonJS (require/exports)", name: "commonjs" }, - { message: "None of these", name: "none" } - ] - }, - { - type: "select", - name: "framework", - message: "Which framework does your project use?", - initial: 0, - choices: [ - { message: "React", name: "react" }, - { message: "Vue.js", name: "vue" }, - { message: "None of these", name: "none" } - ] - }, - { - type: "toggle", - name: "typescript", - message: "Does your project use TypeScript?", - enabled: "Yes", - disabled: "No", - initial: 0 - }, - { - type: "multiselect", - name: "env", - message: "Where does your code run?", - hint: "(Press <space> to select, <a> to toggle all, <i> to invert selection)", - initial: 0, - choices: [ - { message: "Browser", name: "browser" }, - { message: "Node", name: "node" } - ] - }, - { - type: "select", - name: "source", - message: "How would you like to define a style for your project?", - choices: [ - { message: "Use a popular style guide", name: "guide" }, - { message: "Answer questions about your style", name: "prompt" }, - { message: "Inspect your JavaScript file(s)", name: "auto" } - ], - skip() { - return this.state.answers.purpose !== "style"; - }, - result(input) { - return this.skipped ? null : input; - } - }, - { - type: "select", - name: "styleguide", - message: "Which style guide do you want to follow?", - choices: [ - { message: "Airbnb: https://github.com/airbnb/javascript", name: "airbnb" }, - { message: "Standard: https://github.com/standard/standard", name: "standard" }, - { message: "Google: https://github.com/google/eslint-config-google", name: "google" }, - { message: "XO: https://github.com/xojs/eslint-config-xo", name: "xo" } - ], - skip() { - this.state.answers.packageJsonExists = npmUtils.checkPackageJson(); - return !(this.state.answers.source === "guide" && this.state.answers.packageJsonExists); - }, - result(input) { - return this.skipped ? null : input; - } - }, - { - type: "input", - name: "patterns", - message: "Which file(s), path(s), or glob(s) should be examined?", - skip() { - return this.state.answers.source !== "auto"; - }, - validate(input) { - if (!this.skipped && input.trim().length === 0 && input.trim() !== ",") { - return "You must tell us what code to examine. Try again."; - } - return true; - } - }, - { - type: "select", - name: "format", - message: "What format do you want your config file to be in?", - initial: 0, - choices: ["JavaScript", "YAML", "JSON"] - }, - { - type: "toggle", - name: "installESLint", - message() { - const { answers } = this.state; - const verb = semver.ltr(answers.localESLintVersion, answers.requiredESLintVersionRange) - ? "upgrade" - : "downgrade"; - - return `The style guide "${answers.styleguide}" requires eslint@${answers.requiredESLintVersionRange}. You are currently using eslint@${answers.localESLintVersion}.\n Do you want to ${verb}?`; - }, - enabled: "Yes", - disabled: "No", - initial: 1, - skip() { - return !(this.state.answers.source === "guide" && this.state.answers.packageJsonExists && hasESLintVersionConflict(this.state.answers)); - }, - result(input) { - return this.skipped ? null : input; - } - } - ]).then(earlyAnswers => { - - // early exit if no style guide is necessary - if (earlyAnswers.purpose !== "style") { - const config = processAnswers(earlyAnswers); - const modules = getModulesList(config); - - return askInstallModules(modules, earlyAnswers.packageJsonExists) - .then(() => writeFile(config, earlyAnswers.format)); - } - - // early exit if you are using a style guide - if (earlyAnswers.source === "guide") { - if (!earlyAnswers.packageJsonExists) { - log.info("A package.json is necessary to install plugins such as style guides. Run `npm init` to create a package.json file and try again."); - return void 0; - } - if (earlyAnswers.installESLint === false && !semver.satisfies(earlyAnswers.localESLintVersion, earlyAnswers.requiredESLintVersionRange)) { - log.info(`Note: it might not work since ESLint's version is mismatched with the ${earlyAnswers.styleguide} config.`); - } - if (earlyAnswers.styleguide === "airbnb" && earlyAnswers.framework !== "react") { - earlyAnswers.styleguide = "airbnb-base"; - } - - const config = processAnswers(earlyAnswers); - - if (Array.isArray(config.extends)) { - config.extends.push(earlyAnswers.styleguide); - } else if (config.extends) { - config.extends = [config.extends, earlyAnswers.styleguide]; - } else { - config.extends = [earlyAnswers.styleguide]; - } - - const modules = getModulesList(config); - - return askInstallModules(modules, earlyAnswers.packageJsonExists) - .then(() => writeFile(config, earlyAnswers.format)); - - } - - if (earlyAnswers.source === "auto") { - const combinedAnswers = Object.assign({}, earlyAnswers); - const config = processAnswers(combinedAnswers); - const modules = getModulesList(config); - - return askInstallModules(modules).then(() => writeFile(config, earlyAnswers.format)); - } - - // continue with the style questions otherwise... - return enquirer.prompt([ - { - type: "select", - name: "indent", - message: "What style of indentation do you use?", - initial: 0, - choices: [{ message: "Tabs", name: "tab" }, { message: "Spaces", name: 4 }] - }, - { - type: "select", - name: "quotes", - message: "What quotes do you use for strings?", - initial: 0, - choices: [{ message: "Double", name: "double" }, { message: "Single", name: "single" }] - }, - { - type: "select", - name: "linebreak", - message: "What line endings do you use?", - initial: 0, - choices: [{ message: "Unix", name: "unix" }, { message: "Windows", name: "windows" }] - }, - { - type: "toggle", - name: "semi", - message: "Do you require semicolons?", - enabled: "Yes", - disabled: "No", - initial: 1 - } - ]).then(answers => { - const totalAnswers = Object.assign({}, earlyAnswers, answers); - - const config = processAnswers(totalAnswers); - const modules = getModulesList(config); - - return askInstallModules(modules).then(() => writeFile(config, earlyAnswers.format)); - }); - }); -} - -//------------------------------------------------------------------------------ -// Public Interface -//------------------------------------------------------------------------------ - -const init = { - getModulesList, - hasESLintVersionConflict, - installModules, - processAnswers, - writeFile, - /* istanbul ignore next */initializeConfig() { - return promptUser(); - } -}; - -module.exports = init; diff --git a/eslint/lib/init/npm-utils.js b/eslint/lib/init/npm-utils.js deleted file mode 100644 index 4a8efe9..0000000 --- a/eslint/lib/init/npm-utils.js +++ /dev/null @@ -1,179 +0,0 @@ -/** - * @fileoverview Utility for executing npm commands. - * @author Ian VanSchooten - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const fs = require("fs"), - spawn = require("cross-spawn"), - path = require("path"), - log = require("../shared/logging"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -/** - * Find the closest package.json file, starting at process.cwd (by default), - * and working up to root. - * @param {string} [startDir=process.cwd()] Starting directory - * @returns {string} Absolute path to closest package.json file - */ -function findPackageJson(startDir) { - let dir = path.resolve(startDir || process.cwd()); - - do { - const pkgFile = path.join(dir, "package.json"); - - if (!fs.existsSync(pkgFile) || !fs.statSync(pkgFile).isFile()) { - dir = path.join(dir, ".."); - continue; - } - return pkgFile; - } while (dir !== path.resolve(dir, "..")); - return null; -} - -//------------------------------------------------------------------------------ -// Private -//------------------------------------------------------------------------------ - -/** - * Install node modules synchronously and save to devDependencies in package.json - * @param {string|string[]} packages Node module or modules to install - * @returns {void} - */ -function installSyncSaveDev(packages) { - const packageList = Array.isArray(packages) ? packages : [packages]; - const npmProcess = spawn.sync("npm", ["i", "--save-dev"].concat(packageList), { stdio: "inherit" }); - const error = npmProcess.error; - - if (error && error.code === "ENOENT") { - const pluralS = packageList.length > 1 ? "s" : ""; - - log.error(`Could not execute npm. Please install the following package${pluralS} with a package manager of your choice: ${packageList.join(", ")}`); - } -} - -/** - * Fetch `peerDependencies` of the given package by `npm show` command. - * @param {string} packageName The package name to fetch peerDependencies. - * @returns {Object} Gotten peerDependencies. Returns null if npm was not found. - */ -function fetchPeerDependencies(packageName) { - const npmProcess = spawn.sync( - "npm", - ["show", "--json", packageName, "peerDependencies"], - { encoding: "utf8" } - ); - - const error = npmProcess.error; - - if (error && error.code === "ENOENT") { - return null; - } - const fetchedText = npmProcess.stdout.trim(); - - return JSON.parse(fetchedText || "{}"); - - -} - -/** - * Check whether node modules are include in a project's package.json. - * @param {string[]} packages Array of node module names - * @param {Object} opt Options Object - * @param {boolean} opt.dependencies Set to true to check for direct dependencies - * @param {boolean} opt.devDependencies Set to true to check for development dependencies - * @param {boolean} opt.startdir Directory to begin searching from - * @throws {Error} If cannot find valid `package.json` file. - * @returns {Object} An object whose keys are the module names - * and values are booleans indicating installation. - */ -function check(packages, opt) { - const deps = new Set(); - const pkgJson = (opt) ? findPackageJson(opt.startDir) : findPackageJson(); - let fileJson; - - if (!pkgJson) { - throw new Error("Could not find a package.json file. Run 'npm init' to create one."); - } - - try { - fileJson = JSON.parse(fs.readFileSync(pkgJson, "utf8")); - } catch (e) { - const error = new Error(e); - - error.messageTemplate = "failed-to-read-json"; - error.messageData = { - path: pkgJson, - message: e.message - }; - throw error; - } - - ["dependencies", "devDependencies"].forEach(key => { - if (opt[key] && typeof fileJson[key] === "object") { - Object.keys(fileJson[key]).forEach(dep => deps.add(dep)); - } - }); - - return packages.reduce((status, pkg) => { - status[pkg] = deps.has(pkg); - return status; - }, {}); -} - -/** - * Check whether node modules are included in the dependencies of a project's - * package.json. - * - * Convenience wrapper around check(). - * @param {string[]} packages Array of node modules to check. - * @param {string} rootDir The directory containing a package.json - * @returns {Object} An object whose keys are the module names - * and values are booleans indicating installation. - */ -function checkDeps(packages, rootDir) { - return check(packages, { dependencies: true, startDir: rootDir }); -} - -/** - * Check whether node modules are included in the devDependencies of a project's - * package.json. - * - * Convenience wrapper around check(). - * @param {string[]} packages Array of node modules to check. - * @returns {Object} An object whose keys are the module names - * and values are booleans indicating installation. - */ -function checkDevDeps(packages) { - return check(packages, { devDependencies: true }); -} - -/** - * Check whether package.json is found in current path. - * @param {string} [startDir] Starting directory - * @returns {boolean} Whether a package.json is found in current path. - */ -function checkPackageJson(startDir) { - return !!findPackageJson(startDir); -} - -//------------------------------------------------------------------------------ -// Public Interface -//------------------------------------------------------------------------------ - -module.exports = { - installSyncSaveDev, - fetchPeerDependencies, - findPackageJson, - checkDeps, - checkDevDeps, - checkPackageJson -}; diff --git a/eslint/lib/init/source-code-utils.js b/eslint/lib/init/source-code-utils.js deleted file mode 100644 index 08c20e5..0000000 --- a/eslint/lib/init/source-code-utils.js +++ /dev/null @@ -1,110 +0,0 @@ -/** - * @fileoverview Tools for obtaining SourceCode objects. - * @author Ian VanSchooten - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const { CLIEngine } = require("../cli-engine"); - -/* - * This is used for: - * - * 1. Enumerate target file because we have not expose such a API on `CLIEngine` - * (https://github.com/eslint/eslint/issues/11222). - * 2. Create `SourceCode` instances. Because we don't have any function which - * instantiate `SourceCode` so it needs to take the created `SourceCode` - * instance out after linting. - * - * TODO1: Expose the API that enumerates target files. - * TODO2: Extract the creation logic of `SourceCode` from `Linter` class. - */ -const { getCLIEngineInternalSlots } = require("../cli-engine/cli-engine"); // eslint-disable-line node/no-restricted-require -- Todo - -const debug = require("debug")("eslint:source-code-utils"); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -/** - * Get the SourceCode object for a single file - * @param {string} filename The fully resolved filename to get SourceCode from. - * @param {Object} engine A CLIEngine. - * @throws {Error} Upon fatal errors from execution. - * @returns {Array} Array of the SourceCode object representing the file - * and fatal error message. - */ -function getSourceCodeOfFile(filename, engine) { - debug("getting sourceCode of", filename); - const results = engine.executeOnFiles([filename]); - - if (results && results.results[0] && results.results[0].messages[0] && results.results[0].messages[0].fatal) { - const msg = results.results[0].messages[0]; - - throw new Error(`(${filename}:${msg.line}:${msg.column}) ${msg.message}`); - } - - // TODO: extract the logic that creates source code objects to `SourceCode#parse(text, options)` or something like. - const { linter } = getCLIEngineInternalSlots(engine); - const sourceCode = linter.getSourceCode(); - - return sourceCode; -} - -//------------------------------------------------------------------------------ -// Public Interface -//------------------------------------------------------------------------------ - - -/** - * This callback is used to measure execution status in a progress bar - * @callback progressCallback - * @param {number} The total number of times the callback will be called. - */ - -/** - * Gets the SourceCode of a single file, or set of files. - * @param {string[]|string} patterns A filename, directory name, or glob, or an array of them - * @param {Object} options A CLIEngine options object. If not provided, the default cli options will be used. - * @param {progressCallback} callback Callback for reporting execution status - * @returns {Object} The SourceCode of all processed files. - */ -function getSourceCodeOfFiles(patterns, options, callback) { - const sourceCodes = {}; - const globPatternsList = typeof patterns === "string" ? [patterns] : patterns; - const engine = new CLIEngine({ ...options, rules: {} }); - - // TODO: make file iteration as a public API and use it. - const { fileEnumerator } = getCLIEngineInternalSlots(engine); - const filenames = - Array.from(fileEnumerator.iterateFiles(globPatternsList)) - .filter(entry => !entry.ignored) - .map(entry => entry.filePath); - - if (filenames.length === 0) { - debug(`Did not find any files matching pattern(s): ${globPatternsList}`); - } - - filenames.forEach(filename => { - const sourceCode = getSourceCodeOfFile(filename, engine); - - if (sourceCode) { - debug("got sourceCode of", filename); - sourceCodes[filename] = sourceCode; - } - if (callback) { - callback(filenames.length); // eslint-disable-line node/callback-return -- End of function - } - }); - - return sourceCodes; -} - -module.exports = { - getSourceCodeOfFiles -}; diff --git a/eslint/lib/linter/apply-disable-directives.js b/eslint/lib/linter/apply-disable-directives.js index e5f2e52..459c859 100644 --- a/eslint/lib/linter/apply-disable-directives.js +++ b/eslint/lib/linter/apply-disable-directives.js @@ -43,7 +43,7 @@ function groupByParentComment(directives) { * Creates removal details for a set of directives within the same comment. * @param {Directive[]} directives Unused directives to be removed. * @param {Token} commentToken The backing Comment token. - * @returns {{ description, fix, position }[]} Details for later creation of output Problems. + * @returns {{ description, fix, unprocessedDirective }[]} Details for later creation of output Problems. */ function createIndividualDirectivesRemoval(directives, commentToken) { @@ -66,7 +66,7 @@ function createIndividualDirectivesRemoval(directives, commentToken) { const listText = commentToken.value .slice(listStartOffset) // remove directive name and all whitespace before the list .split(/\s-{2,}\s/u)[0] // remove `-- comment`, if it exists - .trimRight(); // remove all whitespace after the list + .trimEnd(); // remove all whitespace after the list /* * We can assume that `listText` contains multiple elements. @@ -138,7 +138,7 @@ function createIndividualDirectivesRemoval(directives, commentToken) { ], text: "" }, - position: directive.unprocessedDirective + unprocessedDirective: directive.unprocessedDirective }; }); } @@ -147,7 +147,7 @@ function createIndividualDirectivesRemoval(directives, commentToken) { * Creates a description of deleting an entire unused disable comment. * @param {Directive[]} directives Unused directives to be removed. * @param {Token} commentToken The backing Comment token. - * @returns {{ description, fix, position }} Details for later creation of an output Problem. + * @returns {{ description, fix, unprocessedDirective }} Details for later creation of an output Problem. */ function createCommentRemoval(directives, commentToken) { const { range } = commentToken; @@ -161,14 +161,14 @@ function createCommentRemoval(directives, commentToken) { range, text: " " }, - position: directives[0].unprocessedDirective + unprocessedDirective: directives[0].unprocessedDirective }; } /** * Parses details from directives to create output Problems. * @param {Directive[]} allDirectives Unused directives to be removed. - * @returns {{ description, fix, position }[]} Details for later creation of output Problems. + * @returns {{ description, fix, unprocessedDirective }[]} Details for later creation of output Problems. */ function processUnusedDisableDirectives(allDirectives) { const directiveGroups = groupByParentComment(allDirectives); @@ -197,62 +197,52 @@ function processUnusedDisableDirectives(allDirectives) { * for the exported function, except that `reportUnusedDisableDirectives` is not supported * (this function always reports unused disable directives). * @returns {{problems: Problem[], unusedDisableDirectives: Problem[]}} An object with a list - * of filtered problems and unused eslint-disable directives + * of problems (including suppressed ones) and unused eslint-disable directives */ function applyDirectives(options) { const problems = []; - let nextDirectiveIndex = 0; - let currentGlobalDisableDirective = null; - const disabledRuleMap = new Map(); - - // enabledRules is only used when there is a current global disable directive. - const enabledRules = new Set(); const usedDisableDirectives = new Set(); for (const problem of options.problems) { + let disableDirectivesForProblem = []; + let nextDirectiveIndex = 0; + while ( nextDirectiveIndex < options.directives.length && compareLocations(options.directives[nextDirectiveIndex], problem) <= 0 ) { const directive = options.directives[nextDirectiveIndex++]; - switch (directive.type) { - case "disable": - if (directive.ruleId === null) { - currentGlobalDisableDirective = directive; - disabledRuleMap.clear(); - enabledRules.clear(); - } else if (currentGlobalDisableDirective) { - enabledRules.delete(directive.ruleId); - disabledRuleMap.set(directive.ruleId, directive); - } else { - disabledRuleMap.set(directive.ruleId, directive); - } - break; - - case "enable": - if (directive.ruleId === null) { - currentGlobalDisableDirective = null; - disabledRuleMap.clear(); - } else if (currentGlobalDisableDirective) { - enabledRules.add(directive.ruleId); - disabledRuleMap.delete(directive.ruleId); - } else { - disabledRuleMap.delete(directive.ruleId); - } - break; - - // no default + if (directive.ruleId === null || directive.ruleId === problem.ruleId) { + switch (directive.type) { + case "disable": + disableDirectivesForProblem.push(directive); + break; + + case "enable": + disableDirectivesForProblem = []; + break; + + // no default + } } } - if (disabledRuleMap.has(problem.ruleId)) { - usedDisableDirectives.add(disabledRuleMap.get(problem.ruleId)); - } else if (currentGlobalDisableDirective && !enabledRules.has(problem.ruleId)) { - usedDisableDirectives.add(currentGlobalDisableDirective); - } else { - problems.push(problem); + if (disableDirectivesForProblem.length > 0) { + const suppressions = disableDirectivesForProblem.map(directive => ({ + kind: "directive", + justification: directive.unprocessedDirective.justification + })); + + if (problem.suppressions) { + problem.suppressions = problem.suppressions.concat(suppressions); + } else { + problem.suppressions = suppressions; + usedDisableDirectives.add(disableDirectivesForProblem[disableDirectivesForProblem.length - 1]); + } } + + problems.push(problem); } const unusedDisableDirectivesToReport = options.directives @@ -261,30 +251,35 @@ function applyDirectives(options) { const processed = processUnusedDisableDirectives(unusedDisableDirectivesToReport); const unusedDisableDirectives = processed - .map(({ description, fix, position }) => ({ - ruleId: null, - message: description - ? `Unused eslint-disable directive (no problems were reported from ${description}).` - : "Unused eslint-disable directive (no problems were reported).", - line: position.line, - column: position.column, - severity: options.reportUnusedDisableDirectives === "warn" ? 1 : 2, - nodeType: null, - ...options.disableFixes ? {} : { fix } - })); + .map(({ description, fix, unprocessedDirective }) => { + const { parentComment, type, line, column } = unprocessedDirective; + + return { + ruleId: null, + message: description + ? `Unused eslint-disable directive (no problems were reported from ${description}).` + : "Unused eslint-disable directive (no problems were reported).", + line: type === "disable-next-line" ? parentComment.commentToken.loc.start.line : line, + column: type === "disable-next-line" ? parentComment.commentToken.loc.start.column + 1 : column, + severity: options.reportUnusedDisableDirectives === "warn" ? 1 : 2, + nodeType: null, + ...options.disableFixes ? {} : { fix } + }; + }); return { problems, unusedDisableDirectives }; } /** * Given a list of directive comments (i.e. metadata about eslint-disable and eslint-enable comments) and a list - * of reported problems, determines which problems should be reported. + * of reported problems, adds the suppression information to the problems. * @param {Object} options Information about directives and problems * @param {{ * type: ("disable"|"enable"|"disable-line"|"disable-next-line"), * ruleId: (string|null), * line: number, - * column: number + * column: number, + * justification: string * }} options.directives Directive comments found in the file, with one-based columns. * Two directive comments can only have the same location if they also have the same type (e.g. a single eslint-disable * comment for two different rules is represented as two directives). @@ -292,8 +287,8 @@ function applyDirectives(options) { * A list of problems reported by rules, sorted by increasing location in the file, with one-based columns. * @param {"off" | "warn" | "error"} options.reportUnusedDisableDirectives If `"warn"` or `"error"`, adds additional problems for unused directives * @param {boolean} options.disableFixes If true, it doesn't make `fix` properties. - * @returns {{ruleId: (string|null), line: number, column: number}[]} - * A list of reported problems that were not disabled by the directive comments. + * @returns {{ruleId: (string|null), line: number, column: number, suppressions?: {kind: string, justification: string}}[]} + * An object with a list of reported problems, the suppressed of which contain the suppression information. */ module.exports = ({ directives, disableFixes, problems, reportUnusedDisableDirectives = "off" }) => { const blockDirectives = directives diff --git a/eslint/lib/linter/code-path-analysis/code-path-segment.js b/eslint/lib/linter/code-path-analysis/code-path-segment.js index fad559a..fd2726a 100644 --- a/eslint/lib/linter/code-path-analysis/code-path-segment.js +++ b/eslint/lib/linter/code-path-analysis/code-path-segment.js @@ -88,10 +88,10 @@ class CodePathSegment { } }); - /* istanbul ignore if */ + /* c8 ignore start */ if (debug.enabled) { this.internal.nodes = []; - } + }/* c8 ignore stop */ } /** @@ -100,7 +100,7 @@ class CodePathSegment { * @returns {boolean} `true` if the segment is coming from the end of a loop. */ isLoopedPrevSegment(segment) { - return this.internal.loopedPrevSegments.indexOf(segment) !== -1; + return this.internal.loopedPrevSegments.includes(segment); } /** diff --git a/eslint/lib/linter/code-path-analysis/code-path-state.js b/eslint/lib/linter/code-path-analysis/code-path-state.js index 118f70a..d187297 100644 --- a/eslint/lib/linter/code-path-analysis/code-path-state.js +++ b/eslint/lib/linter/code-path-analysis/code-path-state.js @@ -33,7 +33,7 @@ function addToReturnedOrThrown(dest, others, all, segments) { const segment = segments[i]; dest.push(segment); - if (others.indexOf(segment) === -1) { + if (!others.includes(segment)) { all.push(segment); } } @@ -59,7 +59,7 @@ function getContinueContext(state, label) { context = context.upper; } - /* istanbul ignore next: foolproof (syntax error) */ + /* c8 ignore next */ return null; } @@ -79,7 +79,7 @@ function getBreakContext(state, label) { context = context.upper; } - /* istanbul ignore next: foolproof (syntax error) */ + /* c8 ignore next */ return null; } @@ -433,7 +433,7 @@ class CodePathState { */ return context; - /* istanbul ignore next */ + /* c8 ignore next */ default: throw new Error("unreachable"); } @@ -1030,7 +1030,7 @@ class CodePathState { }; break; - /* istanbul ignore next */ + /* c8 ignore next */ default: throw new Error(`unknown type: "${type}"`); } @@ -1095,7 +1095,7 @@ class CodePathState { ); break; - /* istanbul ignore next */ + /* c8 ignore next */ default: throw new Error("unreachable"); } @@ -1392,11 +1392,12 @@ class CodePathState { const context = getBreakContext(this, label); - /* istanbul ignore else: foolproof (syntax error) */ + if (context) { context.brokenForkContext.add(forkContext.head); } + /* c8 ignore next */ forkContext.replaceHead(forkContext.makeUnreachable(-1, -1)); } @@ -1417,7 +1418,6 @@ class CodePathState { const context = getContinueContext(this, label); - /* istanbul ignore else: foolproof (syntax error) */ if (context) { if (context.continueDestSegments) { makeLooped(this, forkContext.head, context.continueDestSegments); diff --git a/eslint/lib/linter/code-path-analysis/code-path.js b/eslint/lib/linter/code-path-analysis/code-path.js index 0e66627..a028ca6 100644 --- a/eslint/lib/linter/code-path-analysis/code-path.js +++ b/eslint/lib/linter/code-path-analysis/code-path.js @@ -212,7 +212,7 @@ class CodePath { } // Reset the flag of skipping if all branches have been skipped. - if (skippedSegment && segment.prevSegments.indexOf(skippedSegment) !== -1) { + if (skippedSegment && segment.prevSegments.includes(skippedSegment)) { skippedSegment = null; } visited[segment.id] = true; diff --git a/eslint/lib/linter/code-path-analysis/debug-helpers.js b/eslint/lib/linter/code-path-analysis/debug-helpers.js index ca64862..e06b6cd 100644 --- a/eslint/lib/linter/code-path-analysis/debug-helpers.js +++ b/eslint/lib/linter/code-path-analysis/debug-helpers.js @@ -20,7 +20,7 @@ const debug = require("debug")("eslint:code-path"); * @param {CodePathSegment} segment A segment to get. * @returns {string} Id of the segment. */ -/* istanbul ignore next */ +/* c8 ignore next */ function getId(segment) { // eslint-disable-line jsdoc/require-jsdoc -- Ignoring return segment.id + (segment.reachable ? "" : "!"); } @@ -67,7 +67,7 @@ module.exports = { * @param {boolean} leaving A flag whether or not it's leaving * @returns {void} */ - dumpState: !debug.enabled ? debug : /* istanbul ignore next */ function(node, state, leaving) { + dumpState: !debug.enabled ? debug : /* c8 ignore next */ function(node, state, leaving) { for (let i = 0; i < state.currentSegments.length; ++i) { const segInternal = state.currentSegments[i].internal; @@ -98,7 +98,7 @@ module.exports = { * @see http://www.graphviz.org * @see http://www.webgraphviz.com */ - dumpDot: !debug.enabled ? debug : /* istanbul ignore next */ function(codePath) { + dumpDot: !debug.enabled ? debug : /* c8 ignore next */ function(codePath) { let text = "\n" + "digraph {\n" + diff --git a/eslint/lib/linter/code-path-analysis/id-generator.js b/eslint/lib/linter/code-path-analysis/id-generator.js index 83787a4..b580104 100644 --- a/eslint/lib/linter/code-path-analysis/id-generator.js +++ b/eslint/lib/linter/code-path-analysis/id-generator.js @@ -33,10 +33,10 @@ class IdGenerator { next() { this.n = 1 + this.n | 0; - /* istanbul ignore if */ + /* c8 ignore start */ if (this.n < 0) { this.n = 1; - } + }/* c8 ignore stop */ return this.prefix + this.n; } diff --git a/eslint/lib/linter/config-comment-parser.js b/eslint/lib/linter/config-comment-parser.js index b88c5e6..643de8f 100644 --- a/eslint/lib/linter/config-comment-parser.js +++ b/eslint/lib/linter/config-comment-parser.js @@ -131,8 +131,7 @@ module.exports = class ConfigCommentParser { const items = {}; - // Collapse whitespace around commas - string.replace(/\s*,\s*/gu, ",").split(/,+/u).forEach(name => { + string.split(",").forEach(name => { const trimmedName = name.trim(); if (trimmedName) { diff --git a/eslint/lib/linter/linter.js b/eslint/lib/linter/linter.js index f897b8d..a29ce92 100644 --- a/eslint/lib/linter/linter.js +++ b/eslint/lib/linter/linter.js @@ -59,6 +59,7 @@ const globals = require("../../conf/globals"); /** @typedef {import("../shared/types").Environment} Environment */ /** @typedef {import("../shared/types").GlobalConf} GlobalConf */ /** @typedef {import("../shared/types").LintMessage} LintMessage */ +/** @typedef {import("../shared/types").SuppressedLintMessage} SuppressedLintMessage */ /** @typedef {import("../shared/types").ParserOptions} ParserOptions */ /** @typedef {import("../shared/types").LanguageOptions} LanguageOptions */ /** @typedef {import("../shared/types").Processor} Processor */ @@ -77,6 +78,7 @@ const globals = require("../../conf/globals"); * @property {number} line The line number * @property {number} column The column number * @property {(string|null)} ruleId The rule ID + * @property {string} justification The justification of directive */ /** @@ -84,6 +86,7 @@ const globals = require("../../conf/globals"); * @typedef {Object} LinterInternalSlots * @property {ConfigArray|null} lastConfigArray The `ConfigArray` instance that the last `verify()` call used. * @property {SourceCode|null} lastSourceCode The `SourceCode` instance that the last `verify()` call used. + * @property {SuppressedLintMessage[]} lastSuppressedMessages The `SuppressedLintMessage[]` instance that the last `verify()` call produced. * @property {Map<string, Parser>} parserMap The loaded parsers. * @property {Rules} ruleMap The loaded rules. */ @@ -287,11 +290,12 @@ function createLintingProblem(options) { * @param {token} options.commentToken The Comment token * @param {string} options.value The value after the directive in the comment * comment specified no specific rules, so it applies to all rules (e.g. `eslint-disable`) + * @param {string} options.justification The justification of the directive * @param {function(string): {create: Function}} options.ruleMapper A map from rule IDs to defined rules * @returns {Object} Directives and problems from the comment */ function createDisableDirectives(options) { - const { commentToken, type, value, ruleMapper } = options; + const { commentToken, type, value, justification, ruleMapper } = options; const ruleIds = Object.keys(commentParser.parseListConfig(value)); const directiveRules = ruleIds.length ? ruleIds : [null]; const result = { @@ -305,7 +309,25 @@ function createDisableDirectives(options) { // push to directives, if the rule is defined(including null, e.g. /*eslint enable*/) if (ruleId === null || !!ruleMapper(ruleId)) { - result.directives.push({ parentComment, type, line: commentToken.loc.start.line, column: commentToken.loc.start.column + 1, ruleId }); + if (type === "disable-next-line") { + result.directives.push({ + parentComment, + type, + line: commentToken.loc.end.line, + column: commentToken.loc.end.column + 1, + ruleId, + justification + }); + } else { + result.directives.push({ + parentComment, + type, + line: commentToken.loc.start.line, + column: commentToken.loc.start.column + 1, + ruleId, + justification + }); + } } else { result.directiveProblems.push(createLintingProblem({ ruleId, loc: commentToken.loc })); } @@ -314,26 +336,34 @@ function createDisableDirectives(options) { } /** - * Remove the ignored part from a given directive comment and trim it. - * @param {string} value The comment text to strip. - * @returns {string} The stripped text. + * Extract the directive and the justification from a given directive comment and trim them. + * @param {string} value The comment text to extract. + * @returns {{directivePart: string, justificationPart: string}} The extracted directive and justification. */ -function stripDirectiveComment(value) { - return value.split(/\s-{2,}\s/u)[0].trim(); +function extractDirectiveComment(value) { + const match = /\s-{2,}\s/u.exec(value); + + if (!match) { + return { directivePart: value.trim(), justificationPart: "" }; + } + + const directive = value.slice(0, match.index).trim(); + const justification = value.slice(match.index + match[0].length).trim(); + + return { directivePart: directive, justificationPart: justification }; } /** * Parses comments in file to extract file-specific config of rules, globals * and environments and merges them with global config; also code blocks * where reporting is disabled or enabled and merges them with reporting config. - * @param {string} filename The file being checked. * @param {ASTNode} ast The top node of the AST. * @param {function(string): {create: Function}} ruleMapper A map from rule IDs to defined rules * @param {string|null} warnInlineConfig If a string then it should warn directive comments as disabled. The string value is the config name what the setting came from. * @returns {{configuredRules: Object, enabledGlobals: {value:string,comment:Token}[], exportedVariables: Object, problems: Problem[], disableDirectives: DisableDirective[]}} * A collection of the directive comments that were found, along with any problems that occurred when parsing */ -function getDirectiveComments(filename, ast, ruleMapper, warnInlineConfig) { +function getDirectiveComments(ast, ruleMapper, warnInlineConfig) { const configuredRules = {}; const enabledGlobals = Object.create(null); const exportedVariables = {}; @@ -344,8 +374,9 @@ function getDirectiveComments(filename, ast, ruleMapper, warnInlineConfig) { }); ast.comments.filter(token => token.type !== "Shebang").forEach(comment => { - const trimmedCommentText = stripDirectiveComment(comment.value); - const match = /^(eslint(?:-env|-enable|-disable(?:(?:-next)?-line)?)?|exported|globals?)(?:\s|$)/u.exec(trimmedCommentText); + const { directivePart, justificationPart } = extractDirectiveComment(comment.value); + + const match = /^(eslint(?:-env|-enable|-disable(?:(?:-next)?-line)?)?|exported|globals?)(?:\s|$)/u.exec(directivePart); if (!match) { return; @@ -369,7 +400,7 @@ function getDirectiveComments(filename, ast, ruleMapper, warnInlineConfig) { return; } - if (lineCommentSupported && comment.loc.start.line !== comment.loc.end.line) { + if (directiveText === "eslint-disable-line" && comment.loc.start.line !== comment.loc.end.line) { const message = `${directiveText} comment should not span multiple lines.`; problems.push(createLintingProblem({ @@ -380,7 +411,7 @@ function getDirectiveComments(filename, ast, ruleMapper, warnInlineConfig) { return; } - const directiveValue = trimmedCommentText.slice(match.index + directiveText.length); + const directiveValue = directivePart.slice(match.index + directiveText.length); switch (directiveText) { case "eslint-disable": @@ -388,7 +419,7 @@ function getDirectiveComments(filename, ast, ruleMapper, warnInlineConfig) { case "eslint-disable-next-line": case "eslint-disable-line": { const directiveType = directiveText.slice("eslint-".length); - const options = { commentToken: comment, type: directiveType, value: directiveValue, ruleMapper }; + const options = { commentToken: comment, type: directiveType, value: directiveValue, justification: justificationPart, ruleMapper }; const { directives, directiveProblems } = createDisableDirectives(options); disableDirectives.push(...directives); @@ -545,7 +576,7 @@ function findEslintEnv(text) { if (match[0].endsWith("*/")) { retv = Object.assign( retv || {}, - commentParser.parseListConfig(stripDirectiveComment(match[1])) + commentParser.parseListConfig(extractDirectiveComment(match[1]).directivePart) ); } } @@ -769,14 +800,21 @@ function parse(text, languageOptions, filePath) { * problem that ESLint identified just like any other. */ try { + debug("Parsing:", filePath); const parseResult = (typeof parser.parseForESLint === "function") ? parser.parseForESLint(textToParse, parserOptions) : { ast: parser.parse(textToParse, parserOptions) }; + + debug("Parsing successful:", filePath); const ast = parseResult.ast; const parserServices = parseResult.services || {}; const visitorKeys = parseResult.visitorKeys || evk.KEYS; + + debug("Scope analysis:", filePath); const scopeManager = parseResult.scopeManager || analyzeScope(ast, languageOptions, visitorKeys); + debug("Scope analysis successful:", filePath); + return { success: true, @@ -1063,7 +1101,7 @@ function runRules(sourceCode, configuredRules, ruleMapper, parserName, languageO ) ); - const ruleListeners = createRuleListeners(rule, ruleContext); + const ruleListeners = timing.enabled ? timing.time(ruleId, createRuleListeners)(rule, ruleContext) : createRuleListeners(rule, ruleContext); /** * Include `ruleId` in error logs @@ -1081,6 +1119,10 @@ function runRules(sourceCode, configuredRules, ruleMapper, parserName, languageO }; } + if (typeof ruleListeners === "undefined" || ruleListeners === null) { + throw new Error(`The create() function for rule '${ruleId}' did not return an object.`); + } + // add all the selectors from the rule as listeners Object.keys(ruleListeners).forEach(selector => { const ruleListener = timing.enabled @@ -1220,6 +1262,7 @@ class Linter { cwd: normalizeCwd(cwd), lastConfigArray: null, lastSourceCode: null, + lastSuppressedMessages: [], configType, // TODO: Remove after flat config conversion parserMap: new Map([["espree", espree]]), ruleMap: new Rules() @@ -1243,7 +1286,7 @@ class Linter { * @param {ConfigData} providedConfig An ESLintConfig instance to configure everything. * @param {VerifyOptions} [providedOptions] The optional filename of the file being checked. * @throws {Error} If during rule execution. - * @returns {LintMessage[]} The results as an array of messages or an empty array if no messages. + * @returns {(LintMessage|SuppressedLintMessage)[]} The results as an array of messages or an empty array if no messages. */ _verifyWithoutProcessors(textOrSourceCode, providedConfig, providedOptions) { const slots = internalSlotsMap.get(this); @@ -1332,7 +1375,7 @@ class Linter { const sourceCode = slots.lastSourceCode; const commentDirectives = options.allowInlineConfig - ? getDirectiveComments(options.filename, sourceCode.ast, ruleId => getRule(slots, ruleId), options.warnInlineConfig) + ? getDirectiveComments(sourceCode.ast, ruleId => getRule(slots, ruleId), options.warnInlineConfig) : { configuredRules: {}, enabledGlobals: {}, exportedVariables: {}, problems: [], disableDirectives: [] }; // augment global scope with declared global variables @@ -1425,11 +1468,11 @@ class Linter { configArray.normalizeSync(); } - return this._verifyWithFlatConfigArray(textOrSourceCode, configArray, options, true); + return this._distinguishSuppressedMessages(this._verifyWithFlatConfigArray(textOrSourceCode, configArray, options, true)); } if (typeof config.extractConfig === "function") { - return this._verifyWithConfigArray(textOrSourceCode, config, options); + return this._distinguishSuppressedMessages(this._verifyWithConfigArray(textOrSourceCode, config, options)); } } @@ -1443,9 +1486,9 @@ class Linter { * So we cannot apply multiple processors. */ if (options.preprocess || options.postprocess) { - return this._verifyWithProcessor(textOrSourceCode, config, options); + return this._distinguishSuppressedMessages(this._verifyWithProcessor(textOrSourceCode, config, options)); } - return this._verifyWithoutProcessors(textOrSourceCode, config, options); + return this._distinguishSuppressedMessages(this._verifyWithoutProcessors(textOrSourceCode, config, options)); } /** @@ -1454,7 +1497,7 @@ class Linter { * @param {FlatConfig} config The config array. * @param {VerifyOptions&ProcessorOptions} options The options. * @param {FlatConfigArray} [configForRecursive] The `ConfigArray` object to apply multiple processors recursively. - * @returns {LintMessage[]} The found problems. + * @returns {(LintMessage|SuppressedLintMessage)[]} The found problems. */ _verifyWithFlatConfigArrayAndProcessor(textOrSourceCode, config, options, configForRecursive) { const filename = options.filename || "<input>"; @@ -1467,7 +1510,31 @@ class Linter { options.filterCodeBlock || (blockFilename => blockFilename.endsWith(".js")); const originalExtname = path.extname(filename); - const messageLists = preprocess(text, filenameToExpose).map((block, i) => { + + let blocks; + + try { + blocks = preprocess(text, filenameToExpose); + } catch (ex) { + + // If the message includes a leading line number, strip it: + const message = `Preprocessing error: ${ex.message.replace(/^line \d+:/iu, "").trim()}`; + + debug("%s\n%s", message, ex.stack); + + return [ + { + ruleId: null, + fatal: true, + severity: 2, + message, + line: ex.lineNumber, + column: ex.column + } + ]; + } + + const messageLists = blocks.map((block, i) => { debug("A code block was found: %o", block.filename || "(unnamed)"); // Keep the legacy behavior. @@ -1511,7 +1578,7 @@ class Linter { * @param {FlatConfig} providedConfig An ESLintConfig instance to configure everything. * @param {VerifyOptions} [providedOptions] The optional filename of the file being checked. * @throws {Error} If during rule execution. - * @returns {LintMessage[]} The results as an array of messages or an empty array if no messages. + * @returns {(LintMessage|SuppressedLintMessage)[]} The results as an array of messages or an empty array if no messages. */ _verifyWithFlatConfigArrayAndWithoutProcessors(textOrSourceCode, providedConfig, providedOptions) { const slots = internalSlotsMap.get(this); @@ -1541,6 +1608,11 @@ class Linter { ...languageOptions.globals }; + // double check that there is a parser to avoid mysterious error messages + if (!languageOptions.parser) { + throw new TypeError(`No parser specified for ${options.filename}`); + } + // Espree expects this information to be passed in if (isEspree(languageOptions.parser)) { const parserOptions = languageOptions.parserOptions; @@ -1593,7 +1665,6 @@ class Linter { const sourceCode = slots.lastSourceCode; const commentDirectives = options.allowInlineConfig ? getDirectiveComments( - options.filename, sourceCode.ast, ruleId => getRuleFromConfig(ruleId, config), options.warnInlineConfig @@ -1661,7 +1732,7 @@ class Linter { * @param {string|SourceCode} textOrSourceCode The source code. * @param {ConfigArray} configArray The config array. * @param {VerifyOptions&ProcessorOptions} options The options. - * @returns {LintMessage[]} The found problems. + * @returns {(LintMessage|SuppressedLintMessage)[]} The found problems. */ _verifyWithConfigArray(textOrSourceCode, configArray, options) { debug("With ConfigArray: %s", options.filename); @@ -1698,18 +1769,30 @@ class Linter { * @param {VerifyOptions&ProcessorOptions} options The options. * @param {boolean} [firstCall=false] Indicates if this is being called directly * from verify(). (TODO: Remove once eslintrc is removed.) - * @returns {LintMessage[]} The found problems. + * @returns {(LintMessage|SuppressedLintMessage)[]} The found problems. */ _verifyWithFlatConfigArray(textOrSourceCode, configArray, options, firstCall = false) { debug("With flat config: %s", options.filename); // we need a filename to match configs against - const filename = options.filename || "<input>"; + const filename = options.filename || "__placeholder__.js"; // Store the config array in order to get plugin envs and rules later. internalSlotsMap.get(this).lastConfigArray = configArray; const config = configArray.getConfig(filename); + if (!config) { + return [ + { + ruleId: null, + severity: 1, + message: `No matching configuration found for ${filename}.`, + line: 0, + column: 0 + } + ]; + } + // Verify. if (config.processor) { debug("Apply the processor: %o", config.processor); @@ -1738,7 +1821,7 @@ class Linter { * @param {ConfigData|ExtractedConfig} config The config array. * @param {VerifyOptions&ProcessorOptions} options The options. * @param {ConfigArray} [configForRecursive] The `ConfigArray` object to apply multiple processors recursively. - * @returns {LintMessage[]} The found problems. + * @returns {(LintMessage|SuppressedLintMessage)[]} The found problems. */ _verifyWithProcessor(textOrSourceCode, config, options, configForRecursive) { const filename = options.filename || "<input>"; @@ -1746,13 +1829,36 @@ class Linter { const physicalFilename = options.physicalFilename || filenameToExpose; const text = ensureText(textOrSourceCode); const preprocess = options.preprocess || (rawText => [rawText]); - const postprocess = options.postprocess || (messagesList => messagesList.flat()); const filterCodeBlock = options.filterCodeBlock || (blockFilename => blockFilename.endsWith(".js")); const originalExtname = path.extname(filename); - const messageLists = preprocess(text, filenameToExpose).map((block, i) => { + + let blocks; + + try { + blocks = preprocess(text, filenameToExpose); + } catch (ex) { + + // If the message includes a leading line number, strip it: + const message = `Preprocessing error: ${ex.message.replace(/^line \d+:/iu, "").trim()}`; + + debug("%s\n%s", message, ex.stack); + + return [ + { + ruleId: null, + fatal: true, + severity: 2, + message, + line: ex.lineNumber, + column: ex.column + } + ]; + } + + const messageLists = blocks.map((block, i) => { debug("A code block was found: %o", block.filename || "(unnamed)"); // Keep the legacy behavior. @@ -1790,6 +1896,30 @@ class Linter { return postprocess(messageLists, filenameToExpose); } + /** + * Given a list of reported problems, distinguish problems between normal messages and suppressed messages. + * The normal messages will be returned and the suppressed messages will be stored as lastSuppressedMessages. + * @param {Problem[]} problems A list of reported problems. + * @returns {LintMessage[]} A list of LintMessage. + */ + _distinguishSuppressedMessages(problems) { + const messages = []; + const suppressedMessages = []; + const slots = internalSlotsMap.get(this); + + for (const problem of problems) { + if (problem.suppressions) { + suppressedMessages.push(problem); + } else { + messages.push(problem); + } + } + + slots.lastSuppressedMessages = suppressedMessages; + + return messages; + } + /** * Gets the SourceCode object representing the parsed source. * @returns {SourceCode} The SourceCode object. @@ -1798,6 +1928,14 @@ class Linter { return internalSlotsMap.get(this).lastSourceCode; } + /** + * Gets the list of SuppressedLintMessage produced in the last running. + * @returns {SuppressedLintMessage[]} The list of SuppressedLintMessage + */ + getSuppressedMessages() { + return internalSlotsMap.get(this).lastSuppressedMessages; + } + /** * Defines a new linting rule. * @param {string} ruleId A unique rule identifier diff --git a/eslint/lib/linter/timing.js b/eslint/lib/linter/timing.js index c9ab01e..1076ff2 100644 --- a/eslint/lib/linter/timing.js +++ b/eslint/lib/linter/timing.js @@ -9,7 +9,7 @@ // Helpers //------------------------------------------------------------------------------ -/* istanbul ignore next */ +/* c8 ignore next */ /** * Align the string to left * @param {string} str string to evaluate @@ -22,7 +22,7 @@ function alignLeft(str, len, ch) { return str + new Array(len - str.length + 1).join(ch || " "); } -/* istanbul ignore next */ +/* c8 ignore next */ /** * Align the string to right * @param {string} str string to evaluate @@ -64,7 +64,7 @@ function getListSize() { return TIMING_ENV_VAR_AS_INTEGER > 10 ? TIMING_ENV_VAR_AS_INTEGER : MINIMUM_SIZE; } -/* istanbul ignore next */ +/* c8 ignore next */ /** * display the data * @param {Object} data Data object to be displayed @@ -119,7 +119,7 @@ function display(data) { console.log(table.join("\n")); // eslint-disable-line no-console -- Debugging function } -/* istanbul ignore next */ +/* c8 ignore next */ module.exports = (function() { const data = Object.create(null); @@ -138,10 +138,11 @@ module.exports = (function() { return function(...args) { let t = process.hrtime(); + const result = fn(...args); - fn(...args); t = process.hrtime(t); data[key] += t[0] * 1e3 + t[1] / 1e6; + return result; }; } diff --git a/eslint/lib/options.js b/eslint/lib/options.js index 6d06e3d..0d95f2a 100644 --- a/eslint/lib/options.js +++ b/eslint/lib/options.js @@ -63,261 +63,309 @@ const optionator = require("optionator"); //------------------------------------------------------------------------------ // exports "parse(args)", "generateHelp()", and "generateHelpForOption(optionName)" -module.exports = optionator({ - prepend: "eslint [options] file.js [file.js] [dir]", - defaults: { - concatRepeatedArrays: true, - mergeRepeatedObjects: true - }, - options: [ - { - heading: "Basic configuration" - }, - { + +/** + * Creates the CLI options for ESLint. + * @param {boolean} usingFlatConfig Indicates if flat config is being used. + * @returns {Object} The opinionator instance. + */ +module.exports = function(usingFlatConfig) { + + let lookupFlag; + + if (usingFlatConfig) { + lookupFlag = { + option: "config-lookup", + type: "Boolean", + default: "true", + description: "Disable look up for eslint.config.js" + }; + } else { + lookupFlag = { option: "eslintrc", type: "Boolean", default: "true", description: "Disable use of configuration from .eslintrc.*" - }, - { - option: "config", - alias: "c", - type: "path::String", - description: "Use this configuration, overriding .eslintrc.* config options if present" - }, - { + }; + } + + let envFlag; + + if (!usingFlatConfig) { + envFlag = { option: "env", type: "[String]", description: "Specify environments" - }, - { + }; + } + + let extFlag; + + if (!usingFlatConfig) { + extFlag = { option: "ext", type: "[String]", description: "Specify JavaScript file extensions" - }, - { - option: "global", - type: "[String]", - description: "Define global variables" - }, - { - option: "parser", - type: "String", - description: "Specify the parser to be used" - }, - { - option: "parser-options", - type: "Object", - description: "Specify parser options" - }, - { + }; + } + + let resolvePluginsFlag; + + if (!usingFlatConfig) { + resolvePluginsFlag = { option: "resolve-plugins-relative-to", type: "path::String", description: "A folder where plugins should be resolved from, CWD by default" - }, - { - heading: "Specifying rules and plugins" - }, - { - option: "plugin", - type: "[String]", - description: "Specify plugins" - }, - { - option: "rule", - type: "Object", - description: "Specify rules" - }, - { + }; + } + + let rulesDirFlag; + + if (!usingFlatConfig) { + rulesDirFlag = { option: "rulesdir", type: "[path::String]", description: "Load additional rules from this directory. Deprecated: Use rules from plugins" - }, - { - heading: "Fixing problems" - }, - { - option: "fix", - type: "Boolean", - default: false, - description: "Automatically fix problems" - }, - { - option: "fix-dry-run", - type: "Boolean", - default: false, - description: "Automatically fix problems without saving the changes to the file system" - }, - { - option: "fix-type", - type: "Array", - description: "Specify the types of fixes to apply (directive, problem, suggestion, layout)" - }, - { - heading: "Ignoring files" - }, - { - option: "ignore-path", - type: "path::String", - description: "Specify path of ignore file" - }, - { - option: "ignore", - type: "Boolean", - default: "true", - description: "Disable use of ignore files and patterns" - }, - { - option: "ignore-pattern", - type: "[String]", - description: "Pattern of files to ignore (in addition to those in .eslintignore)", - concatRepeatedArrays: [true, { - oneValuePerFlag: true - }] - }, - { - heading: "Using stdin" - }, - { - option: "stdin", - type: "Boolean", - default: "false", - description: "Lint code provided on <STDIN>" - }, - { - option: "stdin-filename", - type: "String", - description: "Specify filename to process STDIN as" - }, - { - heading: "Handling warnings" - }, - { - option: "quiet", - type: "Boolean", - default: "false", - description: "Report errors only" - }, - { - option: "max-warnings", - type: "Int", - default: "-1", - description: "Number of warnings to trigger nonzero exit code" - }, - { - heading: "Output" - }, - { - option: "output-file", - alias: "o", - type: "path::String", - description: "Specify file to write report to" - }, - { - option: "format", - alias: "f", - type: "String", - default: "stylish", - description: "Use a specific output format" - }, - { - option: "color", - type: "Boolean", - alias: "no-color", - description: "Force enabling/disabling of color" - }, - { - heading: "Inline configuration comments" - }, - { - option: "inline-config", - type: "Boolean", - default: "true", - description: "Prevent comments from changing config or rules" - }, - { - option: "report-unused-disable-directives", - type: "Boolean", - default: void 0, - description: "Adds reported errors for unused eslint-disable directives" - }, - { - heading: "Caching" - }, - { - option: "cache", - type: "Boolean", - default: "false", - description: "Only check changed files" - }, - { - option: "cache-file", - type: "path::String", - default: ".eslintcache", - description: "Path to the cache file. Deprecated: use --cache-location" - }, - { - option: "cache-location", - type: "path::String", - description: "Path to the cache file or directory" - }, - { - option: "cache-strategy", - dependsOn: ["cache"], - type: "String", - default: "metadata", - enum: ["metadata", "content"], - description: "Strategy to use for detecting changed files in the cache" - }, - { - heading: "Miscellaneous" - }, - { - option: "init", - type: "Boolean", - default: "false", - description: "Run config initialization wizard" - }, - { - option: "env-info", - type: "Boolean", - default: "false", - description: "Output execution environment information" - }, - { - option: "error-on-unmatched-pattern", - type: "Boolean", - default: "true", - description: "Prevent errors when pattern is unmatched" - }, - { - option: "exit-on-fatal-error", - type: "Boolean", - default: "false", - description: "Exit with exit code 2 in case of fatal error" - }, - { - option: "debug", - type: "Boolean", - default: false, - description: "Output debugging information" - }, - { - option: "help", - alias: "h", - type: "Boolean", - description: "Show help" - }, - { - option: "version", - alias: "v", - type: "Boolean", - description: "Output the version number" - }, - { - option: "print-config", - type: "path::String", - description: "Print the configuration for the given file" - } - ] -}); + }; + } + + return optionator({ + prepend: "eslint [options] file.js [file.js] [dir]", + defaults: { + concatRepeatedArrays: true, + mergeRepeatedObjects: true + }, + options: [ + { + heading: "Basic configuration" + }, + lookupFlag, + { + option: "config", + alias: "c", + type: "path::String", + description: usingFlatConfig + ? "Use this configuration instead of eslint.config.js" + : "Use this configuration, overriding .eslintrc.* config options if present" + }, + envFlag, + extFlag, + { + option: "global", + type: "[String]", + description: "Define global variables" + }, + { + option: "parser", + type: "String", + description: "Specify the parser to be used" + }, + { + option: "parser-options", + type: "Object", + description: "Specify parser options" + }, + resolvePluginsFlag, + { + heading: "Specifying rules and plugins" + }, + { + option: "plugin", + type: "[String]", + description: "Specify plugins" + }, + { + option: "rule", + type: "Object", + description: "Specify rules" + }, + rulesDirFlag, + { + heading: "Fixing problems" + }, + { + option: "fix", + type: "Boolean", + default: false, + description: "Automatically fix problems" + }, + { + option: "fix-dry-run", + type: "Boolean", + default: false, + description: "Automatically fix problems without saving the changes to the file system" + }, + { + option: "fix-type", + type: "Array", + description: "Specify the types of fixes to apply (directive, problem, suggestion, layout)" + }, + { + heading: "Ignoring files" + }, + { + option: "ignore-path", + type: "path::String", + description: "Specify path of ignore file" + }, + { + option: "ignore", + type: "Boolean", + default: "true", + description: "Disable use of ignore files and patterns" + }, + { + option: "ignore-pattern", + type: "[String]", + description: "Pattern of files to ignore (in addition to those in .eslintignore)", + concatRepeatedArrays: [true, { + oneValuePerFlag: true + }] + }, + { + heading: "Using stdin" + }, + { + option: "stdin", + type: "Boolean", + default: "false", + description: "Lint code provided on <STDIN>" + }, + { + option: "stdin-filename", + type: "String", + description: "Specify filename to process STDIN as" + }, + { + heading: "Handling warnings" + }, + { + option: "quiet", + type: "Boolean", + default: "false", + description: "Report errors only" + }, + { + option: "max-warnings", + type: "Int", + default: "-1", + description: "Number of warnings to trigger nonzero exit code" + }, + { + heading: "Output" + }, + { + option: "output-file", + alias: "o", + type: "path::String", + description: "Specify file to write report to" + }, + { + option: "format", + alias: "f", + type: "String", + default: "stylish", + description: "Use a specific output format" + }, + { + option: "color", + type: "Boolean", + alias: "no-color", + description: "Force enabling/disabling of color" + }, + { + heading: "Inline configuration comments" + }, + { + option: "inline-config", + type: "Boolean", + default: "true", + description: "Prevent comments from changing config or rules" + }, + { + option: "report-unused-disable-directives", + type: "Boolean", + default: void 0, + description: "Adds reported errors for unused eslint-disable directives" + }, + { + heading: "Caching" + }, + { + option: "cache", + type: "Boolean", + default: "false", + description: "Only check changed files" + }, + { + option: "cache-file", + type: "path::String", + default: ".eslintcache", + description: "Path to the cache file. Deprecated: use --cache-location" + }, + { + option: "cache-location", + type: "path::String", + description: "Path to the cache file or directory" + }, + { + option: "cache-strategy", + dependsOn: ["cache"], + type: "String", + default: "metadata", + enum: ["metadata", "content"], + description: "Strategy to use for detecting changed files in the cache" + }, + { + heading: "Miscellaneous" + }, + { + option: "init", + type: "Boolean", + default: "false", + description: "Run config initialization wizard" + }, + { + option: "env-info", + type: "Boolean", + default: "false", + description: "Output execution environment information" + }, + { + option: "error-on-unmatched-pattern", + type: "Boolean", + default: "true", + description: "Prevent errors when pattern is unmatched" + }, + { + option: "exit-on-fatal-error", + type: "Boolean", + default: "false", + description: "Exit with exit code 2 in case of fatal error" + }, + { + option: "debug", + type: "Boolean", + default: false, + description: "Output debugging information" + }, + { + option: "help", + alias: "h", + type: "Boolean", + description: "Show help" + }, + { + option: "version", + alias: "v", + type: "Boolean", + description: "Output the version number" + }, + { + option: "print-config", + type: "path::String", + description: "Print the configuration for the given file" + } + ].filter(value => !!value) + }); +}; diff --git a/eslint/lib/rule-tester/flat-rule-tester.js b/eslint/lib/rule-tester/flat-rule-tester.js new file mode 100644 index 0000000..f915924 --- /dev/null +++ b/eslint/lib/rule-tester/flat-rule-tester.js @@ -0,0 +1,1042 @@ +/** + * @fileoverview Mocha/Jest test wrapper + * @author Ilya Volodin + */ +"use strict"; + +/* globals describe, it -- Mocha globals */ + +//------------------------------------------------------------------------------ +// Requirements +//------------------------------------------------------------------------------ + +const + assert = require("assert"), + util = require("util"), + equal = require("fast-deep-equal"), + Traverser = require("../shared/traverser"), + { getRuleOptionsSchema } = require("../config/flat-config-helpers"), + { Linter, SourceCodeFixer, interpolate } = require("../linter"); +const { FlatConfigArray } = require("../config/flat-config-array"); +const { defaultConfig } = require("../config/default-config"); + +const ajv = require("../shared/ajv")({ strictDefaults: true }); + +const parserSymbol = Symbol.for("eslint.RuleTester.parser"); +const { SourceCode } = require("../source-code"); +const { ConfigArraySymbol } = require("@humanwhocodes/config-array"); + +//------------------------------------------------------------------------------ +// Typedefs +//------------------------------------------------------------------------------ + +/** @typedef {import("../shared/types").Parser} Parser */ +/** @typedef {import("../shared/types").LanguageOptions} LanguageOptions */ + +/* eslint-disable jsdoc/valid-types -- https://github.com/jsdoc-type-pratt-parser/jsdoc-type-pratt-parser/issues/4#issuecomment-778805577 */ +/** + * A test case that is expected to pass lint. + * @typedef {Object} ValidTestCase + * @property {string} [name] Name for the test case. + * @property {string} code Code for the test case. + * @property {any[]} [options] Options for the test case. + * @property {LanguageOptions} [languageOptions] The language options to use in the test case. + * @property {{ [name: string]: any }} [settings] Settings for the test case. + * @property {string} [filename] The fake filename for the test case. Useful for rules that make assertion about filenames. + * @property {boolean} [only] Run only this test case or the subset of test cases with this property. + */ + +/** + * A test case that is expected to fail lint. + * @typedef {Object} InvalidTestCase + * @property {string} [name] Name for the test case. + * @property {string} code Code for the test case. + * @property {number | Array<TestCaseError | string | RegExp>} errors Expected errors. + * @property {string | null} [output] The expected code after autofixes are applied. If set to `null`, the test runner will assert that no autofix is suggested. + * @property {any[]} [options] Options for the test case. + * @property {{ [name: string]: any }} [settings] Settings for the test case. + * @property {string} [filename] The fake filename for the test case. Useful for rules that make assertion about filenames. + * @property {LanguageOptions} [languageOptions] The language options to use in the test case. + * @property {boolean} [only] Run only this test case or the subset of test cases with this property. + */ + +/** + * A description of a reported error used in a rule tester test. + * @typedef {Object} TestCaseError + * @property {string | RegExp} [message] Message. + * @property {string} [messageId] Message ID. + * @property {string} [type] The type of the reported AST node. + * @property {{ [name: string]: string }} [data] The data used to fill the message template. + * @property {number} [line] The 1-based line number of the reported start location. + * @property {number} [column] The 1-based column number of the reported start location. + * @property {number} [endLine] The 1-based line number of the reported end location. + * @property {number} [endColumn] The 1-based column number of the reported end location. + */ +/* eslint-enable jsdoc/valid-types -- https://github.com/jsdoc-type-pratt-parser/jsdoc-type-pratt-parser/issues/4#issuecomment-778805577 */ + +//------------------------------------------------------------------------------ +// Private Members +//------------------------------------------------------------------------------ + +/* + * testerDefaultConfig must not be modified as it allows to reset the tester to + * the initial default configuration + */ +const testerDefaultConfig = { rules: {} }; + +/* + * RuleTester uses this config as its default. This can be overwritten via + * setDefaultConfig(). + */ +let sharedDefaultConfig = { rules: {} }; + +/* + * List every parameters possible on a test case that are not related to eslint + * configuration + */ +const RuleTesterParameters = [ + "name", + "code", + "filename", + "options", + "errors", + "output", + "only" +]; + +/* + * All allowed property names in error objects. + */ +const errorObjectParameters = new Set([ + "message", + "messageId", + "data", + "type", + "line", + "column", + "endLine", + "endColumn", + "suggestions" +]); +const friendlyErrorObjectParameterList = `[${[...errorObjectParameters].map(key => `'${key}'`).join(", ")}]`; + +/* + * All allowed property names in suggestion objects. + */ +const suggestionObjectParameters = new Set([ + "desc", + "messageId", + "data", + "output" +]); +const friendlySuggestionObjectParameterList = `[${[...suggestionObjectParameters].map(key => `'${key}'`).join(", ")}]`; + +const hasOwnProperty = Function.call.bind(Object.hasOwnProperty); + +/** + * Clones a given value deeply. + * Note: This ignores `parent` property. + * @param {any} x A value to clone. + * @returns {any} A cloned value. + */ +function cloneDeeplyExcludesParent(x) { + if (typeof x === "object" && x !== null) { + if (Array.isArray(x)) { + return x.map(cloneDeeplyExcludesParent); + } + + const retv = {}; + + for (const key in x) { + if (key !== "parent" && hasOwnProperty(x, key)) { + retv[key] = cloneDeeplyExcludesParent(x[key]); + } + } + + return retv; + } + + return x; +} + +/** + * Freezes a given value deeply. + * @param {any} x A value to freeze. + * @returns {void} + */ +function freezeDeeply(x) { + if (typeof x === "object" && x !== null) { + if (Array.isArray(x)) { + x.forEach(freezeDeeply); + } else { + for (const key in x) { + if (key !== "parent" && hasOwnProperty(x, key)) { + freezeDeeply(x[key]); + } + } + } + Object.freeze(x); + } +} + +/** + * Replace control characters by `\u00xx` form. + * @param {string} text The text to sanitize. + * @returns {string} The sanitized text. + */ +function sanitize(text) { + if (typeof text !== "string") { + return ""; + } + return text.replace( + /[\u0000-\u0009\u000b-\u001a]/gu, // eslint-disable-line no-control-regex -- Escaping controls + c => `\\u${c.codePointAt(0).toString(16).padStart(4, "0")}` + ); +} + +/** + * Define `start`/`end` properties as throwing error. + * @param {string} objName Object name used for error messages. + * @param {ASTNode} node The node to define. + * @returns {void} + */ +function defineStartEndAsError(objName, node) { + Object.defineProperties(node, { + start: { + get() { + throw new Error(`Use ${objName}.range[0] instead of ${objName}.start`); + }, + configurable: true, + enumerable: false + }, + end: { + get() { + throw new Error(`Use ${objName}.range[1] instead of ${objName}.end`); + }, + configurable: true, + enumerable: false + } + }); +} + + +/** + * Define `start`/`end` properties of all nodes of the given AST as throwing error. + * @param {ASTNode} ast The root node to errorize `start`/`end` properties. + * @param {Object} [visitorKeys] Visitor keys to be used for traversing the given ast. + * @returns {void} + */ +function defineStartEndAsErrorInTree(ast, visitorKeys) { + Traverser.traverse(ast, { visitorKeys, enter: defineStartEndAsError.bind(null, "node") }); + ast.tokens.forEach(defineStartEndAsError.bind(null, "token")); + ast.comments.forEach(defineStartEndAsError.bind(null, "token")); +} + +/** + * Wraps the given parser in order to intercept and modify return values from the `parse` and `parseForESLint` methods, for test purposes. + * In particular, to modify ast nodes, tokens and comments to throw on access to their `start` and `end` properties. + * @param {Parser} parser Parser object. + * @returns {Parser} Wrapped parser object. + */ +function wrapParser(parser) { + + if (typeof parser.parseForESLint === "function") { + return { + [parserSymbol]: parser, + parseForESLint(...args) { + const ret = parser.parseForESLint(...args); + + defineStartEndAsErrorInTree(ret.ast, ret.visitorKeys); + return ret; + } + }; + } + + return { + [parserSymbol]: parser, + parse(...args) { + const ast = parser.parse(...args); + + defineStartEndAsErrorInTree(ast); + return ast; + } + }; +} + +/** + * Function to replace `SourceCode.prototype.getComments`. + * @returns {void} + * @throws {Error} Deprecation message. + */ +function getCommentsDeprecation() { + throw new Error( + "`SourceCode#getComments()` is deprecated and will be removed in a future major version. Use `getCommentsBefore()`, `getCommentsAfter()`, and `getCommentsInside()` instead." + ); +} + +//------------------------------------------------------------------------------ +// Public Interface +//------------------------------------------------------------------------------ + +// default separators for testing +const DESCRIBE = Symbol("describe"); +const IT = Symbol("it"); +const IT_ONLY = Symbol("itOnly"); + +/** + * This is `it` default handler if `it` don't exist. + * @this {Mocha} + * @param {string} text The description of the test case. + * @param {Function} method The logic of the test case. + * @throws {Error} Any error upon execution of `method`. + * @returns {any} Returned value of `method`. + */ +function itDefaultHandler(text, method) { + try { + return method.call(this); + } catch (err) { + if (err instanceof assert.AssertionError) { + err.message += ` (${util.inspect(err.actual)} ${err.operator} ${util.inspect(err.expected)})`; + } + throw err; + } +} + +/** + * This is `describe` default handler if `describe` don't exist. + * @this {Mocha} + * @param {string} text The description of the test case. + * @param {Function} method The logic of the test case. + * @returns {any} Returned value of `method`. + */ +function describeDefaultHandler(text, method) { + return method.call(this); +} + +/** + * Mocha test wrapper. + */ +class FlatRuleTester { + + /** + * Creates a new instance of RuleTester. + * @param {Object} [testerConfig] Optional, extra configuration for the tester + */ + constructor(testerConfig = {}) { + + /** + * The configuration to use for this tester. Combination of the tester + * configuration and the default configuration. + * @type {Object} + */ + this.testerConfig = [ + sharedDefaultConfig, + testerConfig, + { rules: { "rule-tester/validate-ast": "error" } } + ]; + + this.linter = new Linter({ configType: "flat" }); + } + + /** + * Set the configuration to use for all future tests + * @param {Object} config the configuration to use. + * @throws {TypeError} If non-object config. + * @returns {void} + */ + static setDefaultConfig(config) { + if (typeof config !== "object") { + throw new TypeError("FlatRuleTester.setDefaultConfig: config must be an object"); + } + sharedDefaultConfig = config; + + // Make sure the rules object exists since it is assumed to exist later + sharedDefaultConfig.rules = sharedDefaultConfig.rules || {}; + } + + /** + * Get the current configuration used for all tests + * @returns {Object} the current configuration + */ + static getDefaultConfig() { + return sharedDefaultConfig; + } + + /** + * Reset the configuration to the initial configuration of the tester removing + * any changes made until now. + * @returns {void} + */ + static resetDefaultConfig() { + sharedDefaultConfig = { + rules: { + ...testerDefaultConfig.rules + } + }; + } + + + /* + * If people use `mocha test.js --watch` command, `describe` and `it` function + * instances are different for each execution. So `describe` and `it` should get fresh instance + * always. + */ + static get describe() { + return ( + this[DESCRIBE] || + (typeof describe === "function" ? describe : describeDefaultHandler) + ); + } + + static set describe(value) { + this[DESCRIBE] = value; + } + + static get it() { + return ( + this[IT] || + (typeof it === "function" ? it : itDefaultHandler) + ); + } + + static set it(value) { + this[IT] = value; + } + + /** + * Adds the `only` property to a test to run it in isolation. + * @param {string | ValidTestCase | InvalidTestCase} item A single test to run by itself. + * @returns {ValidTestCase | InvalidTestCase} The test with `only` set. + */ + static only(item) { + if (typeof item === "string") { + return { code: item, only: true }; + } + + return { ...item, only: true }; + } + + static get itOnly() { + if (typeof this[IT_ONLY] === "function") { + return this[IT_ONLY]; + } + if (typeof this[IT] === "function" && typeof this[IT].only === "function") { + return Function.bind.call(this[IT].only, this[IT]); + } + if (typeof it === "function" && typeof it.only === "function") { + return Function.bind.call(it.only, it); + } + + if (typeof this[DESCRIBE] === "function" || typeof this[IT] === "function") { + throw new Error( + "Set `RuleTester.itOnly` to use `only` with a custom test framework.\n" + + "See https://eslint.org/docs/developer-guide/nodejs-api#customizing-ruletester for more." + ); + } + if (typeof it === "function") { + throw new Error("The current test framework does not support exclusive tests with `only`."); + } + throw new Error("To use `only`, use RuleTester with a test framework that provides `it.only()` like Mocha."); + } + + static set itOnly(value) { + this[IT_ONLY] = value; + } + + + /** + * Adds a new rule test to execute. + * @param {string} ruleName The name of the rule to run. + * @param {Function} rule The rule to test. + * @param {{ + * valid: (ValidTestCase | string)[], + * invalid: InvalidTestCase[] + * }} test The collection of tests to run. + * @throws {TypeError|Error} If non-object `test`, or if a required + * scenario of the given type is missing. + * @returns {void} + */ + run(ruleName, rule, test) { + + const testerConfig = this.testerConfig, + requiredScenarios = ["valid", "invalid"], + scenarioErrors = [], + linter = this.linter, + ruleId = `rule-to-test/${ruleName}`; + + if (!test || typeof test !== "object") { + throw new TypeError(`Test Scenarios for rule ${ruleName} : Could not find test scenario object`); + } + + requiredScenarios.forEach(scenarioType => { + if (!test[scenarioType]) { + scenarioErrors.push(`Could not find any ${scenarioType} test scenarios`); + } + }); + + if (scenarioErrors.length > 0) { + throw new Error([ + `Test Scenarios for rule ${ruleName} is invalid:` + ].concat(scenarioErrors).join("\n")); + } + + const baseConfig = [ + { + plugins: { + + // copy root plugin over + "@": { + + /* + * Parsers are wrapped to detect more errors, so this needs + * to be a new object for each call to run(), otherwise the + * parsers will be wrapped multiple times. + */ + parsers: { + ...defaultConfig[0].plugins["@"].parsers + }, + + /* + * The rules key on the default plugin is a proxy to lazy-load + * just the rules that are needed. So, don't create a new object + * here, just use the default one to keep that performance + * enhancement. + */ + rules: defaultConfig[0].plugins["@"].rules + }, + "rule-to-test": { + rules: { + [ruleName]: Object.assign({}, rule, { + + // Create a wrapper rule that freezes the `context` properties. + create(context) { + freezeDeeply(context.options); + freezeDeeply(context.settings); + freezeDeeply(context.parserOptions); + + // freezeDeeply(context.languageOptions); + + return (typeof rule === "function" ? rule : rule.create)(context); + } + }) + } + } + }, + languageOptions: { + ...defaultConfig[0].languageOptions + } + }, + ...defaultConfig.slice(1) + ]; + + /** + * Run the rule for the given item + * @param {string|Object} item Item to run the rule against + * @throws {Error} If an invalid schema. + * @returns {Object} Eslint run result + * @private + */ + function runRuleForItem(item) { + const configs = new FlatConfigArray(testerConfig, { baseConfig }); + + /* + * Modify the returned config so that the parser is wrapped to catch + * access of the start/end properties. This method is called just + * once per code snippet being tested, so each test case gets a clean + * parser. + */ + configs[ConfigArraySymbol.finalizeConfig] = function(...args) { + + // can't do super here :( + const proto = Object.getPrototypeOf(this); + const calculatedConfig = proto[ConfigArraySymbol.finalizeConfig].apply(this, args); + + // wrap the parser to catch start/end property access + calculatedConfig.languageOptions.parser = wrapParser(calculatedConfig.languageOptions.parser); + return calculatedConfig; + }; + + let code, filename, output, beforeAST, afterAST; + + if (typeof item === "string") { + code = item; + } else { + code = item.code; + + /* + * Assumes everything on the item is a config except for the + * parameters used by this tester + */ + const itemConfig = { ...item }; + + for (const parameter of RuleTesterParameters) { + delete itemConfig[parameter]; + } + + // wrap any parsers + if (itemConfig.languageOptions && itemConfig.languageOptions.parser) { + + const parser = itemConfig.languageOptions.parser; + + if (parser && typeof parser !== "object") { + throw new Error("Parser must be an object with a parse() or parseForESLint() method."); + } + + } + + /* + * Create the config object from the tester config and this item + * specific configurations. + */ + configs.push(itemConfig); + } + + if (item.filename) { + filename = item.filename; + } + + let ruleConfig = 1; + + if (hasOwnProperty(item, "options")) { + assert(Array.isArray(item.options), "options must be an array"); + ruleConfig = [1, ...item.options]; + } + + configs.push({ + rules: { + [ruleId]: ruleConfig + } + }); + + const schema = getRuleOptionsSchema(rule); + + /* + * Setup AST getters. + * The goal is to check whether or not AST was modified when + * running the rule under test. + */ + configs.push({ + plugins: { + "rule-tester": { + rules: { + "validate-ast"() { + return { + Program(node) { + beforeAST = cloneDeeplyExcludesParent(node); + }, + "Program:exit"(node) { + afterAST = node; + } + }; + } + } + } + } + }); + + if (schema) { + ajv.validateSchema(schema); + + if (ajv.errors) { + const errors = ajv.errors.map(error => { + const field = error.dataPath[0] === "." ? error.dataPath.slice(1) : error.dataPath; + + return `\t${field}: ${error.message}`; + }).join("\n"); + + throw new Error([`Schema for rule ${ruleName} is invalid:`, errors]); + } + + /* + * `ajv.validateSchema` checks for errors in the structure of the schema (by comparing the schema against a "meta-schema"), + * and it reports those errors individually. However, there are other types of schema errors that only occur when compiling + * the schema (e.g. using invalid defaults in a schema), and only one of these errors can be reported at a time. As a result, + * the schema is compiled here separately from checking for `validateSchema` errors. + */ + try { + ajv.compile(schema); + } catch (err) { + throw new Error(`Schema for rule ${ruleName} is invalid: ${err.message}`); + } + } + + // Verify the code. + const { getComments } = SourceCode.prototype; + let messages; + + // check for validation errors + try { + configs.normalizeSync(); + configs.getConfig("test.js"); + } catch (error) { + error.message = `ESLint configuration in rule-tester is invalid: ${error.message}`; + throw error; + } + + try { + SourceCode.prototype.getComments = getCommentsDeprecation; + messages = linter.verify(code, configs, filename); + } finally { + SourceCode.prototype.getComments = getComments; + } + + const fatalErrorMessage = messages.find(m => m.fatal); + + assert(!fatalErrorMessage, `A fatal parsing error occurred: ${fatalErrorMessage && fatalErrorMessage.message}`); + + // Verify if autofix makes a syntax error or not. + if (messages.some(m => m.fix)) { + output = SourceCodeFixer.applyFixes(code, messages).output; + const errorMessageInFix = linter.verify(output, configs, filename).find(m => m.fatal); + + assert(!errorMessageInFix, [ + "A fatal parsing error occurred in autofix.", + `Error: ${errorMessageInFix && errorMessageInFix.message}`, + "Autofix output:", + output + ].join("\n")); + } else { + output = code; + } + + return { + messages, + output, + beforeAST, + afterAST: cloneDeeplyExcludesParent(afterAST) + }; + } + + /** + * Check if the AST was changed + * @param {ASTNode} beforeAST AST node before running + * @param {ASTNode} afterAST AST node after running + * @returns {void} + * @private + */ + function assertASTDidntChange(beforeAST, afterAST) { + if (!equal(beforeAST, afterAST)) { + assert.fail("Rule should not modify AST."); + } + } + + /** + * Check if the template is valid or not + * all valid cases go through this + * @param {string|Object} item Item to run the rule against + * @returns {void} + * @private + */ + function testValidTemplate(item) { + const code = typeof item === "object" ? item.code : item; + + assert.ok(typeof code === "string", "Test case must specify a string value for 'code'"); + if (item.name) { + assert.ok(typeof item.name === "string", "Optional test case property 'name' must be a string"); + } + + const result = runRuleForItem(item); + const messages = result.messages; + + assert.strictEqual(messages.length, 0, util.format("Should have no errors but had %d: %s", + messages.length, + util.inspect(messages))); + + assertASTDidntChange(result.beforeAST, result.afterAST); + } + + /** + * Asserts that the message matches its expected value. If the expected + * value is a regular expression, it is checked against the actual + * value. + * @param {string} actual Actual value + * @param {string|RegExp} expected Expected value + * @returns {void} + * @private + */ + function assertMessageMatches(actual, expected) { + if (expected instanceof RegExp) { + + // assert.js doesn't have a built-in RegExp match function + assert.ok( + expected.test(actual), + `Expected '${actual}' to match ${expected}` + ); + } else { + assert.strictEqual(actual, expected); + } + } + + /** + * Check if the template is invalid or not + * all invalid cases go through this. + * @param {string|Object} item Item to run the rule against + * @returns {void} + * @private + */ + function testInvalidTemplate(item) { + assert.ok(typeof item.code === "string", "Test case must specify a string value for 'code'"); + if (item.name) { + assert.ok(typeof item.name === "string", "Optional test case property 'name' must be a string"); + } + assert.ok(item.errors || item.errors === 0, + `Did not specify errors for an invalid test of ${ruleName}`); + + if (Array.isArray(item.errors) && item.errors.length === 0) { + assert.fail("Invalid cases must have at least one error"); + } + + const ruleHasMetaMessages = hasOwnProperty(rule, "meta") && hasOwnProperty(rule.meta, "messages"); + const friendlyIDList = ruleHasMetaMessages ? `[${Object.keys(rule.meta.messages).map(key => `'${key}'`).join(", ")}]` : null; + + const result = runRuleForItem(item); + const messages = result.messages; + + if (typeof item.errors === "number") { + + if (item.errors === 0) { + assert.fail("Invalid cases must have 'error' value greater than 0"); + } + + assert.strictEqual(messages.length, item.errors, util.format("Should have %d error%s but had %d: %s", + item.errors, + item.errors === 1 ? "" : "s", + messages.length, + util.inspect(messages))); + } else { + assert.strictEqual( + messages.length, item.errors.length, util.format( + "Should have %d error%s but had %d: %s", + item.errors.length, + item.errors.length === 1 ? "" : "s", + messages.length, + util.inspect(messages) + ) + ); + + const hasMessageOfThisRule = messages.some(m => m.ruleId === ruleId); + + for (let i = 0, l = item.errors.length; i < l; i++) { + const error = item.errors[i]; + const message = messages[i]; + + assert(hasMessageOfThisRule, "Error rule name should be the same as the name of the rule being tested"); + + if (typeof error === "string" || error instanceof RegExp) { + + // Just an error message. + assertMessageMatches(message.message, error); + } else if (typeof error === "object" && error !== null) { + + /* + * Error object. + * This may have a message, messageId, data, node type, line, and/or + * column. + */ + + Object.keys(error).forEach(propertyName => { + assert.ok( + errorObjectParameters.has(propertyName), + `Invalid error property name '${propertyName}'. Expected one of ${friendlyErrorObjectParameterList}.` + ); + }); + + if (hasOwnProperty(error, "message")) { + assert.ok(!hasOwnProperty(error, "messageId"), "Error should not specify both 'message' and a 'messageId'."); + assert.ok(!hasOwnProperty(error, "data"), "Error should not specify both 'data' and 'message'."); + assertMessageMatches(message.message, error.message); + } else if (hasOwnProperty(error, "messageId")) { + assert.ok( + ruleHasMetaMessages, + "Error can not use 'messageId' if rule under test doesn't define 'meta.messages'." + ); + if (!hasOwnProperty(rule.meta.messages, error.messageId)) { + assert(false, `Invalid messageId '${error.messageId}'. Expected one of ${friendlyIDList}.`); + } + assert.strictEqual( + message.messageId, + error.messageId, + `messageId '${message.messageId}' does not match expected messageId '${error.messageId}'.` + ); + if (hasOwnProperty(error, "data")) { + + /* + * if data was provided, then directly compare the returned message to a synthetic + * interpolated message using the same message ID and data provided in the test. + * See https://github.com/eslint/eslint/issues/9890 for context. + */ + const unformattedOriginalMessage = rule.meta.messages[error.messageId]; + const rehydratedMessage = interpolate(unformattedOriginalMessage, error.data); + + assert.strictEqual( + message.message, + rehydratedMessage, + `Hydrated message "${rehydratedMessage}" does not match "${message.message}"` + ); + } + } + + assert.ok( + hasOwnProperty(error, "data") ? hasOwnProperty(error, "messageId") : true, + "Error must specify 'messageId' if 'data' is used." + ); + + if (error.type) { + assert.strictEqual(message.nodeType, error.type, `Error type should be ${error.type}, found ${message.nodeType}`); + } + + if (hasOwnProperty(error, "line")) { + assert.strictEqual(message.line, error.line, `Error line should be ${error.line}`); + } + + if (hasOwnProperty(error, "column")) { + assert.strictEqual(message.column, error.column, `Error column should be ${error.column}`); + } + + if (hasOwnProperty(error, "endLine")) { + assert.strictEqual(message.endLine, error.endLine, `Error endLine should be ${error.endLine}`); + } + + if (hasOwnProperty(error, "endColumn")) { + assert.strictEqual(message.endColumn, error.endColumn, `Error endColumn should be ${error.endColumn}`); + } + + if (hasOwnProperty(error, "suggestions")) { + + // Support asserting there are no suggestions + if (!error.suggestions || (Array.isArray(error.suggestions) && error.suggestions.length === 0)) { + if (Array.isArray(message.suggestions) && message.suggestions.length > 0) { + assert.fail(`Error should have no suggestions on error with message: "${message.message}"`); + } + } else { + assert.strictEqual(Array.isArray(message.suggestions), true, `Error should have an array of suggestions. Instead received "${message.suggestions}" on error with message: "${message.message}"`); + assert.strictEqual(message.suggestions.length, error.suggestions.length, `Error should have ${error.suggestions.length} suggestions. Instead found ${message.suggestions.length} suggestions`); + + error.suggestions.forEach((expectedSuggestion, index) => { + assert.ok( + typeof expectedSuggestion === "object" && expectedSuggestion !== null, + "Test suggestion in 'suggestions' array must be an object." + ); + Object.keys(expectedSuggestion).forEach(propertyName => { + assert.ok( + suggestionObjectParameters.has(propertyName), + `Invalid suggestion property name '${propertyName}'. Expected one of ${friendlySuggestionObjectParameterList}.` + ); + }); + + const actualSuggestion = message.suggestions[index]; + const suggestionPrefix = `Error Suggestion at index ${index} :`; + + if (hasOwnProperty(expectedSuggestion, "desc")) { + assert.ok( + !hasOwnProperty(expectedSuggestion, "data"), + `${suggestionPrefix} Test should not specify both 'desc' and 'data'.` + ); + assert.strictEqual( + actualSuggestion.desc, + expectedSuggestion.desc, + `${suggestionPrefix} desc should be "${expectedSuggestion.desc}" but got "${actualSuggestion.desc}" instead.` + ); + } + + if (hasOwnProperty(expectedSuggestion, "messageId")) { + assert.ok( + ruleHasMetaMessages, + `${suggestionPrefix} Test can not use 'messageId' if rule under test doesn't define 'meta.messages'.` + ); + assert.ok( + hasOwnProperty(rule.meta.messages, expectedSuggestion.messageId), + `${suggestionPrefix} Test has invalid messageId '${expectedSuggestion.messageId}', the rule under test allows only one of ${friendlyIDList}.` + ); + assert.strictEqual( + actualSuggestion.messageId, + expectedSuggestion.messageId, + `${suggestionPrefix} messageId should be '${expectedSuggestion.messageId}' but got '${actualSuggestion.messageId}' instead.` + ); + if (hasOwnProperty(expectedSuggestion, "data")) { + const unformattedMetaMessage = rule.meta.messages[expectedSuggestion.messageId]; + const rehydratedDesc = interpolate(unformattedMetaMessage, expectedSuggestion.data); + + assert.strictEqual( + actualSuggestion.desc, + rehydratedDesc, + `${suggestionPrefix} Hydrated test desc "${rehydratedDesc}" does not match received desc "${actualSuggestion.desc}".` + ); + } + } else { + assert.ok( + !hasOwnProperty(expectedSuggestion, "data"), + `${suggestionPrefix} Test must specify 'messageId' if 'data' is used.` + ); + } + + if (hasOwnProperty(expectedSuggestion, "output")) { + const codeWithAppliedSuggestion = SourceCodeFixer.applyFixes(item.code, [actualSuggestion]).output; + + assert.strictEqual(codeWithAppliedSuggestion, expectedSuggestion.output, `Expected the applied suggestion fix to match the test suggestion output for suggestion at index: ${index} on error with message: "${message.message}"`); + } + }); + } + } + } else { + + // Message was an unexpected type + assert.fail(`Error should be a string, object, or RegExp, but found (${util.inspect(message)})`); + } + } + } + + if (hasOwnProperty(item, "output")) { + if (item.output === null) { + assert.strictEqual( + result.output, + item.code, + "Expected no autofixes to be suggested" + ); + } else { + assert.strictEqual(result.output, item.output, "Output is incorrect."); + } + } else { + assert.strictEqual( + result.output, + item.code, + "The rule fixed the code. Please add 'output' property." + ); + } + + assertASTDidntChange(result.beforeAST, result.afterAST); + } + + /* + * This creates a mocha test suite and pipes all supplied info through + * one of the templates above. + */ + this.constructor.describe(ruleName, () => { + this.constructor.describe("valid", () => { + test.valid.forEach(valid => { + this.constructor[valid.only ? "itOnly" : "it"]( + sanitize(typeof valid === "object" ? valid.name || valid.code : valid), + () => { + testValidTemplate(valid); + } + ); + }); + }); + + this.constructor.describe("invalid", () => { + test.invalid.forEach(invalid => { + this.constructor[invalid.only ? "itOnly" : "it"]( + sanitize(invalid.name || invalid.code), + () => { + testInvalidTemplate(invalid); + } + ); + }); + }); + }); + } +} + +FlatRuleTester[DESCRIBE] = FlatRuleTester[IT] = FlatRuleTester[IT_ONLY] = null; + +module.exports = FlatRuleTester; diff --git a/eslint/lib/rule-tester/rule-tester.js b/eslint/lib/rule-tester/rule-tester.js index 7f590a5..2af272b 100644 --- a/eslint/lib/rule-tester/rule-tester.js +++ b/eslint/lib/rule-tester/rule-tester.js @@ -4,7 +4,7 @@ */ "use strict"; -/* eslint-env mocha -- Mocha wrapper */ +/* globals describe, it -- Mocha globals */ /* * This is a wrapper around mocha to allow for DRY unittests for eslint @@ -216,6 +216,9 @@ function freezeDeeply(x) { * @returns {string} The sanitized text. */ function sanitize(text) { + if (typeof text !== "string") { + return ""; + } return text.replace( /[\u0000-\u0009\u000b-\u001a]/gu, // eslint-disable-line no-control-regex -- Escaping controls c => `\\u${c.codePointAt(0).toString(16).padStart(4, "0")}` @@ -302,6 +305,36 @@ function getCommentsDeprecation() { ); } +/** + * Emit a deprecation warning if function-style format is being used. + * @param {string} ruleName Name of the rule. + * @returns {void} + */ +function emitLegacyRuleAPIWarning(ruleName) { + if (!emitLegacyRuleAPIWarning[`warned-${ruleName}`]) { + emitLegacyRuleAPIWarning[`warned-${ruleName}`] = true; + process.emitWarning( + `"${ruleName}" rule is using the deprecated function-style format and will stop working in ESLint v9. Please use object-style format: https://eslint.org/docs/developer-guide/working-with-rules`, + "DeprecationWarning" + ); + } +} + +/** + * Emit a deprecation warning if rule has options but is missing the "meta.schema" property + * @param {string} ruleName Name of the rule. + * @returns {void} + */ +function emitMissingSchemaWarning(ruleName) { + if (!emitMissingSchemaWarning[`warned-${ruleName}`]) { + emitMissingSchemaWarning[`warned-${ruleName}`] = true; + process.emitWarning( + `"${ruleName}" rule has options but is missing the "meta.schema" property and will stop working in ESLint v9. Please add a schema: https://eslint.org/docs/developer-guide/working-with-rules#options-schemas`, + "DeprecationWarning" + ); + } +} + //------------------------------------------------------------------------------ // Public Interface //------------------------------------------------------------------------------ @@ -518,6 +551,9 @@ class RuleTester { ].concat(scenarioErrors).join("\n")); } + if (typeof rule === "function") { + emitLegacyRuleAPIWarning(ruleName); + } linter.defineRule(ruleName, Object.assign({}, rule, { @@ -575,6 +611,15 @@ class RuleTester { if (hasOwnProperty(item, "options")) { assert(Array.isArray(item.options), "options must be an array"); + if ( + item.options.length > 0 && + typeof rule === "object" && + ( + !rule.meta || (rule.meta && (typeof rule.meta.schema === "undefined" || rule.meta.schema === null)) + ) + ) { + emitMissingSchemaWarning(ruleName); + } config.rules[ruleName] = [1].concat(item.options); } else { config.rules[ruleName] = 1; @@ -691,6 +736,13 @@ class RuleTester { * @private */ function testValidTemplate(item) { + const code = typeof item === "object" ? item.code : item; + + assert.ok(typeof code === "string", "Test case must specify a string value for 'code'"); + if (item.name) { + assert.ok(typeof item.name === "string", "Optional test case property 'name' must be a string"); + } + const result = runRuleForItem(item); const messages = result.messages; @@ -731,6 +783,10 @@ class RuleTester { * @private */ function testInvalidTemplate(item) { + assert.ok(typeof item.code === "string", "Test case must specify a string value for 'code'"); + if (item.name) { + assert.ok(typeof item.name === "string", "Optional test case property 'name' must be a string"); + } assert.ok(item.errors || item.errors === 0, `Did not specify errors for an invalid test of ${ruleName}`); @@ -963,10 +1019,10 @@ class RuleTester { * This creates a mocha test suite and pipes all supplied info through * one of the templates above. */ - RuleTester.describe(ruleName, () => { - RuleTester.describe("valid", () => { + this.constructor.describe(ruleName, () => { + this.constructor.describe("valid", () => { test.valid.forEach(valid => { - RuleTester[valid.only ? "itOnly" : "it"]( + this.constructor[valid.only ? "itOnly" : "it"]( sanitize(typeof valid === "object" ? valid.name || valid.code : valid), () => { testValidTemplate(valid); @@ -975,9 +1031,9 @@ class RuleTester { }); }); - RuleTester.describe("invalid", () => { + this.constructor.describe("invalid", () => { test.invalid.forEach(invalid => { - RuleTester[invalid.only ? "itOnly" : "it"]( + this.constructor[invalid.only ? "itOnly" : "it"]( sanitize(invalid.name || invalid.code), () => { testInvalidTemplate(invalid); diff --git a/eslint/lib/rules/accessor-pairs.js b/eslint/lib/rules/accessor-pairs.js index 2fcf153..112d0dd 100644 --- a/eslint/lib/rules/accessor-pairs.js +++ b/eslint/lib/rules/accessor-pairs.js @@ -140,7 +140,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce getter and setter pairs in objects and classes", + description: "Enforce getter and setter pairs in objects and classes", recommended: false, url: "https://eslint.org/docs/rules/accessor-pairs" }, @@ -299,12 +299,12 @@ module.exports = { * @private */ function checkPropertyDescriptor(node) { - const namesToCheck = node.properties + const namesToCheck = new Set(node.properties .filter(p => p.type === "Property" && p.kind === "init" && !p.computed) - .map(({ key }) => key.name); + .map(({ key }) => key.name)); - const hasGetter = namesToCheck.includes("get"); - const hasSetter = namesToCheck.includes("set"); + const hasGetter = namesToCheck.has("get"); + const hasSetter = namesToCheck.has("set"); if (checkSetWithoutGet && hasSetter && !hasGetter) { report(node, "missingGetter"); diff --git a/eslint/lib/rules/array-bracket-newline.js b/eslint/lib/rules/array-bracket-newline.js index 0beb138..deeae81 100644 --- a/eslint/lib/rules/array-bracket-newline.js +++ b/eslint/lib/rules/array-bracket-newline.js @@ -17,7 +17,7 @@ module.exports = { type: "layout", docs: { - description: "enforce linebreaks after opening and before closing array brackets", + description: "Enforce linebreaks after opening and before closing array brackets", recommended: false, url: "https://eslint.org/docs/rules/array-bracket-newline" }, diff --git a/eslint/lib/rules/array-bracket-spacing.js b/eslint/lib/rules/array-bracket-spacing.js index e4912ec..5e7cea9 100644 --- a/eslint/lib/rules/array-bracket-spacing.js +++ b/eslint/lib/rules/array-bracket-spacing.js @@ -16,7 +16,7 @@ module.exports = { type: "layout", docs: { - description: "enforce consistent spacing inside array brackets", + description: "Enforce consistent spacing inside array brackets", recommended: false, url: "https://eslint.org/docs/rules/array-bracket-spacing" }, diff --git a/eslint/lib/rules/array-callback-return.js b/eslint/lib/rules/array-callback-return.js index fba414c..7d4a564 100644 --- a/eslint/lib/rules/array-callback-return.js +++ b/eslint/lib/rules/array-callback-return.js @@ -125,7 +125,7 @@ function getArrayMethodName(node) { } } - /* istanbul ignore next: unreachable */ + /* c8 ignore next */ return null; } @@ -139,7 +139,7 @@ module.exports = { type: "problem", docs: { - description: "enforce `return` statements in callbacks of array methods", + description: "Enforce `return` statements in callbacks of array methods", recommended: false, url: "https://eslint.org/docs/rules/array-callback-return" }, diff --git a/eslint/lib/rules/array-element-newline.js b/eslint/lib/rules/array-element-newline.js index 77f5fc9..c762755 100644 --- a/eslint/lib/rules/array-element-newline.js +++ b/eslint/lib/rules/array-element-newline.js @@ -17,7 +17,7 @@ module.exports = { type: "layout", docs: { - description: "enforce line breaks after each array element", + description: "Enforce line breaks after each array element", recommended: false, url: "https://eslint.org/docs/rules/array-element-newline" }, diff --git a/eslint/lib/rules/arrow-body-style.js b/eslint/lib/rules/arrow-body-style.js index 7a141b0..8bb9e8c 100644 --- a/eslint/lib/rules/arrow-body-style.js +++ b/eslint/lib/rules/arrow-body-style.js @@ -20,7 +20,7 @@ module.exports = { type: "suggestion", docs: { - description: "require braces around arrow function bodies", + description: "Require braces around arrow function bodies", recommended: false, url: "https://eslint.org/docs/rules/arrow-body-style" }, diff --git a/eslint/lib/rules/arrow-parens.js b/eslint/lib/rules/arrow-parens.js index 779ab6f..05012fc 100644 --- a/eslint/lib/rules/arrow-parens.js +++ b/eslint/lib/rules/arrow-parens.js @@ -33,7 +33,7 @@ module.exports = { type: "layout", docs: { - description: "require parentheses around arrow function arguments", + description: "Require parentheses around arrow function arguments", recommended: false, url: "https://eslint.org/docs/rules/arrow-parens" }, diff --git a/eslint/lib/rules/arrow-spacing.js b/eslint/lib/rules/arrow-spacing.js index 9fdcdd5..2dcc175 100644 --- a/eslint/lib/rules/arrow-spacing.js +++ b/eslint/lib/rules/arrow-spacing.js @@ -20,7 +20,7 @@ module.exports = { type: "layout", docs: { - description: "enforce consistent spacing before and after the arrow in arrow functions", + description: "Enforce consistent spacing before and after the arrow in arrow functions", recommended: false, url: "https://eslint.org/docs/rules/arrow-spacing" }, diff --git a/eslint/lib/rules/block-scoped-var.js b/eslint/lib/rules/block-scoped-var.js index 3a27786..731d06d 100644 --- a/eslint/lib/rules/block-scoped-var.js +++ b/eslint/lib/rules/block-scoped-var.js @@ -14,7 +14,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce the use of variables within the scope they are defined", + description: "Enforce the use of variables within the scope they are defined", recommended: false, url: "https://eslint.org/docs/rules/block-scoped-var" }, diff --git a/eslint/lib/rules/block-spacing.js b/eslint/lib/rules/block-spacing.js index 53303a9..9fbf159 100644 --- a/eslint/lib/rules/block-spacing.js +++ b/eslint/lib/rules/block-spacing.js @@ -17,7 +17,7 @@ module.exports = { type: "layout", docs: { - description: "disallow or enforce spaces inside of blocks after opening block and before closing block", + description: "Disallow or enforce spaces inside of blocks after opening block and before closing block", recommended: false, url: "https://eslint.org/docs/rules/block-spacing" }, diff --git a/eslint/lib/rules/brace-style.js b/eslint/lib/rules/brace-style.js index f4adb94..52d8920 100644 --- a/eslint/lib/rules/brace-style.js +++ b/eslint/lib/rules/brace-style.js @@ -17,7 +17,7 @@ module.exports = { type: "layout", docs: { - description: "enforce consistent brace style for blocks", + description: "Enforce consistent brace style for blocks", recommended: false, url: "https://eslint.org/docs/rules/brace-style" }, diff --git a/eslint/lib/rules/callback-return.js b/eslint/lib/rules/callback-return.js index 532faee..fe5b649 100644 --- a/eslint/lib/rules/callback-return.js +++ b/eslint/lib/rules/callback-return.js @@ -19,7 +19,7 @@ module.exports = { type: "suggestion", docs: { - description: "require `return` statements after callbacks", + description: "Require `return` statements after callbacks", recommended: false, url: "https://eslint.org/docs/rules/callback-return" }, @@ -53,7 +53,7 @@ module.exports = { if (!node.parent) { return null; } - if (types.indexOf(node.parent.type) === -1) { + if (!types.includes(node.parent.type)) { return findClosestParentOfType(node.parent, types); } return node.parent; @@ -87,7 +87,7 @@ module.exports = { * @returns {boolean} Whether or not this function matches our callback name. */ function isCallback(node) { - return containsOnlyIdentifiers(node.callee) && callbacks.indexOf(sourceCode.getText(node.callee)) > -1; + return containsOnlyIdentifiers(node.callee) && callbacks.includes(sourceCode.getText(node.callee)); } /** diff --git a/eslint/lib/rules/camelcase.js b/eslint/lib/rules/camelcase.js index 61dd062..ee1b6bf 100644 --- a/eslint/lib/rules/camelcase.js +++ b/eslint/lib/rules/camelcase.js @@ -5,6 +5,12 @@ "use strict"; +//------------------------------------------------------------------------------ +// Requirements +//------------------------------------------------------------------------------ + +const astUtils = require("./utils/ast-utils"); + //------------------------------------------------------------------------------ // Rule Definition //------------------------------------------------------------------------------ @@ -15,7 +21,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce camelcase naming convention", + description: "Enforce camelcase naming convention", recommended: false, url: "https://eslint.org/docs/rules/camelcase" }, @@ -140,7 +146,7 @@ module.exports = { /** * Checks if a given binding identifier uses the original name as-is. - * - If it's in object destructuring, the original name is its property name. + * - If it's in object destructuring or object expression, the original name is its property name. * - If it's in import declaration, the original name is its exported name. * @param {ASTNode} node The `Identifier` node to check. * @returns {boolean} `true` if the identifier uses the original name as-is. @@ -155,7 +161,7 @@ module.exports = { switch (parent.type) { case "Property": return ( - parent.parent.type === "ObjectPattern" && + (parent.parent.type === "ObjectPattern" || parent.parent.type === "ObjectExpression") && parent.value === valueNode && !parent.computed && parent.key.type === "Identifier" && @@ -165,7 +171,7 @@ module.exports = { case "ImportSpecifier": return ( parent.local === node && - parent.imported.name === localName + astUtils.getModuleExportName(parent.imported) === localName ); default: diff --git a/eslint/lib/rules/capitalized-comments.js b/eslint/lib/rules/capitalized-comments.js index 6ea87a7..ba798d4 100644 --- a/eslint/lib/rules/capitalized-comments.js +++ b/eslint/lib/rules/capitalized-comments.js @@ -105,7 +105,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce or disallow capitalization of the first letter of a comment", + description: "Enforce or disallow capitalization of the first letter of a comment", recommended: false, url: "https://eslint.org/docs/rules/capitalized-comments" }, @@ -185,7 +185,7 @@ module.exports = { return Boolean( previousTokenOrComment && - ["Block", "Line"].indexOf(previousTokenOrComment.type) !== -1 + ["Block", "Line"].includes(previousTokenOrComment.type) ); } diff --git a/eslint/lib/rules/class-methods-use-this.js b/eslint/lib/rules/class-methods-use-this.js index 1af6084..05a9158 100644 --- a/eslint/lib/rules/class-methods-use-this.js +++ b/eslint/lib/rules/class-methods-use-this.js @@ -21,7 +21,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce that class methods utilize `this`", + description: "Enforce that class methods utilize `this`", recommended: false, url: "https://eslint.org/docs/rules/class-methods-use-this" }, diff --git a/eslint/lib/rules/comma-dangle.js b/eslint/lib/rules/comma-dangle.js index 232b27c..9518da9 100644 --- a/eslint/lib/rules/comma-dangle.js +++ b/eslint/lib/rules/comma-dangle.js @@ -76,7 +76,7 @@ module.exports = { type: "layout", docs: { - description: "require or disallow trailing commas", + description: "Require or disallow trailing commas", recommended: false, url: "https://eslint.org/docs/rules/comma-dangle" }, @@ -243,8 +243,18 @@ module.exports = { node: lastItem, loc: trailingToken.loc, messageId: "unexpected", - fix(fixer) { - return fixer.remove(trailingToken); + *fix(fixer) { + yield fixer.remove(trailingToken); + + /* + * Extend the range of the fix to include surrounding tokens to ensure + * that the element after which the comma is removed stays _last_. + * This intentionally makes conflicts in fix ranges with rules that may be + * adding or removing elements in the same autofix pass. + * https://github.com/eslint/eslint/issues/15660 + */ + yield fixer.insertTextBefore(sourceCode.getTokenBefore(trailingToken), ""); + yield fixer.insertTextAfter(sourceCode.getTokenAfter(trailingToken), ""); } }); } @@ -282,8 +292,18 @@ module.exports = { end: astUtils.getNextLocation(sourceCode, trailingToken.loc.end) }, messageId: "missing", - fix(fixer) { - return fixer.insertTextAfter(trailingToken, ","); + *fix(fixer) { + yield fixer.insertTextAfter(trailingToken, ","); + + /* + * Extend the range of the fix to include surrounding tokens to ensure + * that the element after which the comma is inserted stays _last_. + * This intentionally makes conflicts in fix ranges with rules that may be + * adding or removing elements in the same autofix pass. + * https://github.com/eslint/eslint/issues/15660 + */ + yield fixer.insertTextBefore(trailingToken, ""); + yield fixer.insertTextAfter(sourceCode.getTokenAfter(trailingToken), ""); } }); } diff --git a/eslint/lib/rules/comma-spacing.js b/eslint/lib/rules/comma-spacing.js index 23a5175..76d5dc4 100644 --- a/eslint/lib/rules/comma-spacing.js +++ b/eslint/lib/rules/comma-spacing.js @@ -16,7 +16,7 @@ module.exports = { type: "layout", docs: { - description: "enforce consistent spacing before and after commas", + description: "Enforce consistent spacing before and after commas", recommended: false, url: "https://eslint.org/docs/rules/comma-spacing" }, @@ -103,38 +103,6 @@ module.exports = { }); } - /** - * Validates the spacing around a comma token. - * @param {Object} tokens The tokens to be validated. - * @param {Token} tokens.comma The token representing the comma. - * @param {Token} [tokens.left] The last token before the comma. - * @param {Token} [tokens.right] The first token after the comma. - * @param {Token|ASTNode} reportItem The item to use when reporting an error. - * @returns {void} - * @private - */ - function validateCommaItemSpacing(tokens, reportItem) { - if (tokens.left && astUtils.isTokenOnSameLine(tokens.left, tokens.comma) && - (options.before !== sourceCode.isSpaceBetweenTokens(tokens.left, tokens.comma)) - ) { - report(reportItem, "before", tokens.left); - } - - if (tokens.right && astUtils.isClosingParenToken(tokens.right)) { - return; - } - - if (tokens.right && !options.after && tokens.right.type === "Line") { - return; - } - - if (tokens.right && astUtils.isTokenOnSameLine(tokens.comma, tokens.right) && - (options.after !== sourceCode.isSpaceBetweenTokens(tokens.comma, tokens.right)) - ) { - report(reportItem, "after", tokens.right); - } - } - /** * Adds null elements of the given ArrayExpression or ArrayPattern node to the ignore list. * @param {ASTNode} node An ArrayExpression or ArrayPattern node. @@ -172,18 +140,44 @@ module.exports = { return; } - if (token && token.type === "JSXText") { - return; - } - const previousToken = tokensAndComments[i - 1]; const nextToken = tokensAndComments[i + 1]; - validateCommaItemSpacing({ - comma: token, - left: astUtils.isCommaToken(previousToken) || commaTokensToIgnore.includes(token) ? null : previousToken, - right: astUtils.isCommaToken(nextToken) ? null : nextToken - }, token); + if ( + previousToken && + !astUtils.isCommaToken(previousToken) && // ignore spacing between two commas + + /* + * `commaTokensToIgnore` are ending commas of `null` elements (array holes/elisions). + * In addition to spacing between two commas, this can also ignore: + * + * - Spacing after `[` (controlled by array-bracket-spacing) + * Example: [ , ] + * ^ + * - Spacing after a comment (for backwards compatibility, this was possibly unintentional) + * Example: [a, /* * / ,] + * ^ + */ + !commaTokensToIgnore.includes(token) && + + astUtils.isTokenOnSameLine(previousToken, token) && + options.before !== sourceCode.isSpaceBetweenTokens(previousToken, token) + ) { + report(token, "before", previousToken); + } + + if ( + nextToken && + !astUtils.isCommaToken(nextToken) && // ignore spacing between two commas + !astUtils.isClosingParenToken(nextToken) && // controlled by space-in-parens + !astUtils.isClosingBracketToken(nextToken) && // controlled by array-bracket-spacing + !astUtils.isClosingBraceToken(nextToken) && // controlled by object-curly-spacing + !(!options.after && nextToken.type === "Line") && // special case, allow space before line comment + astUtils.isTokenOnSameLine(token, nextToken) && + options.after !== sourceCode.isSpaceBetweenTokens(token, nextToken) + ) { + report(token, "after", nextToken); + } }); }, ArrayExpression: addNullElementsToIgnoreList, diff --git a/eslint/lib/rules/comma-style.js b/eslint/lib/rules/comma-style.js index cbcbe3a..4969f59 100644 --- a/eslint/lib/rules/comma-style.js +++ b/eslint/lib/rules/comma-style.js @@ -17,7 +17,7 @@ module.exports = { type: "layout", docs: { - description: "enforce consistent comma style", + description: "Enforce consistent comma style", recommended: false, url: "https://eslint.org/docs/rules/comma-style" }, diff --git a/eslint/lib/rules/complexity.js b/eslint/lib/rules/complexity.js index b235555..541d3a9 100644 --- a/eslint/lib/rules/complexity.js +++ b/eslint/lib/rules/complexity.js @@ -23,7 +23,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce a maximum cyclomatic complexity allowed in a program", + description: "Enforce a maximum cyclomatic complexity allowed in a program", recommended: false, url: "https://eslint.org/docs/rules/complexity" }, diff --git a/eslint/lib/rules/computed-property-spacing.js b/eslint/lib/rules/computed-property-spacing.js index 4850a8b..3d033fc 100644 --- a/eslint/lib/rules/computed-property-spacing.js +++ b/eslint/lib/rules/computed-property-spacing.js @@ -16,7 +16,7 @@ module.exports = { type: "layout", docs: { - description: "enforce consistent spacing inside computed property brackets", + description: "Enforce consistent spacing inside computed property brackets", recommended: false, url: "https://eslint.org/docs/rules/computed-property-spacing" }, diff --git a/eslint/lib/rules/consistent-return.js b/eslint/lib/rules/consistent-return.js index fffb435..f007297 100644 --- a/eslint/lib/rules/consistent-return.js +++ b/eslint/lib/rules/consistent-return.js @@ -46,7 +46,7 @@ module.exports = { type: "suggestion", docs: { - description: "require `return` statements to either always or never specify values", + description: "Require `return` statements to either always or never specify values", recommended: false, url: "https://eslint.org/docs/rules/consistent-return" }, diff --git a/eslint/lib/rules/consistent-this.js b/eslint/lib/rules/consistent-this.js index a613f99..947873b 100644 --- a/eslint/lib/rules/consistent-this.js +++ b/eslint/lib/rules/consistent-this.js @@ -14,7 +14,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce consistent naming when capturing the current execution context", + description: "Enforce consistent naming when capturing the current execution context", recommended: false, url: "https://eslint.org/docs/rules/consistent-this" }, @@ -65,7 +65,7 @@ module.exports = { function checkAssignment(node, name, value) { const isThis = value.type === "ThisExpression"; - if (aliases.indexOf(name) !== -1) { + if (aliases.includes(name)) { if (!isThis || node.operator && node.operator !== "=") { reportBadAssignment(node, name); } diff --git a/eslint/lib/rules/constructor-super.js b/eslint/lib/rules/constructor-super.js index defdb91..fff6584 100644 --- a/eslint/lib/rules/constructor-super.js +++ b/eslint/lib/rules/constructor-super.js @@ -122,7 +122,7 @@ module.exports = { type: "problem", docs: { - description: "require `super()` calls in constructors", + description: "Require `super()` calls in constructors", recommended: true, url: "https://eslint.org/docs/rules/constructor-super" }, diff --git a/eslint/lib/rules/curly.js b/eslint/lib/rules/curly.js index 29e7395..7b5d140 100644 --- a/eslint/lib/rules/curly.js +++ b/eslint/lib/rules/curly.js @@ -20,7 +20,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce consistent brace style for all control statements", + description: "Enforce consistent brace style for all control statements", recommended: false, url: "https://eslint.org/docs/rules/curly" }, diff --git a/eslint/lib/rules/default-case-last.js b/eslint/lib/rules/default-case-last.js index 34be289..313a0d8 100644 --- a/eslint/lib/rules/default-case-last.js +++ b/eslint/lib/rules/default-case-last.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce default clauses in switch statements to be last", + description: "Enforce default clauses in switch statements to be last", recommended: false, url: "https://eslint.org/docs/rules/default-case-last" }, diff --git a/eslint/lib/rules/default-case.js b/eslint/lib/rules/default-case.js index 6ce2385..f28de1a 100644 --- a/eslint/lib/rules/default-case.js +++ b/eslint/lib/rules/default-case.js @@ -16,7 +16,7 @@ module.exports = { type: "suggestion", docs: { - description: "require `default` cases in `switch` statements", + description: "Require `default` cases in `switch` statements", recommended: false, url: "https://eslint.org/docs/rules/default-case" }, diff --git a/eslint/lib/rules/default-param-last.js b/eslint/lib/rules/default-param-last.js index ea12a2a..61df5f6 100644 --- a/eslint/lib/rules/default-param-last.js +++ b/eslint/lib/rules/default-param-last.js @@ -11,7 +11,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce default parameters to be last", + description: "Enforce default parameters to be last", recommended: false, url: "https://eslint.org/docs/rules/default-param-last" }, diff --git a/eslint/lib/rules/dot-location.js b/eslint/lib/rules/dot-location.js index 9dea4f2..36b50b2 100644 --- a/eslint/lib/rules/dot-location.js +++ b/eslint/lib/rules/dot-location.js @@ -17,7 +17,7 @@ module.exports = { type: "layout", docs: { - description: "enforce consistent newlines before and after dots", + description: "Enforce consistent newlines before and after dots", recommended: false, url: "https://eslint.org/docs/rules/dot-location" }, diff --git a/eslint/lib/rules/dot-notation.js b/eslint/lib/rules/dot-notation.js index 6f6b516..5f6e818 100644 --- a/eslint/lib/rules/dot-notation.js +++ b/eslint/lib/rules/dot-notation.js @@ -26,7 +26,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce dot notation whenever possible", + description: "Enforce dot notation whenever possible", recommended: false, url: "https://eslint.org/docs/rules/dot-notation" }, @@ -76,7 +76,7 @@ module.exports = { function checkComputedProperty(node, value) { if ( validIdentifier.test(value) && - (allowKeywords || keywords.indexOf(String(value)) === -1) && + (allowKeywords || !keywords.includes(String(value))) && !(allowPattern && allowPattern.test(value)) ) { const formattedValue = node.property.type === "Literal" ? JSON.stringify(value) : `\`${value}\``; @@ -142,7 +142,7 @@ module.exports = { !allowKeywords && !node.computed && node.property.type === "Identifier" && - keywords.indexOf(String(node.property.name)) !== -1 + keywords.includes(String(node.property.name)) ) { context.report({ node: node.property, diff --git a/eslint/lib/rules/eol-last.js b/eslint/lib/rules/eol-last.js index 393b934..fb87971 100644 --- a/eslint/lib/rules/eol-last.js +++ b/eslint/lib/rules/eol-last.js @@ -14,7 +14,7 @@ module.exports = { type: "layout", docs: { - description: "require or disallow newline at the end of files", + description: "Require or disallow newline at the end of files", recommended: false, url: "https://eslint.org/docs/rules/eol-last" }, diff --git a/eslint/lib/rules/eqeqeq.js b/eslint/lib/rules/eqeqeq.js index b5d784d..b3990e2 100644 --- a/eslint/lib/rules/eqeqeq.js +++ b/eslint/lib/rules/eqeqeq.js @@ -21,7 +21,7 @@ module.exports = { type: "suggestion", docs: { - description: "require the use of `===` and `!==`", + description: "Require the use of `===` and `!==`", recommended: false, url: "https://eslint.org/docs/rules/eqeqeq" }, diff --git a/eslint/lib/rules/for-direction.js b/eslint/lib/rules/for-direction.js index d3d825a..7df3d7e 100644 --- a/eslint/lib/rules/for-direction.js +++ b/eslint/lib/rules/for-direction.js @@ -15,7 +15,7 @@ module.exports = { type: "problem", docs: { - description: "enforce \"for\" loop update clause moving the counter in the right direction.", + description: "Enforce \"for\" loop update clause moving the counter in the right direction.", recommended: true, url: "https://eslint.org/docs/rules/for-direction" }, diff --git a/eslint/lib/rules/func-call-spacing.js b/eslint/lib/rules/func-call-spacing.js index 0391d99..fec6763 100644 --- a/eslint/lib/rules/func-call-spacing.js +++ b/eslint/lib/rules/func-call-spacing.js @@ -21,7 +21,7 @@ module.exports = { type: "layout", docs: { - description: "require or disallow spacing between function identifiers and their invocations", + description: "Require or disallow spacing between function identifiers and their invocations", recommended: false, url: "https://eslint.org/docs/rules/func-call-spacing" }, diff --git a/eslint/lib/rules/func-name-matching.js b/eslint/lib/rules/func-name-matching.js index 9cee5fe..391b2a2 100644 --- a/eslint/lib/rules/func-name-matching.js +++ b/eslint/lib/rules/func-name-matching.js @@ -74,7 +74,7 @@ module.exports = { type: "suggestion", docs: { - description: "require function names to match the name of the variable or property to which they are assigned", + description: "Require function names to match the name of the variable or property to which they are assigned", recommended: false, url: "https://eslint.org/docs/rules/func-name-matching" }, diff --git a/eslint/lib/rules/func-names.js b/eslint/lib/rules/func-names.js index c7b2072..ee46645 100644 --- a/eslint/lib/rules/func-names.js +++ b/eslint/lib/rules/func-names.js @@ -30,7 +30,7 @@ module.exports = { type: "suggestion", docs: { - description: "require or disallow named `function` expressions", + description: "Require or disallow named `function` expressions", recommended: false, url: "https://eslint.org/docs/rules/func-names" }, diff --git a/eslint/lib/rules/func-style.js b/eslint/lib/rules/func-style.js index f715748..0e1ba9f 100644 --- a/eslint/lib/rules/func-style.js +++ b/eslint/lib/rules/func-style.js @@ -14,7 +14,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce the consistent use of either `function` declarations or expressions", + description: "Enforce the consistent use of either `function` declarations or expressions", recommended: false, url: "https://eslint.org/docs/rules/func-style" }, diff --git a/eslint/lib/rules/function-call-argument-newline.js b/eslint/lib/rules/function-call-argument-newline.js index f3cfeee..4661091 100644 --- a/eslint/lib/rules/function-call-argument-newline.js +++ b/eslint/lib/rules/function-call-argument-newline.js @@ -15,7 +15,7 @@ module.exports = { type: "layout", docs: { - description: "enforce line breaks between arguments of a function call", + description: "Enforce line breaks between arguments of a function call", recommended: false, url: "https://eslint.org/docs/rules/function-call-argument-newline" }, diff --git a/eslint/lib/rules/function-paren-newline.js b/eslint/lib/rules/function-paren-newline.js index ed94fad..e61d17b 100644 --- a/eslint/lib/rules/function-paren-newline.js +++ b/eslint/lib/rules/function-paren-newline.js @@ -20,7 +20,7 @@ module.exports = { type: "layout", docs: { - description: "enforce consistent line breaks inside function parentheses", + description: "Enforce consistent line breaks inside function parentheses", recommended: false, url: "https://eslint.org/docs/rules/function-paren-newline" }, @@ -183,7 +183,7 @@ module.exports = { /** * Gets the left paren and right paren tokens of a node. * @param {ASTNode} node The node with parens - * @throws {TypeError} Unexecpted node type. + * @throws {TypeError} Unexpected node type. * @returns {Object} An object with keys `leftParen` for the left paren token, and `rightParen` for the right paren token. * Can also return `null` if an expression has no parens (e.g. a NewExpression with no arguments, or an ArrowFunctionExpression * with a single parameter) @@ -191,10 +191,13 @@ module.exports = { function getParenTokens(node) { switch (node.type) { case "NewExpression": - if (!node.arguments.length && !( - astUtils.isOpeningParenToken(sourceCode.getLastToken(node, { skip: 1 })) && - astUtils.isClosingParenToken(sourceCode.getLastToken(node)) - )) { + if (!node.arguments.length && + !( + astUtils.isOpeningParenToken(sourceCode.getLastToken(node, { skip: 1 })) && + astUtils.isClosingParenToken(sourceCode.getLastToken(node)) && + node.callee.range[1] < node.range[1] + ) + ) { // If the NewExpression does not have parens (e.g. `new Foo`), return null. return null; @@ -227,9 +230,13 @@ module.exports = { return null; } + const rightParen = node.params.length + ? sourceCode.getTokenAfter(node.params[node.params.length - 1], astUtils.isClosingParenToken) + : sourceCode.getTokenAfter(firstToken); + return { leftParen: firstToken, - rightParen: sourceCode.getTokenBefore(node.body, astUtils.isClosingParenToken) + rightParen }; } diff --git a/eslint/lib/rules/generator-star-spacing.js b/eslint/lib/rules/generator-star-spacing.js index 28e8101..d32b21f 100644 --- a/eslint/lib/rules/generator-star-spacing.js +++ b/eslint/lib/rules/generator-star-spacing.js @@ -31,7 +31,7 @@ module.exports = { type: "layout", docs: { - description: "enforce consistent spacing around `*` operators in generator functions", + description: "Enforce consistent spacing around `*` operators in generator functions", recommended: false, url: "https://eslint.org/docs/rules/generator-star-spacing" }, diff --git a/eslint/lib/rules/getter-return.js b/eslint/lib/rules/getter-return.js index 03cfce2..5209ab1 100644 --- a/eslint/lib/rules/getter-return.js +++ b/eslint/lib/rules/getter-return.js @@ -35,7 +35,7 @@ module.exports = { type: "problem", docs: { - description: "enforce `return` statements in getters", + description: "Enforce `return` statements in getters", recommended: true, url: "https://eslint.org/docs/rules/getter-return" }, diff --git a/eslint/lib/rules/global-require.js b/eslint/lib/rules/global-require.js index f00ca9b..ceb0a8e 100644 --- a/eslint/lib/rules/global-require.js +++ b/eslint/lib/rules/global-require.js @@ -6,7 +6,7 @@ "use strict"; -const ACCEPTABLE_PARENTS = [ +const ACCEPTABLE_PARENTS = new Set([ "AssignmentExpression", "VariableDeclarator", "MemberExpression", @@ -16,7 +16,7 @@ const ACCEPTABLE_PARENTS = [ "Program", "VariableDeclaration", "ChainExpression" -]; +]); /** * Finds the eslint-scope reference in the given scope. @@ -28,10 +28,11 @@ function findReference(scope, node) { const references = scope.references.filter(reference => reference.identifier.range[0] === node.range[0] && reference.identifier.range[1] === node.range[1]); - /* istanbul ignore else: correctly returns null */ if (references.length === 1) { return references[0]; } + + /* c8 ignore next */ return null; } @@ -58,7 +59,7 @@ module.exports = { type: "suggestion", docs: { - description: "require `require()` calls to be placed at top-level module scope", + description: "Require `require()` calls to be placed at top-level module scope", recommended: false, url: "https://eslint.org/docs/rules/global-require" }, @@ -75,7 +76,7 @@ module.exports = { const currentScope = context.getScope(); if (node.callee.name === "require" && !isShadowed(currentScope, node.callee)) { - const isGoodRequire = context.getAncestors().every(parent => ACCEPTABLE_PARENTS.indexOf(parent.type) > -1); + const isGoodRequire = context.getAncestors().every(parent => ACCEPTABLE_PARENTS.has(parent.type)); if (!isGoodRequire) { context.report({ node, messageId: "unexpected" }); diff --git a/eslint/lib/rules/grouped-accessor-pairs.js b/eslint/lib/rules/grouped-accessor-pairs.js index 0fe6f91..21374be 100644 --- a/eslint/lib/rules/grouped-accessor-pairs.js +++ b/eslint/lib/rules/grouped-accessor-pairs.js @@ -96,7 +96,7 @@ module.exports = { type: "suggestion", docs: { - description: "require grouped accessor pairs in object literals and classes", + description: "Require grouped accessor pairs in object literals and classes", recommended: false, url: "https://eslint.org/docs/rules/grouped-accessor-pairs" }, diff --git a/eslint/lib/rules/guard-for-in.js b/eslint/lib/rules/guard-for-in.js index 1c52af7..3b99143 100644 --- a/eslint/lib/rules/guard-for-in.js +++ b/eslint/lib/rules/guard-for-in.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "require `for-in` loops to include an `if` statement", + description: "Require `for-in` loops to include an `if` statement", recommended: false, url: "https://eslint.org/docs/rules/guard-for-in" }, diff --git a/eslint/lib/rules/handle-callback-err.js b/eslint/lib/rules/handle-callback-err.js index f370407..5189564 100644 --- a/eslint/lib/rules/handle-callback-err.js +++ b/eslint/lib/rules/handle-callback-err.js @@ -20,7 +20,7 @@ module.exports = { type: "suggestion", docs: { - description: "require error handling in callbacks", + description: "Require error handling in callbacks", recommended: false, url: "https://eslint.org/docs/rules/handle-callback-err" }, diff --git a/eslint/lib/rules/id-blacklist.js b/eslint/lib/rules/id-blacklist.js index f7e04ae..5ea61e9 100644 --- a/eslint/lib/rules/id-blacklist.js +++ b/eslint/lib/rules/id-blacklist.js @@ -119,7 +119,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow specified identifiers", + description: "Disallow specified identifiers", recommended: false, url: "https://eslint.org/docs/rules/id-blacklist" }, diff --git a/eslint/lib/rules/id-denylist.js b/eslint/lib/rules/id-denylist.js index a0b1f41..fe0a0b5 100644 --- a/eslint/lib/rules/id-denylist.js +++ b/eslint/lib/rules/id-denylist.js @@ -99,7 +99,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow specified identifiers", + description: "Disallow specified identifiers", recommended: false, url: "https://eslint.org/docs/rules/id-denylist" }, diff --git a/eslint/lib/rules/id-length.js b/eslint/lib/rules/id-length.js index 3701c66..99f833f 100644 --- a/eslint/lib/rules/id-length.js +++ b/eslint/lib/rules/id-length.js @@ -16,7 +16,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce minimum and maximum identifier lengths", + description: "Enforce minimum and maximum identifier lengths", recommended: false, url: "https://eslint.org/docs/rules/id-length" }, diff --git a/eslint/lib/rules/id-match.js b/eslint/lib/rules/id-match.js index bcc07a8..ec87af1 100644 --- a/eslint/lib/rules/id-match.js +++ b/eslint/lib/rules/id-match.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "require identifiers to match a specified regular expression", + description: "Require identifiers to match a specified regular expression", recommended: false, url: "https://eslint.org/docs/rules/id-match" }, @@ -67,6 +67,8 @@ module.exports = { onlyDeclarations = !!options.onlyDeclarations, ignoreDestructuring = !!options.ignoreDestructuring; + let globalScope; + //-------------------------------------------------------------------------- // Helpers //-------------------------------------------------------------------------- @@ -77,6 +79,19 @@ module.exports = { const DECLARATION_TYPES = new Set(["FunctionDeclaration", "VariableDeclarator"]); const IMPORT_TYPES = new Set(["ImportSpecifier", "ImportNamespaceSpecifier", "ImportDefaultSpecifier"]); + /** + * Checks whether the given node represents a reference to a global variable that is not declared in the source code. + * These identifiers will be allowed, as it is assumed that user has no control over the names of external global variables. + * @param {ASTNode} node `Identifier` node to check. + * @returns {boolean} `true` if the node is a reference to a global variable. + */ + function isReferenceToGlobalVariable(node) { + const variable = globalScope.set.get(node.name); + + return variable && variable.defs.length === 0 && + variable.references.some(ref => ref.identifier === node); + } + /** * Checks if a string matches the provided pattern * @param {string} name The string to check. @@ -155,11 +170,19 @@ module.exports = { return { + Program() { + globalScope = context.getScope(); + }, + Identifier(node) { const name = node.name, parent = node.parent, effectiveParent = (parent.type === "MemberExpression") ? parent.parent : parent; + if (isReferenceToGlobalVariable(node)) { + return; + } + if (parent.type === "MemberExpression") { if (!checkProperties) { @@ -188,6 +211,17 @@ module.exports = { } } + // For https://github.com/eslint/eslint/issues/15123 + } else if ( + parent.type === "Property" && + parent.parent.type === "ObjectExpression" && + parent.key === node && + !parent.computed + ) { + if (checkProperties && isInvalid(name)) { + report(node); + } + /* * Properties have their own rules, and * AssignmentPattern nodes can be treated like Properties: @@ -216,7 +250,7 @@ module.exports = { } // never check properties or always ignore destructuring - if (!checkProperties || (ignoreDestructuring && isInsideObjectPattern(node))) { + if ((!checkProperties && !parent.computed) || (ignoreDestructuring && isInsideObjectPattern(node))) { return; } diff --git a/eslint/lib/rules/implicit-arrow-linebreak.js b/eslint/lib/rules/implicit-arrow-linebreak.js index 71b2437..c765960 100644 --- a/eslint/lib/rules/implicit-arrow-linebreak.js +++ b/eslint/lib/rules/implicit-arrow-linebreak.js @@ -15,7 +15,7 @@ module.exports = { type: "layout", docs: { - description: "enforce the location of arrow function bodies", + description: "Enforce the location of arrow function bodies", recommended: false, url: "https://eslint.org/docs/rules/implicit-arrow-linebreak" }, diff --git a/eslint/lib/rules/indent-legacy.js b/eslint/lib/rules/indent-legacy.js index bd61f6f..d4793bd 100644 --- a/eslint/lib/rules/indent-legacy.js +++ b/eslint/lib/rules/indent-legacy.js @@ -18,15 +18,15 @@ const astUtils = require("./utils/ast-utils"); //------------------------------------------------------------------------------ // Rule Definition //------------------------------------------------------------------------------ - -/* istanbul ignore next: this rule has known coverage issues, but it's deprecated and shouldn't be updated in the future anyway. */ +// this rule has known coverage issues, but it's deprecated and shouldn't be updated in the future anyway. +/* c8 ignore next */ /** @type {import('../shared/types').Rule} */ module.exports = { meta: { type: "layout", docs: { - description: "enforce consistent indentation", + description: "Enforce consistent indentation", recommended: false, url: "https://eslint.org/docs/rules/indent-legacy" }, @@ -212,10 +212,10 @@ module.exports = { if (context.options[0] === "tab") { indentSize = 1; indentType = "tab"; - } else /* istanbul ignore else : this will be caught by options validation */ if (typeof context.options[0] === "number") { + } else /* c8 ignore start */ if (typeof context.options[0] === "number") { indentSize = context.options[0]; indentType = "space"; - } + }/* c8 ignore stop */ if (context.options[1]) { const opts = context.options[1]; @@ -753,7 +753,7 @@ module.exports = { if (typeof options.CallExpression.arguments === "number") { nodeIndent += options.CallExpression.arguments * indentSize; } else if (options.CallExpression.arguments === "first") { - if (parent.arguments.indexOf(node) !== -1) { + if (parent.arguments.includes(node)) { nodeIndent = parent.arguments[0].loc.start.column; } } else { @@ -840,7 +840,7 @@ module.exports = { "IfStatement", "WhileStatement", "ForStatement", "ForInStatement", "ForOfStatement", "DoWhileStatement", "ClassDeclaration", "TryStatement" ]; - if (node.parent && statementsWithProperties.indexOf(node.parent.type) !== -1 && isNodeBodyBlock(node)) { + if (node.parent && statementsWithProperties.includes(node.parent.type) && isNodeBodyBlock(node)) { indent = getNodeIndent(node.parent).goodChar; } else if (node.parent && node.parent.type === "CatchClause") { indent = getNodeIndent(node.parent.parent).goodChar; diff --git a/eslint/lib/rules/indent.js b/eslint/lib/rules/indent.js index 6152bc5..cda0203 100644 --- a/eslint/lib/rules/indent.js +++ b/eslint/lib/rules/indent.js @@ -12,7 +12,7 @@ // Requirements //------------------------------------------------------------------------------ -const createTree = require("functional-red-black-tree"); +const { OrderedMap } = require("js-sdsl"); const astUtils = require("./utils/ast-utils"); @@ -135,7 +135,8 @@ class BinarySearchTree { * Creates an empty tree */ constructor() { - this._rbTree = createTree(); + this._orderedMap = new OrderedMap(); + this._orderedMapEnd = this._orderedMap.end(); } /** @@ -145,13 +146,7 @@ class BinarySearchTree { * @returns {void} */ insert(key, value) { - const iterator = this._rbTree.find(key); - - if (iterator.valid) { - this._rbTree = iterator.update(value); - } else { - this._rbTree = this._rbTree.insert(key, value); - } + this._orderedMap.setElement(key, value); } /** @@ -160,9 +155,13 @@ class BinarySearchTree { * @returns {{key: number, value: *}|null} The found entry, or null if no such entry exists. */ findLe(key) { - const iterator = this._rbTree.le(key); + const iterator = this._orderedMap.reverseLowerBound(key); + + if (iterator.equals(this._orderedMapEnd)) { + return {}; + } - return iterator && { key: iterator.key, value: iterator.value }; + return { key: iterator.pointer[0], value: iterator.pointer[1] }; } /** @@ -177,11 +176,20 @@ class BinarySearchTree { if (start === end) { return; } - const iterator = this._rbTree.ge(start); + const iterator = this._orderedMap.lowerBound(start); - while (iterator.valid && iterator.key < end) { - this._rbTree = this._rbTree.remove(iterator.key); - iterator.next(); + if (iterator.equals(this._orderedMapEnd)) { + return; + } + + if (end > this._orderedMap.back()[0]) { + while (!iterator.equals(this._orderedMapEnd)) { + this._orderedMap.eraseElementByIterator(iterator); + } + } else { + while (iterator.pointer[0] < end) { + this._orderedMap.eraseElementByIterator(iterator); + } } } } @@ -500,7 +508,7 @@ module.exports = { type: "layout", docs: { - description: "enforce consistent indentation", + description: "Enforce consistent indentation", recommended: false, url: "https://eslint.org/docs/rules/indent" }, @@ -796,7 +804,7 @@ module.exports = { let statement = node.parent && node.parent.parent; while ( - statement.type === "UnaryExpression" && ["!", "~", "+", "-"].indexOf(statement.operator) > -1 || + statement.type === "UnaryExpression" && ["!", "~", "+", "-"].includes(statement.operator) || statement.type === "AssignmentExpression" || statement.type === "LogicalExpression" || statement.type === "SequenceExpression" || @@ -916,18 +924,6 @@ module.exports = { } offsets.setDesiredOffsets([firstBodyToken.range[0], lastBodyToken.range[1]], lastParentToken, 1); - - /* - * For blockless nodes with semicolon-first style, don't indent the semicolon. - * e.g. - * if (foo) bar() - * ; [1, 2, 3].map(foo) - */ - const lastToken = sourceCode.getLastToken(node); - - if (node.type !== "EmptyStatement" && astUtils.isSemicolonToken(lastToken)) { - offsets.setDesiredOffset(lastToken, lastParentToken, 0); - } } } @@ -1223,7 +1219,7 @@ module.exports = { } }, - "DoWhileStatement, WhileStatement, ForInStatement, ForOfStatement": node => addBlocklessNodeIndent(node.body), + "DoWhileStatement, WhileStatement, ForInStatement, ForOfStatement, WithStatement": node => addBlocklessNodeIndent(node.body), ExportNamedDeclaration(node) { if (node.declaration === null) { @@ -1271,6 +1267,50 @@ module.exports = { } }, + /* + * For blockless nodes with semicolon-first style, don't indent the semicolon. + * e.g. + * if (foo) + * bar() + * ; [1, 2, 3].map(foo) + * + * Traversal into the node sets indentation of the semicolon, so we need to override it on exit. + */ + ":matches(DoWhileStatement, ForStatement, ForInStatement, ForOfStatement, IfStatement, WhileStatement, WithStatement):exit"(node) { + let nodesToCheck; + + if (node.type === "IfStatement") { + nodesToCheck = [node.consequent]; + if (node.alternate) { + nodesToCheck.push(node.alternate); + } + } else { + nodesToCheck = [node.body]; + } + + for (const nodeToCheck of nodesToCheck) { + const lastToken = sourceCode.getLastToken(nodeToCheck); + + if (astUtils.isSemicolonToken(lastToken)) { + const tokenBeforeLast = sourceCode.getTokenBefore(lastToken); + const tokenAfterLast = sourceCode.getTokenAfter(lastToken); + + // override indentation of `;` only if its line looks like a semicolon-first style line + if ( + !astUtils.isTokenOnSameLine(tokenBeforeLast, lastToken) && + tokenAfterLast && + astUtils.isTokenOnSameLine(lastToken, tokenAfterLast) + ) { + offsets.setDesiredOffset( + lastToken, + sourceCode.getFirstToken(node), + 0 + ); + } + } + } + }, + ImportDeclaration(node) { if (node.specifiers.some(specifier => specifier.type === "ImportSpecifier")) { const openingCurly = sourceCode.getFirstToken(node, astUtils.isOpeningBraceToken); diff --git a/eslint/lib/rules/index.js b/eslint/lib/rules/index.js index ed322a4..aef47f5 100644 --- a/eslint/lib/rules/index.js +++ b/eslint/lib/rules/index.js @@ -103,6 +103,7 @@ module.exports = new LazyLoadingRuleMap(Object.entries({ "no-confusing-arrow": () => require("./no-confusing-arrow"), "no-console": () => require("./no-console"), "no-const-assign": () => require("./no-const-assign"), + "no-constant-binary-expression": () => require("./no-constant-binary-expression"), "no-constant-condition": () => require("./no-constant-condition"), "no-constructor-return": () => require("./no-constructor-return"), "no-continue": () => require("./no-continue"), @@ -255,6 +256,7 @@ module.exports = new LazyLoadingRuleMap(Object.entries({ "prefer-exponentiation-operator": () => require("./prefer-exponentiation-operator"), "prefer-named-capture-group": () => require("./prefer-named-capture-group"), "prefer-numeric-literals": () => require("./prefer-numeric-literals"), + "prefer-object-has-own": () => require("./prefer-object-has-own"), "prefer-object-spread": () => require("./prefer-object-spread"), "prefer-promise-reject-errors": () => require("./prefer-promise-reject-errors"), "prefer-reflect": () => require("./prefer-reflect"), diff --git a/eslint/lib/rules/init-declarations.js b/eslint/lib/rules/init-declarations.js index d952b89..b2ddf64 100644 --- a/eslint/lib/rules/init-declarations.js +++ b/eslint/lib/rules/init-declarations.js @@ -48,7 +48,7 @@ module.exports = { type: "suggestion", docs: { - description: "require or disallow initialization in variable declarations", + description: "Require or disallow initialization in variable declarations", recommended: false, url: "https://eslint.org/docs/rules/init-declarations" }, diff --git a/eslint/lib/rules/jsx-quotes.js b/eslint/lib/rules/jsx-quotes.js index a0cdfaa..6745bb6 100644 --- a/eslint/lib/rules/jsx-quotes.js +++ b/eslint/lib/rules/jsx-quotes.js @@ -42,7 +42,7 @@ module.exports = { type: "layout", docs: { - description: "enforce the consistent use of either double or single quotes in JSX attributes", + description: "Enforce the consistent use of either double or single quotes in JSX attributes", recommended: false, url: "https://eslint.org/docs/rules/jsx-quotes" }, @@ -70,7 +70,7 @@ module.exports = { * @public */ function usesExpectedQuotes(node) { - return node.value.indexOf(setting.quote) !== -1 || astUtils.isSurroundedBy(node.raw, setting.quote); + return node.value.includes(setting.quote) || astUtils.isSurroundedBy(node.raw, setting.quote); } return { diff --git a/eslint/lib/rules/key-spacing.js b/eslint/lib/rules/key-spacing.js index ce8bad5..b764b72 100644 --- a/eslint/lib/rules/key-spacing.js +++ b/eslint/lib/rules/key-spacing.js @@ -9,6 +9,9 @@ //------------------------------------------------------------------------------ const astUtils = require("./utils/ast-utils"); +const GraphemeSplitter = require("grapheme-splitter"); + +const splitter = new GraphemeSplitter(); //------------------------------------------------------------------------------ // Helpers @@ -139,7 +142,7 @@ module.exports = { type: "layout", docs: { - description: "enforce consistent spacing between keys and values in object literal properties", + description: "Enforce consistent spacing between keys and values in object literal properties", recommended: false, url: "https://eslint.org/docs/rules/key-spacing" }, @@ -508,7 +511,7 @@ module.exports = { const startToken = sourceCode.getFirstToken(property); const endToken = getLastTokenBeforeColon(property.key); - return endToken.range[1] - startToken.range[0]; + return splitter.countGraphemes(sourceCode.getText().slice(startToken.range[0], endToken.range[1])); } /** diff --git a/eslint/lib/rules/keyword-spacing.js b/eslint/lib/rules/keyword-spacing.js index 956fc42..59a500f 100644 --- a/eslint/lib/rules/keyword-spacing.js +++ b/eslint/lib/rules/keyword-spacing.js @@ -67,7 +67,7 @@ module.exports = { type: "layout", docs: { - description: "enforce consistent spacing before and after keywords", + description: "Enforce consistent spacing before and after keywords", recommended: false, url: "https://eslint.org/docs/rules/keyword-spacing" }, @@ -469,6 +469,7 @@ module.exports = { const asToken = sourceCode.getTokenBefore(node.exported); checkSpacingBefore(asToken, PREV_TOKEN_M); + checkSpacingAfter(asToken, NEXT_TOKEN_M); } if (node.source) { @@ -479,6 +480,35 @@ module.exports = { } } + /** + * Reports `as` keyword of a given node if usage of spacing around this + * keyword is invalid. + * @param {ASTNode} node An `ImportSpecifier` node to check. + * @returns {void} + */ + function checkSpacingForImportSpecifier(node) { + if (node.imported.range[0] !== node.local.range[0]) { + const asToken = sourceCode.getTokenBefore(node.local); + + checkSpacingBefore(asToken, PREV_TOKEN_M); + } + } + + /** + * Reports `as` keyword of a given node if usage of spacing around this + * keyword is invalid. + * @param {ASTNode} node An `ExportSpecifier` node to check. + * @returns {void} + */ + function checkSpacingForExportSpecifier(node) { + if (node.local.range[0] !== node.exported.range[0]) { + const asToken = sourceCode.getTokenBefore(node.exported); + + checkSpacingBefore(asToken, PREV_TOKEN_M); + checkSpacingAfter(asToken, NEXT_TOKEN_M); + } + } + /** * Reports `as` keyword of a given node if usage of spacing around this * keyword is invalid. @@ -588,6 +618,8 @@ module.exports = { YieldExpression: checkSpacingBeforeFirstToken, // Others + ImportSpecifier: checkSpacingForImportSpecifier, + ExportSpecifier: checkSpacingForExportSpecifier, ImportNamespaceSpecifier: checkSpacingForImportNamespaceSpecifier, MethodDefinition: checkSpacingForProperty, PropertyDefinition: checkSpacingForProperty, diff --git a/eslint/lib/rules/line-comment-position.js b/eslint/lib/rules/line-comment-position.js index 9ce2831..0631ebe 100644 --- a/eslint/lib/rules/line-comment-position.js +++ b/eslint/lib/rules/line-comment-position.js @@ -16,7 +16,7 @@ module.exports = { type: "layout", docs: { - description: "enforce position of line comments", + description: "Enforce position of line comments", recommended: false, url: "https://eslint.org/docs/rules/line-comment-position" }, diff --git a/eslint/lib/rules/linebreak-style.js b/eslint/lib/rules/linebreak-style.js index 483788a..a5dc39d 100644 --- a/eslint/lib/rules/linebreak-style.js +++ b/eslint/lib/rules/linebreak-style.js @@ -21,7 +21,7 @@ module.exports = { type: "layout", docs: { - description: "enforce consistent linebreak style", + description: "Enforce consistent linebreak style", recommended: false, url: "https://eslint.org/docs/rules/linebreak-style" }, diff --git a/eslint/lib/rules/lines-around-comment.js b/eslint/lib/rules/lines-around-comment.js index 74df09b..bd7d1cd 100644 --- a/eslint/lib/rules/lines-around-comment.js +++ b/eslint/lib/rules/lines-around-comment.js @@ -55,7 +55,7 @@ module.exports = { type: "layout", docs: { - description: "require empty lines around comments", + description: "Require empty lines around comments", recommended: false, url: "https://eslint.org/docs/rules/lines-around-comment" }, @@ -141,7 +141,7 @@ module.exports = { comments = sourceCode.getAllComments(), commentLines = getCommentLineNums(comments), emptyLines = getEmptyLineNums(lines), - commentAndEmptyLines = commentLines.concat(emptyLines); + commentAndEmptyLines = new Set(commentLines.concat(emptyLines)); /** * Returns whether or not comments are on lines starting with or ending with code @@ -231,9 +231,15 @@ module.exports = { const parent = getParentNodeOfToken(token); if (parent && isParentNodeType(parent, nodeType)) { - const parentStartNodeOrToken = parent.type === "StaticBlock" - ? sourceCode.getFirstToken(parent, { skip: 1 }) // opening brace of the static block - : parent; + let parentStartNodeOrToken = parent; + + if (parent.type === "StaticBlock") { + parentStartNodeOrToken = sourceCode.getFirstToken(parent, { skip: 1 }); // opening brace of the static block + } else if (parent.type === "SwitchStatement") { + parentStartNodeOrToken = sourceCode.getTokenAfter(parent.discriminant, { + filter: astUtils.isOpeningBraceToken + }); // opening brace of the switch statement + } return token.loc.start.line - parentStartNodeOrToken.loc.start.line === 1; } @@ -264,7 +270,8 @@ module.exports = { isCommentAtParentStart(token, "ClassBody") || isCommentAtParentStart(token, "BlockStatement") || isCommentAtParentStart(token, "StaticBlock") || - isCommentAtParentStart(token, "SwitchCase") + isCommentAtParentStart(token, "SwitchCase") || + isCommentAtParentStart(token, "SwitchStatement") ); } @@ -393,7 +400,7 @@ module.exports = { const nextTokenOrComment = sourceCode.getTokenAfter(token, { includeComments: true }); // check for newline before - if (!exceptionStartAllowed && before && !commentAndEmptyLines.includes(prevLineNum) && + if (!exceptionStartAllowed && before && !commentAndEmptyLines.has(prevLineNum) && !(astUtils.isCommentToken(previousTokenOrComment) && astUtils.isTokenOnSameLine(previousTokenOrComment, token))) { const lineStart = token.range[0] - token.loc.start.column; const range = [lineStart, lineStart]; @@ -408,7 +415,7 @@ module.exports = { } // check for newline after - if (!exceptionEndAllowed && after && !commentAndEmptyLines.includes(nextLineNum) && + if (!exceptionEndAllowed && after && !commentAndEmptyLines.has(nextLineNum) && !(astUtils.isCommentToken(nextTokenOrComment) && astUtils.isTokenOnSameLine(token, nextTokenOrComment))) { context.report({ node: token, diff --git a/eslint/lib/rules/lines-around-directive.js b/eslint/lib/rules/lines-around-directive.js index 21884f1..816efc9 100644 --- a/eslint/lib/rules/lines-around-directive.js +++ b/eslint/lib/rules/lines-around-directive.js @@ -18,7 +18,7 @@ module.exports = { type: "layout", docs: { - description: "require or disallow newlines around directives", + description: "Require or disallow newlines around directives", recommended: false, url: "https://eslint.org/docs/rules/lines-around-directive" }, diff --git a/eslint/lib/rules/lines-between-class-members.js b/eslint/lib/rules/lines-between-class-members.js index 1d6b7e7..26357aa 100644 --- a/eslint/lib/rules/lines-between-class-members.js +++ b/eslint/lib/rules/lines-between-class-members.js @@ -20,7 +20,7 @@ module.exports = { type: "layout", docs: { - description: "require or disallow an empty line between class members", + description: "Require or disallow an empty line between class members", recommended: false, url: "https://eslint.org/docs/rules/lines-between-class-members" }, diff --git a/eslint/lib/rules/max-classes-per-file.js b/eslint/lib/rules/max-classes-per-file.js index 2157beb..0bd626f 100644 --- a/eslint/lib/rules/max-classes-per-file.js +++ b/eslint/lib/rules/max-classes-per-file.js @@ -19,7 +19,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce a maximum number of classes per file", + description: "Enforce a maximum number of classes per file", recommended: false, url: "https://eslint.org/docs/rules/max-classes-per-file" }, diff --git a/eslint/lib/rules/max-depth.js b/eslint/lib/rules/max-depth.js index 8006ffd..6b428ce 100644 --- a/eslint/lib/rules/max-depth.js +++ b/eslint/lib/rules/max-depth.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce a maximum depth that blocks can be nested", + description: "Enforce a maximum depth that blocks can be nested", recommended: false, url: "https://eslint.org/docs/rules/max-depth" }, diff --git a/eslint/lib/rules/max-len.js b/eslint/lib/rules/max-len.js index d05559e..0d3b2af 100644 --- a/eslint/lib/rules/max-len.js +++ b/eslint/lib/rules/max-len.js @@ -69,7 +69,7 @@ module.exports = { type: "layout", docs: { - description: "enforce a maximum line length", + description: "Enforce a maximum line length", recommended: false, url: "https://eslint.org/docs/rules/max-len" }, diff --git a/eslint/lib/rules/max-lines-per-function.js b/eslint/lib/rules/max-lines-per-function.js index c1b945c..fad646c 100644 --- a/eslint/lib/rules/max-lines-per-function.js +++ b/eslint/lib/rules/max-lines-per-function.js @@ -71,7 +71,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce a maximum number of lines of code in a function", + description: "Enforce a maximum number of lines of code in a function", recommended: false, url: "https://eslint.org/docs/rules/max-lines-per-function" }, @@ -80,7 +80,7 @@ module.exports = { OPTIONS_OR_INTEGER_SCHEMA ], messages: { - exceed: "{{name}} has exceeded the limit of lines allowed by {{linesExceed}}. Maximum allowed number of lines per function is {{maxLines}}." + exceed: "{{name}} has too many lines ({{lineCount}}). Maximum allowed is {{maxLines}}." } }, @@ -170,26 +170,18 @@ module.exports = { return; } let lineCount = 0; - let comments = 0; - let blankLines = 0; for (let i = node.loc.start.line - 1; i < node.loc.end.line; ++i) { const line = lines[i]; if (skipComments) { if (commentLineNumbers.has(i + 1) && isFullLineComment(line, i + 1, commentLineNumbers.get(i + 1))) { - if (lineCount <= maxLines) { - comments++; - } continue; } } if (skipBlankLines) { if (line.match(/^\s*$/u)) { - if (lineCount <= maxLines) { - blankLines++; - } continue; } } @@ -199,21 +191,11 @@ module.exports = { if (lineCount > maxLines) { const name = upperCaseFirst(astUtils.getFunctionNameWithKind(funcNode)); - const linesExceed = lineCount - maxLines; - - const loc = { - start: { - line: node.loc.start.line + maxLines + (comments + blankLines), - column: 0 - }, - end: node.loc.end - }; context.report({ node, - loc, messageId: "exceed", - data: { name, linesExceed, maxLines } + data: { name, lineCount, maxLines } }); } } diff --git a/eslint/lib/rules/max-lines.js b/eslint/lib/rules/max-lines.js index 31fc657..d0e5bad 100644 --- a/eslint/lib/rules/max-lines.js +++ b/eslint/lib/rules/max-lines.js @@ -34,7 +34,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce a maximum number of lines per file", + description: "Enforce a maximum number of lines per file", recommended: false, url: "https://eslint.org/docs/rules/max-lines" }, @@ -159,10 +159,10 @@ module.exports = { if (skipComments) { const comments = sourceCode.getAllComments(); - const commentLines = comments.flatMap(getLinesWithoutCode); + const commentLines = new Set(comments.flatMap(getLinesWithoutCode)); lines = lines.filter( - l => !commentLines.includes(l.lineNumber) + l => !commentLines.has(l.lineNumber) ); } diff --git a/eslint/lib/rules/max-nested-callbacks.js b/eslint/lib/rules/max-nested-callbacks.js index 0d43050..3764d5d 100644 --- a/eslint/lib/rules/max-nested-callbacks.js +++ b/eslint/lib/rules/max-nested-callbacks.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce a maximum depth that callbacks can be nested", + description: "Enforce a maximum depth that callbacks can be nested", recommended: false, url: "https://eslint.org/docs/rules/max-nested-callbacks" }, diff --git a/eslint/lib/rules/max-params.js b/eslint/lib/rules/max-params.js index 72379d2..8de1ab4 100644 --- a/eslint/lib/rules/max-params.js +++ b/eslint/lib/rules/max-params.js @@ -22,7 +22,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce a maximum number of parameters in function definitions", + description: "Enforce a maximum number of parameters in function definitions", recommended: false, url: "https://eslint.org/docs/rules/max-params" }, diff --git a/eslint/lib/rules/max-statements-per-line.js b/eslint/lib/rules/max-statements-per-line.js index 61b508c..ada9cf0 100644 --- a/eslint/lib/rules/max-statements-per-line.js +++ b/eslint/lib/rules/max-statements-per-line.js @@ -20,7 +20,7 @@ module.exports = { type: "layout", docs: { - description: "enforce a maximum number of statements allowed per line", + description: "Enforce a maximum number of statements allowed per line", recommended: false, url: "https://eslint.org/docs/rules/max-statements-per-line" }, diff --git a/eslint/lib/rules/max-statements.js b/eslint/lib/rules/max-statements.js index ac117e9..c598b10 100644 --- a/eslint/lib/rules/max-statements.js +++ b/eslint/lib/rules/max-statements.js @@ -22,7 +22,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce a maximum number of statements allowed in function blocks", + description: "Enforce a maximum number of statements allowed in function blocks", recommended: false, url: "https://eslint.org/docs/rules/max-statements" }, @@ -126,7 +126,7 @@ module.exports = { /* * This rule does not apply to class static blocks, but we have to track them so - * that stataments in them do not count as statements in the enclosing function. + * that statements in them do not count as statements in the enclosing function. */ if (node.type === "StaticBlock") { return; diff --git a/eslint/lib/rules/multiline-comment-style.js b/eslint/lib/rules/multiline-comment-style.js index 7985bc8..68cd666 100644 --- a/eslint/lib/rules/multiline-comment-style.js +++ b/eslint/lib/rules/multiline-comment-style.js @@ -16,7 +16,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce a particular style for multiline comments", + description: "Enforce a particular style for multiline comments", recommended: false, url: "https://eslint.org/docs/rules/multiline-comment-style" }, diff --git a/eslint/lib/rules/multiline-ternary.js b/eslint/lib/rules/multiline-ternary.js index 91aa5a1..62c84bb 100644 --- a/eslint/lib/rules/multiline-ternary.js +++ b/eslint/lib/rules/multiline-ternary.js @@ -17,7 +17,7 @@ module.exports = { type: "layout", docs: { - description: "enforce newlines between operands of ternary expressions", + description: "Enforce newlines between operands of ternary expressions", recommended: false, url: "https://eslint.org/docs/rules/multiline-ternary" }, diff --git a/eslint/lib/rules/new-cap.js b/eslint/lib/rules/new-cap.js index 466cfd4..7e0b21e 100644 --- a/eslint/lib/rules/new-cap.js +++ b/eslint/lib/rules/new-cap.js @@ -39,10 +39,10 @@ const CAPS_ALLOWED = [ */ function checkArray(obj, key, fallback) { - /* istanbul ignore if */ + /* c8 ignore start */ if (Object.prototype.hasOwnProperty.call(obj, key) && !Array.isArray(obj[key])) { throw new TypeError(`${key}, if provided, must be an Array`); - } + }/* c8 ignore stop */ return obj[key] || fallback; } @@ -82,7 +82,7 @@ module.exports = { type: "suggestion", docs: { - description: "require constructor names to begin with a capital letter", + description: "Require constructor names to begin with a capital letter", recommended: false, url: "https://eslint.org/docs/rules/new-cap" }, diff --git a/eslint/lib/rules/new-parens.js b/eslint/lib/rules/new-parens.js index 8ee4a2e..f5a98a4 100644 --- a/eslint/lib/rules/new-parens.js +++ b/eslint/lib/rules/new-parens.js @@ -25,7 +25,7 @@ module.exports = { type: "layout", docs: { - description: "enforce or disallow parentheses when invoking a constructor with no arguments", + description: "Enforce or disallow parentheses when invoking a constructor with no arguments", recommended: false, url: "https://eslint.org/docs/rules/new-parens" }, diff --git a/eslint/lib/rules/newline-after-var.js b/eslint/lib/rules/newline-after-var.js index e519a3a..2b4d858 100644 --- a/eslint/lib/rules/newline-after-var.js +++ b/eslint/lib/rules/newline-after-var.js @@ -22,7 +22,7 @@ module.exports = { type: "layout", docs: { - description: "require or disallow an empty line after variable declarations", + description: "Require or disallow an empty line after variable declarations", recommended: false, url: "https://eslint.org/docs/rules/newline-after-var" }, diff --git a/eslint/lib/rules/newline-before-return.js b/eslint/lib/rules/newline-before-return.js index f4aa516..007d942 100644 --- a/eslint/lib/rules/newline-before-return.js +++ b/eslint/lib/rules/newline-before-return.js @@ -15,7 +15,7 @@ module.exports = { type: "layout", docs: { - description: "require an empty line before `return` statements", + description: "Require an empty line before `return` statements", recommended: false, url: "https://eslint.org/docs/rules/newline-before-return" }, @@ -47,7 +47,7 @@ module.exports = { function isPrecededByTokens(node, testTokens) { const tokenBefore = sourceCode.getTokenBefore(node); - return testTokens.some(token => tokenBefore.value === token); + return testTokens.includes(tokenBefore.value); } /** diff --git a/eslint/lib/rules/newline-per-chained-call.js b/eslint/lib/rules/newline-per-chained-call.js index 818bf70..83844a5 100644 --- a/eslint/lib/rules/newline-per-chained-call.js +++ b/eslint/lib/rules/newline-per-chained-call.js @@ -18,7 +18,7 @@ module.exports = { type: "layout", docs: { - description: "require a newline after each call in a method chain", + description: "Require a newline after each call in a method chain", recommended: false, url: "https://eslint.org/docs/rules/newline-per-chained-call" }, diff --git a/eslint/lib/rules/no-alert.js b/eslint/lib/rules/no-alert.js index c6f7ddf..ba0125c 100644 --- a/eslint/lib/rules/no-alert.js +++ b/eslint/lib/rules/no-alert.js @@ -88,7 +88,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow the use of `alert`, `confirm`, and `prompt`", + description: "Disallow the use of `alert`, `confirm`, and `prompt`", recommended: false, url: "https://eslint.org/docs/rules/no-alert" }, diff --git a/eslint/lib/rules/no-array-constructor.js b/eslint/lib/rules/no-array-constructor.js index 02e6114..93b79ab 100644 --- a/eslint/lib/rules/no-array-constructor.js +++ b/eslint/lib/rules/no-array-constructor.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow `Array` constructors", + description: "Disallow `Array` constructors", recommended: false, url: "https://eslint.org/docs/rules/no-array-constructor" }, diff --git a/eslint/lib/rules/no-async-promise-executor.js b/eslint/lib/rules/no-async-promise-executor.js index f940f15..52c5186 100644 --- a/eslint/lib/rules/no-async-promise-executor.js +++ b/eslint/lib/rules/no-async-promise-executor.js @@ -14,7 +14,7 @@ module.exports = { type: "problem", docs: { - description: "disallow using an async function as a Promise executor", + description: "Disallow using an async function as a Promise executor", recommended: true, url: "https://eslint.org/docs/rules/no-async-promise-executor" }, diff --git a/eslint/lib/rules/no-await-in-loop.js b/eslint/lib/rules/no-await-in-loop.js index 3aea39a..905a793 100644 --- a/eslint/lib/rules/no-await-in-loop.js +++ b/eslint/lib/rules/no-await-in-loop.js @@ -59,7 +59,7 @@ module.exports = { type: "problem", docs: { - description: "disallow `await` inside of loops", + description: "Disallow `await` inside of loops", recommended: false, url: "https://eslint.org/docs/rules/no-await-in-loop" }, diff --git a/eslint/lib/rules/no-bitwise.js b/eslint/lib/rules/no-bitwise.js index 1de1619..172ea04 100644 --- a/eslint/lib/rules/no-bitwise.js +++ b/eslint/lib/rules/no-bitwise.js @@ -26,7 +26,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow bitwise operators", + description: "Disallow bitwise operators", recommended: false, url: "https://eslint.org/docs/rules/no-bitwise" }, @@ -76,7 +76,7 @@ module.exports = { * @returns {boolean} Whether or not the node has a bitwise operator. */ function hasBitwiseOperator(node) { - return BITWISE_OPERATORS.indexOf(node.operator) !== -1; + return BITWISE_OPERATORS.includes(node.operator); } /** @@ -85,7 +85,7 @@ module.exports = { * @returns {boolean} Whether or not the node has a bitwise operator. */ function allowedOperator(node) { - return allowed.indexOf(node.operator) !== -1; + return allowed.includes(node.operator); } /** diff --git a/eslint/lib/rules/no-buffer-constructor.js b/eslint/lib/rules/no-buffer-constructor.js index 678d703..9300392 100644 --- a/eslint/lib/rules/no-buffer-constructor.js +++ b/eslint/lib/rules/no-buffer-constructor.js @@ -19,7 +19,7 @@ module.exports = { type: "problem", docs: { - description: "disallow use of the `Buffer()` constructor", + description: "Disallow use of the `Buffer()` constructor", recommended: false, url: "https://eslint.org/docs/rules/no-buffer-constructor" }, diff --git a/eslint/lib/rules/no-caller.js b/eslint/lib/rules/no-caller.js index a6ad94f..884a02b 100644 --- a/eslint/lib/rules/no-caller.js +++ b/eslint/lib/rules/no-caller.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow the use of `arguments.caller` or `arguments.callee`", + description: "Disallow the use of `arguments.caller` or `arguments.callee`", recommended: false, url: "https://eslint.org/docs/rules/no-caller" }, diff --git a/eslint/lib/rules/no-case-declarations.js b/eslint/lib/rules/no-case-declarations.js index d722f0c..6557ba3 100644 --- a/eslint/lib/rules/no-case-declarations.js +++ b/eslint/lib/rules/no-case-declarations.js @@ -14,7 +14,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow lexical declarations in case clauses", + description: "Disallow lexical declarations in case clauses", recommended: true, url: "https://eslint.org/docs/rules/no-case-declarations" }, diff --git a/eslint/lib/rules/no-catch-shadow.js b/eslint/lib/rules/no-catch-shadow.js index d09c913..49f1ba9 100644 --- a/eslint/lib/rules/no-catch-shadow.js +++ b/eslint/lib/rules/no-catch-shadow.js @@ -22,7 +22,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow `catch` clause parameters from shadowing variables in the outer scope", + description: "Disallow `catch` clause parameters from shadowing variables in the outer scope", recommended: false, url: "https://eslint.org/docs/rules/no-catch-shadow" }, diff --git a/eslint/lib/rules/no-class-assign.js b/eslint/lib/rules/no-class-assign.js index f679d42..32e48e2 100644 --- a/eslint/lib/rules/no-class-assign.js +++ b/eslint/lib/rules/no-class-assign.js @@ -17,7 +17,7 @@ module.exports = { type: "problem", docs: { - description: "disallow reassigning class members", + description: "Disallow reassigning class members", recommended: true, url: "https://eslint.org/docs/rules/no-class-assign" }, diff --git a/eslint/lib/rules/no-compare-neg-zero.js b/eslint/lib/rules/no-compare-neg-zero.js index fb56b99..9715c2f 100644 --- a/eslint/lib/rules/no-compare-neg-zero.js +++ b/eslint/lib/rules/no-compare-neg-zero.js @@ -14,7 +14,7 @@ module.exports = { type: "problem", docs: { - description: "disallow comparing against -0", + description: "Disallow comparing against -0", recommended: true, url: "https://eslint.org/docs/rules/no-compare-neg-zero" }, diff --git a/eslint/lib/rules/no-cond-assign.js b/eslint/lib/rules/no-cond-assign.js index 30d5b3b..59efb34 100644 --- a/eslint/lib/rules/no-cond-assign.js +++ b/eslint/lib/rules/no-cond-assign.js @@ -34,7 +34,7 @@ module.exports = { type: "problem", docs: { - description: "disallow assignment operators in conditional expressions", + description: "Disallow assignment operators in conditional expressions", recommended: true, url: "https://eslint.org/docs/rules/no-cond-assign" }, diff --git a/eslint/lib/rules/no-confusing-arrow.js b/eslint/lib/rules/no-confusing-arrow.js index 7b736c1..d2b6641 100644 --- a/eslint/lib/rules/no-confusing-arrow.js +++ b/eslint/lib/rules/no-confusing-arrow.js @@ -31,7 +31,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow arrow functions where they could be confused with comparisons", + description: "Disallow arrow functions where they could be confused with comparisons", recommended: false, url: "https://eslint.org/docs/rules/no-confusing-arrow" }, @@ -41,7 +41,8 @@ module.exports = { schema: [{ type: "object", properties: { - allowParens: { type: "boolean", default: true } + allowParens: { type: "boolean", default: true }, + onlyOneSimpleParam: { type: "boolean", default: false } }, additionalProperties: false }], @@ -54,6 +55,7 @@ module.exports = { create(context) { const config = context.options[0] || {}; const allowParens = config.allowParens || (config.allowParens === void 0); + const onlyOneSimpleParam = config.onlyOneSimpleParam; const sourceCode = context.getSourceCode(); @@ -65,7 +67,9 @@ module.exports = { function checkArrowFunc(node) { const body = node.body; - if (isConditional(body) && !(allowParens && astUtils.isParenthesised(sourceCode, body))) { + if (isConditional(body) && + !(allowParens && astUtils.isParenthesised(sourceCode, body)) && + !(onlyOneSimpleParam && !(node.params.length === 1 && node.params[0].type === "Identifier"))) { context.report({ node, messageId: "confusing", diff --git a/eslint/lib/rules/no-console.js b/eslint/lib/rules/no-console.js index c0802e2..bad6b6f 100644 --- a/eslint/lib/rules/no-console.js +++ b/eslint/lib/rules/no-console.js @@ -21,7 +21,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow the use of `console`", + description: "Disallow the use of `console`", recommended: false, url: "https://eslint.org/docs/rules/no-console" }, @@ -72,7 +72,7 @@ module.exports = { function isAllowed(node) { const propertyName = astUtils.getStaticPropertyName(node); - return propertyName && allowed.indexOf(propertyName) !== -1; + return propertyName && allowed.includes(propertyName); } /** diff --git a/eslint/lib/rules/no-const-assign.js b/eslint/lib/rules/no-const-assign.js index b5f7c37..55e40c8 100644 --- a/eslint/lib/rules/no-const-assign.js +++ b/eslint/lib/rules/no-const-assign.js @@ -17,7 +17,7 @@ module.exports = { type: "problem", docs: { - description: "disallow reassigning `const` variables", + description: "Disallow reassigning `const` variables", recommended: true, url: "https://eslint.org/docs/rules/no-const-assign" }, diff --git a/eslint/lib/rules/no-constant-binary-expression.js b/eslint/lib/rules/no-constant-binary-expression.js new file mode 100644 index 0000000..dccfa2f --- /dev/null +++ b/eslint/lib/rules/no-constant-binary-expression.js @@ -0,0 +1,500 @@ +/** + * @fileoverview Rule to flag constant comparisons and logical expressions that always/never short circuit + * @author Jordan Eldredge <https://jordaneldredge.com> + */ + +"use strict"; + +const globals = require("globals"); +const { isNullLiteral, isConstant, isReferenceToGlobalVariable, isLogicalAssignmentOperator } = require("./utils/ast-utils"); + +const NUMERIC_OR_STRING_BINARY_OPERATORS = new Set(["+", "-", "*", "/", "%", "|", "^", "&", "**", "<<", ">>", ">>>"]); + +//------------------------------------------------------------------------------ +// Helpers +//------------------------------------------------------------------------------ + +/** + * Test if an AST node has a statically knowable constant nullishness. Meaning, + * it will always resolve to a constant value of either: `null`, `undefined` + * or not `null` _or_ `undefined`. An expression that can vary between those + * three states at runtime would return `false`. + * @param {Scope} scope The scope in which the node was found. + * @param {ASTNode} node The AST node being tested. + * @returns {boolean} Does `node` have constant nullishness? + */ +function hasConstantNullishness(scope, node) { + switch (node.type) { + case "ObjectExpression": // Objects are never nullish + case "ArrayExpression": // Arrays are never nullish + case "ArrowFunctionExpression": // Functions never nullish + case "FunctionExpression": // Functions are never nullish + case "ClassExpression": // Classes are never nullish + case "NewExpression": // Objects are never nullish + case "Literal": // Nullish, or non-nullish, literals never change + case "TemplateLiteral": // A string is never nullish + case "UpdateExpression": // Numbers are never nullish + case "BinaryExpression": // Numbers, strings, or booleans are never nullish + return true; + case "CallExpression": { + if (node.callee.type !== "Identifier") { + return false; + } + const functionName = node.callee.name; + + return (functionName === "Boolean" || functionName === "String" || functionName === "Number") && + isReferenceToGlobalVariable(scope, node.callee); + } + case "AssignmentExpression": + if (node.operator === "=") { + return hasConstantNullishness(scope, node.right); + } + + /* + * Handling short-circuiting assignment operators would require + * walking the scope. We won't attempt that (for now...) / + */ + if (isLogicalAssignmentOperator(node.operator)) { + return false; + } + + /* + * The remaining assignment expressions all result in a numeric or + * string (non-nullish) value: + * "+=", "-=", "*=", "/=", "%=", "<<=", ">>=", ">>>=", "|=", "^=", "&=" + */ + + return true; + case "UnaryExpression": + + /* + * "void" Always returns `undefined` + * "typeof" All types are strings, and thus non-nullish + * "!" Boolean is never nullish + * "delete" Returns a boolean, which is never nullish + * Math operators always return numbers or strings, neither of which + * are non-nullish "+", "-", "~" + */ + + return true; + case "SequenceExpression": { + const last = node.expressions[node.expressions.length - 1]; + + return hasConstantNullishness(scope, last); + } + case "Identifier": + return node.name === "undefined" && isReferenceToGlobalVariable(scope, node); + case "JSXElement": // ESLint has a policy of not assuming any specific JSX behavior. + case "JSXFragment": + return false; + default: + return false; + } +} + +/** + * Test if an AST node is a boolean value that never changes. Specifically we + * test for: + * 1. Literal booleans (`true` or `false`) + * 2. Unary `!` expressions with a constant value + * 3. Constant booleans created via the `Boolean` global function + * @param {Scope} scope The scope in which the node was found. + * @param {ASTNode} node The node to test + * @returns {boolean} Is `node` guaranteed to be a boolean? + */ +function isStaticBoolean(scope, node) { + switch (node.type) { + case "Literal": + return typeof node.value === "boolean"; + case "CallExpression": + return node.callee.type === "Identifier" && node.callee.name === "Boolean" && + isReferenceToGlobalVariable(scope, node.callee) && + (node.arguments.length === 0 || isConstant(scope, node.arguments[0], true)); + case "UnaryExpression": + return node.operator === "!" && isConstant(scope, node.argument, true); + default: + return false; + } +} + + +/** + * Test if an AST node will always give the same result when compared to a + * boolean value. Note that comparison to boolean values is different than + * truthiness. + * https://262.ecma-international.org/5.1/#sec-11.9.3 + * + * Javascript `==` operator works by converting the boolean to `1` (true) or + * `+0` (false) and then checks the values `==` equality to that number. + * @param {Scope} scope The scope in which node was found. + * @param {ASTNode} node The node to test. + * @returns {boolean} Will `node` always coerce to the same boolean value? + */ +function hasConstantLooseBooleanComparison(scope, node) { + switch (node.type) { + case "ObjectExpression": + case "ClassExpression": + + /** + * In theory objects like: + * + * `{toString: () => a}` + * `{valueOf: () => a}` + * + * Or a classes like: + * + * `class { static toString() { return a } }` + * `class { static valueOf() { return a } }` + * + * Are not constant verifiably when `inBooleanPosition` is + * false, but it's an edge case we've opted not to handle. + */ + return true; + case "ArrayExpression": { + const nonSpreadElements = node.elements.filter(e => + + // Elements can be `null` in sparse arrays: `[,,]`; + e !== null && e.type !== "SpreadElement"); + + + /* + * Possible future direction if needed: We could check if the + * single value would result in variable boolean comparison. + * For now we will err on the side of caution since `[x]` could + * evaluate to `[0]` or `[1]`. + */ + return node.elements.length === 0 || nonSpreadElements.length > 1; + } + case "ArrowFunctionExpression": + case "FunctionExpression": + return true; + case "UnaryExpression": + if (node.operator === "void" || // Always returns `undefined` + node.operator === "typeof" // All `typeof` strings, when coerced to number, are not 0 or 1. + ) { + return true; + } + if (node.operator === "!") { + return isConstant(scope, node.argument, true); + } + + /* + * We won't try to reason about +, -, ~, or delete + * In theory, for the mathematical operators, we could look at the + * argument and try to determine if it coerces to a constant numeric + * value. + */ + return false; + case "NewExpression": // Objects might have custom `.valueOf` or `.toString`. + return false; + case "CallExpression": { + if (node.callee.type === "Identifier" && + node.callee.name === "Boolean" && + isReferenceToGlobalVariable(scope, node.callee) + ) { + return node.arguments.length === 0 || isConstant(scope, node.arguments[0], true); + } + return false; + } + case "Literal": // True or false, literals never change + return true; + case "Identifier": + return node.name === "undefined" && isReferenceToGlobalVariable(scope, node); + case "TemplateLiteral": + + /* + * In theory we could try to check if the quasi are sufficient to + * prove that the expression will always be true, but it would be + * tricky to get right. For example: `000.${foo}000` + */ + return node.expressions.length === 0; + case "AssignmentExpression": + if (node.operator === "=") { + return hasConstantLooseBooleanComparison(scope, node.right); + } + + /* + * Handling short-circuiting assignment operators would require + * walking the scope. We won't attempt that (for now...) + * + * The remaining assignment expressions all result in a numeric or + * string (non-nullish) values which could be truthy or falsy: + * "+=", "-=", "*=", "/=", "%=", "<<=", ">>=", ">>>=", "|=", "^=", "&=" + */ + return false; + case "SequenceExpression": { + const last = node.expressions[node.expressions.length - 1]; + + return hasConstantLooseBooleanComparison(scope, last); + } + case "JSXElement": // ESLint has a policy of not assuming any specific JSX behavior. + case "JSXFragment": + return false; + default: + return false; + } +} + + +/** + * Test if an AST node will always give the same result when _strictly_ compared + * to a boolean value. This can happen if the expression can never be boolean, or + * if it is always the same boolean value. + * @param {Scope} scope The scope in which the node was found. + * @param {ASTNode} node The node to test + * @returns {boolean} Will `node` always give the same result when compared to a + * static boolean value? + */ +function hasConstantStrictBooleanComparison(scope, node) { + switch (node.type) { + case "ObjectExpression": // Objects are not booleans + case "ArrayExpression": // Arrays are not booleans + case "ArrowFunctionExpression": // Functions are not booleans + case "FunctionExpression": + case "ClassExpression": // Classes are not booleans + case "NewExpression": // Objects are not booleans + case "TemplateLiteral": // Strings are not booleans + case "Literal": // True, false, or not boolean, literals never change. + case "UpdateExpression": // Numbers are not booleans + return true; + case "BinaryExpression": + return NUMERIC_OR_STRING_BINARY_OPERATORS.has(node.operator); + case "UnaryExpression": { + if (node.operator === "delete") { + return false; + } + if (node.operator === "!") { + return isConstant(scope, node.argument, true); + } + + /* + * The remaining operators return either strings or numbers, neither + * of which are boolean. + */ + return true; + } + case "SequenceExpression": { + const last = node.expressions[node.expressions.length - 1]; + + return hasConstantStrictBooleanComparison(scope, last); + } + case "Identifier": + return node.name === "undefined" && isReferenceToGlobalVariable(scope, node); + case "AssignmentExpression": + if (node.operator === "=") { + return hasConstantStrictBooleanComparison(scope, node.right); + } + + /* + * Handling short-circuiting assignment operators would require + * walking the scope. We won't attempt that (for now...) + */ + if (isLogicalAssignmentOperator(node.operator)) { + return false; + } + + /* + * The remaining assignment expressions all result in either a number + * or a string, neither of which can ever be boolean. + */ + return true; + case "CallExpression": { + if (node.callee.type !== "Identifier") { + return false; + } + const functionName = node.callee.name; + + if ( + (functionName === "String" || functionName === "Number") && + isReferenceToGlobalVariable(scope, node.callee) + ) { + return true; + } + if (functionName === "Boolean" && isReferenceToGlobalVariable(scope, node.callee)) { + return ( + node.arguments.length === 0 || isConstant(scope, node.arguments[0], true)); + } + return false; + } + case "JSXElement": // ESLint has a policy of not assuming any specific JSX behavior. + case "JSXFragment": + return false; + default: + return false; + } +} + +/** + * Test if an AST node will always result in a newly constructed object + * @param {Scope} scope The scope in which the node was found. + * @param {ASTNode} node The node to test + * @returns {boolean} Will `node` always be new? + */ +function isAlwaysNew(scope, node) { + switch (node.type) { + case "ObjectExpression": + case "ArrayExpression": + case "ArrowFunctionExpression": + case "FunctionExpression": + case "ClassExpression": + return true; + case "NewExpression": { + if (node.callee.type !== "Identifier") { + return false; + } + + /* + * All the built-in constructors are always new, but + * user-defined constructors could return a sentinel + * object. + * + * Catching these is especially useful for primitive constructures + * which return boxed values, a surprising gotcha' in JavaScript. + */ + return Object.hasOwnProperty.call(globals.builtin, node.callee.name) && + isReferenceToGlobalVariable(scope, node.callee); + } + case "Literal": + + // Regular expressions are objects, and thus always new + return typeof node.regex === "object"; + case "SequenceExpression": { + const last = node.expressions[node.expressions.length - 1]; + + return isAlwaysNew(scope, last); + } + case "AssignmentExpression": + if (node.operator === "=") { + return isAlwaysNew(scope, node.right); + } + return false; + case "ConditionalExpression": + return isAlwaysNew(scope, node.consequent) && isAlwaysNew(scope, node.alternate); + case "JSXElement": // ESLint has a policy of not assuming any specific JSX behavior. + case "JSXFragment": + return false; + default: + return false; + } +} + +/** + * Checks whether or not a node is `null` or `undefined`. Similar to the one + * found in ast-utils.js, but this one correctly handles the edge case that + * `undefined` has been redefined. + * @param {Scope} scope Scope in which the expression was found. + * @param {ASTNode} node A node to check. + * @returns {boolean} Whether or not the node is a `null` or `undefined`. + * @public + */ +function isNullOrUndefined(scope, node) { + return ( + isNullLiteral(node) || + (node.type === "Identifier" && node.name === "undefined" && isReferenceToGlobalVariable(scope, node)) || + (node.type === "UnaryExpression" && node.operator === "void") + ); +} + + +/** + * Checks if one operand will cause the result to be constant. + * @param {Scope} scope Scope in which the expression was found. + * @param {ASTNode} a One side of the expression + * @param {ASTNode} b The other side of the expression + * @param {string} operator The binary expression operator + * @returns {ASTNode | null} The node which will cause the expression to have a constant result. + */ +function findBinaryExpressionConstantOperand(scope, a, b, operator) { + if (operator === "==" || operator === "!=") { + if ( + (isNullOrUndefined(scope, a) && hasConstantNullishness(scope, b)) || + (isStaticBoolean(scope, a) && hasConstantLooseBooleanComparison(scope, b)) + ) { + return b; + } + } else if (operator === "===" || operator === "!==") { + if ( + (isNullOrUndefined(scope, a) && hasConstantNullishness(scope, b)) || + (isStaticBoolean(scope, a) && hasConstantStrictBooleanComparison(scope, b)) + ) { + return b; + } + } + return null; +} + +//------------------------------------------------------------------------------ +// Rule Definition +//------------------------------------------------------------------------------ + +/** @type {import('../shared/types').Rule} */ +module.exports = { + meta: { + type: "problem", + docs: { + description: "Disallow expressions where the operation doesn't affect the value", + recommended: false, + url: "https://eslint.org/docs/rules/no-constant-binary-expression" + }, + schema: [], + messages: { + constantBinaryOperand: "Unexpected constant binary expression. Compares constantly with the {{otherSide}}-hand side of the `{{operator}}`.", + constantShortCircuit: "Unexpected constant {{property}} on the left-hand side of a `{{operator}}` expression.", + alwaysNew: "Unexpected comparison to newly constructed object. These two values can never be equal.", + bothAlwaysNew: "Unexpected comparison of two newly constructed objects. These two values can never be equal." + } + }, + + create(context) { + return { + LogicalExpression(node) { + const { operator, left } = node; + const scope = context.getScope(); + + if ((operator === "&&" || operator === "||") && isConstant(scope, left, true)) { + context.report({ node: left, messageId: "constantShortCircuit", data: { property: "truthiness", operator } }); + } else if (operator === "??" && hasConstantNullishness(scope, left)) { + context.report({ node: left, messageId: "constantShortCircuit", data: { property: "nullishness", operator } }); + } + }, + BinaryExpression(node) { + const scope = context.getScope(); + const { right, left, operator } = node; + const rightConstantOperand = findBinaryExpressionConstantOperand(scope, left, right, operator); + const leftConstantOperand = findBinaryExpressionConstantOperand(scope, right, left, operator); + + if (rightConstantOperand) { + context.report({ node: rightConstantOperand, messageId: "constantBinaryOperand", data: { operator, otherSide: "left" } }); + } else if (leftConstantOperand) { + context.report({ node: leftConstantOperand, messageId: "constantBinaryOperand", data: { operator, otherSide: "right" } }); + } else if (operator === "===" || operator === "!==") { + if (isAlwaysNew(scope, left)) { + context.report({ node: left, messageId: "alwaysNew" }); + } else if (isAlwaysNew(scope, right)) { + context.report({ node: right, messageId: "alwaysNew" }); + } + } else if (operator === "==" || operator === "!=") { + + /* + * If both sides are "new", then both sides are objects and + * therefore they will be compared by reference even with `==` + * equality. + */ + if (isAlwaysNew(scope, left) && isAlwaysNew(scope, right)) { + context.report({ node: left, messageId: "bothAlwaysNew" }); + } + } + + } + + /* + * In theory we could handle short-circuiting assignment operators, + * for some constant values, but that would require walking the + * scope to find the value of the variable being assigned. This is + * dependant on https://github.com/eslint/eslint/issues/13776 + * + * AssignmentExpression() {}, + */ + }; + } +}; diff --git a/eslint/lib/rules/no-constant-condition.js b/eslint/lib/rules/no-constant-condition.js index 0bcb319..2ef687f 100644 --- a/eslint/lib/rules/no-constant-condition.js +++ b/eslint/lib/rules/no-constant-condition.js @@ -5,6 +5,8 @@ "use strict"; +const { isConstant } = require("./utils/ast-utils"); + //------------------------------------------------------------------------------ // Helpers //------------------------------------------------------------------------------ @@ -19,7 +21,7 @@ module.exports = { type: "problem", docs: { - description: "disallow constant expressions in conditions", + description: "Disallow constant expressions in conditions", recommended: true, url: "https://eslint.org/docs/rules/no-constant-condition" }, @@ -53,155 +55,6 @@ module.exports = { // Helpers //-------------------------------------------------------------------------- - /** - * Returns literal's value converted to the Boolean type - * @param {ASTNode} node any `Literal` node - * @returns {boolean | null} `true` when node is truthy, `false` when node is falsy, - * `null` when it cannot be determined. - */ - function getBooleanValue(node) { - if (node.value === null) { - - /* - * it might be a null literal or bigint/regex literal in unsupported environments . - * https://github.com/estree/estree/blob/14df8a024956ea289bd55b9c2226a1d5b8a473ee/es5.md#regexpliteral - * https://github.com/estree/estree/blob/14df8a024956ea289bd55b9c2226a1d5b8a473ee/es2020.md#bigintliteral - */ - - if (node.raw === "null") { - return false; - } - - // regex is always truthy - if (typeof node.regex === "object") { - return true; - } - - return null; - } - - return !!node.value; - } - - /** - * Checks if a branch node of LogicalExpression short circuits the whole condition - * @param {ASTNode} node The branch of main condition which needs to be checked - * @param {string} operator The operator of the main LogicalExpression. - * @returns {boolean} true when condition short circuits whole condition - */ - function isLogicalIdentity(node, operator) { - switch (node.type) { - case "Literal": - return (operator === "||" && getBooleanValue(node) === true) || - (operator === "&&" && getBooleanValue(node) === false); - - case "UnaryExpression": - return (operator === "&&" && node.operator === "void"); - - case "LogicalExpression": - - /* - * handles `a && false || b` - * `false` is an identity element of `&&` but not `||` - */ - return operator === node.operator && - ( - isLogicalIdentity(node.left, operator) || - isLogicalIdentity(node.right, operator) - ); - - case "AssignmentExpression": - return ["||=", "&&="].includes(node.operator) && - operator === node.operator.slice(0, -1) && - isLogicalIdentity(node.right, operator); - - // no default - } - return false; - } - - /** - * Checks if a node has a constant truthiness value. - * @param {ASTNode} node The AST node to check. - * @param {boolean} inBooleanPosition `false` if checking branch of a condition. - * `true` in all other cases - * @returns {Bool} true when node's truthiness is constant - * @private - */ - function isConstant(node, inBooleanPosition) { - - // node.elements can return null values in the case of sparse arrays ex. [,] - if (!node) { - return true; - } - switch (node.type) { - case "Literal": - case "ArrowFunctionExpression": - case "FunctionExpression": - case "ObjectExpression": - case "ClassExpression": - return true; - case "TemplateLiteral": - return (inBooleanPosition && node.quasis.some(quasi => quasi.value.cooked.length)) || - node.expressions.every(exp => isConstant(exp, inBooleanPosition)); - - case "ArrayExpression": { - if (node.parent.type === "BinaryExpression" && node.parent.operator === "+") { - return node.elements.every(element => isConstant(element, false)); - } - return true; - } - - case "UnaryExpression": - if ( - node.operator === "void" || - node.operator === "typeof" && inBooleanPosition - ) { - return true; - } - - if (node.operator === "!") { - return isConstant(node.argument, true); - } - - return isConstant(node.argument, false); - - case "BinaryExpression": - return isConstant(node.left, false) && - isConstant(node.right, false) && - node.operator !== "in"; - - case "LogicalExpression": { - const isLeftConstant = isConstant(node.left, inBooleanPosition); - const isRightConstant = isConstant(node.right, inBooleanPosition); - const isLeftShortCircuit = (isLeftConstant && isLogicalIdentity(node.left, node.operator)); - const isRightShortCircuit = (inBooleanPosition && isRightConstant && isLogicalIdentity(node.right, node.operator)); - - return (isLeftConstant && isRightConstant) || - isLeftShortCircuit || - isRightShortCircuit; - } - case "NewExpression": - return inBooleanPosition; - case "AssignmentExpression": - if (node.operator === "=") { - return isConstant(node.right, inBooleanPosition); - } - - if (["||=", "&&="].includes(node.operator) && inBooleanPosition) { - return isLogicalIdentity(node.right, node.operator.slice(0, -1)); - } - - return false; - - case "SequenceExpression": - return isConstant(node.expressions[node.expressions.length - 1], inBooleanPosition); - - // no default - } - return false; - } - /** * Tracks when the given node contains a constant condition. * @param {ASTNode} node The AST node to check. @@ -209,7 +62,7 @@ module.exports = { * @private */ function trackConstantConditionLoop(node) { - if (node.test && isConstant(node.test, true)) { + if (node.test && isConstant(context.getScope(), node.test, true)) { loopsInCurrentScope.add(node); } } @@ -234,7 +87,7 @@ module.exports = { * @private */ function reportIfConstant(node) { - if (node.test && isConstant(node.test, true)) { + if (node.test && isConstant(context.getScope(), node.test, true)) { context.report({ node: node.test, messageId: "unexpected" }); } } diff --git a/eslint/lib/rules/no-constructor-return.js b/eslint/lib/rules/no-constructor-return.js index f8a717c..911a32a 100644 --- a/eslint/lib/rules/no-constructor-return.js +++ b/eslint/lib/rules/no-constructor-return.js @@ -15,7 +15,7 @@ module.exports = { type: "problem", docs: { - description: "disallow returning value from constructor", + description: "Disallow returning value from constructor", recommended: false, url: "https://eslint.org/docs/rules/no-constructor-return" }, diff --git a/eslint/lib/rules/no-continue.js b/eslint/lib/rules/no-continue.js index 8658a79..80381fc 100644 --- a/eslint/lib/rules/no-continue.js +++ b/eslint/lib/rules/no-continue.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow `continue` statements", + description: "Disallow `continue` statements", recommended: false, url: "https://eslint.org/docs/rules/no-continue" }, diff --git a/eslint/lib/rules/no-control-regex.js b/eslint/lib/rules/no-control-regex.js index 04f3449..ba10843 100644 --- a/eslint/lib/rules/no-control-regex.js +++ b/eslint/lib/rules/no-control-regex.js @@ -30,10 +30,12 @@ const collector = new (class { } } - collectControlChars(regexpStr) { + collectControlChars(regexpStr, flags) { + const uFlag = typeof flags === "string" && flags.includes("u"); + try { this._source = regexpStr; - this._validator.validatePattern(regexpStr); // Call onCharacter hook + this._validator.validatePattern(regexpStr, void 0, void 0, uFlag); // Call onCharacter hook } catch { // Ignore syntax errors in RegExp. @@ -52,7 +54,7 @@ module.exports = { type: "problem", docs: { - description: "disallow control characters in regular expressions", + description: "Disallow control characters in regular expressions", recommended: true, url: "https://eslint.org/docs/rules/no-control-regex" }, @@ -68,13 +70,15 @@ module.exports = { /** * Get the regex expression - * @param {ASTNode} node node to evaluate - * @returns {RegExp|null} Regex if found else null + * @param {ASTNode} node `Literal` node to evaluate + * @returns {{ pattern: string, flags: string | null } | null} Regex if found (the given node is either a regex literal + * or a string literal that is the pattern argument of a RegExp constructor call). Otherwise `null`. If flags cannot be determined, + * the `flags` property will be `null`. * @private */ - function getRegExpPattern(node) { + function getRegExp(node) { if (node.regex) { - return node.regex.pattern; + return node.regex; } if (typeof node.value === "string" && (node.parent.type === "NewExpression" || node.parent.type === "CallExpression") && @@ -82,7 +86,15 @@ module.exports = { node.parent.callee.name === "RegExp" && node.parent.arguments[0] === node ) { - return node.value; + const pattern = node.value; + const flags = + node.parent.arguments.length > 1 && + node.parent.arguments[1].type === "Literal" && + typeof node.parent.arguments[1].value === "string" + ? node.parent.arguments[1].value + : null; + + return { pattern, flags }; } return null; @@ -90,10 +102,11 @@ module.exports = { return { Literal(node) { - const pattern = getRegExpPattern(node); + const regExp = getRegExp(node); - if (pattern) { - const controlCharacters = collector.collectControlChars(pattern); + if (regExp) { + const { pattern, flags } = regExp; + const controlCharacters = collector.collectControlChars(pattern, flags); if (controlCharacters.length > 0) { context.report({ diff --git a/eslint/lib/rules/no-debugger.js b/eslint/lib/rules/no-debugger.js index e62db1b..3b88079 100644 --- a/eslint/lib/rules/no-debugger.js +++ b/eslint/lib/rules/no-debugger.js @@ -15,7 +15,7 @@ module.exports = { type: "problem", docs: { - description: "disallow the use of `debugger`", + description: "Disallow the use of `debugger`", recommended: true, url: "https://eslint.org/docs/rules/no-debugger" }, diff --git a/eslint/lib/rules/no-delete-var.js b/eslint/lib/rules/no-delete-var.js index 1d1c710..41021bd 100644 --- a/eslint/lib/rules/no-delete-var.js +++ b/eslint/lib/rules/no-delete-var.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow deleting variables", + description: "Disallow deleting variables", recommended: true, url: "https://eslint.org/docs/rules/no-delete-var" }, diff --git a/eslint/lib/rules/no-div-regex.js b/eslint/lib/rules/no-div-regex.js index 175f6c2..dd1c578 100644 --- a/eslint/lib/rules/no-div-regex.js +++ b/eslint/lib/rules/no-div-regex.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow division operators explicitly at the beginning of regular expressions", + description: "Disallow division operators explicitly at the beginning of regular expressions", recommended: false, url: "https://eslint.org/docs/rules/no-div-regex" }, diff --git a/eslint/lib/rules/no-dupe-args.js b/eslint/lib/rules/no-dupe-args.js index 13090e1..faf2537 100644 --- a/eslint/lib/rules/no-dupe-args.js +++ b/eslint/lib/rules/no-dupe-args.js @@ -15,7 +15,7 @@ module.exports = { type: "problem", docs: { - description: "disallow duplicate arguments in `function` definitions", + description: "Disallow duplicate arguments in `function` definitions", recommended: true, url: "https://eslint.org/docs/rules/no-dupe-args" }, diff --git a/eslint/lib/rules/no-dupe-class-members.js b/eslint/lib/rules/no-dupe-class-members.js index ae61f16..8eca787 100644 --- a/eslint/lib/rules/no-dupe-class-members.js +++ b/eslint/lib/rules/no-dupe-class-members.js @@ -17,7 +17,7 @@ module.exports = { type: "problem", docs: { - description: "disallow duplicate class members", + description: "Disallow duplicate class members", recommended: true, url: "https://eslint.org/docs/rules/no-dupe-class-members" }, diff --git a/eslint/lib/rules/no-dupe-else-if.js b/eslint/lib/rules/no-dupe-else-if.js index 1e1d549..49db5ec 100644 --- a/eslint/lib/rules/no-dupe-else-if.js +++ b/eslint/lib/rules/no-dupe-else-if.js @@ -52,7 +52,7 @@ module.exports = { type: "problem", docs: { - description: "disallow duplicate conditions in if-else-if chains", + description: "Disallow duplicate conditions in if-else-if chains", recommended: true, url: "https://eslint.org/docs/rules/no-dupe-else-if" }, diff --git a/eslint/lib/rules/no-dupe-keys.js b/eslint/lib/rules/no-dupe-keys.js index dac13cf..65c34bc 100644 --- a/eslint/lib/rules/no-dupe-keys.js +++ b/eslint/lib/rules/no-dupe-keys.js @@ -88,7 +88,7 @@ module.exports = { type: "problem", docs: { - description: "disallow duplicate keys in object literals", + description: "Disallow duplicate keys in object literals", recommended: true, url: "https://eslint.org/docs/rules/no-dupe-keys" }, diff --git a/eslint/lib/rules/no-duplicate-case.js b/eslint/lib/rules/no-duplicate-case.js index a0c0b31..d436afd 100644 --- a/eslint/lib/rules/no-duplicate-case.js +++ b/eslint/lib/rules/no-duplicate-case.js @@ -22,7 +22,7 @@ module.exports = { type: "problem", docs: { - description: "disallow duplicate case labels", + description: "Disallow duplicate case labels", recommended: true, url: "https://eslint.org/docs/rules/no-duplicate-case" }, diff --git a/eslint/lib/rules/no-duplicate-imports.js b/eslint/lib/rules/no-duplicate-imports.js index 947bb30..619e258 100644 --- a/eslint/lib/rules/no-duplicate-imports.js +++ b/eslint/lib/rules/no-duplicate-imports.js @@ -233,7 +233,7 @@ module.exports = { type: "problem", docs: { - description: "disallow duplicate module imports", + description: "Disallow duplicate module imports", recommended: false, url: "https://eslint.org/docs/rules/no-duplicate-imports" }, diff --git a/eslint/lib/rules/no-else-return.js b/eslint/lib/rules/no-else-return.js index 3662fc8..d1da3aa 100644 --- a/eslint/lib/rules/no-else-return.js +++ b/eslint/lib/rules/no-else-return.js @@ -22,7 +22,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow `else` blocks after `return` statements in `if` statements", + description: "Disallow `else` blocks after `return` statements in `if` statements", recommended: false, url: "https://eslint.org/docs/rules/no-else-return" }, diff --git a/eslint/lib/rules/no-empty-character-class.js b/eslint/lib/rules/no-empty-character-class.js index f75f591..2d294f4 100644 --- a/eslint/lib/rules/no-empty-character-class.js +++ b/eslint/lib/rules/no-empty-character-class.js @@ -30,7 +30,7 @@ module.exports = { type: "problem", docs: { - description: "disallow empty character classes in regular expressions", + description: "Disallow empty character classes in regular expressions", recommended: true, url: "https://eslint.org/docs/rules/no-empty-character-class" }, diff --git a/eslint/lib/rules/no-empty-function.js b/eslint/lib/rules/no-empty-function.js index 6e73d63..4c9daa9 100644 --- a/eslint/lib/rules/no-empty-function.js +++ b/eslint/lib/rules/no-empty-function.js @@ -95,7 +95,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow empty functions", + description: "Disallow empty functions", recommended: false, url: "https://eslint.org/docs/rules/no-empty-function" }, @@ -144,7 +144,7 @@ module.exports = { filter: astUtils.isCommentToken }); - if (allowed.indexOf(kind) === -1 && + if (!allowed.includes(kind) && node.body.type === "BlockStatement" && node.body.body.length === 0 && innerComments.length === 0 diff --git a/eslint/lib/rules/no-empty-pattern.js b/eslint/lib/rules/no-empty-pattern.js index 2de575f..5a497f0 100644 --- a/eslint/lib/rules/no-empty-pattern.js +++ b/eslint/lib/rules/no-empty-pattern.js @@ -14,7 +14,7 @@ module.exports = { type: "problem", docs: { - description: "disallow empty destructuring patterns", + description: "Disallow empty destructuring patterns", recommended: true, url: "https://eslint.org/docs/rules/no-empty-pattern" }, diff --git a/eslint/lib/rules/no-empty.js b/eslint/lib/rules/no-empty.js index f04ee2c..459140a 100644 --- a/eslint/lib/rules/no-empty.js +++ b/eslint/lib/rules/no-empty.js @@ -20,7 +20,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow empty block statements", + description: "Disallow empty block statements", recommended: true, url: "https://eslint.org/docs/rules/no-empty" }, diff --git a/eslint/lib/rules/no-eq-null.js b/eslint/lib/rules/no-eq-null.js index b693737..9a88680 100644 --- a/eslint/lib/rules/no-eq-null.js +++ b/eslint/lib/rules/no-eq-null.js @@ -16,7 +16,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow `null` comparisons without type-checking operators", + description: "Disallow `null` comparisons without type-checking operators", recommended: false, url: "https://eslint.org/docs/rules/no-eq-null" }, diff --git a/eslint/lib/rules/no-eval.js b/eslint/lib/rules/no-eval.js index ae6d71b..03f7b1f 100644 --- a/eslint/lib/rules/no-eval.js +++ b/eslint/lib/rules/no-eval.js @@ -43,7 +43,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow the use of `eval()`", + description: "Disallow the use of `eval()`", recommended: false, url: "https://eslint.org/docs/rules/no-eval" }, @@ -72,21 +72,25 @@ module.exports = { let funcInfo = null; /** - * Pushs a variable scope (Program or Function) information to the stack. + * Pushs a `this` scope (non-arrow function, class static block, or class field initializer) information to the stack. + * Top-level scopes are handled separately. * * This is used in order to check whether or not `this` binding is a * reference to the global object. - * @param {ASTNode} node A node of the scope. This is one of Program, - * FunctionDeclaration, FunctionExpression, and ArrowFunctionExpression. + * @param {ASTNode} node A node of the scope. + * For functions, this is one of FunctionDeclaration, FunctionExpression. + * For class static blocks, this is StaticBlock. + * For class field initializers, this can be any node that is PropertyDefinition#value. * @returns {void} */ - function enterVarScope(node) { + function enterThisScope(node) { const strict = context.getScope().isStrict; funcInfo = { upper: funcInfo, node, strict, + isTopLevelOfScript: false, defaultThis: false, initialized: strict }; @@ -96,7 +100,7 @@ module.exports = { * Pops a variable scope from the stack. * @returns {void} */ - function exitVarScope() { + function exitThisScope() { funcInfo = funcInfo.upper; } @@ -222,12 +226,14 @@ module.exports = { strict = scope.isStrict || node.sourceType === "module" || - (features.globalReturn && scope.childScopes[0].isStrict); + (features.globalReturn && scope.childScopes[0].isStrict), + isTopLevelOfScript = node.sourceType !== "module" && !features.globalReturn; funcInfo = { upper: null, node, strict, + isTopLevelOfScript, defaultThis: true, initialized: true }; @@ -236,21 +242,19 @@ module.exports = { "Program:exit"() { const globalScope = context.getScope(); - exitVarScope(); + exitThisScope(); reportAccessingEval(globalScope); reportAccessingEvalViaGlobalObject(globalScope); }, - FunctionDeclaration: enterVarScope, - "FunctionDeclaration:exit": exitVarScope, - FunctionExpression: enterVarScope, - "FunctionExpression:exit": exitVarScope, - ArrowFunctionExpression: enterVarScope, - "ArrowFunctionExpression:exit": exitVarScope, - "PropertyDefinition > *.value": enterVarScope, - "PropertyDefinition > *.value:exit": exitVarScope, - StaticBlock: enterVarScope, - "StaticBlock:exit": exitVarScope, + FunctionDeclaration: enterThisScope, + "FunctionDeclaration:exit": exitThisScope, + FunctionExpression: enterThisScope, + "FunctionExpression:exit": exitThisScope, + "PropertyDefinition > *.value": enterThisScope, + "PropertyDefinition > *.value:exit": exitThisScope, + StaticBlock: enterThisScope, + "StaticBlock:exit": exitThisScope, ThisExpression(node) { if (!isMember(node.parent, "eval")) { @@ -269,7 +273,8 @@ module.exports = { ); } - if (!funcInfo.strict && funcInfo.defaultThis) { + // `this` at the top level of scripts always refers to the global object + if (funcInfo.isTopLevelOfScript || (!funcInfo.strict && funcInfo.defaultThis)) { // `this.eval` is possible built-in `eval`. report(node.parent); diff --git a/eslint/lib/rules/no-ex-assign.js b/eslint/lib/rules/no-ex-assign.js index 3db1420..4c77b11 100644 --- a/eslint/lib/rules/no-ex-assign.js +++ b/eslint/lib/rules/no-ex-assign.js @@ -17,7 +17,7 @@ module.exports = { type: "problem", docs: { - description: "disallow reassigning exceptions in `catch` clauses", + description: "Disallow reassigning exceptions in `catch` clauses", recommended: true, url: "https://eslint.org/docs/rules/no-ex-assign" }, diff --git a/eslint/lib/rules/no-extend-native.js b/eslint/lib/rules/no-extend-native.js index 771200f..52c6bd3 100644 --- a/eslint/lib/rules/no-extend-native.js +++ b/eslint/lib/rules/no-extend-native.js @@ -22,7 +22,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow extending native types", + description: "Disallow extending native types", recommended: false, url: "https://eslint.org/docs/rules/no-extend-native" }, diff --git a/eslint/lib/rules/no-extra-bind.js b/eslint/lib/rules/no-extra-bind.js index 561cb1a..caf6d8b 100644 --- a/eslint/lib/rules/no-extra-bind.js +++ b/eslint/lib/rules/no-extra-bind.js @@ -26,7 +26,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow unnecessary calls to `.bind()`", + description: "Disallow unnecessary calls to `.bind()`", recommended: false, url: "https://eslint.org/docs/rules/no-extra-bind" }, diff --git a/eslint/lib/rules/no-extra-boolean-cast.js b/eslint/lib/rules/no-extra-boolean-cast.js index f45ac61..45252fe 100644 --- a/eslint/lib/rules/no-extra-boolean-cast.js +++ b/eslint/lib/rules/no-extra-boolean-cast.js @@ -24,7 +24,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow unnecessary boolean casts", + description: "Disallow unnecessary boolean casts", recommended: true, url: "https://eslint.org/docs/rules/no-extra-boolean-cast" }, @@ -51,13 +51,13 @@ module.exports = { const sourceCode = context.getSourceCode(); // Node types which have a test which will coerce values to booleans. - const BOOLEAN_NODE_TYPES = [ + const BOOLEAN_NODE_TYPES = new Set([ "IfStatement", "DoWhileStatement", "WhileStatement", "ConditionalExpression", "ForStatement" - ]; + ]); /** * Check if a node is a Boolean function or constructor. @@ -95,7 +95,7 @@ module.exports = { (isBooleanFunctionOrConstructorCall(node.parent) && node === node.parent.arguments[0]) || - (BOOLEAN_NODE_TYPES.indexOf(node.parent.type) !== -1 && + (BOOLEAN_NODE_TYPES.has(node.parent.type) && node === node.parent.test) || // !<bool> @@ -188,7 +188,7 @@ module.exports = { } return precedence(node) <= precedence(parent); - /* istanbul ignore next */ + /* c8 ignore next */ default: throw new Error(`Unexpected parent type: ${parent.type}`); } diff --git a/eslint/lib/rules/no-extra-label.js b/eslint/lib/rules/no-extra-label.js index 9186a9f..bda3dd0 100644 --- a/eslint/lib/rules/no-extra-label.js +++ b/eslint/lib/rules/no-extra-label.js @@ -21,7 +21,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow unnecessary labels", + description: "Disallow unnecessary labels", recommended: false, url: "https://eslint.org/docs/rules/no-extra-label" }, diff --git a/eslint/lib/rules/no-extra-parens.js b/eslint/lib/rules/no-extra-parens.js index 5b54ae2..246a5a0 100644 --- a/eslint/lib/rules/no-extra-parens.js +++ b/eslint/lib/rules/no-extra-parens.js @@ -17,7 +17,7 @@ module.exports = { type: "layout", docs: { - description: "disallow unnecessary parentheses", + description: "Disallow unnecessary parentheses", recommended: false, url: "https://eslint.org/docs/rules/no-extra-parens" }, @@ -634,10 +634,10 @@ module.exports = { currentNode = currentNode.parent; - /* istanbul ignore if */ + /* c8 ignore start */ if (currentNode === null) { throw new Error("Nodes are not in the ancestor-descendant relationship."); - } + }/* c8 ignore stop */ path.push(currentNode); } diff --git a/eslint/lib/rules/no-extra-semi.js b/eslint/lib/rules/no-extra-semi.js index 89d9fce..c61ad37 100644 --- a/eslint/lib/rules/no-extra-semi.js +++ b/eslint/lib/rules/no-extra-semi.js @@ -22,7 +22,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow unnecessary semicolons", + description: "Disallow unnecessary semicolons", recommended: true, url: "https://eslint.org/docs/rules/no-extra-semi" }, @@ -98,7 +98,7 @@ module.exports = { "WithStatement" ]; - if (allowedParentTypes.indexOf(parent.type) === -1) { + if (!allowedParentTypes.includes(parent.type)) { report(node); } }, diff --git a/eslint/lib/rules/no-fallthrough.js b/eslint/lib/rules/no-fallthrough.js index f3b7c85..536aa21 100644 --- a/eslint/lib/rules/no-fallthrough.js +++ b/eslint/lib/rules/no-fallthrough.js @@ -64,7 +64,7 @@ module.exports = { type: "problem", docs: { - description: "disallow fallthrough of `case` statements", + description: "Disallow fallthrough of `case` statements", recommended: true, url: "https://eslint.org/docs/rules/no-fallthrough" }, @@ -76,6 +76,10 @@ module.exports = { commentPattern: { type: "string", default: "" + }, + allowEmptyCase: { + type: "boolean", + default: false } }, additionalProperties: false @@ -91,6 +95,7 @@ module.exports = { const options = context.options[0] || {}; let currentCodePath = null; const sourceCode = context.getSourceCode(); + const allowEmptyCase = options.allowEmptyCase || false; /* * We need to use leading comments of the next SwitchCase node because @@ -104,7 +109,6 @@ module.exports = { } else { fallthroughCommentPattern = DEFAULT_FALLTHROUGH_COMMENT; } - return { onCodePathStart(codePath) { currentCodePath = codePath; @@ -119,7 +123,8 @@ module.exports = { * Checks whether or not there is a fallthrough comment. * And reports the previous fallthrough node if that does not exist. */ - if (fallthroughCase && !hasFallthroughComment(fallthroughCase, node, context, fallthroughCommentPattern)) { + + if (fallthroughCase && (!hasFallthroughComment(fallthroughCase, node, context, fallthroughCommentPattern))) { context.report({ messageId: node.test ? "case" : "default", node @@ -137,7 +142,7 @@ module.exports = { * And allows empty cases and the last case. */ if (currentCodePath.currentSegments.some(isReachable) && - (node.consequent.length > 0 || hasBlankLinesBetween(node, nextToken)) && + (node.consequent.length > 0 || (!allowEmptyCase && hasBlankLinesBetween(node, nextToken))) && node.parent.cases[node.parent.cases.length - 1] !== node) { fallthroughCase = node; } diff --git a/eslint/lib/rules/no-floating-decimal.js b/eslint/lib/rules/no-floating-decimal.js index 8831bb8..cce50bf 100644 --- a/eslint/lib/rules/no-floating-decimal.js +++ b/eslint/lib/rules/no-floating-decimal.js @@ -21,7 +21,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow leading or trailing decimal points in numeric literals", + description: "Disallow leading or trailing decimal points in numeric literals", recommended: false, url: "https://eslint.org/docs/rules/no-floating-decimal" }, diff --git a/eslint/lib/rules/no-func-assign.js b/eslint/lib/rules/no-func-assign.js index 04a7dd3..2c8fa6a 100644 --- a/eslint/lib/rules/no-func-assign.js +++ b/eslint/lib/rules/no-func-assign.js @@ -17,7 +17,7 @@ module.exports = { type: "problem", docs: { - description: "disallow reassigning `function` declarations", + description: "Disallow reassigning `function` declarations", recommended: true, url: "https://eslint.org/docs/rules/no-func-assign" }, diff --git a/eslint/lib/rules/no-global-assign.js b/eslint/lib/rules/no-global-assign.js index 340c6c7..9f2f0ee 100644 --- a/eslint/lib/rules/no-global-assign.js +++ b/eslint/lib/rules/no-global-assign.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow assignments to native objects or read-only global variables", + description: "Disallow assignments to native objects or read-only global variables", recommended: true, url: "https://eslint.org/docs/rules/no-global-assign" }, @@ -78,7 +78,7 @@ module.exports = { * @returns {void} */ function checkVariable(variable) { - if (variable.writeable === false && exceptions.indexOf(variable.name) === -1) { + if (variable.writeable === false && !exceptions.includes(variable.name)) { variable.references.forEach(checkReference); } } diff --git a/eslint/lib/rules/no-implicit-coercion.js b/eslint/lib/rules/no-implicit-coercion.js index f646093..c236771 100644 --- a/eslint/lib/rules/no-implicit-coercion.js +++ b/eslint/lib/rules/no-implicit-coercion.js @@ -30,9 +30,9 @@ function parseOptions(options) { } /** - * Checks whether or not a node is a double logical nigating. + * Checks whether or not a node is a double logical negating. * @param {ASTNode} node An UnaryExpression node to check. - * @returns {boolean} Whether or not the node is a double logical nigating. + * @returns {boolean} Whether or not the node is a double logical negating. */ function isDoubleLogicalNegating(node) { return ( @@ -173,7 +173,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow shorthand type conversions", + description: "Disallow shorthand type conversions", recommended: false, url: "https://eslint.org/docs/rules/no-implicit-coercion" }, @@ -257,7 +257,7 @@ module.exports = { let operatorAllowed; // !!foo - operatorAllowed = options.allow.indexOf("!!") >= 0; + operatorAllowed = options.allow.includes("!!"); if (!operatorAllowed && options.boolean && isDoubleLogicalNegating(node)) { const recommendation = `Boolean(${sourceCode.getText(node.argument.argument)})`; @@ -265,7 +265,7 @@ module.exports = { } // ~foo.indexOf(bar) - operatorAllowed = options.allow.indexOf("~") >= 0; + operatorAllowed = options.allow.includes("~"); if (!operatorAllowed && options.boolean && isBinaryNegatingOfIndexOf(node)) { // `foo?.indexOf(bar) !== -1` will be true (== found) if the `foo` is nullish. So use `>= 0` in that case. @@ -276,7 +276,7 @@ module.exports = { } // +foo - operatorAllowed = options.allow.indexOf("+") >= 0; + operatorAllowed = options.allow.includes("+"); if (!operatorAllowed && options.number && node.operator === "+" && !isNumeric(node.argument)) { const recommendation = `Number(${sourceCode.getText(node.argument)})`; @@ -289,7 +289,7 @@ module.exports = { let operatorAllowed; // 1 * foo - operatorAllowed = options.allow.indexOf("*") >= 0; + operatorAllowed = options.allow.includes("*"); const nonNumericOperand = !operatorAllowed && options.number && isMultiplyByOne(node) && getNonNumericOperand(node); if (nonNumericOperand) { @@ -299,7 +299,7 @@ module.exports = { } // "" + foo - operatorAllowed = options.allow.indexOf("+") >= 0; + operatorAllowed = options.allow.includes("+"); if (!operatorAllowed && options.string && isConcatWithEmptyString(node)) { const recommendation = `String(${sourceCode.getText(getNonEmptyOperand(node))})`; @@ -310,7 +310,7 @@ module.exports = { AssignmentExpression(node) { // foo += "" - const operatorAllowed = options.allow.indexOf("+") >= 0; + const operatorAllowed = options.allow.includes("+"); if (!operatorAllowed && options.string && isAppendEmptyString(node)) { const code = sourceCode.getText(getNonEmptyOperand(node)); diff --git a/eslint/lib/rules/no-implicit-globals.js b/eslint/lib/rules/no-implicit-globals.js index 5dd6aa7..934630e 100644 --- a/eslint/lib/rules/no-implicit-globals.js +++ b/eslint/lib/rules/no-implicit-globals.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow declarations in the global scope", + description: "Disallow declarations in the global scope", recommended: false, url: "https://eslint.org/docs/rules/no-implicit-globals" }, diff --git a/eslint/lib/rules/no-implied-eval.js b/eslint/lib/rules/no-implied-eval.js index 38de5b3..44f1461 100644 --- a/eslint/lib/rules/no-implied-eval.js +++ b/eslint/lib/rules/no-implied-eval.js @@ -22,7 +22,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow the use of `eval()`-like methods", + description: "Disallow the use of `eval()`-like methods", recommended: false, url: "https://eslint.org/docs/rules/no-implied-eval" }, diff --git a/eslint/lib/rules/no-import-assign.js b/eslint/lib/rules/no-import-assign.js index 385386e..fc104fe 100644 --- a/eslint/lib/rules/no-import-assign.js +++ b/eslint/lib/rules/no-import-assign.js @@ -180,7 +180,7 @@ module.exports = { type: "problem", docs: { - description: "disallow assigning to imported bindings", + description: "Disallow assigning to imported bindings", recommended: true, url: "https://eslint.org/docs/rules/no-import-assign" }, diff --git a/eslint/lib/rules/no-inline-comments.js b/eslint/lib/rules/no-inline-comments.js index 2ed7feb..366f567 100644 --- a/eslint/lib/rules/no-inline-comments.js +++ b/eslint/lib/rules/no-inline-comments.js @@ -16,7 +16,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow inline comments after code", + description: "Disallow inline comments after code", recommended: false, url: "https://eslint.org/docs/rules/no-inline-comments" }, diff --git a/eslint/lib/rules/no-inner-declarations.js b/eslint/lib/rules/no-inner-declarations.js index 3b0feb7..9328166 100644 --- a/eslint/lib/rules/no-inner-declarations.js +++ b/eslint/lib/rules/no-inner-declarations.js @@ -48,7 +48,7 @@ module.exports = { type: "problem", docs: { - description: "disallow variable or `function` declarations in nested blocks", + description: "Disallow variable or `function` declarations in nested blocks", recommended: true, url: "https://eslint.org/docs/rules/no-inner-declarations" }, diff --git a/eslint/lib/rules/no-invalid-regexp.js b/eslint/lib/rules/no-invalid-regexp.js index 92ac512..0f1d9c7 100644 --- a/eslint/lib/rules/no-invalid-regexp.js +++ b/eslint/lib/rules/no-invalid-regexp.js @@ -23,7 +23,7 @@ module.exports = { type: "problem", docs: { - description: "disallow invalid regular expression strings in `RegExp` constructors", + description: "Disallow invalid regular expression strings in `RegExp` constructors", recommended: true, url: "https://eslint.org/docs/rules/no-invalid-regexp" }, diff --git a/eslint/lib/rules/no-invalid-this.js b/eslint/lib/rules/no-invalid-this.js index 5f9b9f8..b9cb43a 100644 --- a/eslint/lib/rules/no-invalid-this.js +++ b/eslint/lib/rules/no-invalid-this.js @@ -1,5 +1,5 @@ /** - * @fileoverview A rule to disallow `this` keywords outside of classes or class-like objects. + * @fileoverview A rule to disallow `this` keywords in contexts where the value of `this` is `undefined`. * @author Toru Nagashima */ @@ -11,6 +11,21 @@ const astUtils = require("./utils/ast-utils"); +//------------------------------------------------------------------------------ +// Helpers +//------------------------------------------------------------------------------ + +/** + * Determines if the given code path is a code path with lexical `this` binding. + * That is, if `this` within the code path refers to `this` of surrounding code path. + * @param {CodePath} codePath Code path. + * @param {ASTNode} node Node that started the code path. + * @returns {boolean} `true` if it is a code path with lexical `this` binding. + */ +function isCodePathWithLexicalThis(codePath, node) { + return codePath.origin === "function" && node.type === "ArrowFunctionExpression"; +} + //------------------------------------------------------------------------------ // Rule Definition //------------------------------------------------------------------------------ @@ -21,7 +36,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow `this` keywords outside of classes or class-like objects", + description: "Disallow use of `this` in contexts where the value of `this` is `undefined`", recommended: false, url: "https://eslint.org/docs/rules/no-invalid-this" }, @@ -72,71 +87,53 @@ module.exports = { return current; }; - /** - * Pushs new checking context into the stack. - * - * The checking context is not initialized yet. - * Because most functions don't have `this` keyword. - * When `this` keyword was found, the checking context is initialized. - * @param {ASTNode} node A function node that was entered. - * @returns {void} - */ - function enterFunction(node) { - - // `this` can be invalid only under strict mode. - stack.push({ - init: !context.getScope().isStrict, - node, - valid: true - }); - } + return { - /** - * Pops the current checking context from the stack. - * @returns {void} - */ - function exitFunction() { - stack.pop(); - } + onCodePathStart(codePath, node) { + if (isCodePathWithLexicalThis(codePath, node)) { + return; + } - return { + if (codePath.origin === "program") { + const scope = context.getScope(); + const features = context.parserOptions.ecmaFeatures || {}; + + // `this` at the top level of scripts always refers to the global object + stack.push({ + init: true, + node, + valid: !( + node.sourceType === "module" || + (features.globalReturn && scope.childScopes[0].isStrict) + ) + }); - /* - * `this` is invalid only under strict mode. - * Modules is always strict mode. - */ - Program(node) { - const scope = context.getScope(), - features = context.parserOptions.ecmaFeatures || {}; + return; + } + /* + * `init: false` means that `valid` isn't determined yet. + * Most functions don't use `this`, and the calculation for `valid` + * is relatively costly, so we'll calculate it lazily when the first + * `this` within the function is traversed. A special case are non-strict + * functions, because `this` refers to the global object and therefore is + * always valid, so we can set `init: true` right away. + */ stack.push({ - init: true, + init: !context.getScope().isStrict, node, - valid: !( - scope.isStrict || - node.sourceType === "module" || - (features.globalReturn && scope.childScopes[0].isStrict) - ) + valid: true }); }, - "Program:exit"() { + onCodePathEnd(codePath, node) { + if (isCodePathWithLexicalThis(codePath, node)) { + return; + } + stack.pop(); }, - FunctionDeclaration: enterFunction, - "FunctionDeclaration:exit": exitFunction, - FunctionExpression: enterFunction, - "FunctionExpression:exit": exitFunction, - - // Field initializers are implicit functions. - "PropertyDefinition > *.value": enterFunction, - "PropertyDefinition > *.value:exit": exitFunction, - - // Class static blocks are implicit functions. - StaticBlock: enterFunction, - "StaticBlock:exit": exitFunction, - // Reports if `this` of the current context is invalid. ThisExpression(node) { const current = stack.getCurrent(); diff --git a/eslint/lib/rules/no-irregular-whitespace.js b/eslint/lib/rules/no-irregular-whitespace.js index 65c4d67..d1646c7 100644 --- a/eslint/lib/rules/no-irregular-whitespace.js +++ b/eslint/lib/rules/no-irregular-whitespace.js @@ -31,7 +31,7 @@ module.exports = { type: "problem", docs: { - description: "disallow irregular whitespace", + description: "Disallow irregular whitespace", recommended: true, url: "https://eslint.org/docs/rules/no-irregular-whitespace" }, diff --git a/eslint/lib/rules/no-iterator.js b/eslint/lib/rules/no-iterator.js index d112672..3550c7b 100644 --- a/eslint/lib/rules/no-iterator.js +++ b/eslint/lib/rules/no-iterator.js @@ -21,7 +21,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow the use of the `__iterator__` property", + description: "Disallow the use of the `__iterator__` property", recommended: false, url: "https://eslint.org/docs/rules/no-iterator" }, diff --git a/eslint/lib/rules/no-label-var.js b/eslint/lib/rules/no-label-var.js index 5021181..a07d283 100644 --- a/eslint/lib/rules/no-label-var.js +++ b/eslint/lib/rules/no-label-var.js @@ -21,7 +21,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow labels that share a name with a variable", + description: "Disallow labels that share a name with a variable", recommended: false, url: "https://eslint.org/docs/rules/no-label-var" }, diff --git a/eslint/lib/rules/no-labels.js b/eslint/lib/rules/no-labels.js index 2e79f37..7257307 100644 --- a/eslint/lib/rules/no-labels.js +++ b/eslint/lib/rules/no-labels.js @@ -20,7 +20,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow labeled statements", + description: "Disallow labeled statements", recommended: false, url: "https://eslint.org/docs/rules/no-labels" }, @@ -98,7 +98,7 @@ module.exports = { info = info.upper; } - /* istanbul ignore next: syntax error */ + /* c8 ignore next */ return "other"; } diff --git a/eslint/lib/rules/no-lone-blocks.js b/eslint/lib/rules/no-lone-blocks.js index f9fe951..eb97f95 100644 --- a/eslint/lib/rules/no-lone-blocks.js +++ b/eslint/lib/rules/no-lone-blocks.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow unnecessary nested blocks", + description: "Disallow unnecessary nested blocks", recommended: false, url: "https://eslint.org/docs/rules/no-lone-blocks" }, @@ -91,7 +91,7 @@ module.exports = { }; // ES6: report blocks without block-level bindings, or that's only child of another block - if (context.parserOptions.ecmaVersion >= 6) { + if (context.languageOptions.ecmaVersion >= 2015) { ruleDef = { BlockStatement(node) { if (isLoneBlock(node)) { diff --git a/eslint/lib/rules/no-lonely-if.js b/eslint/lib/rules/no-lonely-if.js index 9abd465..0774b9f 100644 --- a/eslint/lib/rules/no-lonely-if.js +++ b/eslint/lib/rules/no-lonely-if.js @@ -14,7 +14,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow `if` statements as the only statement in `else` blocks", + description: "Disallow `if` statements as the only statement in `else` blocks", recommended: false, url: "https://eslint.org/docs/rules/no-lonely-if" }, diff --git a/eslint/lib/rules/no-loop-func.js b/eslint/lib/rules/no-loop-func.js index c546061..f81a713 100644 --- a/eslint/lib/rules/no-loop-func.js +++ b/eslint/lib/rules/no-loop-func.js @@ -125,7 +125,7 @@ function isSafe(loopNode, reference) { * The reference is every reference of the upper scope's variable we are * looking now. * - * It's safeafe if the reference matches one of the following condition. + * It's safe if the reference matches one of the following condition. * - is readonly. * - doesn't exist inside a local function and after the border. * @param {eslint-scope.Reference} upperRef A reference to check. @@ -154,7 +154,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow function declarations that contain unsafe references inside loop statements", + description: "Disallow function declarations that contain unsafe references inside loop statements", recommended: false, url: "https://eslint.org/docs/rules/no-loop-func" }, diff --git a/eslint/lib/rules/no-loss-of-precision.js b/eslint/lib/rules/no-loss-of-precision.js index fefc7b7..6dc6d86 100644 --- a/eslint/lib/rules/no-loss-of-precision.js +++ b/eslint/lib/rules/no-loss-of-precision.js @@ -15,7 +15,7 @@ module.exports = { type: "problem", docs: { - description: "disallow literal numbers that lose precision", + description: "Disallow literal numbers that lose precision", recommended: true, url: "https://eslint.org/docs/rules/no-loss-of-precision" }, diff --git a/eslint/lib/rules/no-magic-numbers.js b/eslint/lib/rules/no-magic-numbers.js index dfcd593..9b08588 100644 --- a/eslint/lib/rules/no-magic-numbers.js +++ b/eslint/lib/rules/no-magic-numbers.js @@ -32,7 +32,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow magic numbers", + description: "Disallow magic numbers", recommended: false, url: "https://eslint.org/docs/rules/no-magic-numbers" }, @@ -80,7 +80,7 @@ module.exports = { const config = context.options[0] || {}, detectObjects = !!config.detectObjects, enforceConst = !!config.enforceConst, - ignore = (config.ignore || []).map(normalizeIgnoreValue), + ignore = new Set((config.ignore || []).map(normalizeIgnoreValue)), ignoreArrayIndexes = !!config.ignoreArrayIndexes, ignoreDefaultValues = !!config.ignoreDefaultValues; @@ -92,7 +92,7 @@ module.exports = { * @returns {boolean} true if the value is ignored */ function isIgnoredValue(value) { - return ignore.indexOf(value) !== -1; + return ignore.has(value); } /** @@ -209,7 +209,7 @@ module.exports = { }); } } else if ( - okTypes.indexOf(parent.type) === -1 || + !okTypes.includes(parent.type) || (parent.type === "AssignmentExpression" && parent.left.type === "Identifier") ) { context.report({ diff --git a/eslint/lib/rules/no-misleading-character-class.js b/eslint/lib/rules/no-misleading-character-class.js index 94b2878..667d066 100644 --- a/eslint/lib/rules/no-misleading-character-class.js +++ b/eslint/lib/rules/no-misleading-character-class.js @@ -4,13 +4,16 @@ "use strict"; const { CALL, CONSTRUCT, ReferenceTracker, getStringIfConstant } = require("eslint-utils"); -const { RegExpParser, visitRegExpAST } = require("regexpp"); +const { RegExpValidator, RegExpParser, visitRegExpAST } = require("regexpp"); const { isCombiningCharacter, isEmojiModifier, isRegionalIndicatorSymbol, isSurrogatePair } = require("./utils/unicode"); +const astUtils = require("./utils/ast-utils.js"); //------------------------------------------------------------------------------ // Helpers //------------------------------------------------------------------------------ +const REGEXPP_LATEST_ECMA_VERSION = 2022; + /** * Iterate character sequences of a given nodes. * @@ -104,11 +107,13 @@ module.exports = { type: "problem", docs: { - description: "disallow characters which are made with multiple code points in character class syntax", + description: "Disallow characters which are made with multiple code points in character class syntax", recommended: true, url: "https://eslint.org/docs/rules/no-misleading-character-class" }, + hasSuggestions: true, + schema: [], messages: { @@ -116,10 +121,12 @@ module.exports = { combiningClass: "Unexpected combined character in character class.", emojiModifier: "Unexpected modified Emoji in character class.", regionalIndicatorSymbol: "Unexpected national flag in character class.", - zwj: "Unexpected joined character sequence in character class." + zwj: "Unexpected joined character sequence in character class.", + suggestUnicodeFlag: "Add unicode 'u' flag to regex." } }, create(context) { + const sourceCode = context.getSourceCode(); const parser = new RegExpParser(); /** @@ -127,17 +134,10 @@ module.exports = { * @param {Node} node The node to report. * @param {string} pattern The regular expression pattern to verify. * @param {string} flags The flags of the regular expression. + * @param {Function} unicodeFixer Fixer for missing "u" flag. * @returns {void} */ - function verify(node, pattern, flags) { - const has = { - surrogatePairWithoutUFlag: false, - combiningClass: false, - variationSelector: false, - emojiModifier: false, - regionalIndicatorSymbol: false, - zwj: false - }; + function verify(node, pattern, flags, unicodeFixer) { let patternNode; try { @@ -153,26 +153,75 @@ module.exports = { return; } + const foundKinds = new Set(); + visitRegExpAST(patternNode, { onCharacterClassEnter(ccNode) { for (const chars of iterateCharacterSequence(ccNode.elements)) { for (const kind of kinds) { - has[kind] = has[kind] || hasCharacterSequence[kind](chars); + if (hasCharacterSequence[kind](chars)) { + foundKinds.add(kind); + } } } } }); - for (const kind of kinds) { - if (has[kind]) { - context.report({ node, messageId: kind }); + for (const kind of foundKinds) { + let suggest; + + if (kind === "surrogatePairWithoutUFlag") { + suggest = [{ + messageId: "suggestUnicodeFlag", + fix: unicodeFixer + }]; } + + context.report({ + node, + messageId: kind, + suggest + }); } } + /** + * Checks if the given regular expression pattern would be valid with the `u` flag. + * @param {string} pattern The regular expression pattern to verify. + * @returns {boolean} `true` if the pattern would be valid with the `u` flag. + * `false` if the pattern would be invalid with the `u` flag or the configured + * ecmaVersion doesn't support the `u` flag. + */ + function isValidWithUnicodeFlag(pattern) { + const { ecmaVersion } = context.parserOptions; + + // ecmaVersion is unknown or it doesn't support the 'u' flag + if (typeof ecmaVersion !== "number" || ecmaVersion <= 5) { + return false; + } + + const validator = new RegExpValidator({ + ecmaVersion: Math.min(ecmaVersion + 2009, REGEXPP_LATEST_ECMA_VERSION) + }); + + try { + validator.validatePattern(pattern, void 0, void 0, /* uFlag = */ true); + } catch { + return false; + } + + return true; + } + return { "Literal[regex]"(node) { - verify(node, node.regex.pattern, node.regex.flags); + verify(node, node.regex.pattern, node.regex.flags, fixer => { + if (!isValidWithUnicodeFlag(node.regex.pattern)) { + return null; + } + + return fixer.insertTextAfter(node, "u"); + }); }, "Program"() { const scope = context.getScope(); @@ -191,7 +240,31 @@ module.exports = { const flags = getStringIfConstant(flagsNode, scope); if (typeof pattern === "string") { - verify(node, pattern, flags || ""); + verify(node, pattern, flags || "", fixer => { + + if (!isValidWithUnicodeFlag(pattern)) { + return null; + } + + if (node.arguments.length === 1) { + const penultimateToken = sourceCode.getLastToken(node, { skip: 1 }); // skip closing parenthesis + + return fixer.insertTextAfter( + penultimateToken, + astUtils.isCommaToken(penultimateToken) + ? ' "u",' + : ', "u"' + ); + } + + if ((flagsNode.type === "Literal" && typeof flagsNode.value === "string") || flagsNode.type === "TemplateLiteral") { + const range = [flagsNode.range[0], flagsNode.range[1] - 1]; + + return fixer.insertTextAfterRange(range, "u"); + } + + return null; + }); } } } diff --git a/eslint/lib/rules/no-mixed-operators.js b/eslint/lib/rules/no-mixed-operators.js index c75d011..cb6e936 100644 --- a/eslint/lib/rules/no-mixed-operators.js +++ b/eslint/lib/rules/no-mixed-operators.js @@ -64,7 +64,7 @@ function normalizeOptions(options = {}) { * @returns {boolean} `true` if such group existed. */ function includesBothInAGroup(groups, left, right) { - return groups.some(group => group.indexOf(left) !== -1 && group.indexOf(right) !== -1); + return groups.some(group => group.includes(left) && group.includes(right)); } /** @@ -88,7 +88,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow mixed binary operators", + description: "Disallow mixed binary operators", recommended: false, url: "https://eslint.org/docs/rules/no-mixed-operators" }, diff --git a/eslint/lib/rules/no-mixed-requires.js b/eslint/lib/rules/no-mixed-requires.js index 5e05cf7..4e97057 100644 --- a/eslint/lib/rules/no-mixed-requires.js +++ b/eslint/lib/rules/no-mixed-requires.js @@ -20,7 +20,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow `require` calls to be mixed with regular variable declarations", + description: "Disallow `require` calls to be mixed with regular variable declarations", recommended: false, url: "https://eslint.org/docs/rules/no-mixed-requires" }, @@ -160,7 +160,7 @@ module.exports = { return REQ_COMPUTED; } - if (BUILTIN_MODULES.indexOf(arg.value) !== -1) { + if (BUILTIN_MODULES.includes(arg.value)) { // "var fs = require('fs');" return REQ_CORE; diff --git a/eslint/lib/rules/no-mixed-spaces-and-tabs.js b/eslint/lib/rules/no-mixed-spaces-and-tabs.js index f82a352..b2d5a04 100644 --- a/eslint/lib/rules/no-mixed-spaces-and-tabs.js +++ b/eslint/lib/rules/no-mixed-spaces-and-tabs.js @@ -14,7 +14,7 @@ module.exports = { type: "layout", docs: { - description: "disallow mixed spaces and tabs for indentation", + description: "Disallow mixed spaces and tabs for indentation", recommended: true, url: "https://eslint.org/docs/rules/no-mixed-spaces-and-tabs" }, diff --git a/eslint/lib/rules/no-multi-assign.js b/eslint/lib/rules/no-multi-assign.js index be4d41f..392b33f 100644 --- a/eslint/lib/rules/no-multi-assign.js +++ b/eslint/lib/rules/no-multi-assign.js @@ -16,7 +16,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow use of chained assignment expressions", + description: "Disallow use of chained assignment expressions", recommended: false, url: "https://eslint.org/docs/rules/no-multi-assign" }, diff --git a/eslint/lib/rules/no-multi-spaces.js b/eslint/lib/rules/no-multi-spaces.js index e37aae0..d8d3c65 100644 --- a/eslint/lib/rules/no-multi-spaces.js +++ b/eslint/lib/rules/no-multi-spaces.js @@ -17,7 +17,7 @@ module.exports = { type: "layout", docs: { - description: "disallow multiple spaces", + description: "Disallow multiple spaces", recommended: false, url: "https://eslint.org/docs/rules/no-multi-spaces" }, @@ -56,7 +56,7 @@ module.exports = { const options = context.options[0] || {}; const ignoreEOLComments = options.ignoreEOLComments; const exceptions = Object.assign({ Property: true }, options.exceptions); - const hasExceptions = Object.keys(exceptions).filter(key => exceptions[key]).length > 0; + const hasExceptions = Object.keys(exceptions).some(key => exceptions[key]); /** * Formats value of given comment token for error message by truncating its length. diff --git a/eslint/lib/rules/no-multi-str.js b/eslint/lib/rules/no-multi-str.js index 6a17d58..c4400f4 100644 --- a/eslint/lib/rules/no-multi-str.js +++ b/eslint/lib/rules/no-multi-str.js @@ -21,7 +21,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow multiline strings", + description: "Disallow multiline strings", recommended: false, url: "https://eslint.org/docs/rules/no-multi-str" }, diff --git a/eslint/lib/rules/no-multiple-empty-lines.js b/eslint/lib/rules/no-multiple-empty-lines.js index d012303..e8b0f98 100644 --- a/eslint/lib/rules/no-multiple-empty-lines.js +++ b/eslint/lib/rules/no-multiple-empty-lines.js @@ -15,7 +15,7 @@ module.exports = { type: "layout", docs: { - description: "disallow multiple empty lines", + description: "Disallow multiple empty lines", recommended: false, url: "https://eslint.org/docs/rules/no-multiple-empty-lines" }, diff --git a/eslint/lib/rules/no-native-reassign.js b/eslint/lib/rules/no-native-reassign.js index 1814a5b..634fea9 100644 --- a/eslint/lib/rules/no-native-reassign.js +++ b/eslint/lib/rules/no-native-reassign.js @@ -16,7 +16,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow assignments to native objects or read-only global variables", + description: "Disallow assignments to native objects or read-only global variables", recommended: false, url: "https://eslint.org/docs/rules/no-native-reassign" }, @@ -81,7 +81,7 @@ module.exports = { * @returns {void} */ function checkVariable(variable) { - if (variable.writeable === false && exceptions.indexOf(variable.name) === -1) { + if (variable.writeable === false && !exceptions.includes(variable.name)) { variable.references.forEach(checkReference); } } diff --git a/eslint/lib/rules/no-negated-condition.js b/eslint/lib/rules/no-negated-condition.js index a287013..3876177 100644 --- a/eslint/lib/rules/no-negated-condition.js +++ b/eslint/lib/rules/no-negated-condition.js @@ -14,7 +14,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow negated conditions", + description: "Disallow negated conditions", recommended: false, url: "https://eslint.org/docs/rules/no-negated-condition" }, diff --git a/eslint/lib/rules/no-negated-in-lhs.js b/eslint/lib/rules/no-negated-in-lhs.js index 95ab58a..975a8d7 100644 --- a/eslint/lib/rules/no-negated-in-lhs.js +++ b/eslint/lib/rules/no-negated-in-lhs.js @@ -16,7 +16,7 @@ module.exports = { type: "problem", docs: { - description: "disallow negating the left operand in `in` expressions", + description: "Disallow negating the left operand in `in` expressions", recommended: false, url: "https://eslint.org/docs/rules/no-negated-in-lhs" }, diff --git a/eslint/lib/rules/no-nested-ternary.js b/eslint/lib/rules/no-nested-ternary.js index c87875e..fe97823 100644 --- a/eslint/lib/rules/no-nested-ternary.js +++ b/eslint/lib/rules/no-nested-ternary.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow nested ternary expressions", + description: "Disallow nested ternary expressions", recommended: false, url: "https://eslint.org/docs/rules/no-nested-ternary" }, diff --git a/eslint/lib/rules/no-new-func.js b/eslint/lib/rules/no-new-func.js index 3b59943..4759f38 100644 --- a/eslint/lib/rules/no-new-func.js +++ b/eslint/lib/rules/no-new-func.js @@ -27,7 +27,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow `new` operators with the `Function` object", + description: "Disallow `new` operators with the `Function` object", recommended: false, url: "https://eslint.org/docs/rules/no-new-func" }, diff --git a/eslint/lib/rules/no-new-object.js b/eslint/lib/rules/no-new-object.js index 1a5784d..4dbe8db 100644 --- a/eslint/lib/rules/no-new-object.js +++ b/eslint/lib/rules/no-new-object.js @@ -21,7 +21,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow `Object` constructors", + description: "Disallow `Object` constructors", recommended: false, url: "https://eslint.org/docs/rules/no-new-object" }, @@ -29,7 +29,7 @@ module.exports = { schema: [], messages: { - preferLiteral: "The object literal notation {} is preferrable." + preferLiteral: "The object literal notation {} is preferable." } }, diff --git a/eslint/lib/rules/no-new-require.js b/eslint/lib/rules/no-new-require.js index 5dadf6c..63ca057 100644 --- a/eslint/lib/rules/no-new-require.js +++ b/eslint/lib/rules/no-new-require.js @@ -20,7 +20,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow `new` operators with calls to `require`", + description: "Disallow `new` operators with calls to `require`", recommended: false, url: "https://eslint.org/docs/rules/no-new-require" }, diff --git a/eslint/lib/rules/no-new-symbol.js b/eslint/lib/rules/no-new-symbol.js index 6acfca9..534201c 100644 --- a/eslint/lib/rules/no-new-symbol.js +++ b/eslint/lib/rules/no-new-symbol.js @@ -15,7 +15,7 @@ module.exports = { type: "problem", docs: { - description: "disallow `new` operators with the `Symbol` object", + description: "Disallow `new` operators with the `Symbol` object", recommended: true, url: "https://eslint.org/docs/rules/no-new-symbol" }, diff --git a/eslint/lib/rules/no-new-wrappers.js b/eslint/lib/rules/no-new-wrappers.js index 4667d58..ff44efc 100644 --- a/eslint/lib/rules/no-new-wrappers.js +++ b/eslint/lib/rules/no-new-wrappers.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow `new` operators with the `String`, `Number`, and `Boolean` objects", + description: "Disallow `new` operators with the `String`, `Number`, and `Boolean` objects", recommended: false, url: "https://eslint.org/docs/rules/no-new-wrappers" }, @@ -34,7 +34,7 @@ module.exports = { NewExpression(node) { const wrapperObjects = ["String", "Number", "Boolean"]; - if (wrapperObjects.indexOf(node.callee.name) > -1) { + if (wrapperObjects.includes(node.callee.name)) { context.report({ node, messageId: "noConstructor", diff --git a/eslint/lib/rules/no-new.js b/eslint/lib/rules/no-new.js index 5b09765..c434505 100644 --- a/eslint/lib/rules/no-new.js +++ b/eslint/lib/rules/no-new.js @@ -16,7 +16,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow `new` operators outside of assignments or comparisons", + description: "Disallow `new` operators outside of assignments or comparisons", recommended: false, url: "https://eslint.org/docs/rules/no-new" }, diff --git a/eslint/lib/rules/no-nonoctal-decimal-escape.js b/eslint/lib/rules/no-nonoctal-decimal-escape.js index 3edd269..63e2264 100644 --- a/eslint/lib/rules/no-nonoctal-decimal-escape.js +++ b/eslint/lib/rules/no-nonoctal-decimal-escape.js @@ -30,7 +30,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow `\\8` and `\\9` escape sequences in string literals", + description: "Disallow `\\8` and `\\9` escape sequences in string literals", recommended: true, url: "https://eslint.org/docs/rules/no-nonoctal-decimal-escape" }, diff --git a/eslint/lib/rules/no-obj-calls.js b/eslint/lib/rules/no-obj-calls.js index 667ba69..86355d8 100644 --- a/eslint/lib/rules/no-obj-calls.js +++ b/eslint/lib/rules/no-obj-calls.js @@ -43,7 +43,7 @@ module.exports = { type: "problem", docs: { - description: "disallow calling global object properties as functions", + description: "Disallow calling global object properties as functions", recommended: true, url: "https://eslint.org/docs/rules/no-obj-calls" }, diff --git a/eslint/lib/rules/no-octal-escape.js b/eslint/lib/rules/no-octal-escape.js index 9ac56ab..81a8a74 100644 --- a/eslint/lib/rules/no-octal-escape.js +++ b/eslint/lib/rules/no-octal-escape.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow octal escape sequences in string literals", + description: "Disallow octal escape sequences in string literals", recommended: false, url: "https://eslint.org/docs/rules/no-octal-escape" }, diff --git a/eslint/lib/rules/no-octal.js b/eslint/lib/rules/no-octal.js index 44df45f..eec5691 100644 --- a/eslint/lib/rules/no-octal.js +++ b/eslint/lib/rules/no-octal.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow octal literals", + description: "Disallow octal literals", recommended: true, url: "https://eslint.org/docs/rules/no-octal" }, @@ -23,7 +23,7 @@ module.exports = { schema: [], messages: { - noOcatal: "Octal literals should not be used." + noOctal: "Octal literals should not be used." } }, @@ -35,7 +35,7 @@ module.exports = { if (typeof node.value === "number" && /^0[0-9]/u.test(node.raw)) { context.report({ node, - messageId: "noOcatal" + messageId: "noOctal" }); } } diff --git a/eslint/lib/rules/no-param-reassign.js b/eslint/lib/rules/no-param-reassign.js index 87a6b70..f89435c 100644 --- a/eslint/lib/rules/no-param-reassign.js +++ b/eslint/lib/rules/no-param-reassign.js @@ -16,7 +16,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow reassigning `function` parameters", + description: "Disallow reassigning `function` parameters", recommended: false, url: "https://eslint.org/docs/rules/no-param-reassign" }, diff --git a/eslint/lib/rules/no-path-concat.js b/eslint/lib/rules/no-path-concat.js index 8d570a3..8502c51 100644 --- a/eslint/lib/rules/no-path-concat.js +++ b/eslint/lib/rules/no-path-concat.js @@ -19,7 +19,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow string concatenation with `__dirname` and `__filename`", + description: "Disallow string concatenation with `__dirname` and `__filename`", recommended: false, url: "https://eslint.org/docs/rules/no-path-concat" }, diff --git a/eslint/lib/rules/no-plusplus.js b/eslint/lib/rules/no-plusplus.js index 2565da4..cda6b05 100644 --- a/eslint/lib/rules/no-plusplus.js +++ b/eslint/lib/rules/no-plusplus.js @@ -51,7 +51,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow the unary operators `++` and `--`", + description: "Disallow the unary operators `++` and `--`", recommended: false, url: "https://eslint.org/docs/rules/no-plusplus" }, diff --git a/eslint/lib/rules/no-process-env.js b/eslint/lib/rules/no-process-env.js index f7c2c71..5db7c94 100644 --- a/eslint/lib/rules/no-process-env.js +++ b/eslint/lib/rules/no-process-env.js @@ -19,7 +19,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow the use of `process.env`", + description: "Disallow the use of `process.env`", recommended: false, url: "https://eslint.org/docs/rules/no-process-env" }, diff --git a/eslint/lib/rules/no-process-exit.js b/eslint/lib/rules/no-process-exit.js index 251044b..ca3ecfe 100644 --- a/eslint/lib/rules/no-process-exit.js +++ b/eslint/lib/rules/no-process-exit.js @@ -19,7 +19,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow the use of `process.exit()`", + description: "Disallow the use of `process.exit()`", recommended: false, url: "https://eslint.org/docs/rules/no-process-exit" }, diff --git a/eslint/lib/rules/no-promise-executor-return.js b/eslint/lib/rules/no-promise-executor-return.js index e40d4bc..caa195f 100644 --- a/eslint/lib/rules/no-promise-executor-return.js +++ b/eslint/lib/rules/no-promise-executor-return.js @@ -69,7 +69,7 @@ module.exports = { type: "problem", docs: { - description: "disallow returning values from Promise executor functions", + description: "Disallow returning values from Promise executor functions", recommended: false, url: "https://eslint.org/docs/rules/no-promise-executor-return" }, diff --git a/eslint/lib/rules/no-proto.js b/eslint/lib/rules/no-proto.js index e6659e5..771d206 100644 --- a/eslint/lib/rules/no-proto.js +++ b/eslint/lib/rules/no-proto.js @@ -21,7 +21,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow the use of the `__proto__` property", + description: "Disallow the use of the `__proto__` property", recommended: false, url: "https://eslint.org/docs/rules/no-proto" }, diff --git a/eslint/lib/rules/no-prototype-builtins.js b/eslint/lib/rules/no-prototype-builtins.js index ae73698..ea27633 100644 --- a/eslint/lib/rules/no-prototype-builtins.js +++ b/eslint/lib/rules/no-prototype-builtins.js @@ -20,7 +20,7 @@ module.exports = { type: "problem", docs: { - description: "disallow calling some `Object.prototype` methods directly on objects", + description: "Disallow calling some `Object.prototype` methods directly on objects", recommended: true, url: "https://eslint.org/docs/rules/no-prototype-builtins" }, @@ -33,11 +33,11 @@ module.exports = { }, create(context) { - const DISALLOWED_PROPS = [ + const DISALLOWED_PROPS = new Set([ "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable" - ]; + ]); /** * Reports if a disallowed property is used in a CallExpression @@ -54,7 +54,7 @@ module.exports = { const propName = astUtils.getStaticPropertyName(callee); - if (propName !== null && DISALLOWED_PROPS.indexOf(propName) > -1) { + if (propName !== null && DISALLOWED_PROPS.has(propName)) { context.report({ messageId: "prototypeBuildIn", loc: callee.property.loc, diff --git a/eslint/lib/rules/no-redeclare.js b/eslint/lib/rules/no-redeclare.js index cc71a61..59749cb 100644 --- a/eslint/lib/rules/no-redeclare.js +++ b/eslint/lib/rules/no-redeclare.js @@ -21,7 +21,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow variable redeclaration", + description: "Disallow variable redeclaration", recommended: true, url: "https://eslint.org/docs/rules/no-redeclare" }, diff --git a/eslint/lib/rules/no-regex-spaces.js b/eslint/lib/rules/no-regex-spaces.js index 400c72b..6d74aab 100644 --- a/eslint/lib/rules/no-regex-spaces.js +++ b/eslint/lib/rules/no-regex-spaces.js @@ -39,7 +39,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow multiple spaces in regular expressions", + description: "Disallow multiple spaces in regular expressions", recommended: true, url: "https://eslint.org/docs/rules/no-regex-spaces" }, diff --git a/eslint/lib/rules/no-restricted-exports.js b/eslint/lib/rules/no-restricted-exports.js index 775e505..d99e892 100644 --- a/eslint/lib/rules/no-restricted-exports.js +++ b/eslint/lib/rules/no-restricted-exports.js @@ -5,6 +5,12 @@ "use strict"; +//------------------------------------------------------------------------------ +// Requirements +//------------------------------------------------------------------------------ + +const astUtils = require("./utils/ast-utils"); + //------------------------------------------------------------------------------ // Rule Definition //------------------------------------------------------------------------------ @@ -15,7 +21,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow specified names in exports", + description: "Disallow specified names in exports", recommended: false, url: "https://eslint.org/docs/rules/no-restricted-exports" }, @@ -44,12 +50,12 @@ module.exports = { const restrictedNames = new Set(context.options[0] && context.options[0].restrictedNamedExports); /** - * Checks and reports given exported identifier. - * @param {ASTNode} node exported `Identifier` node to check. + * Checks and reports given exported name. + * @param {ASTNode} node exported `Identifier` or string `Literal` node to check. * @returns {void} */ function checkExportedName(node) { - const name = node.name; + const name = astUtils.getModuleExportName(node); if (restrictedNames.has(name)) { context.report({ diff --git a/eslint/lib/rules/no-restricted-globals.js b/eslint/lib/rules/no-restricted-globals.js index 09d3478..b666238 100644 --- a/eslint/lib/rules/no-restricted-globals.js +++ b/eslint/lib/rules/no-restricted-globals.js @@ -14,7 +14,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow specified global variables", + description: "Disallow specified global variables", recommended: false, url: "https://eslint.org/docs/rules/no-restricted-globals" }, diff --git a/eslint/lib/rules/no-restricted-imports.js b/eslint/lib/rules/no-restricted-imports.js index 6813037..f483867 100644 --- a/eslint/lib/rules/no-restricted-imports.js +++ b/eslint/lib/rules/no-restricted-imports.js @@ -4,6 +4,12 @@ */ "use strict"; +//------------------------------------------------------------------------------ +// Requirements +//------------------------------------------------------------------------------ + +const astUtils = require("./utils/ast-utils"); + //------------------------------------------------------------------------------ // Rule Definition //------------------------------------------------------------------------------ @@ -52,6 +58,14 @@ const arrayOfStringsOrObjectPatterns = { items: { type: "object", properties: { + importNames: { + type: "array", + items: { + type: "string" + }, + minItems: 1, + uniqueItems: true + }, group: { type: "array", items: { @@ -63,6 +77,9 @@ const arrayOfStringsOrObjectPatterns = { message: { type: "string", minLength: 1 + }, + caseSensitive: { + type: "boolean" } }, additionalProperties: false, @@ -79,7 +96,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow specified modules when loaded by `import`", + description: "Disallow specified modules when loaded by `import`", recommended: false, url: "https://eslint.org/docs/rules/no-restricted-imports" }, @@ -93,6 +110,14 @@ module.exports = { // eslint-disable-next-line eslint-plugin/report-message-format -- Custom message might not end in a period patternWithCustomMessage: "'{{importSource}}' import is restricted from being used by a pattern. {{customMessage}}", + patternAndImportName: "'{{importName}}' import from '{{importSource}}' is restricted from being used by a pattern.", + // eslint-disable-next-line eslint-plugin/report-message-format -- Custom message might not end in a period + patternAndImportNameWithCustomMessage: "'{{importName}}' import from '{{importSource}}' is restricted from being used by a pattern. {{customMessage}}", + + patternAndEverything: "* import is invalid because '{{importNames}}' from '{{importSource}}' is restricted from being used by a pattern.", + // eslint-disable-next-line eslint-plugin/report-message-format -- Custom message might not end in a period + patternAndEverythingWithCustomMessage: "* import is invalid because '{{importNames}}' from '{{importSource}}' is restricted from being used by a pattern. {{customMessage}}", + everything: "* import is invalid because '{{importNames}}' from '{{importSource}}' is restricted.", // eslint-disable-next-line eslint-plugin/report-message-format -- Custom message might not end in a period everythingWithCustomMessage: "* import is invalid because '{{importNames}}' from '{{importSource}}' is restricted. {{customMessage}}", @@ -142,10 +167,19 @@ module.exports = { }, {}); // Handle patterns too, either as strings or groups - const restrictedPatterns = (isPathAndPatternsObject ? options[0].patterns : []) || []; - const restrictedPatternGroups = restrictedPatterns.length > 0 && typeof restrictedPatterns[0] === "string" - ? [{ matcher: ignore().add(restrictedPatterns) }] - : restrictedPatterns.map(({ group, message }) => ({ matcher: ignore().add(group), customMessage: message })); + let restrictedPatterns = (isPathAndPatternsObject ? options[0].patterns : []) || []; + + // standardize to array of objects if we have an array of strings + if (restrictedPatterns.length > 0 && typeof restrictedPatterns[0] === "string") { + restrictedPatterns = [{ group: restrictedPatterns }]; + } + + // relative paths are supported for this rule + const restrictedPatternGroups = restrictedPatterns.map(({ group, message, caseSensitive, importNames }) => ({ + matcher: ignore({ allowRelativePaths: true, ignorecase: !caseSensitive }).add(group), + customMessage: message, + importNames + })); // if no imports are restricted we don't need to check if (Object.keys(restrictedPaths).length === 0 && restrictedPatternGroups.length === 0) { @@ -217,20 +251,68 @@ module.exports = { /** * Report a restricted path specifically for patterns. * @param {node} node representing the restricted path reference - * @param {Object} group contains a Ignore instance for paths, and the customMessage to show if it fails + * @param {Object} group contains an Ignore instance for paths, the customMessage to show on failure, + * and any restricted import names that have been specified in the config + * @param {Map<string,Object[]>} importNames Map of import names that are being imported * @returns {void} * @private */ - function reportPathForPatterns(node, group) { + function reportPathForPatterns(node, group, importNames) { const importSource = node.source.value.trim(); - context.report({ - node, - messageId: group.customMessage ? "patternWithCustomMessage" : "patterns", - data: { - importSource, - customMessage: group.customMessage + const customMessage = group.customMessage; + const restrictedImportNames = group.importNames; + + /* + * If we are not restricting to any specific import names and just the pattern itself, + * report the error and move on + */ + if (!restrictedImportNames) { + context.report({ + node, + messageId: customMessage ? "patternWithCustomMessage" : "patterns", + data: { + importSource, + customMessage + } + }); + return; + } + + if (importNames.has("*")) { + const specifierData = importNames.get("*")[0]; + + context.report({ + node, + messageId: customMessage ? "patternAndEverythingWithCustomMessage" : "patternAndEverything", + loc: specifierData.loc, + data: { + importSource, + importNames: restrictedImportNames, + customMessage + } + }); + } + + restrictedImportNames.forEach(importName => { + if (!importNames.has(importName)) { + return; } + + const specifiers = importNames.get(importName); + + specifiers.forEach(specifier => { + context.report({ + node, + messageId: customMessage ? "patternAndImportNameWithCustomMessage" : "patternAndImportName", + loc: specifier.loc, + data: { + importSource, + customMessage, + importName + } + }); + }); }); } @@ -269,12 +351,12 @@ module.exports = { } else if (specifier.type === "ImportNamespaceSpecifier") { name = "*"; } else if (specifier.imported) { - name = specifier.imported.name; + name = astUtils.getModuleExportName(specifier.imported); } else if (specifier.local) { - name = specifier.local.name; + name = astUtils.getModuleExportName(specifier.local); } - if (name) { + if (typeof name === "string") { if (importNames.has(name)) { importNames.get(name).push(specifierData); } else { @@ -287,7 +369,7 @@ module.exports = { checkRestrictedPathAndReport(importSource, importNames, node); restrictedPatternGroups.forEach(group => { if (isRestrictedPattern(importSource, group)) { - reportPathForPatterns(node, group); + reportPathForPatterns(node, group, importNames); } }); } diff --git a/eslint/lib/rules/no-restricted-modules.js b/eslint/lib/rules/no-restricted-modules.js index 26e75ef..c37694f 100644 --- a/eslint/lib/rules/no-restricted-modules.js +++ b/eslint/lib/rules/no-restricted-modules.js @@ -49,7 +49,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow specified modules when loaded by `require`", + description: "Disallow specified modules when loaded by `require`", recommended: false, url: "https://eslint.org/docs/rules/no-restricted-modules" }, @@ -103,7 +103,8 @@ module.exports = { return {}; } - const ig = ignore().add(restrictedPatterns); + // relative paths are supported for this rule + const ig = ignore({ allowRelativePaths: true }).add(restrictedPatterns); /** diff --git a/eslint/lib/rules/no-restricted-properties.js b/eslint/lib/rules/no-restricted-properties.js index 1e8c7a8..7c03498 100644 --- a/eslint/lib/rules/no-restricted-properties.js +++ b/eslint/lib/rules/no-restricted-properties.js @@ -17,7 +17,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow certain properties on certain objects", + description: "Disallow certain properties on certain objects", recommended: false, url: "https://eslint.org/docs/rules/no-restricted-properties" }, diff --git a/eslint/lib/rules/no-restricted-syntax.js b/eslint/lib/rules/no-restricted-syntax.js index 713d115..76369cf 100644 --- a/eslint/lib/rules/no-restricted-syntax.js +++ b/eslint/lib/rules/no-restricted-syntax.js @@ -14,7 +14,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow specified syntax", + description: "Disallow specified syntax", recommended: false, url: "https://eslint.org/docs/rules/no-restricted-syntax" }, diff --git a/eslint/lib/rules/no-return-assign.js b/eslint/lib/rules/no-return-assign.js index 4fd7a3d..ccaf2c1 100644 --- a/eslint/lib/rules/no-return-assign.js +++ b/eslint/lib/rules/no-return-assign.js @@ -26,7 +26,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow assignment operators in `return` statements", + description: "Disallow assignment operators in `return` statements", recommended: false, url: "https://eslint.org/docs/rules/no-return-assign" }, diff --git a/eslint/lib/rules/no-return-await.js b/eslint/lib/rules/no-return-await.js index 191bf42..3007c8c 100644 --- a/eslint/lib/rules/no-return-await.js +++ b/eslint/lib/rules/no-return-await.js @@ -16,7 +16,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow unnecessary `return await`", + description: "Disallow unnecessary `return await`", recommended: false, diff --git a/eslint/lib/rules/no-script-url.js b/eslint/lib/rules/no-script-url.js index 0eef254..4147900 100644 --- a/eslint/lib/rules/no-script-url.js +++ b/eslint/lib/rules/no-script-url.js @@ -18,7 +18,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow `javascript:` urls", + description: "Disallow `javascript:` urls", recommended: false, url: "https://eslint.org/docs/rules/no-script-url" }, diff --git a/eslint/lib/rules/no-self-assign.js b/eslint/lib/rules/no-self-assign.js index d9e261d..348ee8d 100644 --- a/eslint/lib/rules/no-self-assign.js +++ b/eslint/lib/rules/no-self-assign.js @@ -130,7 +130,7 @@ module.exports = { type: "problem", docs: { - description: "disallow assignments where both sides are exactly the same", + description: "Disallow assignments where both sides are exactly the same", recommended: true, url: "https://eslint.org/docs/rules/no-self-assign" }, @@ -174,7 +174,7 @@ module.exports = { return { AssignmentExpression(node) { - if (node.operator === "=") { + if (["=", "&&=", "||=", "??="].includes(node.operator)) { eachSelfAssignment(node.left, node.right, props, report); } } diff --git a/eslint/lib/rules/no-self-compare.js b/eslint/lib/rules/no-self-compare.js index c351289..dab0db4 100644 --- a/eslint/lib/rules/no-self-compare.js +++ b/eslint/lib/rules/no-self-compare.js @@ -16,7 +16,7 @@ module.exports = { type: "problem", docs: { - description: "disallow comparisons where both sides are exactly the same", + description: "Disallow comparisons where both sides are exactly the same", recommended: false, url: "https://eslint.org/docs/rules/no-self-compare" }, diff --git a/eslint/lib/rules/no-sequences.js b/eslint/lib/rules/no-sequences.js index 376aec3..2c0c27c 100644 --- a/eslint/lib/rules/no-sequences.js +++ b/eslint/lib/rules/no-sequences.js @@ -29,7 +29,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow comma operators", + description: "Disallow comma operators", recommended: false, url: "https://eslint.org/docs/rules/no-sequences" }, diff --git a/eslint/lib/rules/no-setter-return.js b/eslint/lib/rules/no-setter-return.js index 7204e5c..25e8f14 100644 --- a/eslint/lib/rules/no-setter-return.js +++ b/eslint/lib/rules/no-setter-return.js @@ -142,7 +142,7 @@ module.exports = { type: "problem", docs: { - description: "disallow returning values from setters", + description: "Disallow returning values from setters", recommended: true, url: "https://eslint.org/docs/rules/no-setter-return" }, diff --git a/eslint/lib/rules/no-shadow-restricted-names.js b/eslint/lib/rules/no-shadow-restricted-names.js index 52620e5..a7d6d00 100644 --- a/eslint/lib/rules/no-shadow-restricted-names.js +++ b/eslint/lib/rules/no-shadow-restricted-names.js @@ -27,7 +27,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow identifiers from shadowing restricted names", + description: "Disallow identifiers from shadowing restricted names", recommended: true, url: "https://eslint.org/docs/rules/no-shadow-restricted-names" }, diff --git a/eslint/lib/rules/no-shadow.js b/eslint/lib/rules/no-shadow.js index bd61923..3af9354 100644 --- a/eslint/lib/rules/no-shadow.js +++ b/eslint/lib/rules/no-shadow.js @@ -11,6 +11,15 @@ const astUtils = require("./utils/ast-utils"); +//------------------------------------------------------------------------------ +// Helpers +//------------------------------------------------------------------------------ + +const FUNC_EXPR_NODE_TYPES = new Set(["ArrowFunctionExpression", "FunctionExpression"]); +const CALL_EXPR_NODE_TYPE = new Set(["CallExpression"]); +const FOR_IN_OF_TYPE = /^For(?:In|Of)Statement$/u; +const SENTINEL_TYPE = /^(?:(?:Function|Class)(?:Declaration|Expression)|ArrowFunctionExpression|CatchClause|ImportDeclaration|ExportNamedDeclaration)$/u; + //------------------------------------------------------------------------------ // Rule Definition //------------------------------------------------------------------------------ @@ -21,7 +30,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow variable declarations from shadowing variables declared in the outer scope", + description: "Disallow variable declarations from shadowing variables declared in the outer scope", recommended: false, url: "https://eslint.org/docs/rules/no-shadow" }, @@ -37,7 +46,8 @@ module.exports = { items: { type: "string" } - } + }, + ignoreOnInitialization: { type: "boolean", default: false } }, additionalProperties: false } @@ -54,16 +64,116 @@ module.exports = { const options = { builtinGlobals: context.options[0] && context.options[0].builtinGlobals, hoist: (context.options[0] && context.options[0].hoist) || "functions", - allow: (context.options[0] && context.options[0].allow) || [] + allow: (context.options[0] && context.options[0].allow) || [], + ignoreOnInitialization: context.options[0] && context.options[0].ignoreOnInitialization }; + /** + * Checks whether or not a given location is inside of the range of a given node. + * @param {ASTNode} node An node to check. + * @param {number} location A location to check. + * @returns {boolean} `true` if the location is inside of the range of the node. + */ + function isInRange(node, location) { + return node && node.range[0] <= location && location <= node.range[1]; + } + + /** + * Searches from the current node through its ancestry to find a matching node. + * @param {ASTNode} node a node to get. + * @param {(node: ASTNode) => boolean} match a callback that checks whether or not the node verifies its condition or not. + * @returns {ASTNode|null} the matching node. + */ + function findSelfOrAncestor(node, match) { + let currentNode = node; + + while (currentNode && !match(currentNode)) { + currentNode = currentNode.parent; + } + return currentNode; + } + + /** + * Finds function's outer scope. + * @param {Scope} scope Function's own scope. + * @returns {Scope} Function's outer scope. + */ + function getOuterScope(scope) { + const upper = scope.upper; + + if (upper.type === "function-expression-name") { + return upper.upper; + } + return upper; + } + + /** + * Checks if a variable and a shadowedVariable have the same init pattern ancestor. + * @param {Object} variable a variable to check. + * @param {Object} shadowedVariable a shadowedVariable to check. + * @returns {boolean} Whether or not the variable and the shadowedVariable have the same init pattern ancestor. + */ + function isInitPatternNode(variable, shadowedVariable) { + const outerDef = shadowedVariable.defs[0]; + + if (!outerDef) { + return false; + } + + const { variableScope } = variable.scope; + + + if (!(FUNC_EXPR_NODE_TYPES.has(variableScope.block.type) && getOuterScope(variableScope) === shadowedVariable.scope)) { + return false; + } + + const fun = variableScope.block; + const { parent } = fun; + + const callExpression = findSelfOrAncestor( + parent, + node => CALL_EXPR_NODE_TYPE.has(node.type) + ); + + if (!callExpression) { + return false; + } + + let node = outerDef.name; + const location = callExpression.range[1]; + + while (node) { + if (node.type === "VariableDeclarator") { + if (isInRange(node.init, location)) { + return true; + } + if (FOR_IN_OF_TYPE.test(node.parent.parent.type) && + isInRange(node.parent.parent.right, location) + ) { + return true; + } + break; + } else if (node.type === "AssignmentPattern") { + if (isInRange(node.right, location)) { + return true; + } + } else if (SENTINEL_TYPE.test(node.type)) { + break; + } + + node = node.parent; + } + + return false; + } + /** * Check if variable name is allowed. * @param {ASTNode} variable The variable to check. * @returns {boolean} Whether or not the variable name is allowed. */ function isAllowed(variable) { - return options.allow.indexOf(variable.name) !== -1; + return options.allow.includes(variable.name); } /** @@ -99,11 +209,11 @@ module.exports = { return ( outer && - inner && - outer[0] < inner[0] && - inner[1] < outer[1] && - ((innerDef.type === "FunctionName" && innerDef.node.type === "FunctionExpression") || innerDef.node.type === "ClassExpression") && - outerScope === innerScope.upper + inner && + outer[0] < inner[0] && + inner[1] < outer[1] && + ((innerDef.type === "FunctionName" && innerDef.node.type === "FunctionExpression") || innerDef.node.type === "ClassExpression") && + outerScope === innerScope.upper ); } @@ -154,11 +264,11 @@ module.exports = { return ( inner && - outer && - inner[1] < outer[0] && + outer && + inner[1] < outer[0] && - // Excepts FunctionDeclaration if is {"hoist":"function"}. - (options.hoist !== "functions" || !outerDef || outerDef.node.type !== "FunctionDeclaration") + // Excepts FunctionDeclaration if is {"hoist":"function"}. + (options.hoist !== "functions" || !outerDef || outerDef.node.type !== "FunctionDeclaration") ); } @@ -175,8 +285,8 @@ module.exports = { // Skips "arguments" or variables of a class name in the class scope of ClassDeclaration. if (variable.identifiers.length === 0 || - isDuplicatedClassNameVariable(variable) || - isAllowed(variable) + isDuplicatedClassNameVariable(variable) || + isAllowed(variable) ) { continue; } @@ -185,9 +295,10 @@ module.exports = { const shadowed = astUtils.getVariableByName(scope.upper, variable.name); if (shadowed && - (shadowed.identifiers.length > 0 || (options.builtinGlobals && "writeable" in shadowed)) && - !isOnInitializer(variable, shadowed) && - !(options.hoist !== "all" && isInTdz(variable, shadowed)) + (shadowed.identifiers.length > 0 || (options.builtinGlobals && "writeable" in shadowed)) && + !isOnInitializer(variable, shadowed) && + !(options.ignoreOnInitialization && isInitPatternNode(variable, shadowed)) && + !(options.hoist !== "all" && isInTdz(variable, shadowed)) ) { const location = getDeclaredLocation(shadowed); const messageId = location.global ? "noShadowGlobal" : "noShadow"; diff --git a/eslint/lib/rules/no-spaced-func.js b/eslint/lib/rules/no-spaced-func.js index 1d29943..97e2da0 100644 --- a/eslint/lib/rules/no-spaced-func.js +++ b/eslint/lib/rules/no-spaced-func.js @@ -16,7 +16,7 @@ module.exports = { type: "layout", docs: { - description: "disallow spacing between function identifiers and their applications (deprecated)", + description: "Disallow spacing between function identifiers and their applications (deprecated)", recommended: false, url: "https://eslint.org/docs/rules/no-spaced-func" }, diff --git a/eslint/lib/rules/no-sparse-arrays.js b/eslint/lib/rules/no-sparse-arrays.js index c95bc20..0e95fe4 100644 --- a/eslint/lib/rules/no-sparse-arrays.js +++ b/eslint/lib/rules/no-sparse-arrays.js @@ -14,7 +14,7 @@ module.exports = { type: "problem", docs: { - description: "disallow sparse arrays", + description: "Disallow sparse arrays", recommended: true, url: "https://eslint.org/docs/rules/no-sparse-arrays" }, @@ -37,7 +37,7 @@ module.exports = { ArrayExpression(node) { - const emptySpot = node.elements.indexOf(null) > -1; + const emptySpot = node.elements.includes(null); if (emptySpot) { context.report({ node, messageId: "unexpectedSparseArray" }); diff --git a/eslint/lib/rules/no-sync.js b/eslint/lib/rules/no-sync.js index 3536d9f..71360c6 100644 --- a/eslint/lib/rules/no-sync.js +++ b/eslint/lib/rules/no-sync.js @@ -20,7 +20,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow synchronous methods", + description: "Disallow synchronous methods", recommended: false, url: "https://eslint.org/docs/rules/no-sync" }, diff --git a/eslint/lib/rules/no-tabs.js b/eslint/lib/rules/no-tabs.js index 9758b85..1b4834e 100644 --- a/eslint/lib/rules/no-tabs.js +++ b/eslint/lib/rules/no-tabs.js @@ -22,7 +22,7 @@ module.exports = { type: "layout", docs: { - description: "disallow all tabs", + description: "Disallow all tabs", recommended: false, url: "https://eslint.org/docs/rules/no-tabs" }, diff --git a/eslint/lib/rules/no-template-curly-in-string.js b/eslint/lib/rules/no-template-curly-in-string.js index 1901460..4f4e9ee 100644 --- a/eslint/lib/rules/no-template-curly-in-string.js +++ b/eslint/lib/rules/no-template-curly-in-string.js @@ -14,7 +14,7 @@ module.exports = { type: "problem", docs: { - description: "disallow template literal placeholder syntax in regular strings", + description: "Disallow template literal placeholder syntax in regular strings", recommended: false, url: "https://eslint.org/docs/rules/no-template-curly-in-string" }, diff --git a/eslint/lib/rules/no-ternary.js b/eslint/lib/rules/no-ternary.js index b0dc626..a185808 100644 --- a/eslint/lib/rules/no-ternary.js +++ b/eslint/lib/rules/no-ternary.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow ternary operators", + description: "Disallow ternary operators", recommended: false, url: "https://eslint.org/docs/rules/no-ternary" }, diff --git a/eslint/lib/rules/no-this-before-super.js b/eslint/lib/rules/no-this-before-super.js index 929eded..b4e48e8 100644 --- a/eslint/lib/rules/no-this-before-super.js +++ b/eslint/lib/rules/no-this-before-super.js @@ -40,7 +40,7 @@ module.exports = { type: "problem", docs: { - description: "disallow `this`/`super` before calling `super()` in constructors", + description: "Disallow `this`/`super` before calling `super()` in constructors", recommended: true, url: "https://eslint.org/docs/rules/no-this-before-super" }, diff --git a/eslint/lib/rules/no-throw-literal.js b/eslint/lib/rules/no-throw-literal.js index c670ed9..3656c83 100644 --- a/eslint/lib/rules/no-throw-literal.js +++ b/eslint/lib/rules/no-throw-literal.js @@ -17,7 +17,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow throwing literals as exceptions", + description: "Disallow throwing literals as exceptions", recommended: false, url: "https://eslint.org/docs/rules/no-throw-literal" }, diff --git a/eslint/lib/rules/no-trailing-spaces.js b/eslint/lib/rules/no-trailing-spaces.js index 9e720ad..a02a880 100644 --- a/eslint/lib/rules/no-trailing-spaces.js +++ b/eslint/lib/rules/no-trailing-spaces.js @@ -20,7 +20,7 @@ module.exports = { type: "layout", docs: { - description: "disallow trailing whitespace at the end of lines", + description: "Disallow trailing whitespace at the end of lines", recommended: false, url: "https://eslint.org/docs/rules/no-trailing-spaces" }, diff --git a/eslint/lib/rules/no-undef-init.js b/eslint/lib/rules/no-undef-init.js index 2c2204c..2cb1c3f 100644 --- a/eslint/lib/rules/no-undef-init.js +++ b/eslint/lib/rules/no-undef-init.js @@ -17,7 +17,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow initializing variables to `undefined`", + description: "Disallow initializing variables to `undefined`", recommended: false, url: "https://eslint.org/docs/rules/no-undef-init" }, diff --git a/eslint/lib/rules/no-undef.js b/eslint/lib/rules/no-undef.js index f659032..e920ce6 100644 --- a/eslint/lib/rules/no-undef.js +++ b/eslint/lib/rules/no-undef.js @@ -29,7 +29,7 @@ module.exports = { type: "problem", docs: { - description: "disallow the use of undeclared variables unless mentioned in `/*global */` comments", + description: "Disallow the use of undeclared variables unless mentioned in `/*global */` comments", recommended: true, url: "https://eslint.org/docs/rules/no-undef" }, diff --git a/eslint/lib/rules/no-undefined.js b/eslint/lib/rules/no-undefined.js index de396d8..e006320 100644 --- a/eslint/lib/rules/no-undefined.js +++ b/eslint/lib/rules/no-undefined.js @@ -14,7 +14,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow the use of `undefined` as an identifier", + description: "Disallow the use of `undefined` as an identifier", recommended: false, url: "https://eslint.org/docs/rules/no-undefined" }, diff --git a/eslint/lib/rules/no-underscore-dangle.js b/eslint/lib/rules/no-underscore-dangle.js index 0ab41fe..eb3e404 100644 --- a/eslint/lib/rules/no-underscore-dangle.js +++ b/eslint/lib/rules/no-underscore-dangle.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow dangling underscores in identifiers", + description: "Disallow dangling underscores in identifiers", recommended: false, url: "https://eslint.org/docs/rules/no-underscore-dangle" }, @@ -49,6 +49,10 @@ module.exports = { allowFunctionParams: { type: "boolean", default: true + }, + enforceInClassFields: { + type: "boolean", + default: false } }, additionalProperties: false @@ -68,6 +72,7 @@ module.exports = { const allowAfterSuper = typeof options.allowAfterSuper !== "undefined" ? options.allowAfterSuper : false; const allowAfterThisConstructor = typeof options.allowAfterThisConstructor !== "undefined" ? options.allowAfterThisConstructor : false; const enforceInMethodNames = typeof options.enforceInMethodNames !== "undefined" ? options.enforceInMethodNames : false; + const enforceInClassFields = typeof options.enforceInClassFields !== "undefined" ? options.enforceInClassFields : false; const allowFunctionParams = typeof options.allowFunctionParams !== "undefined" ? options.allowFunctionParams : true; //------------------------------------------------------------------------- @@ -81,7 +86,7 @@ module.exports = { * @private */ function isAllowed(identifier) { - return ALLOWED_VARIABLES.some(ident => ident === identifier); + return ALLOWED_VARIABLES.includes(identifier); } /** @@ -261,6 +266,30 @@ module.exports = { } } + /** + * Check if a class field has a dangling underscore + * @param {ASTNode} node node to evaluate + * @returns {void} + * @private + */ + function checkForDanglingUnderscoreInClassField(node) { + const identifier = node.key.name; + + if (typeof identifier !== "undefined" && hasDanglingUnderscore(identifier) && + enforceInClassFields && + !isAllowed(identifier)) { + context.report({ + node, + messageId: "unexpectedUnderscore", + data: { + identifier: node.key.type === "PrivateIdentifier" + ? `#${identifier}` + : identifier + } + }); + } + } + //-------------------------------------------------------------------------- // Public API //-------------------------------------------------------------------------- @@ -270,7 +299,7 @@ module.exports = { VariableDeclarator: checkForDanglingUnderscoreInVariableExpression, MemberExpression: checkForDanglingUnderscoreInMemberExpression, MethodDefinition: checkForDanglingUnderscoreInMethod, - PropertyDefinition: checkForDanglingUnderscoreInMethod, + PropertyDefinition: checkForDanglingUnderscoreInClassField, Property: checkForDanglingUnderscoreInMethod, FunctionExpression: checkForDanglingUnderscoreInFunction, ArrowFunctionExpression: checkForDanglingUnderscoreInFunction diff --git a/eslint/lib/rules/no-unexpected-multiline.js b/eslint/lib/rules/no-unexpected-multiline.js index 60d8f31..2ca6731 100644 --- a/eslint/lib/rules/no-unexpected-multiline.js +++ b/eslint/lib/rules/no-unexpected-multiline.js @@ -20,7 +20,7 @@ module.exports = { type: "problem", docs: { - description: "disallow confusing multiline expressions", + description: "Disallow confusing multiline expressions", recommended: true, url: "https://eslint.org/docs/rules/no-unexpected-multiline" }, diff --git a/eslint/lib/rules/no-unmodified-loop-condition.js b/eslint/lib/rules/no-unmodified-loop-condition.js index 5b8da26..12f61e9 100644 --- a/eslint/lib/rules/no-unmodified-loop-condition.js +++ b/eslint/lib/rules/no-unmodified-loop-condition.js @@ -162,7 +162,7 @@ module.exports = { type: "problem", docs: { - description: "disallow unmodified loop conditions", + description: "Disallow unmodified loop conditions", recommended: false, url: "https://eslint.org/docs/rules/no-unmodified-loop-condition" }, diff --git a/eslint/lib/rules/no-unneeded-ternary.js b/eslint/lib/rules/no-unneeded-ternary.js index e00d527..c193282 100644 --- a/eslint/lib/rules/no-unneeded-ternary.js +++ b/eslint/lib/rules/no-unneeded-ternary.js @@ -29,7 +29,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow ternary operators when simpler alternatives exist", + description: "Disallow ternary operators when simpler alternatives exist", recommended: false, url: "https://eslint.org/docs/rules/no-unneeded-ternary" }, diff --git a/eslint/lib/rules/no-unreachable-loop.js b/eslint/lib/rules/no-unreachable-loop.js index f100263..c42c922 100644 --- a/eslint/lib/rules/no-unreachable-loop.js +++ b/eslint/lib/rules/no-unreachable-loop.js @@ -59,7 +59,7 @@ module.exports = { type: "problem", docs: { - description: "disallow loops with a body that allows only one iteration", + description: "Disallow loops with a body that allows only one iteration", recommended: false, url: "https://eslint.org/docs/rules/no-unreachable-loop" }, diff --git a/eslint/lib/rules/no-unreachable.js b/eslint/lib/rules/no-unreachable.js index 4dda51f..dea8681 100644 --- a/eslint/lib/rules/no-unreachable.js +++ b/eslint/lib/rules/no-unreachable.js @@ -111,7 +111,7 @@ module.exports = { type: "problem", docs: { - description: "disallow unreachable code after `return`, `throw`, `continue`, and `break` statements", + description: "Disallow unreachable code after `return`, `throw`, `continue`, and `break` statements", recommended: true, url: "https://eslint.org/docs/rules/no-unreachable" }, diff --git a/eslint/lib/rules/no-unsafe-finally.js b/eslint/lib/rules/no-unsafe-finally.js index 26c05ea..80adb0f 100644 --- a/eslint/lib/rules/no-unsafe-finally.js +++ b/eslint/lib/rules/no-unsafe-finally.js @@ -24,7 +24,7 @@ module.exports = { type: "problem", docs: { - description: "disallow control flow statements in `finally` blocks", + description: "Disallow control flow statements in `finally` blocks", recommended: true, url: "https://eslint.org/docs/rules/no-unsafe-finally" }, diff --git a/eslint/lib/rules/no-unsafe-negation.js b/eslint/lib/rules/no-unsafe-negation.js index 057b174..5dd150f 100644 --- a/eslint/lib/rules/no-unsafe-negation.js +++ b/eslint/lib/rules/no-unsafe-negation.js @@ -52,7 +52,7 @@ module.exports = { type: "problem", docs: { - description: "disallow negating the left operand of relational operators", + description: "Disallow negating the left operand of relational operators", recommended: true, url: "https://eslint.org/docs/rules/no-unsafe-negation" }, diff --git a/eslint/lib/rules/no-unsafe-optional-chaining.js b/eslint/lib/rules/no-unsafe-optional-chaining.js index 8556ccb..9913907 100644 --- a/eslint/lib/rules/no-unsafe-optional-chaining.js +++ b/eslint/lib/rules/no-unsafe-optional-chaining.js @@ -24,7 +24,7 @@ module.exports = { type: "problem", docs: { - description: "disallow use of optional chaining in contexts where the `undefined` value is not allowed", + description: "Disallow use of optional chaining in contexts where the `undefined` value is not allowed", recommended: true, url: "https://eslint.org/docs/rules/no-unsafe-optional-chaining" }, diff --git a/eslint/lib/rules/no-unused-expressions.js b/eslint/lib/rules/no-unused-expressions.js index 68a7ebd..d34d584 100644 --- a/eslint/lib/rules/no-unused-expressions.js +++ b/eslint/lib/rules/no-unused-expressions.js @@ -30,7 +30,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow unused expressions", + description: "Disallow unused expressions", recommended: false, url: "https://eslint.org/docs/rules/no-unused-expressions" }, @@ -124,7 +124,7 @@ module.exports = { */ return (parent.type === "Program" || parent.type === "BlockStatement" && (/Function/u.test(grandparent.type))) && - directives(parent).indexOf(node) >= 0; + directives(parent).includes(node); } /** diff --git a/eslint/lib/rules/no-unused-labels.js b/eslint/lib/rules/no-unused-labels.js index f309dd1..305226a 100644 --- a/eslint/lib/rules/no-unused-labels.js +++ b/eslint/lib/rules/no-unused-labels.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow unused labels", + description: "Disallow unused labels", recommended: true, url: "https://eslint.org/docs/rules/no-unused-labels" }, diff --git a/eslint/lib/rules/no-unused-private-class-members.js b/eslint/lib/rules/no-unused-private-class-members.js index 754c360..e62a9ed 100644 --- a/eslint/lib/rules/no-unused-private-class-members.js +++ b/eslint/lib/rules/no-unused-private-class-members.js @@ -15,7 +15,7 @@ module.exports = { type: "problem", docs: { - description: "disallow unused private class members", + description: "Disallow unused private class members", recommended: false, url: "https://eslint.org/docs/rules/no-unused-private-class-members" }, diff --git a/eslint/lib/rules/no-unused-vars.js b/eslint/lib/rules/no-unused-vars.js index eaf7a8b..778889a 100644 --- a/eslint/lib/rules/no-unused-vars.js +++ b/eslint/lib/rules/no-unused-vars.js @@ -33,7 +33,7 @@ module.exports = { type: "problem", docs: { - description: "disallow unused variables", + description: "Disallow unused variables", recommended: true, url: "https://eslint.org/docs/rules/no-unused-vars" }, @@ -67,6 +67,9 @@ module.exports = { }, caughtErrorsIgnorePattern: { type: "string" + }, + destructuredArrayIgnorePattern: { + type: "string" } }, additionalProperties: false @@ -114,6 +117,10 @@ module.exports = { if (firstOption.caughtErrorsIgnorePattern) { config.caughtErrorsIgnorePattern = new RegExp(firstOption.caughtErrorsIgnorePattern, "u"); } + + if (firstOption.destructuredArrayIgnorePattern) { + config.destructuredArrayIgnorePattern = new RegExp(firstOption.destructuredArrayIgnorePattern, "u"); + } } } @@ -155,7 +162,14 @@ module.exports = { * @returns {UnusedVarMessageData} The message data to be used with this unused variable. */ function getAssignedMessageData(unusedVar) { - const additional = config.varsIgnorePattern ? `. Allowed unused vars must match ${config.varsIgnorePattern.toString()}` : ""; + const def = unusedVar.defs[0]; + let additional = ""; + + if (config.destructuredArrayIgnorePattern && def && def.name.parent.type === "ArrayPattern") { + additional = `. Allowed unused elements of array destructuring patterns must match ${config.destructuredArrayIgnorePattern.toString()}`; + } else if (config.varsIgnorePattern) { + additional = `. Allowed unused vars must match ${config.varsIgnorePattern.toString()}`; + } return { varName: unusedVar.name, @@ -245,7 +259,7 @@ module.exports = { let scope = ref.from; while (scope) { - if (nodes.indexOf(scope.block) >= 0) { + if (nodes.includes(scope.block)) { return true; } @@ -470,12 +484,12 @@ module.exports = { } /** - * Determine if an identifier is used either in for-in loops. + * Determine if an identifier is used either in for-in or for-of loops. * @param {Reference} ref The reference to check. * @returns {boolean} whether reference is used in the for-in loops * @private */ - function isForInRef(ref) { + function isForInOfRef(ref) { let target = ref.identifier.parent; @@ -484,7 +498,7 @@ module.exports = { target = target.parent.parent; } - if (target.type !== "ForInStatement") { + if (target.type !== "ForInStatement" && target.type !== "ForOfStatement") { return false; } @@ -517,7 +531,7 @@ module.exports = { let rhsNode = null; return variable.references.some(ref => { - if (isForInRef(ref)) { + if (isForInOfRef(ref)) { return true; } @@ -584,6 +598,19 @@ module.exports = { if (def) { const type = def.type; + const refUsedInArrayPatterns = variable.references.some(ref => ref.identifier.parent.type === "ArrayPattern"); + + // skip elements of array destructuring patterns + if ( + ( + def.name.parent.type === "ArrayPattern" || + refUsedInArrayPatterns + ) && + config.destructuredArrayIgnorePattern && + config.destructuredArrayIgnorePattern.test(def.name.name) + ) { + continue; + } // skip catch variables if (type === "CatchClause") { diff --git a/eslint/lib/rules/no-use-before-define.js b/eslint/lib/rules/no-use-before-define.js index 07d035c..592c083 100644 --- a/eslint/lib/rules/no-use-before-define.js +++ b/eslint/lib/rules/no-use-before-define.js @@ -21,6 +21,7 @@ function parseOptions(options) { let functions = true; let classes = true; let variables = true; + let allowNamedExports = false; if (typeof options === "string") { functions = (options !== "nofunc"); @@ -28,9 +29,10 @@ function parseOptions(options) { functions = options.functions !== false; classes = options.classes !== false; variables = options.variables !== false; + allowNamedExports = !!options.allowNamedExports; } - return { functions, classes, variables }; + return { functions, classes, variables, allowNamedExports }; } /** @@ -224,7 +226,7 @@ module.exports = { type: "problem", docs: { - description: "disallow the use of variables before they are defined", + description: "Disallow the use of variables before they are defined", recommended: false, url: "https://eslint.org/docs/rules/no-use-before-define" }, @@ -240,7 +242,8 @@ module.exports = { properties: { functions: { type: "boolean" }, classes: { type: "boolean" }, - variables: { type: "boolean" } + variables: { type: "boolean" }, + allowNamedExports: { type: "boolean" } }, additionalProperties: false } @@ -273,6 +276,16 @@ module.exports = { return false; } + const { identifier } = reference; + + if ( + options.allowNamedExports && + identifier.parent.type === "ExportSpecifier" && + identifier.parent.local === identifier + ) { + return false; + } + const variable = reference.resolved; if (!variable || variable.defs.length === 0) { diff --git a/eslint/lib/rules/no-useless-backreference.js b/eslint/lib/rules/no-useless-backreference.js index 1a09988..f23535b 100644 --- a/eslint/lib/rules/no-useless-backreference.js +++ b/eslint/lib/rules/no-useless-backreference.js @@ -64,7 +64,7 @@ module.exports = { type: "problem", docs: { - description: "disallow useless backreferences in regular expressions", + description: "Disallow useless backreferences in regular expressions", recommended: true, url: "https://eslint.org/docs/rules/no-useless-backreference" }, diff --git a/eslint/lib/rules/no-useless-call.js b/eslint/lib/rules/no-useless-call.js index 8c57cd5..2d3ae4e 100644 --- a/eslint/lib/rules/no-useless-call.js +++ b/eslint/lib/rules/no-useless-call.js @@ -55,7 +55,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow unnecessary calls to `.call()` and `.apply()`", + description: "Disallow unnecessary calls to `.call()` and `.apply()`", recommended: false, url: "https://eslint.org/docs/rules/no-useless-call" }, diff --git a/eslint/lib/rules/no-useless-catch.js b/eslint/lib/rules/no-useless-catch.js index 325a2e5..36c356e 100644 --- a/eslint/lib/rules/no-useless-catch.js +++ b/eslint/lib/rules/no-useless-catch.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow unnecessary `catch` clauses", + description: "Disallow unnecessary `catch` clauses", recommended: true, url: "https://eslint.org/docs/rules/no-useless-catch" }, diff --git a/eslint/lib/rules/no-useless-computed-key.js b/eslint/lib/rules/no-useless-computed-key.js index 7ebbe09..f7f1217 100644 --- a/eslint/lib/rules/no-useless-computed-key.js +++ b/eslint/lib/rules/no-useless-computed-key.js @@ -74,7 +74,7 @@ function hasUselessComputedKey(node) { return value !== "constructor"; - /* istanbul ignore next */ + /* c8 ignore next */ default: throw new Error(`Unexpected node type: ${node.type}`); } @@ -91,7 +91,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow unnecessary computed property keys in objects and classes", + description: "Disallow unnecessary computed property keys in objects and classes", recommended: false, url: "https://eslint.org/docs/rules/no-useless-computed-key" }, diff --git a/eslint/lib/rules/no-useless-concat.js b/eslint/lib/rules/no-useless-concat.js index 36ca84f..26c5206 100644 --- a/eslint/lib/rules/no-useless-concat.js +++ b/eslint/lib/rules/no-useless-concat.js @@ -70,7 +70,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow unnecessary concatenation of literals or template literals", + description: "Disallow unnecessary concatenation of literals or template literals", recommended: false, url: "https://eslint.org/docs/rules/no-useless-concat" }, diff --git a/eslint/lib/rules/no-useless-constructor.js b/eslint/lib/rules/no-useless-constructor.js index 6512c8b..38c3bc3 100644 --- a/eslint/lib/rules/no-useless-constructor.js +++ b/eslint/lib/rules/no-useless-constructor.js @@ -138,7 +138,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow unnecessary constructors", + description: "Disallow unnecessary constructors", recommended: false, url: "https://eslint.org/docs/rules/no-useless-constructor" }, diff --git a/eslint/lib/rules/no-useless-escape.js b/eslint/lib/rules/no-useless-escape.js index 123bc5b..2046a14 100644 --- a/eslint/lib/rules/no-useless-escape.js +++ b/eslint/lib/rules/no-useless-escape.js @@ -84,7 +84,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow unnecessary escape characters", + description: "Disallow unnecessary escape characters", recommended: true, url: "https://eslint.org/docs/rules/no-useless-escape" }, diff --git a/eslint/lib/rules/no-useless-rename.js b/eslint/lib/rules/no-useless-rename.js index 616ec2a..908605f 100644 --- a/eslint/lib/rules/no-useless-rename.js +++ b/eslint/lib/rules/no-useless-rename.js @@ -21,7 +21,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow renaming import, export, and destructured assignments to the same name", + description: "Disallow renaming import, export, and destructured assignments to the same name", recommended: false, url: "https://eslint.org/docs/rules/no-useless-rename" }, @@ -132,8 +132,10 @@ module.exports = { return; } - if (node.imported.name === node.local.name && - node.imported.range[0] !== node.local.range[0]) { + if ( + node.imported.range[0] !== node.local.range[0] && + astUtils.getModuleExportName(node.imported) === node.local.name + ) { reportError(node, node.imported, "Import"); } } @@ -148,8 +150,10 @@ module.exports = { return; } - if (node.local.name === node.exported.name && - node.local.range[0] !== node.exported.range[0]) { + if ( + node.local.range[0] !== node.exported.range[0] && + astUtils.getModuleExportName(node.local) === astUtils.getModuleExportName(node.exported) + ) { reportError(node, node.local, "Export"); } diff --git a/eslint/lib/rules/no-useless-return.js b/eslint/lib/rules/no-useless-return.js index 0baa6b2..be8d4df 100644 --- a/eslint/lib/rules/no-useless-return.js +++ b/eslint/lib/rules/no-useless-return.js @@ -67,7 +67,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow redundant return statements", + description: "Disallow redundant return statements", recommended: false, url: "https://eslint.org/docs/rules/no-useless-return" }, diff --git a/eslint/lib/rules/no-var.js b/eslint/lib/rules/no-var.js index 83a1f62..cfb64ef 100644 --- a/eslint/lib/rules/no-var.js +++ b/eslint/lib/rules/no-var.js @@ -90,7 +90,7 @@ function getScopeNode(node) { } } - /* istanbul ignore next : unreachable */ + /* c8 ignore next */ return null; } @@ -185,7 +185,7 @@ module.exports = { type: "suggestion", docs: { - description: "require `let` or `const` instead of `var`", + description: "Require `let` or `const` instead of `var`", recommended: false, url: "https://eslint.org/docs/rules/no-var" }, diff --git a/eslint/lib/rules/no-void.js b/eslint/lib/rules/no-void.js index 8631caf..15c4730 100644 --- a/eslint/lib/rules/no-void.js +++ b/eslint/lib/rules/no-void.js @@ -14,7 +14,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow `void` operators", + description: "Disallow `void` operators", recommended: false, url: "https://eslint.org/docs/rules/no-void" }, diff --git a/eslint/lib/rules/no-warning-comments.js b/eslint/lib/rules/no-warning-comments.js index 5f3ea21..9754f50 100644 --- a/eslint/lib/rules/no-warning-comments.js +++ b/eslint/lib/rules/no-warning-comments.js @@ -20,7 +20,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow specified warning terms in comments", + description: "Disallow specified warning terms in comments", recommended: false, url: "https://eslint.org/docs/rules/no-warning-comments" }, @@ -37,6 +37,15 @@ module.exports = { }, location: { enum: ["start", "anywhere"] + }, + decoration: { + type: "array", + items: { + type: "string", + pattern: "^\\S$" + }, + minItems: 1, + uniqueItems: true } }, additionalProperties: false @@ -53,6 +62,7 @@ module.exports = { configuration = context.options[0] || {}, warningTerms = configuration.terms || ["todo", "fixme", "xxx"], location = configuration.location || "start", + decoration = [...configuration.decoration || []].join(""), selfConfigRegEx = /\bno-warning-comments\b/u; /** @@ -64,59 +74,54 @@ module.exports = { */ function convertToRegExp(term) { const escaped = escapeRegExp(term); - const wordBoundary = "\\b"; - const eitherOrWordBoundary = `|${wordBoundary}`; - let prefix; + const escapedDecoration = escapeRegExp(decoration); /* - * If the term ends in a word character (a-z0-9_), ensure a word - * boundary at the end, so that substrings do not get falsely - * matched. eg "todo" in a string such as "mastodon". - * If the term ends in a non-word character, then \b won't match on - * the boundary to the next non-word character, which would likely - * be a space. For example `/\bFIX!\b/.test('FIX! blah') === false`. - * In these cases, use no bounding match. Same applies for the - * prefix, handled below. + * When matching at the start, ignore leading whitespace, and + * there's no need to worry about word boundaries. + * + * These expressions for the prefix and suffix are designed as follows: + * ^ handles any terms at the beginning of a comment. + * e.g. terms ["TODO"] matches `//TODO something` + * $ handles any terms at the end of a comment + * e.g. terms ["TODO"] matches `// something TODO` + * \b handles terms preceded/followed by word boundary + * e.g. terms: ["!FIX", "FIX!"] matches `// FIX!something` or `// something!FIX` + * terms: ["FIX"] matches `// FIX!` or `// !FIX`, but not `// fixed or affix` + * + * For location start: + * [\s]* handles optional leading spaces + * e.g. terms ["TODO"] matches `// TODO something` + * [\s\*]* (where "\*" is the escaped string of decoration) + * handles optional leading spaces or decoration characters (for "start" location only) + * e.g. terms ["TODO"] matches `/**** TODO something ... ` */ - const suffix = /\w$/u.test(term) ? "\\b" : ""; + const wordBoundary = "\\b"; - if (location === "start") { + let prefix = ""; - /* - * When matching at the start, ignore leading whitespace, and - * there's no need to worry about word boundaries. - */ - prefix = "^\\s*"; + if (location === "start") { + prefix = `^[\\s${escapedDecoration}]*`; } else if (/^\w/u.test(term)) { prefix = wordBoundary; - } else { - prefix = ""; } - if (location === "start") { - - /* - * For location "start" the regex should be - * ^\s*TERM\b. This checks the word boundary - * at the beginning of the comment. - */ - return new RegExp(prefix + escaped + suffix, "iu"); - } + const suffix = /\w$/u.test(term) ? wordBoundary : ""; + const flags = "iu"; // Case-insensitive with Unicode case folding. /* - * For location "anywhere" the regex should be - * \bTERM\b|\bTERM\b, this checks the entire comment - * for the term. + * For location "start", the typical regex is: + * /^[\s]*ESCAPED_TERM\b/iu. + * Or if decoration characters are specified (e.g. "*"), then any of + * those characters may appear in any order at the start: + * /^[\s\*]*ESCAPED_TERM\b/iu. + * + * For location "anywhere" the typical regex is + * /\bESCAPED_TERM\b/iu + * + * If it starts or ends with non-word character, the prefix and suffix are empty, respectively. */ - return new RegExp( - prefix + - escaped + - suffix + - eitherOrWordBoundary + - term + - wordBoundary, - "iu" - ); + return new RegExp(`${prefix}${escaped}${suffix}`, flags); } const warningRegExps = warningTerms.map(convertToRegExp); diff --git a/eslint/lib/rules/no-whitespace-before-property.js b/eslint/lib/rules/no-whitespace-before-property.js index 95e920f..6732381 100644 --- a/eslint/lib/rules/no-whitespace-before-property.js +++ b/eslint/lib/rules/no-whitespace-before-property.js @@ -20,7 +20,7 @@ module.exports = { type: "layout", docs: { - description: "disallow whitespace before properties", + description: "Disallow whitespace before properties", recommended: false, url: "https://eslint.org/docs/rules/no-whitespace-before-property" }, diff --git a/eslint/lib/rules/no-with.js b/eslint/lib/rules/no-with.js index fc93f19..33de68d 100644 --- a/eslint/lib/rules/no-with.js +++ b/eslint/lib/rules/no-with.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow `with` statements", + description: "Disallow `with` statements", recommended: true, url: "https://eslint.org/docs/rules/no-with" }, diff --git a/eslint/lib/rules/nonblock-statement-body-position.js b/eslint/lib/rules/nonblock-statement-body-position.js index c177cf3..cefecf3 100644 --- a/eslint/lib/rules/nonblock-statement-body-position.js +++ b/eslint/lib/rules/nonblock-statement-body-position.js @@ -16,7 +16,7 @@ module.exports = { type: "layout", docs: { - description: "enforce the location of single-line statements", + description: "Enforce the location of single-line statements", recommended: false, url: "https://eslint.org/docs/rules/nonblock-statement-body-position" }, diff --git a/eslint/lib/rules/object-curly-newline.js b/eslint/lib/rules/object-curly-newline.js index e052cd8..2f80049 100644 --- a/eslint/lib/rules/object-curly-newline.js +++ b/eslint/lib/rules/object-curly-newline.js @@ -150,7 +150,7 @@ module.exports = { type: "layout", docs: { - description: "enforce consistent line breaks after opening and before closing braces", + description: "Enforce consistent line breaks after opening and before closing braces", recommended: false, url: "https://eslint.org/docs/rules/object-curly-newline" }, diff --git a/eslint/lib/rules/object-curly-spacing.js b/eslint/lib/rules/object-curly-spacing.js index 9122da3..d6a8e59 100644 --- a/eslint/lib/rules/object-curly-spacing.js +++ b/eslint/lib/rules/object-curly-spacing.js @@ -16,7 +16,7 @@ module.exports = { type: "layout", docs: { - description: "enforce consistent spacing inside braces", + description: "Enforce consistent spacing inside braces", recommended: false, url: "https://eslint.org/docs/rules/object-curly-spacing" }, diff --git a/eslint/lib/rules/object-property-newline.js b/eslint/lib/rules/object-property-newline.js index dac084c..bc079a1 100644 --- a/eslint/lib/rules/object-property-newline.js +++ b/eslint/lib/rules/object-property-newline.js @@ -15,7 +15,7 @@ module.exports = { type: "layout", docs: { - description: "enforce placing object properties on separate lines", + description: "Enforce placing object properties on separate lines", recommended: false, url: "https://eslint.org/docs/rules/object-property-newline" }, diff --git a/eslint/lib/rules/object-shorthand.js b/eslint/lib/rules/object-shorthand.js index aa03450..b755aea 100644 --- a/eslint/lib/rules/object-shorthand.js +++ b/eslint/lib/rules/object-shorthand.js @@ -28,7 +28,7 @@ module.exports = { type: "suggestion", docs: { - description: "require or disallow method and property shorthand syntax for object literals", + description: "Require or disallow method and property shorthand syntax for object literals", recommended: false, url: "https://eslint.org/docs/rules/object-shorthand" }, @@ -78,6 +78,9 @@ module.exports = { ignoreConstructors: { type: "boolean" }, + methodsIgnorePattern: { + type: "string" + }, avoidQuotes: { type: "boolean" }, @@ -115,6 +118,9 @@ module.exports = { const PARAMS = context.options[1] || {}; const IGNORE_CONSTRUCTORS = PARAMS.ignoreConstructors; + const METHODS_IGNORE_PATTERN = PARAMS.methodsIgnorePattern + ? new RegExp(PARAMS.methodsIgnorePattern, "u") + : null; const AVOID_QUOTES = PARAMS.avoidQuotes; const AVOID_EXPLICIT_RETURN_ARROWS = !!PARAMS.avoidExplicitReturnArrows; const sourceCode = context.getSourceCode(); @@ -457,6 +463,15 @@ module.exports = { if (IGNORE_CONSTRUCTORS && node.key.type === "Identifier" && isConstructor(node.key.name)) { return; } + + if (METHODS_IGNORE_PATTERN) { + const propertyName = astUtils.getStaticPropertyName(node); + + if (propertyName !== null && METHODS_IGNORE_PATTERN.test(propertyName)) { + return; + } + } + if (AVOID_QUOTES && isStringLiteral(node.key)) { return; } diff --git a/eslint/lib/rules/one-var-declaration-per-line.js b/eslint/lib/rules/one-var-declaration-per-line.js index 440146b..65be092 100644 --- a/eslint/lib/rules/one-var-declaration-per-line.js +++ b/eslint/lib/rules/one-var-declaration-per-line.js @@ -14,7 +14,7 @@ module.exports = { type: "suggestion", docs: { - description: "require or disallow newlines around variable declarations", + description: "Require or disallow newlines around variable declarations", recommended: false, url: "https://eslint.org/docs/rules/one-var-declaration-per-line" }, diff --git a/eslint/lib/rules/one-var.js b/eslint/lib/rules/one-var.js index 1818c02..a8e2a1d 100644 --- a/eslint/lib/rules/one-var.js +++ b/eslint/lib/rules/one-var.js @@ -34,7 +34,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce variables to be declared either together or separately in functions", + description: "Enforce variables to be declared either together or separately in functions", recommended: false, url: "https://eslint.org/docs/rules/one-var" }, diff --git a/eslint/lib/rules/operator-assignment.js b/eslint/lib/rules/operator-assignment.js index d200811..ed9cb96 100644 --- a/eslint/lib/rules/operator-assignment.js +++ b/eslint/lib/rules/operator-assignment.js @@ -22,7 +22,7 @@ const astUtils = require("./utils/ast-utils"); * shorthand form. */ function isCommutativeOperatorWithShorthand(operator) { - return ["*", "&", "^", "|"].indexOf(operator) >= 0; + return ["*", "&", "^", "|"].includes(operator); } /** @@ -33,7 +33,7 @@ function isCommutativeOperatorWithShorthand(operator) { * a shorthand form. */ function isNonCommutativeOperatorWithShorthand(operator) { - return ["+", "-", "/", "%", "<<", ">>", ">>>", "**"].indexOf(operator) >= 0; + return ["+", "-", "/", "%", "<<", ">>", ">>>", "**"].includes(operator); } //------------------------------------------------------------------------------ @@ -63,7 +63,7 @@ module.exports = { type: "suggestion", docs: { - description: "require or disallow assignment operator shorthand where possible", + description: "Require or disallow assignment operator shorthand where possible", recommended: false, url: "https://eslint.org/docs/rules/operator-assignment" }, @@ -76,8 +76,8 @@ module.exports = { fixable: "code", messages: { - replaced: "Assignment (=) can be replaced with operator assignment ({{operator}}=).", - unexpected: "Unexpected operator assignment ({{operator}}=) shorthand." + replaced: "Assignment (=) can be replaced with operator assignment ({{operator}}).", + unexpected: "Unexpected operator assignment ({{operator}}) shorthand." } }, @@ -109,11 +109,13 @@ module.exports = { const operator = expr.operator; if (isCommutativeOperatorWithShorthand(operator) || isNonCommutativeOperatorWithShorthand(operator)) { + const replacementOperator = `${operator}=`; + if (astUtils.isSameReference(left, expr.left, true)) { context.report({ node, messageId: "replaced", - data: { operator }, + data: { operator: replacementOperator }, fix(fixer) { if (canBeFixed(left) && canBeFixed(expr.left)) { const equalsToken = getOperatorToken(node); @@ -126,7 +128,7 @@ module.exports = { return null; } - return fixer.replaceText(node, `${leftText}${expr.operator}=${rightText}`); + return fixer.replaceText(node, `${leftText}${replacementOperator}${rightText}`); } return null; } @@ -141,7 +143,7 @@ module.exports = { context.report({ node, messageId: "replaced", - data: { operator } + data: { operator: replacementOperator } }); } } diff --git a/eslint/lib/rules/operator-linebreak.js b/eslint/lib/rules/operator-linebreak.js index a04f85b..03b603e 100644 --- a/eslint/lib/rules/operator-linebreak.js +++ b/eslint/lib/rules/operator-linebreak.js @@ -21,7 +21,7 @@ module.exports = { type: "layout", docs: { - description: "enforce consistent linebreak style for operators", + description: "Enforce consistent linebreak style for operators", recommended: false, url: "https://eslint.org/docs/rules/operator-linebreak" }, diff --git a/eslint/lib/rules/padded-blocks.js b/eslint/lib/rules/padded-blocks.js index 336adac..bc19428 100644 --- a/eslint/lib/rules/padded-blocks.js +++ b/eslint/lib/rules/padded-blocks.js @@ -21,7 +21,7 @@ module.exports = { type: "layout", docs: { - description: "require or disallow padding within blocks", + description: "Require or disallow padding within blocks", recommended: false, url: "https://eslint.org/docs/rules/padded-blocks" }, @@ -186,7 +186,7 @@ module.exports = { case "ClassBody": return options.classes; - /* istanbul ignore next */ + /* c8 ignore next */ default: throw new Error("unreachable"); } diff --git a/eslint/lib/rules/padding-line-between-statements.js b/eslint/lib/rules/padding-line-between-statements.js index fe5d304..9d730bf 100644 --- a/eslint/lib/rules/padding-line-between-statements.js +++ b/eslint/lib/rules/padding-line-between-statements.js @@ -431,7 +431,7 @@ module.exports = { type: "layout", docs: { - description: "require or disallow padding lines between statements", + description: "Require or disallow padding lines between statements", recommended: false, url: "https://eslint.org/docs/rules/padding-line-between-statements" }, @@ -450,8 +450,7 @@ module.exports = { type: "array", items: { enum: Object.keys(StatementTypes) }, minItems: 1, - uniqueItems: true, - additionalItems: false + uniqueItems: true } ] } @@ -466,8 +465,7 @@ module.exports = { }, additionalProperties: false, required: ["blankLine", "prev", "next"] - }, - additionalItems: false + } }, messages: { diff --git a/eslint/lib/rules/prefer-arrow-callback.js b/eslint/lib/rules/prefer-arrow-callback.js index 55a098a..8af7161 100644 --- a/eslint/lib/rules/prefer-arrow-callback.js +++ b/eslint/lib/rules/prefer-arrow-callback.js @@ -53,7 +53,7 @@ function getVariableOfArguments(scope) { } } - /* istanbul ignore next */ + /* c8 ignore next */ return null; } @@ -126,7 +126,7 @@ function getCallbackInfo(node) { parent = parent.parent; } - /* istanbul ignore next */ + /* c8 ignore next */ throw new Error("unreachable"); } @@ -151,7 +151,7 @@ module.exports = { type: "suggestion", docs: { - description: "require using arrow functions for callbacks", + description: "Require using arrow functions for callbacks", recommended: false, url: "https://eslint.org/docs/rules/prefer-arrow-callback" }, diff --git a/eslint/lib/rules/prefer-const.js b/eslint/lib/rules/prefer-const.js index 1908600..e3d2db7 100644 --- a/eslint/lib/rules/prefer-const.js +++ b/eslint/lib/rules/prefer-const.js @@ -60,7 +60,7 @@ function canBecomeVariableDeclaration(identifier) { */ function isOuterVariableInDestructing(name, initScope) { - if (initScope.through.find(ref => ref.resolved && ref.resolved.name === name)) { + if (initScope.through.some(ref => ref.resolved && ref.resolved.name === name)) { return true; } @@ -332,7 +332,7 @@ module.exports = { type: "suggestion", docs: { - description: "require `const` declarations for variables that are never reassigned after declared", + description: "Require `const` declarations for variables that are never reassigned after declared", recommended: false, url: "https://eslint.org/docs/rules/prefer-const" }, @@ -446,7 +446,19 @@ module.exports = { reportCount += nodesToReport.length; - shouldFix = shouldFix && (reportCount === varDeclParent.declarations.length); + let totalDeclarationsCount = 0; + + varDeclParent.declarations.forEach(declaration => { + if (declaration.id.type === "ObjectPattern") { + totalDeclarationsCount += declaration.id.properties.length; + } else if (declaration.id.type === "ArrayPattern") { + totalDeclarationsCount += declaration.id.elements.length; + } else { + totalDeclarationsCount += 1; + } + }); + + shouldFix = shouldFix && (reportCount === totalDeclarationsCount); } } diff --git a/eslint/lib/rules/prefer-destructuring.js b/eslint/lib/rules/prefer-destructuring.js index 1f68313..fdf46f6 100644 --- a/eslint/lib/rules/prefer-destructuring.js +++ b/eslint/lib/rules/prefer-destructuring.js @@ -26,7 +26,7 @@ module.exports = { type: "suggestion", docs: { - description: "require destructuring from arrays and/or objects", + description: "Require destructuring from arrays and/or objects", recommended: false, url: "https://eslint.org/docs/rules/prefer-destructuring" }, diff --git a/eslint/lib/rules/prefer-exponentiation-operator.js b/eslint/lib/rules/prefer-exponentiation-operator.js index a291e8d..fec5319 100644 --- a/eslint/lib/rules/prefer-exponentiation-operator.js +++ b/eslint/lib/rules/prefer-exponentiation-operator.js @@ -90,7 +90,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow the use of `Math.pow` in favor of the `**` operator", + description: "Disallow the use of `Math.pow` in favor of the `**` operator", recommended: false, url: "https://eslint.org/docs/rules/prefer-exponentiation-operator" }, diff --git a/eslint/lib/rules/prefer-named-capture-group.js b/eslint/lib/rules/prefer-named-capture-group.js index cff2d8f..1a13ffa 100644 --- a/eslint/lib/rules/prefer-named-capture-group.js +++ b/eslint/lib/rules/prefer-named-capture-group.js @@ -33,7 +33,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce using named capture group in regular expression", + description: "Enforce using named capture group in regular expression", recommended: false, url: "https://eslint.org/docs/rules/prefer-named-capture-group" }, diff --git a/eslint/lib/rules/prefer-numeric-literals.js b/eslint/lib/rules/prefer-numeric-literals.js index 53a5153..5f70158 100644 --- a/eslint/lib/rules/prefer-numeric-literals.js +++ b/eslint/lib/rules/prefer-numeric-literals.js @@ -45,7 +45,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow `parseInt()` and `Number.parseInt()` in favor of binary, octal, and hexadecimal literals", + description: "Disallow `parseInt()` and `Number.parseInt()` in favor of binary, octal, and hexadecimal literals", recommended: false, url: "https://eslint.org/docs/rules/prefer-numeric-literals" }, diff --git a/eslint/lib/rules/prefer-object-has-own.js b/eslint/lib/rules/prefer-object-has-own.js new file mode 100644 index 0000000..023d0a6 --- /dev/null +++ b/eslint/lib/rules/prefer-object-has-own.js @@ -0,0 +1,112 @@ +/** + * @fileoverview Prefers Object.hasOwn() instead of Object.prototype.hasOwnProperty.call() + * @author Nitin Kumar + * @author Gautam Arora + */ + +"use strict"; + +//------------------------------------------------------------------------------ +// Requirements +//------------------------------------------------------------------------------ + +const astUtils = require("./utils/ast-utils"); + +//------------------------------------------------------------------------------ +// Helpers +//------------------------------------------------------------------------------ + +/** + * Checks if the given node is considered to be an access to a property of `Object.prototype`. + * @param {ASTNode} node `MemberExpression` node to evaluate. + * @returns {boolean} `true` if `node.object` is `Object`, `Object.prototype`, or `{}` (empty 'ObjectExpression' node). + */ +function hasLeftHandObject(node) { + + /* + * ({}).hasOwnProperty.call(obj, prop) - `true` + * ({ foo }.hasOwnProperty.call(obj, prop)) - `false`, object literal should be empty + */ + if (node.object.type === "ObjectExpression" && node.object.properties.length === 0) { + return true; + } + + const objectNodeToCheck = node.object.type === "MemberExpression" && astUtils.getStaticPropertyName(node.object) === "prototype" ? node.object.object : node.object; + + if (objectNodeToCheck.type === "Identifier" && objectNodeToCheck.name === "Object") { + return true; + } + + return false; +} + +//------------------------------------------------------------------------------ +// Rule Definition +//------------------------------------------------------------------------------ + +/** @type {import('../shared/types').Rule} */ +module.exports = { + meta: { + type: "suggestion", + docs: { + description: + "Disallow use of `Object.prototype.hasOwnProperty.call()` and prefer use of `Object.hasOwn()`", + recommended: false, + url: "https://eslint.org/docs/rules/prefer-object-has-own" + }, + schema: [], + messages: { + useHasOwn: "Use 'Object.hasOwn()' instead of 'Object.prototype.hasOwnProperty.call()'." + }, + fixable: "code" + }, + create(context) { + return { + CallExpression(node) { + if (!(node.callee.type === "MemberExpression" && node.callee.object.type === "MemberExpression")) { + return; + } + + const calleePropertyName = astUtils.getStaticPropertyName(node.callee); + const objectPropertyName = astUtils.getStaticPropertyName(node.callee.object); + const isObject = hasLeftHandObject(node.callee.object); + + // check `Object` scope + const scope = context.getScope(); + const variable = astUtils.getVariableByName(scope, "Object"); + + if ( + calleePropertyName === "call" && + objectPropertyName === "hasOwnProperty" && + isObject && + variable && variable.scope.type === "global" + ) { + context.report({ + node, + messageId: "useHasOwn", + fix(fixer) { + const sourceCode = context.getSourceCode(); + + if (sourceCode.getCommentsInside(node.callee).length > 0) { + return null; + } + + const tokenJustBeforeNode = sourceCode.getTokenBefore(node.callee, { includeComments: true }); + + // for https://github.com/eslint/eslint/pull/15346#issuecomment-991417335 + if ( + tokenJustBeforeNode && + tokenJustBeforeNode.range[1] === node.callee.range[0] && + !astUtils.canTokensBeAdjacent(tokenJustBeforeNode, "Object.hasOwn") + ) { + return fixer.replaceText(node.callee, " Object.hasOwn"); + } + + return fixer.replaceText(node.callee, "Object.hasOwn"); + } + }); + } + } + }; + } +}; diff --git a/eslint/lib/rules/prefer-object-spread.js b/eslint/lib/rules/prefer-object-spread.js index b63474e..0819200 100644 --- a/eslint/lib/rules/prefer-object-spread.js +++ b/eslint/lib/rules/prefer-object-spread.js @@ -247,7 +247,7 @@ module.exports = { docs: { description: - "disallow using Object.assign with an object literal as the first argument and prefer the use of object spread instead.", + "Disallow using Object.assign with an object literal as the first argument and prefer the use of object spread instead.", recommended: false, url: "https://eslint.org/docs/rules/prefer-object-spread" }, diff --git a/eslint/lib/rules/prefer-promise-reject-errors.js b/eslint/lib/rules/prefer-promise-reject-errors.js index 60e72f4..bd7bdcb 100644 --- a/eslint/lib/rules/prefer-promise-reject-errors.js +++ b/eslint/lib/rules/prefer-promise-reject-errors.js @@ -16,7 +16,7 @@ module.exports = { type: "suggestion", docs: { - description: "require using Error objects as Promise rejection reasons", + description: "Require using Error objects as Promise rejection reasons", recommended: false, url: "https://eslint.org/docs/rules/prefer-promise-reject-errors" }, diff --git a/eslint/lib/rules/prefer-reflect.js b/eslint/lib/rules/prefer-reflect.js index 1367a18..68ffa88 100644 --- a/eslint/lib/rules/prefer-reflect.js +++ b/eslint/lib/rules/prefer-reflect.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "require `Reflect` methods where applicable", + description: "Require `Reflect` methods where applicable", recommended: false, url: "https://eslint.org/docs/rules/prefer-reflect" }, @@ -106,7 +106,7 @@ module.exports = { const methodName = (node.callee.property || {}).name; const isReflectCall = (node.callee.object || {}).name === "Reflect"; const hasReflectSubstitute = Object.prototype.hasOwnProperty.call(reflectSubstitutes, methodName); - const userConfiguredException = exceptions.indexOf(methodName) !== -1; + const userConfiguredException = exceptions.includes(methodName); if (hasReflectSubstitute && !isReflectCall && !userConfiguredException) { report(node, existingNames[methodName], reflectSubstitutes[methodName]); @@ -115,7 +115,7 @@ module.exports = { UnaryExpression(node) { const isDeleteOperator = node.operator === "delete"; const targetsIdentifier = node.argument.type === "Identifier"; - const userConfiguredException = exceptions.indexOf("delete") !== -1; + const userConfiguredException = exceptions.includes("delete"); if (isDeleteOperator && !targetsIdentifier && !userConfiguredException) { report(node, "the delete keyword", "Reflect.deleteProperty"); diff --git a/eslint/lib/rules/prefer-regex-literals.js b/eslint/lib/rules/prefer-regex-literals.js index afd6a01..f30eddb 100644 --- a/eslint/lib/rules/prefer-regex-literals.js +++ b/eslint/lib/rules/prefer-regex-literals.js @@ -11,11 +11,15 @@ const astUtils = require("./utils/ast-utils"); const { CALL, CONSTRUCT, ReferenceTracker, findVariable } = require("eslint-utils"); +const { RegExpValidator, visitRegExpAST, RegExpParser } = require("regexpp"); +const { canTokensBeAdjacent } = require("./utils/ast-utils"); //------------------------------------------------------------------------------ // Helpers //------------------------------------------------------------------------------ +const REGEXPP_LATEST_ECMA_VERSION = 2022; + /** * Determines whether the given node is a string literal. * @param {ASTNode} node Node to check. @@ -43,6 +47,71 @@ function isStaticTemplateLiteral(node) { return node.type === "TemplateLiteral" && node.expressions.length === 0; } +const validPrecedingTokens = new Set([ + "(", + ";", + "[", + ",", + "=", + "+", + "*", + "-", + "?", + "~", + "%", + "**", + "!", + "typeof", + "instanceof", + "&&", + "||", + "??", + "return", + "...", + "delete", + "void", + "in", + "<", + ">", + "<=", + ">=", + "==", + "===", + "!=", + "!==", + "<<", + ">>", + ">>>", + "&", + "|", + "^", + ":", + "{", + "=>", + "*=", + "<<=", + ">>=", + ">>>=", + "^=", + "|=", + "&=", + "??=", + "||=", + "&&=", + "**=", + "+=", + "-=", + "/=", + "%=", + "/", + "do", + "break", + "continue", + "debugger", + "case", + "throw" +]); + //------------------------------------------------------------------------------ // Rule Definition @@ -54,11 +123,13 @@ module.exports = { type: "suggestion", docs: { - description: "disallow use of the `RegExp` constructor in favor of regular expression literals", + description: "Disallow use of the `RegExp` constructor in favor of regular expression literals", recommended: false, url: "https://eslint.org/docs/rules/prefer-regex-literals" }, + hasSuggestions: true, + schema: [ { type: "object", @@ -74,6 +145,7 @@ module.exports = { messages: { unexpectedRegExp: "Use a regular expression literal instead of the 'RegExp' constructor.", + replaceWithLiteral: "Replace with an equivalent regular expression literal.", unexpectedRedundantRegExp: "Regular expression literal is unnecessarily wrapped within a 'RegExp' constructor.", unexpectedRedundantRegExpWithFlags: "Use regular expression literal with flags instead of the 'RegExp' constructor." } @@ -81,6 +153,7 @@ module.exports = { create(context) { const [{ disallowRedundantWrapping = false } = {}] = context.options; + const sourceCode = context.getSourceCode(); /** * Determines whether the given identifier node is a reference to a global variable. @@ -107,6 +180,27 @@ module.exports = { isStaticTemplateLiteral(node.quasi); } + /** + * Gets the value of a string + * @param {ASTNode} node The node to get the string of. + * @returns {string|null} The value of the node. + */ + function getStringValue(node) { + if (isStringLiteral(node)) { + return node.value; + } + + if (isStaticTemplateLiteral(node)) { + return node.quasis[0].value.cooked; + } + + if (isStringRawTaggedStaticTemplateLiteral(node)) { + return node.quasi.quasis[0].value.raw; + } + + return null; + } + /** * Determines whether the given node is considered to be a static string by the logic of this rule. * @param {ASTNode} node Node to check. @@ -152,6 +246,53 @@ module.exports = { return false; } + /** + * Returns a ecmaVersion compatible for regexpp. + * @param {any} ecmaVersion The ecmaVersion to convert. + * @returns {import("regexpp/ecma-versions").EcmaVersion} The resulting ecmaVersion compatible for regexpp. + */ + function getRegexppEcmaVersion(ecmaVersion) { + if (typeof ecmaVersion !== "number" || ecmaVersion <= 5) { + return 5; + } + return Math.min(ecmaVersion + 2009, REGEXPP_LATEST_ECMA_VERSION); + } + + /** + * Makes a character escaped or else returns null. + * @param {string} character The character to escape. + * @returns {string} The resulting escaped character. + */ + function resolveEscapes(character) { + switch (character) { + case "\n": + case "\\\n": + return "\\n"; + + case "\r": + case "\\\r": + return "\\r"; + + case "\t": + case "\\\t": + return "\\t"; + + case "\v": + case "\\\v": + return "\\v"; + + case "\f": + case "\\\f": + return "\\f"; + + case "/": + return "\\/"; + + default: + return null; + } + } + return { Program() { const scope = context.getScope(); @@ -171,7 +312,82 @@ module.exports = { context.report({ node, messageId: "unexpectedRedundantRegExp" }); } } else if (hasOnlyStaticStringArguments(node)) { - context.report({ node, messageId: "unexpectedRegExp" }); + let regexContent = getStringValue(node.arguments[0]); + let noFix = false; + let flags; + + if (node.arguments[1]) { + flags = getStringValue(node.arguments[1]); + } + + const regexppEcmaVersion = getRegexppEcmaVersion(context.parserOptions.ecmaVersion); + const RegExpValidatorInstance = new RegExpValidator({ ecmaVersion: regexppEcmaVersion }); + + try { + RegExpValidatorInstance.validatePattern(regexContent, 0, regexContent.length, flags ? flags.includes("u") : false); + if (flags) { + RegExpValidatorInstance.validateFlags(flags); + } + } catch { + noFix = true; + } + + const tokenBefore = sourceCode.getTokenBefore(node); + + if (tokenBefore && !validPrecedingTokens.has(tokenBefore.value)) { + noFix = true; + } + + if (!/^[-a-zA-Z0-9\\[\](){} \t\r\n\v\f!@#$%^&*+^_=/~`.><?,'"|:;]*$/u.test(regexContent)) { + noFix = true; + } + + if (sourceCode.getCommentsInside(node).length > 0) { + noFix = true; + } + + if (regexContent && !noFix) { + let charIncrease = 0; + + const ast = new RegExpParser({ ecmaVersion: regexppEcmaVersion }).parsePattern(regexContent, 0, regexContent.length, flags ? flags.includes("u") : false); + + visitRegExpAST(ast, { + onCharacterEnter(characterNode) { + const escaped = resolveEscapes(characterNode.raw); + + if (escaped) { + regexContent = + regexContent.slice(0, characterNode.start + charIncrease) + + escaped + + regexContent.slice(characterNode.end + charIncrease); + + if (characterNode.raw.length === 1) { + charIncrease += 1; + } + } + } + }); + } + + const newRegExpValue = `/${regexContent || "(?:)"}/${flags || ""}`; + + context.report({ + node, + messageId: "unexpectedRegExp", + suggest: noFix ? [] : [{ + messageId: "replaceWithLiteral", + fix(fixer) { + const tokenAfter = sourceCode.getTokenAfter(node); + + return fixer.replaceText( + node, + (tokenBefore && !canTokensBeAdjacent(tokenBefore, newRegExpValue) && tokenBefore.range[1] === node.range[0] ? " " : "") + + newRegExpValue + + (tokenAfter && !canTokensBeAdjacent(newRegExpValue, tokenAfter) && node.range[1] === tokenAfter.range[0] ? " " : "") + ); + } + }] + }); } } } diff --git a/eslint/lib/rules/prefer-rest-params.js b/eslint/lib/rules/prefer-rest-params.js index 371a289..14b9ae5 100644 --- a/eslint/lib/rules/prefer-rest-params.js +++ b/eslint/lib/rules/prefer-rest-params.js @@ -30,7 +30,7 @@ function getVariableOfArguments(scope) { } } - /* istanbul ignore next : unreachable */ + /* c8 ignore next */ return null; } @@ -65,7 +65,7 @@ module.exports = { type: "suggestion", docs: { - description: "require rest parameters instead of `arguments`", + description: "Require rest parameters instead of `arguments`", recommended: false, url: "https://eslint.org/docs/rules/prefer-rest-params" }, diff --git a/eslint/lib/rules/prefer-spread.js b/eslint/lib/rules/prefer-spread.js index c5f9e1e..c8909fc 100644 --- a/eslint/lib/rules/prefer-spread.js +++ b/eslint/lib/rules/prefer-spread.js @@ -49,7 +49,7 @@ module.exports = { type: "suggestion", docs: { - description: "require spread operators instead of `.apply()`", + description: "Require spread operators instead of `.apply()`", recommended: false, url: "https://eslint.org/docs/rules/prefer-spread" }, diff --git a/eslint/lib/rules/prefer-template.js b/eslint/lib/rules/prefer-template.js index 953155d..167c187 100644 --- a/eslint/lib/rules/prefer-template.js +++ b/eslint/lib/rules/prefer-template.js @@ -128,7 +128,7 @@ module.exports = { type: "suggestion", docs: { - description: "require template literals instead of string concatenation", + description: "Require template literals instead of string concatenation", recommended: false, url: "https://eslint.org/docs/rules/prefer-template" }, @@ -188,7 +188,7 @@ module.exports = { return sourceCode.getText(currentNode); } - if (isConcatenation(currentNode) && hasStringLiteral(currentNode) && hasNonStringLiteral(currentNode)) { + if (isConcatenation(currentNode) && hasStringLiteral(currentNode)) { const plusSign = sourceCode.getFirstTokenBetween(currentNode.left, currentNode.right, token => token.value === "+"); const textBeforePlus = getTextBetween(currentNode.left, plusSign); const textAfterPlus = getTextBetween(plusSign, currentNode.right); diff --git a/eslint/lib/rules/quote-props.js b/eslint/lib/rules/quote-props.js index e57ad6e..db94239 100644 --- a/eslint/lib/rules/quote-props.js +++ b/eslint/lib/rules/quote-props.js @@ -22,7 +22,7 @@ module.exports = { type: "suggestion", docs: { - description: "require quotes around object literal property names", + description: "Require quotes around object literal property names", recommended: false, url: "https://eslint.org/docs/rules/quote-props" }, @@ -95,7 +95,7 @@ module.exports = { * @returns {boolean} `true` if it is an ES3 token. */ function isKeyword(tokenStr) { - return keywords.indexOf(tokenStr) >= 0; + return keywords.includes(tokenStr); } /** @@ -108,7 +108,7 @@ module.exports = { */ function areQuotesRedundant(rawKey, tokens, skipNumberLiterals) { return tokens.length === 1 && tokens[0].start === 0 && tokens[0].end === rawKey.length && - (["Identifier", "Keyword", "Null", "Boolean"].indexOf(tokens[0].type) >= 0 || + (["Identifier", "Keyword", "Null", "Boolean"].includes(tokens[0].type) || (tokens[0].type === "Numeric" && !skipNumberLiterals && String(+tokens[0].value) === tokens[0].value)); } diff --git a/eslint/lib/rules/quotes.js b/eslint/lib/rules/quotes.js index a996096..ab7b38b 100644 --- a/eslint/lib/rules/quotes.js +++ b/eslint/lib/rules/quotes.js @@ -80,7 +80,7 @@ module.exports = { type: "layout", docs: { - description: "enforce the consistent use of either backticks, double, or single quotes", + description: "Enforce the consistent use of either backticks, double, or single quotes", recommended: false, url: "https://eslint.org/docs/rules/quotes" }, @@ -223,9 +223,20 @@ module.exports = { // ModuleSpecifier. case "ImportDeclaration": case "ExportNamedDeclaration": - case "ExportAllDeclaration": return parent.source === node; + // ModuleExportName or ModuleSpecifier. + case "ExportAllDeclaration": + return parent.exported === node || parent.source === node; + + // ModuleExportName. + case "ImportSpecifier": + return parent.imported === node; + + // ModuleExportName. + case "ExportSpecifier": + return parent.local === node || parent.exported === node; + // Others don't allow. default: return false; @@ -272,7 +283,7 @@ module.exports = { astUtils.isSurroundedBy(rawVal, settings.quote); if (!isValid && avoidEscape) { - isValid = astUtils.isSurroundedBy(rawVal, settings.alternateQuote) && rawVal.indexOf(settings.quote) >= 0; + isValid = astUtils.isSurroundedBy(rawVal, settings.alternateQuote) && rawVal.includes(settings.quote); } if (!isValid) { diff --git a/eslint/lib/rules/radix.js b/eslint/lib/rules/radix.js index f83c762..0618d98 100644 --- a/eslint/lib/rules/radix.js +++ b/eslint/lib/rules/radix.js @@ -80,7 +80,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce the consistent use of the radix argument when using `parseInt()`", + description: "Enforce the consistent use of the radix argument when using `parseInt()`", recommended: false, url: "https://eslint.org/docs/rules/radix" }, diff --git a/eslint/lib/rules/require-atomic-updates.js b/eslint/lib/rules/require-atomic-updates.js index 4dbd48d..7a5f822 100644 --- a/eslint/lib/rules/require-atomic-updates.js +++ b/eslint/lib/rules/require-atomic-updates.js @@ -171,7 +171,7 @@ module.exports = { type: "problem", docs: { - description: "disallow assignments that can lead to race conditions due to usage of `await` or `yield`", + description: "Disallow assignments that can lead to race conditions due to usage of `await` or `yield`", recommended: false, url: "https://eslint.org/docs/rules/require-atomic-updates" }, diff --git a/eslint/lib/rules/require-await.js b/eslint/lib/rules/require-await.js index 1b17de0..1add255 100644 --- a/eslint/lib/rules/require-await.js +++ b/eslint/lib/rules/require-await.js @@ -34,7 +34,7 @@ module.exports = { type: "suggestion", docs: { - description: "disallow async functions which have no `await` expression", + description: "Disallow async functions which have no `await` expression", recommended: false, url: "https://eslint.org/docs/rules/require-await" }, diff --git a/eslint/lib/rules/require-jsdoc.js b/eslint/lib/rules/require-jsdoc.js index 169b6f5..755f6df 100644 --- a/eslint/lib/rules/require-jsdoc.js +++ b/eslint/lib/rules/require-jsdoc.js @@ -11,7 +11,7 @@ module.exports = { type: "suggestion", docs: { - description: "require JSDoc comments", + description: "Require JSDoc comments", recommended: false, url: "https://eslint.org/docs/rules/require-jsdoc" }, diff --git a/eslint/lib/rules/require-unicode-regexp.js b/eslint/lib/rules/require-unicode-regexp.js index 577ae6c..4236af6 100644 --- a/eslint/lib/rules/require-unicode-regexp.js +++ b/eslint/lib/rules/require-unicode-regexp.js @@ -26,7 +26,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce the use of `u` flag on RegExp", + description: "Enforce the use of `u` flag on RegExp", recommended: false, url: "https://eslint.org/docs/rules/require-unicode-regexp" }, diff --git a/eslint/lib/rules/require-yield.js b/eslint/lib/rules/require-yield.js index aba0614..b3f1341 100644 --- a/eslint/lib/rules/require-yield.js +++ b/eslint/lib/rules/require-yield.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "require generator functions to contain `yield`", + description: "Require generator functions to contain `yield`", recommended: true, url: "https://eslint.org/docs/rules/require-yield" }, @@ -68,7 +68,6 @@ module.exports = { // Increases the count of `yield` keyword. YieldExpression() { - /* istanbul ignore else */ if (stack.length > 0) { stack[stack.length - 1] += 1; } diff --git a/eslint/lib/rules/rest-spread-spacing.js b/eslint/lib/rules/rest-spread-spacing.js index ace1ec5..17f9aa0 100644 --- a/eslint/lib/rules/rest-spread-spacing.js +++ b/eslint/lib/rules/rest-spread-spacing.js @@ -15,7 +15,7 @@ module.exports = { type: "layout", docs: { - description: "enforce spacing between rest and spread operators and their expressions", + description: "Enforce spacing between rest and spread operators and their expressions", recommended: false, url: "https://eslint.org/docs/rules/rest-spread-spacing" }, diff --git a/eslint/lib/rules/semi-spacing.js b/eslint/lib/rules/semi-spacing.js index 4f0afbb..875cb62 100644 --- a/eslint/lib/rules/semi-spacing.js +++ b/eslint/lib/rules/semi-spacing.js @@ -17,7 +17,7 @@ module.exports = { type: "layout", docs: { - description: "enforce consistent spacing before and after semicolons", + description: "Enforce consistent spacing before and after semicolons", recommended: false, url: "https://eslint.org/docs/rules/semi-spacing" }, diff --git a/eslint/lib/rules/semi-style.js b/eslint/lib/rules/semi-style.js index 7952a9a..424858b 100644 --- a/eslint/lib/rules/semi-style.js +++ b/eslint/lib/rules/semi-style.js @@ -73,7 +73,7 @@ module.exports = { type: "layout", docs: { - description: "enforce location of semicolons", + description: "Enforce location of semicolons", recommended: false, url: "https://eslint.org/docs/rules/semi-style" }, diff --git a/eslint/lib/rules/semi.js b/eslint/lib/rules/semi.js index 86ff8d7..1e49273 100644 --- a/eslint/lib/rules/semi.js +++ b/eslint/lib/rules/semi.js @@ -21,7 +21,7 @@ module.exports = { type: "layout", docs: { - description: "require or disallow semicolons instead of ASI", + description: "Require or disallow semicolons instead of ASI", recommended: false, url: "https://eslint.org/docs/rules/semi" }, diff --git a/eslint/lib/rules/sort-imports.js b/eslint/lib/rules/sort-imports.js index 13cb636..bfb0765 100644 --- a/eslint/lib/rules/sort-imports.js +++ b/eslint/lib/rules/sort-imports.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce sorted import declarations within modules", + description: "Enforce sorted import declarations within modules", recommended: false, url: "https://eslint.org/docs/rules/sort-imports" }, diff --git a/eslint/lib/rules/sort-keys.js b/eslint/lib/rules/sort-keys.js index 2fc1963..1523ab7 100644 --- a/eslint/lib/rules/sort-keys.js +++ b/eslint/lib/rules/sort-keys.js @@ -81,7 +81,7 @@ module.exports = { type: "suggestion", docs: { - description: "require object keys to be sorted", + description: "Require object keys to be sorted", recommended: false, url: "https://eslint.org/docs/rules/sort-keys" }, @@ -105,6 +105,10 @@ module.exports = { type: "integer", minimum: 2, default: 2 + }, + allowLineSeparatedGroups: { + type: "boolean", + default: false } }, additionalProperties: false @@ -124,17 +128,21 @@ module.exports = { const insensitive = options && options.caseSensitive === false; const natural = options && options.natural; const minKeys = options && options.minKeys; + const allowLineSeparatedGroups = options && options.allowLineSeparatedGroups || false; const isValidOrder = isValidOrders[ order + (insensitive ? "I" : "") + (natural ? "N" : "") ]; // The stack to save the previous property's name for each object literals. let stack = null; + const sourceCode = context.getSourceCode(); return { ObjectExpression(node) { stack = { upper: stack, + prevNode: null, + prevBlankLine: false, prevName: null, numKeys: node.properties.length }; @@ -159,10 +167,45 @@ module.exports = { const numKeys = stack.numKeys; const thisName = getPropertyName(node); + // Get tokens between current node and previous node + const tokens = stack.prevNode && sourceCode + .getTokensBetween(stack.prevNode, node, { includeComments: true }); + + let isBlankLineBetweenNodes = stack.prevBlankLine; + + if (tokens) { + + // check blank line between tokens + tokens.forEach((token, index) => { + const previousToken = tokens[index - 1]; + + if (previousToken && (token.loc.start.line - previousToken.loc.end.line > 1)) { + isBlankLineBetweenNodes = true; + } + }); + + // check blank line between the current node and the last token + if (!isBlankLineBetweenNodes && (node.loc.start.line - tokens[tokens.length - 1].loc.end.line > 1)) { + isBlankLineBetweenNodes = true; + } + + // check blank line between the first token and the previous node + if (!isBlankLineBetweenNodes && (tokens[0].loc.start.line - stack.prevNode.loc.end.line > 1)) { + isBlankLineBetweenNodes = true; + } + } + + stack.prevNode = node; + if (thisName !== null) { stack.prevName = thisName; } + if (allowLineSeparatedGroups && isBlankLineBetweenNodes) { + stack.prevBlankLine = thisName === null; + return; + } + if (prevName === null || thisName === null || numKeys < minKeys) { return; } diff --git a/eslint/lib/rules/sort-vars.js b/eslint/lib/rules/sort-vars.js index 8246558..ec0718e 100644 --- a/eslint/lib/rules/sort-vars.js +++ b/eslint/lib/rules/sort-vars.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "require variables within the same declaration block to be sorted", + description: "Require variables within the same declaration block to be sorted", recommended: false, url: "https://eslint.org/docs/rules/sort-vars" }, diff --git a/eslint/lib/rules/space-before-blocks.js b/eslint/lib/rules/space-before-blocks.js index 5cc7266..ffd33dd 100644 --- a/eslint/lib/rules/space-before-blocks.js +++ b/eslint/lib/rules/space-before-blocks.js @@ -40,7 +40,7 @@ module.exports = { type: "layout", docs: { - description: "enforce consistent spacing before blocks", + description: "Enforce consistent spacing before blocks", recommended: false, url: "https://eslint.org/docs/rules/space-before-blocks" }, diff --git a/eslint/lib/rules/space-before-function-paren.js b/eslint/lib/rules/space-before-function-paren.js index fdd45be..b56ac3c 100644 --- a/eslint/lib/rules/space-before-function-paren.js +++ b/eslint/lib/rules/space-before-function-paren.js @@ -20,7 +20,7 @@ module.exports = { type: "layout", docs: { - description: "enforce consistent spacing before `function` definition opening parenthesis", + description: "Enforce consistent spacing before `function` definition opening parenthesis", recommended: false, url: "https://eslint.org/docs/rules/space-before-function-paren" }, diff --git a/eslint/lib/rules/space-in-parens.js b/eslint/lib/rules/space-in-parens.js index 1509d60..42d9bb5 100644 --- a/eslint/lib/rules/space-in-parens.js +++ b/eslint/lib/rules/space-in-parens.js @@ -16,7 +16,7 @@ module.exports = { type: "layout", docs: { - description: "enforce consistent spacing inside parentheses", + description: "Enforce consistent spacing inside parentheses", recommended: false, url: "https://eslint.org/docs/rules/space-in-parens" }, diff --git a/eslint/lib/rules/space-infix-ops.js b/eslint/lib/rules/space-infix-ops.js index c526b7e..141c269 100644 --- a/eslint/lib/rules/space-infix-ops.js +++ b/eslint/lib/rules/space-infix-ops.js @@ -16,7 +16,7 @@ module.exports = { type: "layout", docs: { - description: "require spacing around infix operators", + description: "Require spacing around infix operators", recommended: false, url: "https://eslint.org/docs/rules/space-infix-ops" }, diff --git a/eslint/lib/rules/space-unary-ops.js b/eslint/lib/rules/space-unary-ops.js index 04487c4..1d9141d 100644 --- a/eslint/lib/rules/space-unary-ops.js +++ b/eslint/lib/rules/space-unary-ops.js @@ -20,7 +20,7 @@ module.exports = { type: "layout", docs: { - description: "enforce consistent spacing before or after unary operators", + description: "Enforce consistent spacing before or after unary operators", recommended: false, url: "https://eslint.org/docs/rules/space-unary-ops" }, diff --git a/eslint/lib/rules/spaced-comment.js b/eslint/lib/rules/spaced-comment.js index 674c13c..6aedeae 100644 --- a/eslint/lib/rules/spaced-comment.js +++ b/eslint/lib/rules/spaced-comment.js @@ -39,7 +39,7 @@ function escapeAndRepeat(s) { function parseMarkersOption(markers) { // `*` is a marker for JSDoc comments. - if (markers.indexOf("*") === -1) { + if (!markers.includes("*")) { return markers.concat("*"); } @@ -152,7 +152,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce consistent spacing after the `//` or `/*` in a comment", + description: "Enforce consistent spacing after the `//` or `/*` in a comment", recommended: false, url: "https://eslint.org/docs/rules/spaced-comment" }, diff --git a/eslint/lib/rules/strict.js b/eslint/lib/rules/strict.js index 0ea1da5..e677c95 100644 --- a/eslint/lib/rules/strict.js +++ b/eslint/lib/rules/strict.js @@ -69,7 +69,7 @@ module.exports = { type: "suggestion", docs: { - description: "require or disallow strict mode directives", + description: "Require or disallow strict mode directives", recommended: false, url: "https://eslint.org/docs/rules/strict" }, diff --git a/eslint/lib/rules/switch-colon-spacing.js b/eslint/lib/rules/switch-colon-spacing.js index cd2ca70..c1df496 100644 --- a/eslint/lib/rules/switch-colon-spacing.js +++ b/eslint/lib/rules/switch-colon-spacing.js @@ -21,7 +21,7 @@ module.exports = { type: "layout", docs: { - description: "enforce spacing around colons of switch statements", + description: "Enforce spacing around colons of switch statements", recommended: false, url: "https://eslint.org/docs/rules/switch-colon-spacing" }, diff --git a/eslint/lib/rules/symbol-description.js b/eslint/lib/rules/symbol-description.js index 07bb8cd..1c8a364 100644 --- a/eslint/lib/rules/symbol-description.js +++ b/eslint/lib/rules/symbol-description.js @@ -22,7 +22,7 @@ module.exports = { type: "suggestion", docs: { - description: "require symbol descriptions", + description: "Require symbol descriptions", recommended: false, url: "https://eslint.org/docs/rules/symbol-description" }, diff --git a/eslint/lib/rules/template-curly-spacing.js b/eslint/lib/rules/template-curly-spacing.js index c842b76..35d4bba 100644 --- a/eslint/lib/rules/template-curly-spacing.js +++ b/eslint/lib/rules/template-curly-spacing.js @@ -21,7 +21,7 @@ module.exports = { type: "layout", docs: { - description: "require or disallow spacing around embedded expressions of template strings", + description: "Require or disallow spacing around embedded expressions of template strings", recommended: false, url: "https://eslint.org/docs/rules/template-curly-spacing" }, diff --git a/eslint/lib/rules/template-tag-spacing.js b/eslint/lib/rules/template-tag-spacing.js index fa1a613..3140fa0 100644 --- a/eslint/lib/rules/template-tag-spacing.js +++ b/eslint/lib/rules/template-tag-spacing.js @@ -15,7 +15,7 @@ module.exports = { type: "layout", docs: { - description: "require or disallow spacing between template tags and their literals", + description: "Require or disallow spacing between template tags and their literals", recommended: false, url: "https://eslint.org/docs/rules/template-tag-spacing" }, diff --git a/eslint/lib/rules/unicode-bom.js b/eslint/lib/rules/unicode-bom.js index d480f1b..482d3bb 100644 --- a/eslint/lib/rules/unicode-bom.js +++ b/eslint/lib/rules/unicode-bom.js @@ -14,7 +14,7 @@ module.exports = { type: "layout", docs: { - description: "require or disallow Unicode byte order mark (BOM)", + description: "Require or disallow Unicode byte order mark (BOM)", recommended: false, url: "https://eslint.org/docs/rules/unicode-bom" }, diff --git a/eslint/lib/rules/use-isnan.js b/eslint/lib/rules/use-isnan.js index 9290350..219d695 100644 --- a/eslint/lib/rules/use-isnan.js +++ b/eslint/lib/rules/use-isnan.js @@ -37,7 +37,7 @@ module.exports = { type: "problem", docs: { - description: "require calls to `isNaN()` when checking for `NaN`", + description: "Require calls to `isNaN()` when checking for `NaN`", recommended: true, url: "https://eslint.org/docs/rules/use-isnan" }, diff --git a/eslint/lib/rules/utils/ast-utils.js b/eslint/lib/rules/utils/ast-utils.js index 16d7b81..f4a18cf 100644 --- a/eslint/lib/rules/utils/ast-utils.js +++ b/eslint/lib/rules/utils/ast-utils.js @@ -32,6 +32,7 @@ const thisTagPattern = /^[\s*]*@this/mu; const COMMENTS_IGNORE_PATTERN = /^\s*(?:eslint|jshint\s+|jslint\s+|istanbul\s+|globals?\s+|exported\s+|jscs)/u; +const ESLINT_DIRECTIVE_PATTERN = /^(?:eslint[- ]|(?:globals?|exported) )/u; const LINEBREAKS = new Set(["\r\n", "\r", "\n", "\u2028", "\u2029"]); // A set of node types that can contain a list of statements @@ -769,6 +770,222 @@ function getSwitchCaseColonToken(node, sourceCode) { return sourceCode.getFirstToken(node, 1); } +/** + * Gets ESM module export name represented by the given node. + * @param {ASTNode} node `Identifier` or string `Literal` node in a position + * that represents a module export name: + * - `ImportSpecifier#imported` + * - `ExportSpecifier#local` (if it is a re-export from another module) + * - `ExportSpecifier#exported` + * - `ExportAllDeclaration#exported` + * @returns {string} The module export name. + */ +function getModuleExportName(node) { + if (node.type === "Identifier") { + return node.name; + } + + // string literal + return node.value; +} + +/** + * Returns literal's value converted to the Boolean type + * @param {ASTNode} node any `Literal` node + * @returns {boolean | null} `true` when node is truthy, `false` when node is falsy, + * `null` when it cannot be determined. + */ +function getBooleanValue(node) { + if (node.value === null) { + + /* + * it might be a null literal or bigint/regex literal in unsupported environments . + * https://github.com/estree/estree/blob/14df8a024956ea289bd55b9c2226a1d5b8a473ee/es5.md#regexpliteral + * https://github.com/estree/estree/blob/14df8a024956ea289bd55b9c2226a1d5b8a473ee/es2020.md#bigintliteral + */ + + if (node.raw === "null") { + return false; + } + + // regex is always truthy + if (typeof node.regex === "object") { + return true; + } + + return null; + } + + return !!node.value; +} + +/** + * Checks if a branch node of LogicalExpression short circuits the whole condition + * @param {ASTNode} node The branch of main condition which needs to be checked + * @param {string} operator The operator of the main LogicalExpression. + * @returns {boolean} true when condition short circuits whole condition + */ +function isLogicalIdentity(node, operator) { + switch (node.type) { + case "Literal": + return (operator === "||" && getBooleanValue(node) === true) || + (operator === "&&" && getBooleanValue(node) === false); + + case "UnaryExpression": + return (operator === "&&" && node.operator === "void"); + + case "LogicalExpression": + + /* + * handles `a && false || b` + * `false` is an identity element of `&&` but not `||` + */ + return operator === node.operator && + ( + isLogicalIdentity(node.left, operator) || + isLogicalIdentity(node.right, operator) + ); + + case "AssignmentExpression": + return ["||=", "&&="].includes(node.operator) && + operator === node.operator.slice(0, -1) && + isLogicalIdentity(node.right, operator); + + // no default + } + return false; +} + +/** + * Checks if an identifier is a reference to a global variable. + * @param {Scope} scope The scope in which the identifier is referenced. + * @param {ASTNode} node An identifier node to check. + * @returns {boolean} `true` if the identifier is a reference to a global variable. + */ +function isReferenceToGlobalVariable(scope, node) { + const reference = scope.references.find(ref => ref.identifier === node); + + return Boolean( + reference && + reference.resolved && + reference.resolved.scope.type === "global" && + reference.resolved.defs.length === 0 + ); +} + + +/** + * Checks if a node has a constant truthiness value. + * @param {Scope} scope Scope in which the node appears. + * @param {ASTNode} node The AST node to check. + * @param {boolean} inBooleanPosition `true` if checking the test of a + * condition. `false` in all other cases. When `false`, checks if -- for + * both string and number -- if coerced to that type, the value will + * be constant. + * @returns {boolean} true when node's truthiness is constant + * @private + */ +function isConstant(scope, node, inBooleanPosition) { + + // node.elements can return null values in the case of sparse arrays ex. [,] + if (!node) { + return true; + } + switch (node.type) { + case "Literal": + case "ArrowFunctionExpression": + case "FunctionExpression": + return true; + case "ClassExpression": + case "ObjectExpression": + + /** + * In theory objects like: + * + * `{toString: () => a}` + * `{valueOf: () => a}` + * + * Or a classes like: + * + * `class { static toString() { return a } }` + * `class { static valueOf() { return a } }` + * + * Are not constant verifiably when `inBooleanPosition` is + * false, but it's an edge case we've opted not to handle. + */ + return true; + case "TemplateLiteral": + return (inBooleanPosition && node.quasis.some(quasi => quasi.value.cooked.length)) || + node.expressions.every(exp => isConstant(scope, exp, false)); + + case "ArrayExpression": { + if (!inBooleanPosition) { + return node.elements.every(element => isConstant(scope, element, false)); + } + return true; + } + + case "UnaryExpression": + if ( + node.operator === "void" || + node.operator === "typeof" && inBooleanPosition + ) { + return true; + } + + if (node.operator === "!") { + return isConstant(scope, node.argument, true); + } + + return isConstant(scope, node.argument, false); + + case "BinaryExpression": + return isConstant(scope, node.left, false) && + isConstant(scope, node.right, false) && + node.operator !== "in"; + + case "LogicalExpression": { + const isLeftConstant = isConstant(scope, node.left, inBooleanPosition); + const isRightConstant = isConstant(scope, node.right, inBooleanPosition); + const isLeftShortCircuit = (isLeftConstant && isLogicalIdentity(node.left, node.operator)); + const isRightShortCircuit = (inBooleanPosition && isRightConstant && isLogicalIdentity(node.right, node.operator)); + + return (isLeftConstant && isRightConstant) || + isLeftShortCircuit || + isRightShortCircuit; + } + case "NewExpression": + return inBooleanPosition; + case "AssignmentExpression": + if (node.operator === "=") { + return isConstant(scope, node.right, inBooleanPosition); + } + + if (["||=", "&&="].includes(node.operator) && inBooleanPosition) { + return isLogicalIdentity(node.right, node.operator.slice(0, -1)); + } + + return false; + + case "SequenceExpression": + return isConstant(scope, node.expressions[node.expressions.length - 1], inBooleanPosition); + case "SpreadElement": + return isConstant(scope, node.argument, inBooleanPosition); + case "CallExpression": + if (node.callee.type === "Identifier" && node.callee.name === "Boolean") { + if (node.arguments.length === 0 || isConstant(scope, node.arguments[0], true)) { + return isReferenceToGlobalVariable(scope, node.callee); + } + } + return false; + case "Identifier": + return node.name === "undefined" && isReferenceToGlobalVariable(scope, node); + + // no default + } + return false; +} + //------------------------------------------------------------------------------ // Public Interface //------------------------------------------------------------------------------ @@ -889,12 +1106,8 @@ module.exports = { const comment = node.value.trim(); return ( - node.type === "Line" && comment.indexOf("eslint-") === 0 || - node.type === "Block" && ( - comment.indexOf("global ") === 0 || - comment.indexOf("eslint ") === 0 || - comment.indexOf("eslint-") === 0 - ) + node.type === "Line" && comment.startsWith("eslint-") || + node.type === "Block" && ESLINT_DIRECTIVE_PATTERN.test(comment) ); }, @@ -1137,7 +1350,7 @@ module.exports = { } } - /* istanbul ignore next */ + /* c8 ignore next */ return true; }, @@ -1765,7 +1978,7 @@ module.exports = { if (comments.length) { const lastComment = comments[comments.length - 1]; - if (lastComment.range[0] > leftToken.range[0]) { + if (!leftToken || lastComment.range[0] > leftToken.range[0]) { leftToken = lastComment; } } @@ -1773,7 +1986,13 @@ module.exports = { leftToken = leftValue; } - if (leftToken.type === "Shebang") { + /* + * If a hashbang comment was passed as a token object from SourceCode, + * its type will be "Shebang" because of the way ESLint itself handles hashbangs. + * If a hashbang comment was passed in a string and then tokenized in this function, + * its type will be "Hashbang" because of the way Espree tokenizes hashbangs. + */ + if (leftToken.type === "Shebang" || leftToken.type === "Hashbang") { return false; } @@ -1794,7 +2013,7 @@ module.exports = { if (comments.length) { const firstComment = comments[0]; - if (firstComment.range[0] < rightToken.range[0]) { + if (!rightToken || firstComment.range[0] < rightToken.range[0]) { rightToken = firstComment; } } @@ -1886,6 +2105,7 @@ module.exports = { return OCTAL_OR_NON_OCTAL_DECIMAL_ESCAPE_PATTERN.test(rawString); }, + isReferenceToGlobalVariable, isLogicalExpression, isCoalesceExpression, isMixedLogicalAndCoalesceExpressions, @@ -1898,5 +2118,7 @@ module.exports = { equalLiteralValue, isSameReference, isLogicalAssignmentOperator, - getSwitchCaseColonToken + getSwitchCaseColonToken, + getModuleExportName, + isConstant }; diff --git a/eslint/lib/rules/valid-jsdoc.js b/eslint/lib/rules/valid-jsdoc.js index c118e03..25be39f 100644 --- a/eslint/lib/rules/valid-jsdoc.js +++ b/eslint/lib/rules/valid-jsdoc.js @@ -21,7 +21,7 @@ module.exports = { type: "suggestion", docs: { - description: "enforce valid JSDoc comments", + description: "Enforce valid JSDoc comments", recommended: false, url: "https://eslint.org/docs/rules/valid-jsdoc" }, @@ -405,7 +405,7 @@ module.exports = { loc: getAbsoluteRange(jsdocNode, param), data: { name: param.name } }); - } else if (param.name.indexOf(".") === -1) { + } else if (!param.name.includes(".")) { paramTagsByName[param.name] = param; } }); diff --git a/eslint/lib/rules/valid-typeof.js b/eslint/lib/rules/valid-typeof.js index 6046358..908d572 100644 --- a/eslint/lib/rules/valid-typeof.js +++ b/eslint/lib/rules/valid-typeof.js @@ -14,11 +14,13 @@ module.exports = { type: "problem", docs: { - description: "enforce comparing `typeof` expressions against valid strings", + description: "Enforce comparing `typeof` expressions against valid strings", recommended: true, url: "https://eslint.org/docs/rules/valid-typeof" }, + hasSuggestions: true, + schema: [ { type: "object", @@ -33,17 +35,33 @@ module.exports = { ], messages: { invalidValue: "Invalid typeof comparison value.", - notString: "Typeof comparisons should be to string literals." + notString: "Typeof comparisons should be to string literals.", + suggestString: 'Use `"{{type}}"` instead of `{{type}}`.' } }, create(context) { - const VALID_TYPES = ["symbol", "undefined", "object", "boolean", "number", "string", "function", "bigint"], - OPERATORS = ["==", "===", "!=", "!=="]; + const VALID_TYPES = new Set(["symbol", "undefined", "object", "boolean", "number", "string", "function", "bigint"]), + OPERATORS = new Set(["==", "===", "!=", "!=="]); const requireStringLiterals = context.options[0] && context.options[0].requireStringLiterals; + let globalScope; + + /** + * Checks whether the given node represents a reference to a global variable that is not declared in the source code. + * These identifiers will be allowed, as it is assumed that user has no control over the names of external global variables. + * @param {ASTNode} node `Identifier` node to check. + * @returns {boolean} `true` if the node is a reference to a global variable. + */ + function isReferenceToGlobalVariable(node) { + const variable = globalScope.set.get(node.name); + + return variable && variable.defs.length === 0 && + variable.references.some(ref => ref.identifier === node); + } + /** * Determines whether a node is a typeof expression. * @param {ASTNode} node The node @@ -59,19 +77,37 @@ module.exports = { return { + Program() { + globalScope = context.getScope(); + }, + UnaryExpression(node) { if (isTypeofExpression(node)) { const parent = context.getAncestors().pop(); - if (parent.type === "BinaryExpression" && OPERATORS.indexOf(parent.operator) !== -1) { + if (parent.type === "BinaryExpression" && OPERATORS.has(parent.operator)) { const sibling = parent.left === node ? parent.right : parent.left; if (sibling.type === "Literal" || sibling.type === "TemplateLiteral" && !sibling.expressions.length) { const value = sibling.type === "Literal" ? sibling.value : sibling.quasis[0].value.cooked; - if (VALID_TYPES.indexOf(value) === -1) { + if (!VALID_TYPES.has(value)) { context.report({ node: sibling, messageId: "invalidValue" }); } + } else if (sibling.type === "Identifier" && sibling.name === "undefined" && isReferenceToGlobalVariable(sibling)) { + context.report({ + node: sibling, + messageId: requireStringLiterals ? "notString" : "invalidValue", + suggest: [ + { + messageId: "suggestString", + data: { type: "undefined" }, + fix(fixer) { + return fixer.replaceText(sibling, '"undefined"'); + } + } + ] + }); } else if (requireStringLiterals && !isTypeofExpression(sibling)) { context.report({ node: sibling, messageId: "notString" }); } diff --git a/eslint/lib/rules/vars-on-top.js b/eslint/lib/rules/vars-on-top.js index 09e9932..99e2b4a 100644 --- a/eslint/lib/rules/vars-on-top.js +++ b/eslint/lib/rules/vars-on-top.js @@ -15,7 +15,7 @@ module.exports = { type: "suggestion", docs: { - description: "require `var` declarations be placed at the top of their containing scope", + description: "Require `var` declarations be placed at the top of their containing scope", recommended: false, url: "https://eslint.org/docs/rules/vars-on-top" }, diff --git a/eslint/lib/rules/wrap-iife.js b/eslint/lib/rules/wrap-iife.js index 8523796..4c2c927 100644 --- a/eslint/lib/rules/wrap-iife.js +++ b/eslint/lib/rules/wrap-iife.js @@ -43,7 +43,7 @@ module.exports = { type: "layout", docs: { - description: "require parentheses around immediate `function` invocations", + description: "Require parentheses around immediate `function` invocations", recommended: false, url: "https://eslint.org/docs/rules/wrap-iife" }, diff --git a/eslint/lib/rules/wrap-regex.js b/eslint/lib/rules/wrap-regex.js index b10f2ec..b24d360 100644 --- a/eslint/lib/rules/wrap-regex.js +++ b/eslint/lib/rules/wrap-regex.js @@ -15,7 +15,7 @@ module.exports = { type: "layout", docs: { - description: "require parenthesis around regex literals", + description: "Require parenthesis around regex literals", recommended: false, url: "https://eslint.org/docs/rules/wrap-regex" }, diff --git a/eslint/lib/rules/yield-star-spacing.js b/eslint/lib/rules/yield-star-spacing.js index 884a3a4..c2e07aa 100644 --- a/eslint/lib/rules/yield-star-spacing.js +++ b/eslint/lib/rules/yield-star-spacing.js @@ -15,7 +15,7 @@ module.exports = { type: "layout", docs: { - description: "require or disallow spacing around the `*` in `yield*` expressions", + description: "Require or disallow spacing around the `*` in `yield*` expressions", recommended: false, url: "https://eslint.org/docs/rules/yield-star-spacing" }, diff --git a/eslint/lib/rules/yoda.js b/eslint/lib/rules/yoda.js index f491f75..eb9a32a 100644 --- a/eslint/lib/rules/yoda.js +++ b/eslint/lib/rules/yoda.js @@ -39,7 +39,7 @@ function isEqualityOperator(operator) { * @returns {boolean} Whether the operator is used in range tests. */ function isRangeTestOperator(operator) { - return ["<", "<="].indexOf(operator) >= 0; + return ["<", "<="].includes(operator); } /** @@ -121,7 +121,7 @@ module.exports = { type: "suggestion", docs: { - description: 'require or disallow "Yoda" conditions', + description: 'Require or disallow "Yoda" conditions', recommended: false, url: "https://eslint.org/docs/rules/yoda" }, diff --git a/eslint/lib/shared/deprecation-warnings.js b/eslint/lib/shared/deprecation-warnings.js index 1a0501a..d09cafb 100644 --- a/eslint/lib/shared/deprecation-warnings.js +++ b/eslint/lib/shared/deprecation-warnings.js @@ -17,14 +17,7 @@ const path = require("path"); // Definitions for deprecation warnings. const deprecationWarningMessages = { ESLINT_LEGACY_ECMAFEATURES: - "The 'ecmaFeatures' config file property is deprecated and has no effect.", - ESLINT_PERSONAL_CONFIG_LOAD: - "'~/.eslintrc.*' config files have been deprecated. " + - "Please use a config file per project or the '--config' option.", - ESLINT_PERSONAL_CONFIG_SUPPRESS: - "'~/.eslintrc.*' config files have been deprecated. " + - "Please remove it or add 'root:true' to the config files in your " + - "projects in order to avoid loading '~/.eslintrc.*' accidentally." + "The 'ecmaFeatures' config file property is deprecated and has no effect." }; const sourceFileErrorCache = new Set(); diff --git a/eslint/lib/shared/logging.js b/eslint/lib/shared/logging.js index 7f06a74..fd5e8a6 100644 --- a/eslint/lib/shared/logging.js +++ b/eslint/lib/shared/logging.js @@ -7,7 +7,7 @@ /* eslint no-console: "off" -- Logging util */ -/* istanbul ignore next */ +/* c8 ignore next */ module.exports = { /** diff --git a/eslint/lib/shared/types.js b/eslint/lib/shared/types.js index ab59207..60f9f1d 100644 --- a/eslint/lib/shared/types.js +++ b/eslint/lib/shared/types.js @@ -21,7 +21,7 @@ module.exports = {}; /** * @typedef {Object} ParserOptions * @property {EcmaFeatures} [ecmaFeatures] The optional features. - * @property {3|5|6|7|8|9|10|11|12|13|2015|2016|2017|2018|2019|2020|2021|2022} [ecmaVersion] The ECMAScript version (or revision number). + * @property {3|5|6|7|8|9|10|11|12|13|14|2015|2016|2017|2018|2019|2020|2021|2022|2023} [ecmaVersion] The ECMAScript version (or revision number). * @property {"script"|"module"} [sourceType] The source code type. * @property {boolean} [allowReserved] Allowing the use of reserved words as identifiers in ES3. */ @@ -105,6 +105,21 @@ module.exports = {}; * @property {Array<{desc?: string, messageId?: string, fix: {range: [number, number], text: string}}>} [suggestions] Information for suggestions. */ +/** + * @typedef {Object} SuppressedLintMessage + * @property {number|undefined} column The 1-based column number. + * @property {number} [endColumn] The 1-based column number of the end location. + * @property {number} [endLine] The 1-based line number of the end location. + * @property {boolean} fatal If `true` then this is a fatal error. + * @property {{range:[number,number], text:string}} [fix] Information for autofix. + * @property {number|undefined} line The 1-based line number. + * @property {string} message The error message. + * @property {string|null} ruleId The ID of the rule which makes this message. + * @property {0|1|2} severity The severity of this message. + * @property {Array<{kind: string, justification: string}>} suppressions The suppression info. + * @property {Array<{desc?: string, messageId?: string, fix: {range: [number, number], text: string}}>} [suggestions] Information for suggestions. + */ + /** * @typedef {Object} SuggestionResult * @property {string} desc A short description. @@ -121,7 +136,6 @@ module.exports = {}; /** * @typedef {Object} RuleMetaDocs - * @property {string} category The category of the rule. * @property {string} description The description of the rule. * @property {boolean} recommended If `true` then the rule is included in `eslint:recommended` preset. * @property {string} url The URL of the rule documentation. @@ -132,6 +146,7 @@ module.exports = {}; * @property {boolean} [deprecated] If `true` then the rule has been deprecated. * @property {RuleMetaDocs} docs The document information of the rule. * @property {"code"|"whitespace"} [fixable] The autofix type. + * @property {boolean} [hasSuggestions] If `true` then the rule provides suggestions. * @property {Record<string,string>} [messages] The messages the rule reports. * @property {string[]} [replacedBy] The IDs of the alternative rules. * @property {Array|Object} schema The option schema of the rule. @@ -158,3 +173,27 @@ module.exports = {}; * @property {string} ruleId The rule ID. * @property {string[]} replacedBy The rule IDs that replace this deprecated rule. */ + +/** + * A linting result. + * @typedef {Object} LintResult + * @property {string} filePath The path to the file that was linted. + * @property {LintMessage[]} messages All of the messages for the result. + * @property {SuppressedLintMessage[]} suppressedMessages All of the suppressed messages for the result. + * @property {number} errorCount Number of errors for the result. + * @property {number} fatalErrorCount Number of fatal errors for the result. + * @property {number} warningCount Number of warnings for the result. + * @property {number} fixableErrorCount Number of fixable errors for the result. + * @property {number} fixableWarningCount Number of fixable warnings for the result. + * @property {string} [source] The source code of the file that was linted. + * @property {string} [output] The source code of the file that was linted, with as many fixes applied as possible. + * @property {DeprecatedRuleInfo[]} usedDeprecatedRules The list of used deprecated rules. + */ + +/** + * A formatter function. + * @callback FormatterFunction + * @param {LintResult[]} results The list of linting results. + * @param {{cwd: string, rulesMeta: Record<string, RuleMeta>}} [context] A context object. + * @returns {string | Promise<string>} Formatted text. + */ diff --git a/eslint/lib/source-code/token-store/cursor.js b/eslint/lib/source-code/token-store/cursor.js index 494762a..0b72600 100644 --- a/eslint/lib/source-code/token-store/cursor.js +++ b/eslint/lib/source-code/token-store/cursor.js @@ -69,7 +69,7 @@ module.exports = class Cursor { * @returns {boolean} `true` if the next token exists. * @abstract */ - /* istanbul ignore next */ + /* c8 ignore next */ moveNext() { // eslint-disable-line class-methods-use-this -- Unused throw new Error("Not implemented."); } diff --git a/eslint/lib/unsupported-api.js b/eslint/lib/unsupported-api.js index 110b35a..c1daf54 100644 --- a/eslint/lib/unsupported-api.js +++ b/eslint/lib/unsupported-api.js @@ -12,6 +12,8 @@ //----------------------------------------------------------------------------- const { FileEnumerator } = require("./cli-engine/file-enumerator"); +const { FlatESLint } = require("./eslint/flat-eslint"); +const FlatRuleTester = require("./rule-tester/flat-rule-tester"); //----------------------------------------------------------------------------- // Exports @@ -19,5 +21,7 @@ const { FileEnumerator } = require("./cli-engine/file-enumerator"); module.exports = { builtinRules: require("./rules"), + FlatESLint, + FlatRuleTester, FileEnumerator }; diff --git a/eslint/messages/all-files-ignored.js b/eslint/messages/all-files-ignored.js index d85828d..70877a4 100644 --- a/eslint/messages/all-files-ignored.js +++ b/eslint/messages/all-files-ignored.js @@ -12,5 +12,5 @@ If you do want to lint these files, try the following solutions: * Check your .eslintignore file, or the eslintIgnore property in package.json, to ensure that the files are not configured to be ignored. * Explicitly list the files from this glob that you'd like to lint on the command-line, rather than providing a glob as an argument. -`.trimLeft(); +`.trimStart(); }; diff --git a/eslint/messages/extend-config-missing.js b/eslint/messages/extend-config-missing.js index db8a5c6..5b3498f 100644 --- a/eslint/messages/extend-config-missing.js +++ b/eslint/messages/extend-config-missing.js @@ -9,5 +9,5 @@ ESLint couldn't find the config "${configName}" to extend from. Please check tha The config "${configName}" was referenced from the config file in "${importerName}". If you still have problems, please stop by https://eslint.org/chat/help to chat with the team. -`.trimLeft(); +`.trimStart(); }; diff --git a/eslint/messages/failed-to-read-json.js b/eslint/messages/failed-to-read-json.js index 5114de3..e7c6cb5 100644 --- a/eslint/messages/failed-to-read-json.js +++ b/eslint/messages/failed-to-read-json.js @@ -7,5 +7,5 @@ module.exports = function(it) { Failed to read JSON file at ${path}: ${message} -`.trimLeft(); +`.trimStart(); }; diff --git a/eslint/messages/file-not-found.js b/eslint/messages/file-not-found.js index 26a5d57..1a62fcf 100644 --- a/eslint/messages/file-not-found.js +++ b/eslint/messages/file-not-found.js @@ -6,5 +6,5 @@ module.exports = function(it) { return ` No files matching the pattern "${pattern}"${globDisabled ? " (with disabling globs)" : ""} were found. Please check for typing mistakes in the pattern. -`.trimLeft(); +`.trimStart(); }; diff --git a/eslint/messages/no-config-found.js b/eslint/messages/no-config-found.js index 1042143..9860410 100644 --- a/eslint/messages/no-config-found.js +++ b/eslint/messages/no-config-found.js @@ -6,10 +6,10 @@ module.exports = function(it) { return ` ESLint couldn't find a configuration file. To set up a configuration file for this project, please run: - eslint --init + npm init @eslint/config ESLint looked for configuration files in ${directoryPath} and its ancestors. If it found none, it then looked in your home directory. If you think you already have a configuration file or if you need more help, please stop by the ESLint chat room: https://eslint.org/chat/help -`.trimLeft(); +`.trimStart(); }; diff --git a/eslint/messages/plugin-invalid.js b/eslint/messages/plugin-invalid.js index 7913576..8b471d4 100644 --- a/eslint/messages/plugin-invalid.js +++ b/eslint/messages/plugin-invalid.js @@ -12,5 +12,5 @@ module.exports = function(it) { "${configName}" was referenced from the config file in "${importerName}". If you still can't figure out the problem, please stop by https://eslint.org/chat/help to chat with the team. -`.trimLeft(); +`.trimStart(); }; diff --git a/eslint/messages/plugin-missing.js b/eslint/messages/plugin-missing.js index f58c78c..0b7d34e 100644 --- a/eslint/messages/plugin-missing.js +++ b/eslint/messages/plugin-missing.js @@ -15,5 +15,5 @@ It's likely that the plugin isn't installed correctly. Try reinstalling by runni The plugin "${pluginName}" was referenced from the config file in "${importerName}". If you still can't figure out the problem, please stop by https://eslint.org/chat/help to chat with the team. -`.trimLeft(); +`.trimStart(); }; diff --git a/eslint/messages/print-config-with-directory-path.js b/eslint/messages/print-config-with-directory-path.js index 6a5d571..f65bdaa 100644 --- a/eslint/messages/print-config-with-directory-path.js +++ b/eslint/messages/print-config-with-directory-path.js @@ -4,5 +4,5 @@ module.exports = function() { return ` The '--print-config' CLI option requires a path to a source code file rather than a directory. See also: https://eslint.org/docs/user-guide/command-line-interface#--print-config -`.trimLeft(); +`.trimStart(); }; diff --git a/eslint/messages/whitespace-found.js b/eslint/messages/whitespace-found.js index 4ce49ca..8a801bc 100644 --- a/eslint/messages/whitespace-found.js +++ b/eslint/messages/whitespace-found.js @@ -7,5 +7,5 @@ module.exports = function(it) { ESLint couldn't find the plugin "${pluginName}". because there is whitespace in the name. Please check your configuration and remove all whitespace from the plugin name. If you still can't figure out the problem, please stop by https://eslint.org/chat/help to chat with the team. -`.trimLeft(); +`.trimStart(); }; diff --git a/eslint/package.json b/eslint/package.json index 82cc50e..d002a60 100644 --- a/eslint/package.json +++ b/eslint/package.json @@ -1,6 +1,6 @@ { "name": "eslint", - "version": "8.4.0", + "version": "8.23.1", "author": "Nicholas C. Zakas <nicholas+npm@nczconsulting.com>", "description": "An AST-based pattern checker for JavaScript.", "bin": { @@ -16,7 +16,9 @@ "test": "node Makefile.js test", "test:cli": "mocha", "lint": "node Makefile.js lint", + "lint:docsjs": "node Makefile.js lintDocsJS", "fix": "node Makefile.js lint -- fix", + "fix:docsjs": "node Makefile.js lintDocsJS -- fix", "fuzz": "node Makefile.js fuzz", "generate-release": "node Makefile.js generateRelease", "generate-alpharelease": "node Makefile.js generatePrerelease -- alpha", @@ -25,14 +27,20 @@ "publish-release": "node Makefile.js publishRelease", "gensite": "node Makefile.js gensite", "webpack": "node Makefile.js webpack", - "perf": "node Makefile.js perf" + "perf": "node Makefile.js perf", + "docs:update-links": "node tools/fetch-docs-links.js" }, "gitHooks": { "pre-commit": "lint-staged" }, "lint-staged": { "*.js": "eslint --fix", - "*.md": "markdownlint" + "*.md": "markdownlint --fix", + "docs/src/rules/*.md": [ + "node tools/fetch-docs-links.js", + "git add docs/src/_data/further_reading_links.json" + ], + "docs/**/*.svg": "npx svgo -r --multipass" }, "files": [ "LICENSE", @@ -47,67 +55,72 @@ "homepage": "https://eslint.org", "bugs": "https://github.com/eslint/eslint/issues/", "dependencies": { - "@eslint/eslintrc": "^1.0.5", - "@humanwhocodes/config-array": "^0.9.2", + "@eslint/eslintrc": "^1.3.2", + "@humanwhocodes/config-array": "^0.10.4", + "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "@humanwhocodes/module-importer": "^1.0.1", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", - "enquirer": "^2.3.5", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.0", + "eslint-scope": "^7.1.1", "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.1.0", - "espree": "^9.2.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.4.0", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", + "find-up": "^5.0.0", "glob-parent": "^6.0.1", - "globals": "^13.6.0", - "ignore": "^4.0.6", + "globals": "^13.15.0", + "globby": "^11.1.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.1", - "progress": "^2.0.0", "regexpp": "^3.2.0", - "semver": "^7.2.1", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "text-table": "^0.2.0" }, "devDependencies": { "@babel/core": "^7.4.3", "@babel/preset-env": "^7.4.3", "babel-loader": "^8.0.5", + "c8": "^7.12.0", "chai": "^4.0.1", "cheerio": "^0.22.0", "common-tags": "^1.8.0", "core-js": "^3.1.3", - "dateformat": "^4.5.1", "ejs": "^3.0.2", "eslint": "file:.", "eslint-config-eslint": "file:packages/eslint-config-eslint", "eslint-plugin-eslint-comments": "^3.2.0", - "eslint-plugin-eslint-plugin": "^4.0.1", + "eslint-plugin-eslint-plugin": "^4.4.0", "eslint-plugin-internal-rules": "file:tools/internal-rules", - "eslint-plugin-jsdoc": "^37.0.0", - "eslint-plugin-node": "^11.1.0", + "eslint-plugin-jsdoc": "^38.1.6", + "eslint-plugin-n": "^15.2.4", + "eslint-plugin-unicorn": "^42.0.0", "eslint-release": "^3.2.0", "eslump": "^3.0.0", "esprima": "^4.0.1", + "fast-glob": "^3.2.11", "fs-teardown": "^0.1.3", "glob": "^7.1.6", + "got": "^11.8.3", + "gray-matter": "^4.0.3", "jsdoc": "^3.5.5", "karma": "^6.1.1", "karma-chrome-launcher": "^3.1.0", @@ -116,18 +129,27 @@ "karma-webpack": "^5.0.0", "lint-staged": "^11.0.0", "load-perf": "^0.2.0", - "markdownlint": "^0.24.0", - "markdownlint-cli": "^0.30.0", + "markdownlint": "^0.25.1", + "markdownlint-cli": "^0.31.1", + "marked": "^4.0.8", "memfs": "^3.0.1", + "metascraper": "^5.25.7", + "metascraper-description": "^5.25.7", + "metascraper-image": "^5.29.3", + "metascraper-logo": "^5.25.7", + "metascraper-logo-favicon": "^5.25.7", + "metascraper-title": "^5.25.7", "mocha": "^8.3.2", "mocha-junit-reporter": "^2.0.0", "node-polyfill-webpack-plugin": "^1.0.3", "npm-license": "^0.3.3", - "nyc": "^15.0.1", + "pirates": "^4.0.5", + "progress": "^2.0.3", "proxyquire": "^2.0.1", - "puppeteer": "^9.1.1", + "puppeteer": "^13.7.0", "recast": "^0.20.4", "regenerator-runtime": "^0.13.2", + "semver": "^7.3.5", "shelljs": "^0.8.2", "sinon": "^11.0.0", "temp": "^0.9.0", diff --git a/eslint/templates/blogpost.md.ejs b/eslint/templates/blogpost.md.ejs index 37be7ec..2d73ee1 100644 --- a/eslint/templates/blogpost.md.ejs +++ b/eslint/templates/blogpost.md.ejs @@ -2,11 +2,14 @@ layout: post title: ESLint v<%- version %> released teaser: "We just pushed ESLint v<%- version %>, which is a <%- type %> release upgrade of ESLint. This release <% if (type !== "patch") { %>adds some new features and <% } %>fixes several bugs found in the previous release.<% if (type === "major") { %> This release also has some breaking changes, so please read the following closely.<% } %>" +image: release-notes-<%- type %>.png +draft: true +authors: + - eslintbot categories: - Release Notes tags: - - release - - <%- type %> + - Release --- <% diff --git a/eslint/templates/formatter-examples.md.ejs b/eslint/templates/formatter-examples.md.ejs index b558395..6dae9d7 100644 --- a/eslint/templates/formatter-examples.md.ejs +++ b/eslint/templates/formatter-examples.md.ejs @@ -1,8 +1,13 @@ --- -title: Documentation +title: Formatters layout: doc +eleventyNavigation: + key: formatters + parent: user guide + title: Formatters + order: 5 +edit_link: https://github.com/eslint/eslint/edit/main/templates/formatter-examples.md.ejs --- -# ESLint Formatters ESLint comes with several built-in formatters to control the appearance of the linting results, and supports third-party formatters as well. @@ -50,10 +55,12 @@ function addOne(i) { ### <%= formatterName %> <% if (formatterName !== "html") { -%> -``` -<%- formatterResults[formatterName].result %> + +```text +<%= formatterResults[formatterName].result %> ``` <% } else {-%> + <iframe src="html-formatter-example.html" width="100%" height="460px"></iframe> <% } -%> <% }) -%> diff --git a/eslint/tests/_utils/test-lazy-loading-rules.js b/eslint/tests/_utils/test-lazy-loading-rules.js new file mode 100644 index 0000000..34e1986 --- /dev/null +++ b/eslint/tests/_utils/test-lazy-loading-rules.js @@ -0,0 +1,66 @@ +/** + * @fileoverview Tests lazy-loading of core rules + * @author Milos Djermanovic + */ + +/* + * This module should be run as a child process, with `fork()`, + * because it is important to run this test with a separate, clean Node process + * in order to add hooks before any of the ESLint modules is loaded. + */ + +"use strict"; + +const path = require("path"); +const assert = require("assert"); +const { addHook } = require("pirates"); + +const { + dir: rulesDirectoryPath, + name: rulesDirectoryIndexFilename +} = path.parse(require.resolve("../../lib/rules")); + +// Show full stack trace. The default 10 is usually not enough to find the root cause of this problem. +Error.stackTraceLimit = Infinity; + +const [cwd, pattern, usedRulesCommaSeparated] = process.argv.slice(2); + +assert.ok(cwd, "cwd argument isn't provided"); +assert.ok(pattern, "pattern argument isn't provided"); +assert.ok(usedRulesCommaSeparated, "used rules argument isn't provided"); + +const usedRules = usedRulesCommaSeparated.split(","); + +// `require()` hook +addHook( + (_code, filename) => { + throw new Error(`Unexpected attempt to load unused rule ${filename}`); + }, + { + + // returns `true` if the hook (the function passed in as the first argument) should be called for this filename + matcher(filename) { + const { dir, name } = path.parse(filename); + + if (dir === rulesDirectoryPath && ![rulesDirectoryIndexFilename, ...usedRules].includes(name)) { + return true; + } + + return false; + } + + } +); + +/* + * Everything related to loading any ESLint modules should be in this IIFE + */ +(async () => { + const { ESLint } = require("../.."); + const eslint = new ESLint({ cwd }); + + await eslint.lintFiles([pattern]); +})().catch(({ message, stack }) => { + process.send({ message, stack }); + process.exit(1); // eslint-disable-line n/no-process-exit -- this is a child process +}); diff --git a/eslint/tests/bin/eslint.js b/eslint/tests/bin/eslint.js index 38f132b..848dba1 100644 --- a/eslint/tests/bin/eslint.js +++ b/eslint/tests/bin/eslint.js @@ -82,7 +82,7 @@ describe("bin/eslint.js", () => { describe("reading from stdin", () => { it("has exit code 0 if no linting errors are reported", () => { - const child = runESLint(["--stdin", "--no-eslintrc"]); + const child = runESLint(["--stdin", "--no-config-lookup"]); child.stdin.write("var foo = bar;\n"); child.stdin.end(); @@ -92,7 +92,7 @@ describe("bin/eslint.js", () => { it("has exit code 0 if no linting errors are reported", () => { const child = runESLint([ "--stdin", - "--no-eslintrc", + "--no-config-lookup", "--rule", "{'no-extra-semi': 2}", "--fix-dry-run", @@ -104,6 +104,7 @@ describe("bin/eslint.js", () => { { filePath: "<text>", messages: [], + suppressedMessages: [], errorCount: 0, fatalErrorCount: 0, warningCount: 0, @@ -127,7 +128,7 @@ describe("bin/eslint.js", () => { }); it("has exit code 1 if a syntax error is thrown", () => { - const child = runESLint(["--stdin", "--no-eslintrc"]); + const child = runESLint(["--stdin", "--no-config-lookup"]); child.stdin.write("This is not valid JS syntax.\n"); child.stdin.end(); @@ -135,7 +136,7 @@ describe("bin/eslint.js", () => { }); it("has exit code 2 if a syntax error is thrown when exit-on-fatal-error is true", () => { - const child = runESLint(["--stdin", "--no-eslintrc", "--exit-on-fatal-error"]); + const child = runESLint(["--stdin", "--no-config-lookup", "--exit-on-fatal-error"]); child.stdin.write("This is not valid JS syntax.\n"); child.stdin.end(); @@ -143,7 +144,7 @@ describe("bin/eslint.js", () => { }); it("has exit code 1 if a linting error occurs", () => { - const child = runESLint(["--stdin", "--no-eslintrc", "--rule", "semi:2"]); + const child = runESLint(["--stdin", "--no-config-lookup", "--rule", "semi:2"]); child.stdin.write("var foo = bar // <-- no semicolon\n"); child.stdin.end(); @@ -181,7 +182,7 @@ describe("bin/eslint.js", () => { ); it("successfully reads from an asynchronous pipe", () => { - const child = runESLint(["--stdin", "--no-eslintrc"]); + const child = runESLint(["--stdin", "--no-config-lookup"]); child.stdin.write("var foo = bar;\n"); return new Promise(resolve => setTimeout(resolve, 300)).then(() => { @@ -193,7 +194,7 @@ describe("bin/eslint.js", () => { }); it("successfully handles more than 4k data via stdin", () => { - const child = runESLint(["--stdin", "--no-eslintrc"]); + const child = runESLint(["--stdin", "--no-config-lookup"]); const large = fs.createReadStream(path.join(__dirname, "../bench/large.js"), "utf8"); large.pipe(child.stdin); @@ -204,9 +205,9 @@ describe("bin/eslint.js", () => { describe("running on files", () => { it("has exit code 0 if no linting errors occur", () => assertExitCode(runESLint(["bin/eslint.js"]), 0)); - it("has exit code 0 if a linting warning is reported", () => assertExitCode(runESLint(["bin/eslint.js", "--env", "es2021", "--no-eslintrc", "--rule", "semi: [1, never]"]), 0)); - it("has exit code 1 if a linting error is reported", () => assertExitCode(runESLint(["bin/eslint.js", "--env", "es2021", "--no-eslintrc", "--rule", "semi: [2, never]"]), 1)); - it("has exit code 1 if a syntax error is thrown", () => assertExitCode(runESLint(["README.md"]), 1)); + it("has exit code 0 if a linting warning is reported", () => assertExitCode(runESLint(["bin/eslint.js", "--no-config-lookup", "--rule", "semi: [1, never]"]), 0)); + it("has exit code 1 if a linting error is reported", () => assertExitCode(runESLint(["bin/eslint.js", "--no-config-lookup", "--rule", "semi: [2, never]"]), 1)); + it("has exit code 1 if a syntax error is thrown", () => assertExitCode(runESLint(["tests/fixtures/exit-on-fatal-error/fatal-error.js", "--no-ignore"]), 1)); }); describe("automatically fixing files", () => { @@ -221,7 +222,7 @@ describe("bin/eslint.js", () => { }); it("has exit code 0 and fixes a file if all rules can be fixed", () => { - const child = runESLint(["--fix", "--no-eslintrc", "--no-ignore", tempFilePath]); + const child = runESLint(["--fix", "--no-config-lookup", "--no-ignore", tempFilePath]); const exitCodeAssertion = assertExitCode(child, 0); const outputFileAssertion = awaitExit(child).then(() => { assert.strictEqual(fs.readFileSync(tempFilePath).toString(), expectedFixedText); @@ -231,7 +232,7 @@ describe("bin/eslint.js", () => { }); it("has exit code 0, fixes errors in a file, and does not report or fix warnings if --quiet and --fix are used", () => { - const child = runESLint(["--fix", "--quiet", "--no-eslintrc", "--no-ignore", tempFilePath]); + const child = runESLint(["--fix", "--quiet", "--no-config-lookup", "--no-ignore", tempFilePath]); const exitCodeAssertion = assertExitCode(child, 0); const stdoutAssertion = getOutput(child).then(output => assert.strictEqual(output.stdout, "")); const outputFileAssertion = awaitExit(child).then(() => { @@ -242,7 +243,7 @@ describe("bin/eslint.js", () => { }); it("has exit code 1 and fixes a file if not all rules can be fixed", () => { - const child = runESLint(["--fix", "--no-eslintrc", "--no-ignore", "--rule", "max-len: [2, 10]", tempFilePath]); + const child = runESLint(["--fix", "--no-config-lookup", "--no-ignore", "--rule", "max-len: [2, 10]", tempFilePath]); const exitCodeAssertion = assertExitCode(child, 1); const outputFileAssertion = awaitExit(child).then(() => { assert.strictEqual(fs.readFileSync(tempFilePath).toString(), expectedFixedText); @@ -259,7 +260,7 @@ describe("bin/eslint.js", () => { describe("cache files", () => { const CACHE_PATH = ".temp-eslintcache"; const SOURCE_PATH = "tests/fixtures/cache/src/test-file.js"; - const ARGS_WITHOUT_CACHE = ["--no-eslintrc", "--no-ignore", SOURCE_PATH, "--cache-location", CACHE_PATH]; + const ARGS_WITHOUT_CACHE = ["--no-config-lookup", "--no-ignore", SOURCE_PATH, "--cache-location", CACHE_PATH]; const ARGS_WITH_CACHE = ARGS_WITHOUT_CACHE.concat("--cache"); describe("when no cache file exists", () => { @@ -387,40 +388,10 @@ describe("bin/eslint.js", () => { }); it("prints the error message pointing to line of code", () => { - const invalidConfig = path.join(__dirname, "../fixtures/bin/.eslintrc.yml"); - const child = runESLint(["--no-ignore", invalidConfig]); - const exitCodeAssertion = assertExitCode(child, 2); - const outputAssertion = getOutput(child).then(output => { - assert.strictEqual(output.stdout, ""); - assert.match( - output.stderr, - /: bad indentation of a mapping entry \(\d+:\d+\)/u // a part of the error message from `js-yaml` dependency - ); - }); - - return Promise.all([exitCodeAssertion, outputAssertion]); - }); - }); - + const invalidConfig = path.join(__dirname, "../fixtures/bin/eslint.config.js"); + const child = runESLint(["--no-ignore", "-c", invalidConfig]); - describe("emitting a warning for ecmaFeatures", () => { - it("does not emit a warning when it does not find an ecmaFeatures option", () => { - const child = runESLint(["Makefile.js"]); - - const exitCodePromise = assertExitCode(child, 0); - const outputPromise = getOutput(child).then(output => assert.strictEqual(output.stderr, "")); - - return Promise.all([exitCodePromise, outputPromise]); - }); - it("emits a warning when it finds an ecmaFeatures option", () => { - const child = runESLint(["-c", "tests/fixtures/config-file/ecma-features/.eslintrc.yml", "Makefile.js"]); - - const exitCodePromise = assertExitCode(child, 0); - const outputPromise = getOutput(child).then(output => { - assert.include(output.stderr, "The 'ecmaFeatures' config file property is deprecated and has no effect."); - }); - - return Promise.all([exitCodePromise, outputPromise]); + return assertExitCode(child, 2); }); }); diff --git a/eslint/tests/fixtures/autoconfig/source-with-comments.js b/eslint/tests/fixtures/autoconfig/source-with-comments.js deleted file mode 100644 index d2e3bf9..0000000 --- a/eslint/tests/fixtures/autoconfig/source-with-comments.js +++ /dev/null @@ -1,6 +0,0 @@ -/* eslint semi: [2, "never"] */ -/* eslint import/extensions: 2 */ - -var foo = 42; -var baz = "baz"; -var bar = '"no-escape"'; diff --git a/eslint/tests/fixtures/autoconfig/source.js b/eslint/tests/fixtures/autoconfig/source.js deleted file mode 100644 index 0c126ba..0000000 --- a/eslint/tests/fixtures/autoconfig/source.js +++ /dev/null @@ -1,3 +0,0 @@ -var foo = 42; -var baz = "baz"; -var bar = '"no-escape"'; diff --git a/eslint/tests/fixtures/bin/eslint.config.js b/eslint/tests/fixtures/bin/eslint.config.js new file mode 100644 index 0000000..bbaa759 --- /dev/null +++ b/eslint/tests/fixtures/bin/eslint.config.js @@ -0,0 +1,5 @@ +// intentionally invalid JavaScript +rules: + semi: error +yoda: error + quotes: error diff --git a/eslint/tests/fixtures/cli-engine/deprecated-rule-config/eslint.config.js b/eslint/tests/fixtures/cli-engine/deprecated-rule-config/eslint.config.js new file mode 100644 index 0000000..eb9b7f0 --- /dev/null +++ b/eslint/tests/fixtures/cli-engine/deprecated-rule-config/eslint.config.js @@ -0,0 +1,5 @@ +module.exports = { + rules: { + "indent-legacy": "error" + } +}; diff --git a/eslint/tests/fixtures/config-hierarchy/broken/add-conf.js b/eslint/tests/fixtures/config-hierarchy/broken/add-conf.js new file mode 100644 index 0000000..75c3292 --- /dev/null +++ b/eslint/tests/fixtures/config-hierarchy/broken/add-conf.js @@ -0,0 +1,5 @@ +module.exports = { + rules: { + semi: [1, "never"] + } +}; diff --git a/eslint/tests/fixtures/config-hierarchy/broken/override-conf.js b/eslint/tests/fixtures/config-hierarchy/broken/override-conf.js new file mode 100644 index 0000000..6287d08 --- /dev/null +++ b/eslint/tests/fixtures/config-hierarchy/broken/override-conf.js @@ -0,0 +1,5 @@ +module.exports = { + rules: { + quotes: 0; + } +}; diff --git a/eslint/tests/fixtures/config-initializer/lib/doubleQuotes.js b/eslint/tests/fixtures/config-initializer/lib/doubleQuotes.js deleted file mode 100644 index 1cd4a2a..0000000 --- a/eslint/tests/fixtures/config-initializer/lib/doubleQuotes.js +++ /dev/null @@ -1 +0,0 @@ -var foo = "doubleQuotes"; diff --git a/eslint/tests/fixtures/config-initializer/lib/no-semi.js b/eslint/tests/fixtures/config-initializer/lib/no-semi.js deleted file mode 100644 index bf10b1c..0000000 --- a/eslint/tests/fixtures/config-initializer/lib/no-semi.js +++ /dev/null @@ -1 +0,0 @@ -var name = "ESLint" diff --git a/eslint/tests/fixtures/config-initializer/new-es-features/new-es-features.js b/eslint/tests/fixtures/config-initializer/new-es-features/new-es-features.js deleted file mode 100644 index c3e03fc..0000000 --- a/eslint/tests/fixtures/config-initializer/new-es-features/new-es-features.js +++ /dev/null @@ -1,3 +0,0 @@ -async function fn() { - await Promise.resolve(); -} diff --git a/eslint/tests/fixtures/config-initializer/parse-error/parse-error.js b/eslint/tests/fixtures/config-initializer/parse-error/parse-error.js deleted file mode 100644 index 90bd920..0000000 --- a/eslint/tests/fixtures/config-initializer/parse-error/parse-error.js +++ /dev/null @@ -1 +0,0 @@ -+; diff --git a/eslint/tests/fixtures/config-initializer/singleQuotes.js b/eslint/tests/fixtures/config-initializer/singleQuotes.js deleted file mode 100644 index db1e01f..0000000 --- a/eslint/tests/fixtures/config-initializer/singleQuotes.js +++ /dev/null @@ -1 +0,0 @@ -var foo = 'singleQuotes'; diff --git a/eslint/tests/fixtures/config-initializer/tests/console-log.js b/eslint/tests/fixtures/config-initializer/tests/console-log.js deleted file mode 100644 index 929e82a..0000000 --- a/eslint/tests/fixtures/config-initializer/tests/console-log.js +++ /dev/null @@ -1 +0,0 @@ -console.log("I'm a log"); diff --git a/eslint/tests/fixtures/config-initializer/tests/doubleQuotes.js b/eslint/tests/fixtures/config-initializer/tests/doubleQuotes.js deleted file mode 100644 index 1cd4a2a..0000000 --- a/eslint/tests/fixtures/config-initializer/tests/doubleQuotes.js +++ /dev/null @@ -1 +0,0 @@ -var foo = "doubleQuotes"; diff --git a/eslint/tests/fixtures/configurations/env-browser.js b/eslint/tests/fixtures/configurations/env-browser.js new file mode 100644 index 0000000..a99c570 --- /dev/null +++ b/eslint/tests/fixtures/configurations/env-browser.js @@ -0,0 +1,11 @@ +module.exports = { + languageOptions: { + globals: { + window: false + } + }, + rules: { + "no-alert": 0, + "no-undef": 2 + } +}; diff --git a/eslint/tests/fixtures/configurations/env-node.js b/eslint/tests/fixtures/configurations/env-node.js new file mode 100644 index 0000000..27d5fe7 --- /dev/null +++ b/eslint/tests/fixtures/configurations/env-node.js @@ -0,0 +1,13 @@ +module.exports = { + languageOptions: { + globals: { + __dirname: false, + console: false + }, + sourceType: "commonjs" + }, + rules: { + "no-console": 0, + "no-undef": 2 + } +}; diff --git a/eslint/tests/fixtures/configurations/es6.js b/eslint/tests/fixtures/configurations/es6.js new file mode 100644 index 0000000..975beb2 --- /dev/null +++ b/eslint/tests/fixtures/configurations/es6.js @@ -0,0 +1,7 @@ +module.exports = { + languageOptions: { + parserOptions: { + ecmaVersion: 6 + } + } +}; diff --git a/eslint/tests/fixtures/configurations/plugins-with-prefix.js b/eslint/tests/fixtures/configurations/plugins-with-prefix.js new file mode 100644 index 0000000..4241114 --- /dev/null +++ b/eslint/tests/fixtures/configurations/plugins-with-prefix.js @@ -0,0 +1,5 @@ +module.exports = { + "rules": { + "example/example-rule": 1 + } +}; diff --git a/eslint/tests/fixtures/configurations/processors.js b/eslint/tests/fixtures/configurations/processors.js new file mode 100644 index 0000000..e8bcce3 --- /dev/null +++ b/eslint/tests/fixtures/configurations/processors.js @@ -0,0 +1,12 @@ +module.exports = { + "plugins": [ + "processor", + "example" + ], + + "rules": { + "no-console": 2, + "no-unused-vars": 2, + "example/example-rule": 1 + } +} diff --git a/eslint/tests/fixtures/configurations/quotes-error.js b/eslint/tests/fixtures/configurations/quotes-error.js new file mode 100644 index 0000000..bbf45f0 --- /dev/null +++ b/eslint/tests/fixtures/configurations/quotes-error.js @@ -0,0 +1,5 @@ +module.exports = { + rules: { + quotes: [2, "double"] + } +}; diff --git a/eslint/tests/fixtures/configurations/semi-error.js b/eslint/tests/fixtures/configurations/semi-error.js new file mode 100644 index 0000000..2dcc0b1 --- /dev/null +++ b/eslint/tests/fixtures/configurations/semi-error.js @@ -0,0 +1,6 @@ +module.exports = { + rules: { + semi: 1, + strict: 0 + } +}; diff --git a/eslint/tests/fixtures/eslint.config.js b/eslint/tests/fixtures/eslint.config.js new file mode 100644 index 0000000..2d9e084 --- /dev/null +++ b/eslint/tests/fixtures/eslint.config.js @@ -0,0 +1,6 @@ + +module.exports = { + rules: { + strict: 0 + } +}; diff --git a/eslint/tests/fixtures/ignored-paths/.eslintignoreForNegationTest b/eslint/tests/fixtures/ignored-paths/.eslintignoreForNegationTest new file mode 100644 index 0000000..d1cc10c --- /dev/null +++ b/eslint/tests/fixtures/ignored-paths/.eslintignoreForNegationTest @@ -0,0 +1 @@ +undef.js diff --git a/eslint/tests/fixtures/ignored-paths/.eslintignoreWithEscapedBrackets b/eslint/tests/fixtures/ignored-paths/.eslintignoreWithEscapedBrackets new file mode 100644 index 0000000..4cc03e6 --- /dev/null +++ b/eslint/tests/fixtures/ignored-paths/.eslintignoreWithEscapedBrackets @@ -0,0 +1,3 @@ +brackets/\[index.js +brackets/index\].js +brackets/\[index\].js diff --git a/eslint/tests/fixtures/ignored-paths/brackets/[index.js b/eslint/tests/fixtures/ignored-paths/brackets/[index.js new file mode 100644 index 0000000..9b2b301 --- /dev/null +++ b/eslint/tests/fixtures/ignored-paths/brackets/[index.js @@ -0,0 +1 @@ +/* content is not necessary */ diff --git a/eslint/tests/fixtures/ignored-paths/brackets/[index].js b/eslint/tests/fixtures/ignored-paths/brackets/[index].js new file mode 100644 index 0000000..9b2b301 --- /dev/null +++ b/eslint/tests/fixtures/ignored-paths/brackets/[index].js @@ -0,0 +1 @@ +/* content is not necessary */ diff --git a/eslint/tests/fixtures/ignored-paths/brackets/index.js b/eslint/tests/fixtures/ignored-paths/brackets/index.js new file mode 100644 index 0000000..9b2b301 --- /dev/null +++ b/eslint/tests/fixtures/ignored-paths/brackets/index.js @@ -0,0 +1 @@ +/* content is not necessary */ diff --git a/eslint/tests/fixtures/ignored-paths/brackets/index].js b/eslint/tests/fixtures/ignored-paths/brackets/index].js new file mode 100644 index 0000000..9b2b301 --- /dev/null +++ b/eslint/tests/fixtures/ignored-paths/brackets/index].js @@ -0,0 +1 @@ +/* content is not necessary */ diff --git a/eslint/tests/fixtures/lazy-loading-rules/.eslintrc.js b/eslint/tests/fixtures/lazy-loading-rules/.eslintrc.js new file mode 100644 index 0000000..fc65002 --- /dev/null +++ b/eslint/tests/fixtures/lazy-loading-rules/.eslintrc.js @@ -0,0 +1,6 @@ +module.exports = { + root: true, + rules: { + semi: 2 + } +}; diff --git a/eslint/tests/fixtures/lazy-loading-rules/foo.js b/eslint/tests/fixtures/lazy-loading-rules/foo.js new file mode 100644 index 0000000..9b2b301 --- /dev/null +++ b/eslint/tests/fixtures/lazy-loading-rules/foo.js @@ -0,0 +1 @@ +/* content is not necessary */ diff --git a/eslint/tests/fixtures/max-warnings/eslint.config.js b/eslint/tests/fixtures/max-warnings/eslint.config.js new file mode 100644 index 0000000..8ad137c --- /dev/null +++ b/eslint/tests/fixtures/max-warnings/eslint.config.js @@ -0,0 +1,5 @@ +module.exports = { + rules: { + quotes: [1, "single"] + } +}; diff --git a/eslint/tests/fixtures/parsers/arrow-parens/identifer-type.js b/eslint/tests/fixtures/parsers/arrow-parens/identifier-type.js similarity index 100% rename from eslint/tests/fixtures/parsers/arrow-parens/identifer-type.js rename to eslint/tests/fixtures/parsers/arrow-parens/identifier-type.js diff --git a/eslint/tests/fixtures/parsers/function-paren-newline/arrow-function-return-type.js b/eslint/tests/fixtures/parsers/function-paren-newline/arrow-function-return-type.js new file mode 100644 index 0000000..dbd9d48 --- /dev/null +++ b/eslint/tests/fixtures/parsers/function-paren-newline/arrow-function-return-type.js @@ -0,0 +1,660 @@ +"use strict"; + +/** + * Parser: @typescript-eslint/parser@5.10.1 + * Source code: + * const method6 = ( + * abc: number, + * def: () => void, + * ): [ + * string, + * () => void + * ] => [`a${abc}`, def]; + * method6(3, () => {}); + */ + + exports.parse = () => ({ + type: "Program", + body: [ + { + type: "VariableDeclaration", + declarations: [ + { + type: "VariableDeclarator", + id: { + type: "Identifier", + name: "method6", + range: [6, 13], + loc: { + start: { line: 1, column: 6 }, + end: { line: 1, column: 13 }, + }, + }, + init: { + type: "ArrowFunctionExpression", + generator: false, + id: null, + params: [ + { + type: "Identifier", + name: "abc", + range: [20, 31], + loc: { + start: { line: 2, column: 2 }, + end: { line: 2, column: 13 }, + }, + typeAnnotation: { + type: "TSTypeAnnotation", + loc: { + start: { line: 2, column: 5 }, + end: { line: 2, column: 13 }, + }, + range: [23, 31], + typeAnnotation: { + type: "TSNumberKeyword", + range: [25, 31], + loc: { + start: { line: 2, column: 7 }, + end: { line: 2, column: 13 }, + }, + }, + }, + }, + { + type: "Identifier", + name: "def", + range: [35, 50], + loc: { + start: { line: 3, column: 2 }, + end: { line: 3, column: 17 }, + }, + typeAnnotation: { + type: "TSTypeAnnotation", + loc: { + start: { line: 3, column: 5 }, + end: { line: 3, column: 17 }, + }, + range: [38, 50], + typeAnnotation: { + type: "TSFunctionType", + params: [], + range: [40, 50], + loc: { + start: { line: 3, column: 7 }, + end: { line: 3, column: 17 }, + }, + returnType: { + type: "TSTypeAnnotation", + loc: { + start: { line: 3, column: 10 }, + end: { line: 3, column: 17 }, + }, + range: [43, 50], + typeAnnotation: { + type: "TSVoidKeyword", + range: [46, 50], + loc: { + start: { + line: 3, + column: 13, + }, + end: { + line: 3, + column: 17, + }, + }, + }, + }, + }, + }, + }, + ], + body: { + type: "ArrayExpression", + elements: [ + { + type: "TemplateLiteral", + quasis: [ + { + type: "TemplateElement", + value: { raw: "a", cooked: "a" }, + tail: false, + range: [86, 90], + loc: { + start: { line: 7, column: 6 }, + end: { line: 7, column: 10 }, + }, + }, + { + type: "TemplateElement", + value: { raw: "", cooked: "" }, + tail: true, + range: [93, 95], + loc: { + start: { line: 7, column: 13 }, + end: { line: 7, column: 15 }, + }, + }, + ], + expressions: [ + { + type: "Identifier", + name: "abc", + range: [90, 93], + loc: { + start: { line: 7, column: 10 }, + end: { line: 7, column: 13 }, + }, + }, + ], + range: [86, 95], + loc: { + start: { line: 7, column: 6 }, + end: { line: 7, column: 15 }, + }, + }, + { + type: "Identifier", + name: "def", + range: [97, 100], + loc: { + start: { line: 7, column: 17 }, + end: { line: 7, column: 20 }, + }, + }, + ], + range: [85, 101], + loc: { + start: { line: 7, column: 5 }, + end: { line: 7, column: 21 }, + }, + }, + async: false, + expression: true, + range: [16, 101], + loc: { + start: { line: 1, column: 16 }, + end: { line: 7, column: 21 }, + }, + returnType: { + type: "TSTypeAnnotation", + loc: { + start: { line: 4, column: 1 }, + end: { line: 7, column: 1 }, + }, + range: [53, 81], + typeAnnotation: { + type: "TSTupleType", + elementTypes: [ + { + type: "TSStringKeyword", + range: [59, 65], + loc: { + start: { line: 5, column: 2 }, + end: { line: 5, column: 8 }, + }, + }, + { + type: "TSFunctionType", + params: [], + range: [69, 79], + loc: { + start: { line: 6, column: 2 }, + end: { line: 6, column: 12 }, + }, + returnType: { + type: "TSTypeAnnotation", + loc: { + start: { line: 6, column: 5 }, + end: { line: 6, column: 12 }, + }, + range: [72, 79], + typeAnnotation: { + type: "TSVoidKeyword", + range: [75, 79], + loc: { + start: { + line: 6, + column: 8, + }, + end: { + line: 6, + column: 12, + }, + }, + }, + }, + }, + ], + range: [55, 81], + loc: { + start: { line: 4, column: 3 }, + end: { line: 7, column: 1 }, + }, + }, + }, + }, + range: [6, 101], + loc: { + start: { line: 1, column: 6 }, + end: { line: 7, column: 21 }, + }, + }, + ], + kind: "const", + range: [0, 102], + loc: { + start: { line: 1, column: 0 }, + end: { line: 7, column: 22 }, + }, + }, + { + type: "ExpressionStatement", + expression: { + type: "CallExpression", + callee: { + type: "Identifier", + name: "method6", + range: [103, 110], + loc: { + start: { line: 8, column: 0 }, + end: { line: 8, column: 7 }, + }, + }, + arguments: [ + { + type: "Literal", + value: 3, + raw: "3", + range: [111, 112], + loc: { + start: { line: 8, column: 8 }, + end: { line: 8, column: 9 }, + }, + }, + { + type: "ArrowFunctionExpression", + generator: false, + id: null, + params: [], + body: { + type: "BlockStatement", + body: [], + range: [120, 122], + loc: { + start: { line: 8, column: 17 }, + end: { line: 8, column: 19 }, + }, + }, + async: false, + expression: false, + range: [114, 122], + loc: { + start: { line: 8, column: 11 }, + end: { line: 8, column: 19 }, + }, + }, + ], + optional: false, + range: [103, 123], + loc: { + start: { line: 8, column: 0 }, + end: { line: 8, column: 20 }, + }, + }, + range: [103, 124], + loc: { + start: { line: 8, column: 0 }, + end: { line: 8, column: 21 }, + }, + }, + ], + sourceType: "script", + range: [0, 125], + loc: { start: { line: 1, column: 0 }, end: { line: 9, column: 0 } }, + tokens: [ + { + type: "Keyword", + value: "const", + range: [0, 5], + loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 5 } }, + }, + { + type: "Identifier", + value: "method6", + range: [6, 13], + loc: { + start: { line: 1, column: 6 }, + end: { line: 1, column: 13 }, + }, + }, + { + type: "Punctuator", + value: "=", + range: [14, 15], + loc: { + start: { line: 1, column: 14 }, + end: { line: 1, column: 15 }, + }, + }, + { + type: "Punctuator", + value: "(", + range: [16, 17], + loc: { + start: { line: 1, column: 16 }, + end: { line: 1, column: 17 }, + }, + }, + { + type: "Identifier", + value: "abc", + range: [20, 23], + loc: { start: { line: 2, column: 2 }, end: { line: 2, column: 5 } }, + }, + { + type: "Punctuator", + value: ":", + range: [23, 24], + loc: { start: { line: 2, column: 5 }, end: { line: 2, column: 6 } }, + }, + { + type: "Identifier", + value: "number", + range: [25, 31], + loc: { + start: { line: 2, column: 7 }, + end: { line: 2, column: 13 }, + }, + }, + { + type: "Punctuator", + value: ",", + range: [31, 32], + loc: { + start: { line: 2, column: 13 }, + end: { line: 2, column: 14 }, + }, + }, + { + type: "Identifier", + value: "def", + range: [35, 38], + loc: { start: { line: 3, column: 2 }, end: { line: 3, column: 5 } }, + }, + { + type: "Punctuator", + value: ":", + range: [38, 39], + loc: { start: { line: 3, column: 5 }, end: { line: 3, column: 6 } }, + }, + { + type: "Punctuator", + value: "(", + range: [40, 41], + loc: { start: { line: 3, column: 7 }, end: { line: 3, column: 8 } }, + }, + { + type: "Punctuator", + value: ")", + range: [41, 42], + loc: { start: { line: 3, column: 8 }, end: { line: 3, column: 9 } }, + }, + { + type: "Punctuator", + value: "=>", + range: [43, 45], + loc: { + start: { line: 3, column: 10 }, + end: { line: 3, column: 12 }, + }, + }, + { + type: "Keyword", + value: "void", + range: [46, 50], + loc: { + start: { line: 3, column: 13 }, + end: { line: 3, column: 17 }, + }, + }, + { + type: "Punctuator", + value: ",", + range: [50, 51], + loc: { + start: { line: 3, column: 17 }, + end: { line: 3, column: 18 }, + }, + }, + { + type: "Punctuator", + value: ")", + range: [52, 53], + loc: { start: { line: 4, column: 0 }, end: { line: 4, column: 1 } }, + }, + { + type: "Punctuator", + value: ":", + range: [53, 54], + loc: { start: { line: 4, column: 1 }, end: { line: 4, column: 2 } }, + }, + { + type: "Punctuator", + value: "[", + range: [55, 56], + loc: { start: { line: 4, column: 3 }, end: { line: 4, column: 4 } }, + }, + { + type: "Identifier", + value: "string", + range: [59, 65], + loc: { start: { line: 5, column: 2 }, end: { line: 5, column: 8 } }, + }, + { + type: "Punctuator", + value: ",", + range: [65, 66], + loc: { start: { line: 5, column: 8 }, end: { line: 5, column: 9 } }, + }, + { + type: "Punctuator", + value: "(", + range: [69, 70], + loc: { start: { line: 6, column: 2 }, end: { line: 6, column: 3 } }, + }, + { + type: "Punctuator", + value: ")", + range: [70, 71], + loc: { start: { line: 6, column: 3 }, end: { line: 6, column: 4 } }, + }, + { + type: "Punctuator", + value: "=>", + range: [72, 74], + loc: { start: { line: 6, column: 5 }, end: { line: 6, column: 7 } }, + }, + { + type: "Keyword", + value: "void", + range: [75, 79], + loc: { + start: { line: 6, column: 8 }, + end: { line: 6, column: 12 }, + }, + }, + { + type: "Punctuator", + value: "]", + range: [80, 81], + loc: { start: { line: 7, column: 0 }, end: { line: 7, column: 1 } }, + }, + { + type: "Punctuator", + value: "=>", + range: [82, 84], + loc: { start: { line: 7, column: 2 }, end: { line: 7, column: 4 } }, + }, + { + type: "Punctuator", + value: "[", + range: [85, 86], + loc: { start: { line: 7, column: 5 }, end: { line: 7, column: 6 } }, + }, + { + type: "Template", + value: "`a${", + range: [86, 90], + loc: { + start: { line: 7, column: 6 }, + end: { line: 7, column: 10 }, + }, + }, + { + type: "Identifier", + value: "abc", + range: [90, 93], + loc: { + start: { line: 7, column: 10 }, + end: { line: 7, column: 13 }, + }, + }, + { + type: "Template", + value: "}`", + range: [93, 95], + loc: { + start: { line: 7, column: 13 }, + end: { line: 7, column: 15 }, + }, + }, + { + type: "Punctuator", + value: ",", + range: [95, 96], + loc: { + start: { line: 7, column: 15 }, + end: { line: 7, column: 16 }, + }, + }, + { + type: "Identifier", + value: "def", + range: [97, 100], + loc: { + start: { line: 7, column: 17 }, + end: { line: 7, column: 20 }, + }, + }, + { + type: "Punctuator", + value: "]", + range: [100, 101], + loc: { + start: { line: 7, column: 20 }, + end: { line: 7, column: 21 }, + }, + }, + { + type: "Punctuator", + value: ";", + range: [101, 102], + loc: { + start: { line: 7, column: 21 }, + end: { line: 7, column: 22 }, + }, + }, + { + type: "Identifier", + value: "method6", + range: [103, 110], + loc: { start: { line: 8, column: 0 }, end: { line: 8, column: 7 } }, + }, + { + type: "Punctuator", + value: "(", + range: [110, 111], + loc: { start: { line: 8, column: 7 }, end: { line: 8, column: 8 } }, + }, + { + type: "Numeric", + value: "3", + range: [111, 112], + loc: { start: { line: 8, column: 8 }, end: { line: 8, column: 9 } }, + }, + { + type: "Punctuator", + value: ",", + range: [112, 113], + loc: { + start: { line: 8, column: 9 }, + end: { line: 8, column: 10 }, + }, + }, + { + type: "Punctuator", + value: "(", + range: [114, 115], + loc: { + start: { line: 8, column: 11 }, + end: { line: 8, column: 12 }, + }, + }, + { + type: "Punctuator", + value: ")", + range: [115, 116], + loc: { + start: { line: 8, column: 12 }, + end: { line: 8, column: 13 }, + }, + }, + { + type: "Punctuator", + value: "=>", + range: [117, 119], + loc: { + start: { line: 8, column: 14 }, + end: { line: 8, column: 16 }, + }, + }, + { + type: "Punctuator", + value: "{", + range: [120, 121], + loc: { + start: { line: 8, column: 17 }, + end: { line: 8, column: 18 }, + }, + }, + { + type: "Punctuator", + value: "}", + range: [121, 122], + loc: { + start: { line: 8, column: 18 }, + end: { line: 8, column: 19 }, + }, + }, + { + type: "Punctuator", + value: ")", + range: [122, 123], + loc: { + start: { line: 8, column: 19 }, + end: { line: 8, column: 20 }, + }, + }, + { + type: "Punctuator", + value: ";", + range: [123, 124], + loc: { + start: { line: 8, column: 20 }, + end: { line: 8, column: 21 }, + }, + }, + ], + comments: [], +}); diff --git a/eslint/tests/fixtures/rules/eslint.js b/eslint/tests/fixtures/rules/eslint.js new file mode 100644 index 0000000..aff3e58 --- /dev/null +++ b/eslint/tests/fixtures/rules/eslint.js @@ -0,0 +1,10 @@ +module.exports = { + languageOptions: { + "globals": { + "test": true + } + }, + "rules": { + "custom-rule": 1 + } +}; diff --git a/eslint/tests/fixtures/rules/missing-rule.js b/eslint/tests/fixtures/rules/missing-rule.js new file mode 100644 index 0000000..39a8c00 --- /dev/null +++ b/eslint/tests/fixtures/rules/missing-rule.js @@ -0,0 +1,5 @@ +module.exports = { + rules: { + "missing-rule": 1 + } +}; diff --git a/eslint/tests/fixtures/shallow-glob/eslint.config.js b/eslint/tests/fixtures/shallow-glob/eslint.config.js new file mode 100644 index 0000000..211719d --- /dev/null +++ b/eslint/tests/fixtures/shallow-glob/eslint.config.js @@ -0,0 +1,5 @@ +module.exports = [ + { + files: ["subdir/*.js"] + } +]; diff --git a/eslint/tests/fixtures/shallow-glob/subdir/broken.js b/eslint/tests/fixtures/shallow-glob/subdir/broken.js new file mode 100644 index 0000000..d280fee --- /dev/null +++ b/eslint/tests/fixtures/shallow-glob/subdir/broken.js @@ -0,0 +1 @@ +module.exports = /* intentional syntax error */ diff --git a/eslint/tests/fixtures/shallow-glob/subdir/subsubdir/broken.js b/eslint/tests/fixtures/shallow-glob/subdir/subsubdir/broken.js new file mode 100644 index 0000000..2e1fe2e --- /dev/null +++ b/eslint/tests/fixtures/shallow-glob/subdir/subsubdir/broken.js @@ -0,0 +1 @@ +function( {} // intentional syntax error diff --git a/eslint/tests/fixtures/shallow-glob/subdir/subsubdir/plain.jsx b/eslint/tests/fixtures/shallow-glob/subdir/subsubdir/plain.jsx new file mode 100644 index 0000000..e901f01 --- /dev/null +++ b/eslint/tests/fixtures/shallow-glob/subdir/subsubdir/plain.jsx @@ -0,0 +1 @@ +foo; diff --git a/eslint/tests/fixtures/shallow-glob/target-dir/passing.js b/eslint/tests/fixtures/shallow-glob/target-dir/passing.js new file mode 100644 index 0000000..ec01c2c --- /dev/null +++ b/eslint/tests/fixtures/shallow-glob/target-dir/passing.js @@ -0,0 +1 @@ +module.exports = true; diff --git a/eslint/tests/fixtures/testers/rule-tester/modify-ast-at-first.js b/eslint/tests/fixtures/testers/rule-tester/modify-ast-at-first.js index 831d4a0..a7a80f1 100644 --- a/eslint/tests/fixtures/testers/rule-tester/modify-ast-at-first.js +++ b/eslint/tests/fixtures/testers/rule-tester/modify-ast-at-first.js @@ -9,30 +9,36 @@ // Rule Definition //------------------------------------------------------------------------------ -module.exports = function(context) { - return { - "Program": function(node) { - node.body.push({ - "type": "Identifier", - "name": "modified", - "range": [0, 8], - "loc": { - "start": { - "line": 1, - "column": 0 - }, - "end": { - "line": 1, - "column": 8 +module.exports = { + meta: { + type: "problem", + schema: [] + }, + create(context) { + return { + "Program": function(node) { + node.body.push({ + "type": "Identifier", + "name": "modified", + "range": [0, 8], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 8 + } } - } - }); - }, + }); + }, - "Identifier": function(node) { - if (node.name === "bar") { - context.report({message: "error", node: node}); + "Identifier": function(node) { + if (node.name === "bar") { + context.report({message: "error", node: node}); + } } - } - }; + }; + }, }; diff --git a/eslint/tests/fixtures/testers/rule-tester/modify-ast-at-last.js b/eslint/tests/fixtures/testers/rule-tester/modify-ast-at-last.js index f093b19..7c7c0c8 100644 --- a/eslint/tests/fixtures/testers/rule-tester/modify-ast-at-last.js +++ b/eslint/tests/fixtures/testers/rule-tester/modify-ast-at-last.js @@ -9,30 +9,36 @@ // Rule Definition //------------------------------------------------------------------------------ -module.exports = function(context) { - return { - "Program:exit": function(node) { - node.body.push({ - "type": "Identifier", - "name": "modified", - "range": [0, 8], - "loc": { - "start": { - "line": 1, - "column": 0 - }, - "end": { - "line": 1, - "column": 8 +module.exports = { + meta: { + type: "problem", + schema: [] + }, + create(context) { + return { + "Program:exit": function(node) { + node.body.push({ + "type": "Identifier", + "name": "modified", + "range": [0, 8], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 8 + } } - } - }); - }, + }); + }, - "Identifier": function(node) { - if (node.name === "bar") { - context.report({message: "error", node: node}); + "Identifier": function(node) { + if (node.name === "bar") { + context.report({message: "error", node: node}); + } } - } - }; + }; + }, }; diff --git a/eslint/tests/fixtures/testers/rule-tester/modify-ast.js b/eslint/tests/fixtures/testers/rule-tester/modify-ast.js index 82a7c48..45f46a6 100644 --- a/eslint/tests/fixtures/testers/rule-tester/modify-ast.js +++ b/eslint/tests/fixtures/testers/rule-tester/modify-ast.js @@ -9,14 +9,20 @@ // Rule Definition //------------------------------------------------------------------------------ -module.exports = function(context) { - return { - "Identifier": function(node) { - node.name += "!"; +module.exports = { + meta: { + type: "problem", + schema: [] + }, + create(context) { + return { + "Identifier": function(node) { + node.name += "!"; - if (node.name === "bar!") { - context.report({message: "error", node: node}); + if (node.name === "bar!") { + context.report({message: "error", node: node}); + } } - } - }; + }; + }, }; diff --git a/eslint/tests/fixtures/testers/rule-tester/no-eval.js b/eslint/tests/fixtures/testers/rule-tester/no-eval.js index 0d57cb6..dc6e869 100644 --- a/eslint/tests/fixtures/testers/rule-tester/no-eval.js +++ b/eslint/tests/fixtures/testers/rule-tester/no-eval.js @@ -3,20 +3,24 @@ * @author Nicholas C. Zakas */ +"use strict"; + //------------------------------------------------------------------------------ // Rule Definition //------------------------------------------------------------------------------ -module.exports = function(context) { - - "use strict"; - - return { - "CallExpression": function(node) { - if (node.callee.name === "eval") { - context.report(node, "eval sucks."); - } - } - }; - +module.exports = { + meta: { + type: "problem", + schema: [], + }, + create(context) { + return { + CallExpression: function (node) { + if (node.callee.name === "eval") { + context.report(node, "eval sucks."); + } + }, + }; + }, }; diff --git a/eslint/tests/fixtures/testers/rule-tester/no-invalid-args.js b/eslint/tests/fixtures/testers/rule-tester/no-invalid-args.js index 4c2e701..d1eb2ad 100644 --- a/eslint/tests/fixtures/testers/rule-tester/no-invalid-args.js +++ b/eslint/tests/fixtures/testers/rule-tester/no-invalid-args.js @@ -3,20 +3,28 @@ * @author Mathias Schreck */ +"use strict"; + //------------------------------------------------------------------------------ // Rule Definition //------------------------------------------------------------------------------ -module.exports = function(context) { - "use strict"; - - var config = context.options[0]; +module.exports = { + meta: { + type: "problem", + schema: [{ + type: "boolean" + }] + }, + create(context) { + var config = context.options[0]; - return { - "Program": function(node) { - if (config === true) { - context.report(node, "Invalid args"); + return { + "Program": function(node) { + if (config === true) { + context.report(node, "Invalid args"); + } } - } - }; + }; + } }; diff --git a/eslint/tests/fixtures/testers/rule-tester/no-invalid-schema.js b/eslint/tests/fixtures/testers/rule-tester/no-invalid-schema.js index fdf290d..affe380 100644 --- a/eslint/tests/fixtures/testers/rule-tester/no-invalid-schema.js +++ b/eslint/tests/fixtures/testers/rule-tester/no-invalid-schema.js @@ -3,26 +3,26 @@ * @author Brandon Mills */ +"use strict"; + //------------------------------------------------------------------------------ // Rule Definition //------------------------------------------------------------------------------ -module.exports = function(context) { - "use strict"; - - var config = context.options[0]; - - return { - "Program": function(node) { - if (config) { - context.report(node, "Expected nothing."); +module.exports = { + meta: { + type: "problem", + schema: [{ + "enum": [] + }] + }, + create(context) { + return { + "Program": function(node) { + if (config) { + context.report(node, "Expected nothing."); + } } - } - }; + }; + }, }; - -module.exports.schema = [ - { - "enum": [] - } -]; diff --git a/eslint/tests/fixtures/testers/rule-tester/no-schema-violation.js b/eslint/tests/fixtures/testers/rule-tester/no-schema-violation.js index 2a9f65e..7876f25 100644 --- a/eslint/tests/fixtures/testers/rule-tester/no-schema-violation.js +++ b/eslint/tests/fixtures/testers/rule-tester/no-schema-violation.js @@ -3,26 +3,27 @@ * @author Brandon Mills */ +"use strict"; + //------------------------------------------------------------------------------ // Rule Definition //------------------------------------------------------------------------------ -module.exports = function(context) { - "use strict"; - - var config = context.options[0]; - - return { - "Program": function(node) { - if (config && config !== "foo") { - context.report(node, "Expected foo."); +module.exports = { + meta: { + type: "problem", + schema: [{ + "enum": ["foo"] + }] + }, + create(context) { + const config = context.options[0]; + return { + "Program": function(node) { + if (config && config !== "foo") { + context.report(node, "Expected foo."); + } } - } - }; + }; + }, }; - -module.exports.schema = [ - { - "enum": ["foo"] - } -]; diff --git a/eslint/tests/fixtures/testers/rule-tester/no-test-filename b/eslint/tests/fixtures/testers/rule-tester/no-test-filename index 752c41f..b3cde25 100644 --- a/eslint/tests/fixtures/testers/rule-tester/no-test-filename +++ b/eslint/tests/fixtures/testers/rule-tester/no-test-filename @@ -3,18 +3,24 @@ * @author Stefan Lau */ +"use strict"; + //------------------------------------------------------------------------------ // Rule Definition //------------------------------------------------------------------------------ -module.exports = function(context) { - "use strict"; - - return { - "Program": function(node) { - if (context.getFilename() === '<input>') { - context.report(node, "Filename test was not defined."); +module.exports = { + meta: { + type: "problem", + schema: [] + }, + create(context) { + return { + "Program": function(node) { + if (context.getFilename() === '<input>') { + context.report(node, "Filename test was not defined."); + } } - } - }; + }; + } }; diff --git a/eslint/tests/fixtures/testers/rule-tester/no-test-global.js b/eslint/tests/fixtures/testers/rule-tester/no-test-global.js index b5fa4c3..6703cc6 100644 --- a/eslint/tests/fixtures/testers/rule-tester/no-test-global.js +++ b/eslint/tests/fixtures/testers/rule-tester/no-test-global.js @@ -7,21 +7,27 @@ // Rule Definition //------------------------------------------------------------------------------ -module.exports = function(context) { - "use strict"; +"use strict"; - return { - "Program": function(node) { - var globals = context.getScope().variables.map(function (variable) { - return variable.name; - }); +module.exports = { + meta: { + type: "problem", + schema: [], + }, + create(context) { + return { + "Program": function(node) { + var globals = context.getScope().variables.map(function (variable) { + return variable.name; + }); - if (globals.indexOf("test") === -1) { - context.report(node, "Global variable test was not defined."); + if (globals.indexOf("test") === -1) { + context.report(node, "Global variable test was not defined."); + } + if (globals.indexOf("foo") !== -1) { + context.report(node, "Global variable foo should not be used."); + } } - if (globals.indexOf("foo") !== -1) { - context.report(node, "Global variable foo should not be used."); - } - } - }; + }; + }, }; diff --git a/eslint/tests/fixtures/testers/rule-tester/no-test-settings.js b/eslint/tests/fixtures/testers/rule-tester/no-test-settings.js index 07ecfa7..a67ebc2 100644 --- a/eslint/tests/fixtures/testers/rule-tester/no-test-settings.js +++ b/eslint/tests/fixtures/testers/rule-tester/no-test-settings.js @@ -3,18 +3,27 @@ * @author Ilya Volodin */ +"use strict"; + //------------------------------------------------------------------------------ // Rule Definition //------------------------------------------------------------------------------ -module.exports = function(context) { - "use strict"; - - return { - "Program": function(node) { - if (!context.settings || !context.settings.test) { - context.report(node, "Global settings test was not defined."); - } - } - }; +module.exports = { + meta: { + type: "problem", + schema: [], + }, + create(context) { + return { + Program: function (node) { + if (!context.settings || !context.settings.test) { + context.report( + node, + "Global settings test was not defined." + ); + } + }, + }; + }, }; diff --git a/eslint/tests/fixtures/testers/rule-tester/no-var.js b/eslint/tests/fixtures/testers/rule-tester/no-var.js index 5841f15..96a410f 100644 --- a/eslint/tests/fixtures/testers/rule-tester/no-var.js +++ b/eslint/tests/fixtures/testers/rule-tester/no-var.js @@ -10,13 +10,11 @@ "use strict"; module.exports = { - meta: { - fixable: "code" + fixable: "code", + schema: [] }, - create(context) { - var sourceCode = context.getSourceCode(); return { diff --git a/eslint/tests/lib/cli-engine/cli-engine.js b/eslint/tests/lib/cli-engine/cli-engine.js index 2ba4839..9cd5593 100644 --- a/eslint/tests/lib/cli-engine/cli-engine.js +++ b/eslint/tests/lib/cli-engine/cli-engine.js @@ -158,6 +158,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results[0].messages[4].ruleId, "eol-last"); assert.strictEqual(report.results[0].fixableErrorCount, 3); assert.strictEqual(report.results[0].fixableWarningCount, 0); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); it("should report the total and per file warnings when using local cwd .eslintrc", () => { @@ -187,6 +188,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results[0].messages[4].ruleId, "eol-last"); assert.strictEqual(report.results[0].fixableErrorCount, 0); assert.strictEqual(report.results[0].fixableWarningCount, 3); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); it("should report one message when using specific config file", () => { @@ -210,6 +212,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results[0].errorCount, 1); assert.strictEqual(report.results[0].fixableErrorCount, 1); assert.strictEqual(report.results[0].warningCount, 0); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); it("should report the filename when passed in", () => { @@ -222,6 +225,7 @@ describe("CLIEngine", () => { const report = engine.executeOnText("var foo = 'bar';", "test.js"); assert.strictEqual(report.results[0].filePath, getFixturePath("test.js")); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); it("should return a warning when given a filename by --stdin-filename in excluded files list if warnIgnored is true", () => { @@ -235,6 +239,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results.length, 1); assert.strictEqual(report.errorCount, 0); assert.strictEqual(report.warningCount, 1); + assert.strictEqual(report.fatalErrorCount, 0); assert.strictEqual(report.fixableErrorCount, 0); assert.strictEqual(report.fixableWarningCount, 0); assert.strictEqual(report.results[0].filePath, getFixturePath("passing.js")); @@ -243,8 +248,10 @@ describe("CLIEngine", () => { assert.isUndefined(report.results[0].messages[0].output); assert.strictEqual(report.results[0].errorCount, 0); assert.strictEqual(report.results[0].warningCount, 1); + assert.strictEqual(report.results[0].fatalErrorCount, 0); assert.strictEqual(report.results[0].fixableErrorCount, 0); assert.strictEqual(report.results[0].fixableWarningCount, 0); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); it("should not return a warning when given a filename by --stdin-filename in excluded files list if warnIgnored is false", () => { @@ -291,6 +298,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results[0].messages[0].ruleId, "no-undef"); assert.strictEqual(report.results[0].messages[0].severity, 2); assert.isUndefined(report.results[0].messages[0].output); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); it("should return a message and fixed text when in fix mode", () => { @@ -312,6 +320,7 @@ describe("CLIEngine", () => { { filePath: getFixturePath("passing.js"), messages: [], + suppressedMessages: [], errorCount: 0, warningCount: 0, fatalErrorCount: 0, @@ -341,6 +350,7 @@ describe("CLIEngine", () => { const expectedOutput = fs.readFileSync(outputPath, "utf8"); assert.strictEqual(report.results[0].output, expectedOutput); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); it("correctly autofixes return-conflicting-fixes", () => { @@ -355,6 +365,7 @@ describe("CLIEngine", () => { const expectedOutput = fs.readFileSync(outputPath, "utf8"); assert.strictEqual(report.results[0].output, expectedOutput); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); describe("Fix Types", () => { @@ -523,6 +534,7 @@ describe("CLIEngine", () => { nodeType: "Identifier" } ], + suppressedMessages: [], errorCount: 1, warningCount: 0, fatalErrorCount: 0, @@ -568,6 +580,7 @@ describe("CLIEngine", () => { column: 19 } ], + suppressedMessages: [], errorCount: 1, warningCount: 0, fatalErrorCount: 1, @@ -612,6 +625,7 @@ describe("CLIEngine", () => { column: 10 } ], + suppressedMessages: [], errorCount: 1, warningCount: 0, fatalErrorCount: 1, @@ -702,6 +716,7 @@ describe("CLIEngine", () => { column: 19 } ], + suppressedMessages: [], errorCount: 1, warningCount: 0, fatalErrorCount: 1, @@ -733,6 +748,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results.length, 1); assert.strictEqual(report.results[0].filePath, getFixturePath("node_modules/passing.js")); assert.strictEqual(report.results[0].messages[0].message, expectedMsg); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); // @scope for @scope/eslint-plugin @@ -762,6 +778,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.filePath, getFixturePath("plugin-shorthand/basic/index.js")); assert.strictEqual(report.messages[0].ruleId, "@scope/rule"); assert.strictEqual(report.messages[0].message, "OK"); + assert.strictEqual(report.suppressedMessages.length, 0); }); it("should resolve 'extends:[\"plugin:@scope/recommended\"]' to 'node_modules/@scope/eslint-plugin'.", () => { @@ -771,6 +788,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.filePath, getFixturePath("plugin-shorthand/extends/index.js")); assert.strictEqual(report.messages[0].ruleId, "@scope/rule"); assert.strictEqual(report.messages[0].message, "OK"); + assert.strictEqual(report.suppressedMessages.length, 0); }); }); it("should warn when deprecated rules are found in a config", () => { @@ -786,6 +804,7 @@ describe("CLIEngine", () => { report.usedDeprecatedRules, [{ ruleId: "indent-legacy", replacedBy: ["indent"] }] ); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); }); @@ -807,7 +826,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results.length, 1); assert.strictEqual(report.results[0].messages.length, 1); assert.strictEqual(report.results[0].messages[0].message, "Parsing error: Boom!"); - + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); it("should report zero messages when given a config file and a valid file", () => { @@ -822,6 +841,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results.length, 2); assert.strictEqual(report.results[0].messages.length, 0); assert.strictEqual(report.results[1].messages.length, 0); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); it("should handle multiple patterns with overlapping files", () => { @@ -835,7 +855,9 @@ describe("CLIEngine", () => { assert.strictEqual(report.results.length, 2); assert.strictEqual(report.results[0].messages.length, 0); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); assert.strictEqual(report.results[1].messages.length, 0); + assert.strictEqual(report.results[1].suppressedMessages.length, 0); }); it("should report zero messages when given a config file and a valid file and espree as parser", () => { @@ -852,6 +874,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results.length, 1); assert.strictEqual(report.results[0].messages.length, 0); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); it("should report zero messages when given a config file and a valid file and esprima as parser", () => { @@ -865,6 +888,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results.length, 1); assert.strictEqual(report.results[0].messages.length, 0); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); it("should throw an error when given a config file and a valid file and invalid parser", () => { @@ -888,6 +912,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results.length, 1); assert.strictEqual(report.results[0].messages.length, 0); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); it("should fall back to defaults when extensions is set to an empty array", () => { @@ -911,6 +936,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results[0].warningCount, 0); assert.strictEqual(report.results[0].fixableErrorCount, 1); assert.strictEqual(report.results[0].fixableWarningCount, 0); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); it("should report zero messages when given a directory with a .js and a .js2 file", () => { @@ -926,6 +952,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results.length, 2); assert.strictEqual(report.results[0].messages.length, 0); assert.strictEqual(report.results[1].messages.length, 0); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); it("should report zero messages when given a '**' pattern with a .js and a .js2 file", () => { @@ -941,6 +968,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results.length, 2); assert.strictEqual(report.results[0].messages.length, 0); assert.strictEqual(report.results[1].messages.length, 0); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); it("should resolve globs when 'globInputPaths' option is true", () => { @@ -955,6 +983,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results.length, 2); assert.strictEqual(report.results[0].messages.length, 0); assert.strictEqual(report.results[1].messages.length, 0); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); it("should not resolve globs when 'globInputPaths' option is false", () => { @@ -982,9 +1011,11 @@ describe("CLIEngine", () => { assert.strictEqual(report.results.length, 1); assert.strictEqual(report.results[0].errorCount, 0); assert.strictEqual(report.results[0].warningCount, 1); + assert.strictEqual(report.results[0].fatalErrorCount, 0); assert.strictEqual(report.results[0].fixableErrorCount, 0); assert.strictEqual(report.results[0].fixableWarningCount, 0); assert.strictEqual(report.results[0].messages[0].message, expectedMsg); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); it("should report on globs with explicit inclusion of dotfiles, even though ignored by default", () => { @@ -1003,6 +1034,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results[0].warningCount, 0); assert.strictEqual(report.results[0].fixableErrorCount, 1); assert.strictEqual(report.results[0].fixableWarningCount, 0); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); it("should not check default ignored files without --no-ignore flag", () => { @@ -1045,9 +1077,11 @@ describe("CLIEngine", () => { assert.strictEqual(report.results.length, 1); assert.strictEqual(report.results[0].errorCount, 0); assert.strictEqual(report.results[0].warningCount, 1); + assert.strictEqual(report.results[0].fatalErrorCount, 0); assert.strictEqual(report.results[0].fixableErrorCount, 0); assert.strictEqual(report.results[0].fixableWarningCount, 0); assert.strictEqual(report.results[0].messages[0].message, expectedMsg); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); // https://github.com/eslint/eslint/issues/12873 @@ -1066,9 +1100,11 @@ describe("CLIEngine", () => { assert.strictEqual(report.results.length, 1); assert.strictEqual(report.results[0].errorCount, 0); assert.strictEqual(report.results[0].warningCount, 1); + assert.strictEqual(report.results[0].fatalErrorCount, 0); assert.strictEqual(report.results[0].fixableErrorCount, 0); assert.strictEqual(report.results[0].fixableWarningCount, 0); assert.strictEqual(report.results[0].messages[0].message, expectedMsg); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); it("should check .hidden files if they are passed explicitly with --no-ignore flag", () => { @@ -1090,6 +1126,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results[0].fixableErrorCount, 1); assert.strictEqual(report.results[0].fixableWarningCount, 0); assert.strictEqual(report.results[0].messages[0].ruleId, "quotes"); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); it("should check .hidden files if they are unignored with an --ignore-pattern", () => { @@ -1112,6 +1149,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results[0].fixableErrorCount, 1); assert.strictEqual(report.results[0].fixableWarningCount, 0); assert.strictEqual(report.results[0].messages[0].ruleId, "quotes"); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); it("should report zero messages when given a pattern with a .js and a .js2 file", () => { @@ -1126,7 +1164,9 @@ describe("CLIEngine", () => { assert.strictEqual(report.results.length, 2); assert.strictEqual(report.results[0].messages.length, 0); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); assert.strictEqual(report.results[1].messages.length, 0); + assert.strictEqual(report.results[1].suppressedMessages.length, 0); }); it("should return one error message when given a config with rules with options and severity level set to error", () => { @@ -1149,6 +1189,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results[0].warningCount, 0); assert.strictEqual(report.results[0].fixableErrorCount, 1); assert.strictEqual(report.results[0].fixableWarningCount, 0); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); it("should return 3 messages when given a config file and a directory of 3 valid files", () => { @@ -1172,30 +1213,35 @@ describe("CLIEngine", () => { assert.strictEqual(report.results[0].fixableErrorCount, 0); assert.strictEqual(report.results[0].fixableWarningCount, 0); assert.strictEqual(report.results[0].messages.length, 0); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); assert.strictEqual(path.relative(fixturePath, report.results[1].filePath), "broken.js"); assert.strictEqual(report.results[1].errorCount, 0); assert.strictEqual(report.results[1].warningCount, 0); assert.strictEqual(report.results[1].fixableErrorCount, 0); assert.strictEqual(report.results[1].fixableWarningCount, 0); assert.strictEqual(report.results[1].messages.length, 0); + assert.strictEqual(report.results[1].suppressedMessages.length, 0); assert.strictEqual(path.relative(fixturePath, report.results[2].filePath), "cwd.js"); assert.strictEqual(report.results[2].errorCount, 0); assert.strictEqual(report.results[2].warningCount, 0); assert.strictEqual(report.results[2].fixableErrorCount, 0); assert.strictEqual(report.results[2].fixableWarningCount, 0); assert.strictEqual(report.results[2].messages.length, 0); + assert.strictEqual(report.results[2].suppressedMessages.length, 0); assert.strictEqual(path.relative(fixturePath, report.results[3].filePath), "simple.js"); assert.strictEqual(report.results[3].errorCount, 0); assert.strictEqual(report.results[3].warningCount, 0); assert.strictEqual(report.results[3].fixableErrorCount, 0); assert.strictEqual(report.results[3].fixableWarningCount, 0); assert.strictEqual(report.results[3].messages.length, 0); + assert.strictEqual(report.results[3].suppressedMessages.length, 0); assert.strictEqual(path.relative(fixturePath, report.results[4].filePath), path.join("test", "simple.js")); assert.strictEqual(report.results[4].errorCount, 0); assert.strictEqual(report.results[4].warningCount, 0); assert.strictEqual(report.results[4].fixableErrorCount, 0); assert.strictEqual(report.results[4].fixableWarningCount, 0); assert.strictEqual(report.results[4].messages.length, 0); + assert.strictEqual(report.results[4].suppressedMessages.length, 0); }); @@ -1252,6 +1298,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results.length, 1); assert.strictEqual(report.results[0].messages.length, 0); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); it("should return zero messages when given a config with environment set to browser", () => { @@ -1265,6 +1312,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results.length, 1); assert.strictEqual(report.results[0].messages.length, 0); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); it("should return zero messages when given an option to set environment to browser", () => { @@ -1282,6 +1330,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results.length, 1); assert.strictEqual(report.results[0].messages.length, 0); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); it("should return zero messages when given a config with environment set to Node.js", () => { @@ -1295,6 +1344,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results.length, 1); assert.strictEqual(report.results[0].messages.length, 0); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); it("should not return results from previous call when calling more than once", () => { @@ -1317,11 +1367,13 @@ describe("CLIEngine", () => { assert.strictEqual(report.results[0].messages.length, 1); assert.strictEqual(report.results[0].messages[0].ruleId, "semi"); assert.strictEqual(report.results[0].messages[0].severity, 2); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); report = engine.executeOnFiles([passFilePath]); assert.strictEqual(report.results.length, 1); assert.strictEqual(report.results[0].filePath, passFilePath); assert.strictEqual(report.results[0].messages.length, 0); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); @@ -1375,6 +1427,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results[0].warningCount, 0); assert.strictEqual(report.results[0].fixableErrorCount, 0); assert.strictEqual(report.results[0].fixableWarningCount, 0); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); // https://github.com/eslint/eslint/issues/3812 @@ -1415,6 +1468,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results.length, 1); assert.strictEqual(report.errorCount, 0); assert.strictEqual(report.warningCount, 1); + assert.strictEqual(report.fatalErrorCount, 0); assert.strictEqual(report.fixableErrorCount, 0); assert.strictEqual(report.fixableWarningCount, 0); assert.strictEqual(report.results[0].filePath, filePath); @@ -1422,8 +1476,10 @@ describe("CLIEngine", () => { assert.strictEqual(report.results[0].messages[0].message, "File ignored because of a matching ignore pattern. Use \"--no-ignore\" to override."); assert.strictEqual(report.results[0].errorCount, 0); assert.strictEqual(report.results[0].warningCount, 1); + assert.strictEqual(report.results[0].fatalErrorCount, 0); assert.strictEqual(report.results[0].fixableErrorCount, 0); assert.strictEqual(report.results[0].fixableWarningCount, 0); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); it("should return two messages when given a file in excluded files list while ignore is off", () => { @@ -1446,6 +1502,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results[0].messages[0].severity, 2); assert.strictEqual(report.results[0].messages[1].ruleId, "no-undef"); assert.strictEqual(report.results[0].messages[1].severity, 2); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); it("should return zero messages when executing a file with a shebang", () => { @@ -1458,6 +1515,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results.length, 1); assert.strictEqual(report.results[0].messages.length, 0); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); it("should give a warning when loading a custom rule that doesn't exist", () => { @@ -1474,8 +1532,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results[0].messages[0].ruleId, "missing-rule"); assert.strictEqual(report.results[0].messages[0].severity, 2); assert.strictEqual(report.results[0].messages[0].message, "Definition for rule 'missing-rule' was not found."); - - + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); it("should throw an error when loading a bad custom rule", () => { @@ -1510,6 +1567,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results[0].messages.length, 2); assert.strictEqual(report.results[0].messages[0].ruleId, "custom-rule"); assert.strictEqual(report.results[0].messages[0].severity, 1); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); it("should load custom rule from the provided cwd", () => { @@ -1531,6 +1589,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results[0].messages.length, 2); assert.strictEqual(report.results[0].messages[0].ruleId, "custom-rule"); assert.strictEqual(report.results[0].messages[0].severity, 1); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); it("should return messages when multiple custom rules match a file", () => { @@ -1555,6 +1614,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results[0].messages[0].severity, 2); assert.strictEqual(report.results[0].messages[1].ruleId, "no-strings"); assert.strictEqual(report.results[0].messages[1].severity, 2); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); it("should return zero messages when executing without useEslintrc flag", () => { @@ -1571,6 +1631,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results.length, 1); assert.strictEqual(report.results[0].filePath, filePath); assert.strictEqual(report.results[0].messages.length, 0); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); it("should return zero messages when executing without useEslintrc flag in Node.js environment", () => { @@ -1588,6 +1649,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results.length, 1); assert.strictEqual(report.results[0].filePath, filePath); assert.strictEqual(report.results[0].messages.length, 0); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); it("should return zero messages when executing with base-config flag set to false", () => { @@ -1605,6 +1667,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results.length, 1); assert.strictEqual(report.results[0].filePath, filePath); assert.strictEqual(report.results[0].messages.length, 0); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); it("should return zero messages and ignore .eslintrc files when executing with no-eslintrc flag", () => { @@ -1622,6 +1685,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results.length, 1); assert.strictEqual(report.results[0].filePath, filePath); assert.strictEqual(report.results[0].messages.length, 0); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); it("should return zero messages and ignore package.json files when executing with no-eslintrc flag", () => { @@ -1639,6 +1703,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results.length, 1); assert.strictEqual(report.results[0].filePath, filePath); assert.strictEqual(report.results[0].messages.length, 0); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); it("should warn when deprecated rules are configured", () => { @@ -1662,6 +1727,7 @@ describe("CLIEngine", () => { { ruleId: "valid-jsdoc", replacedBy: [] } ] ); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); it("should not warn when deprecated rules are not configured", () => { @@ -1674,6 +1740,7 @@ describe("CLIEngine", () => { const report = engine.executeOnFiles(["lib/cli*.js"]); assert.deepStrictEqual(report.usedDeprecatedRules, []); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); it("should warn when deprecated rules are found in a config", () => { @@ -1689,6 +1756,7 @@ describe("CLIEngine", () => { report.usedDeprecatedRules, [{ ruleId: "indent-legacy", replacedBy: ["indent"] }] ); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); describe("Fix Mode", () => { @@ -1727,6 +1795,7 @@ describe("CLIEngine", () => { { filePath: fs.realpathSync(path.resolve(fixtureDir, "fixmode/multipass.js")), messages: [], + suppressedMessages: [], errorCount: 0, warningCount: 0, fatalErrorCount: 0, @@ -1737,6 +1806,7 @@ describe("CLIEngine", () => { { filePath: fs.realpathSync(path.resolve(fixtureDir, "fixmode/ok.js")), messages: [], + suppressedMessages: [], errorCount: 0, warningCount: 0, fatalErrorCount: 0, @@ -1758,6 +1828,7 @@ describe("CLIEngine", () => { severity: 2 } ], + suppressedMessages: [], errorCount: 1, warningCount: 0, fatalErrorCount: 0, @@ -1780,6 +1851,7 @@ describe("CLIEngine", () => { severity: 2 } ], + suppressedMessages: [], errorCount: 1, warningCount: 0, fatalErrorCount: 0, @@ -1837,6 +1909,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results.length, 1); assert.strictEqual(report.results[0].messages.length, 0); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); // No default configuration rules - conf/environments.js (/*eslint-env node*/) @@ -1852,6 +1925,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results.length, 1); assert.strictEqual(report.results[0].messages.length, 0); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); // Project configuration - first level .eslintrc @@ -1865,6 +1939,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results.length, 1); assert.strictEqual(report.results[0].messages.length, 0); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); // Project configuration - first level .eslintrc @@ -1893,6 +1968,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results[0].messages.length, 1); assert.strictEqual(report.results[0].messages[0].ruleId, "quotes"); assert.strictEqual(report.results[0].messages[0].severity, 2); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); // Project configuration - second level .eslintrc @@ -1908,6 +1984,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results[0].messages.length, 1); assert.strictEqual(report.results[0].messages[0].ruleId, "no-console"); assert.strictEqual(report.results[0].messages[0].severity, 1); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); // Project configuration - third level .eslintrc @@ -1923,6 +2000,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results[0].messages.length, 1); assert.strictEqual(report.results[0].messages[0].ruleId, "quotes"); assert.strictEqual(report.results[0].messages[0].severity, 1); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); // Project configuration - first level package.json @@ -1938,6 +2016,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results[0].messages.length, 1); assert.strictEqual(report.results[0].messages[0].ruleId, "quotes"); assert.strictEqual(report.results[0].messages[0].severity, 1); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); // Project configuration - second level package.json @@ -1951,6 +2030,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results.length, 1); assert.strictEqual(report.results[0].messages.length, 0); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); // Project configuration - third level package.json @@ -1966,6 +2046,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results[0].messages.length, 1); assert.strictEqual(report.results[0].messages[0].ruleId, "quotes"); assert.strictEqual(report.results[0].messages[0].severity, 2); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); // Project configuration - .eslintrc overrides package.json in same directory @@ -1981,6 +2062,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results[0].messages.length, 1); assert.strictEqual(report.results[0].messages[0].ruleId, "quotes"); assert.strictEqual(report.results[0].messages[0].severity, 2); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); // Command line configuration - --config with first level .eslintrc @@ -1999,6 +2081,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results[0].messages[0].severity, 2); assert.strictEqual(report.results[0].messages[1].ruleId, "semi"); assert.strictEqual(report.results[0].messages[1].severity, 1); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); // Command line configuration - --config with first level .eslintrc @@ -2013,6 +2096,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results.length, 1); assert.strictEqual(report.results[0].messages.length, 0); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); // Command line configuration - --config with second level .eslintrc @@ -2031,6 +2115,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results[0].messages[0].severity, 1); assert.strictEqual(report.results[0].messages[1].ruleId, "semi"); assert.strictEqual(report.results[0].messages[1].severity, 1); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); // Command line configuration - --config with second level .eslintrc @@ -2047,6 +2132,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results[0].messages.length, 1); assert.strictEqual(report.results[0].messages[0].ruleId, "no-console"); assert.strictEqual(report.results[0].messages[0].severity, 1); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); // Command line configuration - --config with first level .eslintrc @@ -2061,6 +2147,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results.length, 1); assert.strictEqual(report.results[0].messages.length, 0); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); // Command line configuration - --rule with --config and first level .eslintrc @@ -2080,6 +2167,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results[0].messages.length, 1); assert.strictEqual(report.results[0].messages[0].ruleId, "quotes"); assert.strictEqual(report.results[0].messages[0].severity, 1); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); // Command line configuration - --rule with --config and first level .eslintrc @@ -2099,6 +2187,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results[0].messages.length, 1); assert.strictEqual(report.results[0].messages[0].ruleId, "quotes"); assert.strictEqual(report.results[0].messages[0].severity, 1); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); }); @@ -2116,6 +2205,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results.length, 1); assert.strictEqual(report.results[0].messages.length, 2); assert.strictEqual(report.results[0].messages[0].ruleId, "example/example-rule"); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); it("should return two messages when executing with config file that specifies a plugin with namespace", () => { @@ -2130,6 +2220,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results.length, 1); assert.strictEqual(report.results[0].messages.length, 2); assert.strictEqual(report.results[0].messages[0].ruleId, "@eslint/example/example-rule"); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); it("should return two messages when executing with config file that specifies a plugin without prefix", () => { @@ -2144,6 +2235,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results.length, 1); assert.strictEqual(report.results[0].messages.length, 2); assert.strictEqual(report.results[0].messages[0].ruleId, "example/example-rule"); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); it("should return two messages when executing with config file that specifies a plugin without prefix and with namespace", () => { @@ -2158,6 +2250,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results.length, 1); assert.strictEqual(report.results[0].messages.length, 2); assert.strictEqual(report.results[0].messages[0].ruleId, "@eslint/example/example-rule"); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); it("should return two messages when executing with cli option that specifies a plugin", () => { @@ -2173,6 +2266,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results.length, 1); assert.strictEqual(report.results[0].messages.length, 2); assert.strictEqual(report.results[0].messages[0].ruleId, "example/example-rule"); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); it("should return two messages when executing with cli option that specifies preloaded plugin", () => { @@ -2196,6 +2290,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results.length, 1); assert.strictEqual(report.results[0].messages.length, 2); assert.strictEqual(report.results[0].messages[0].ruleId, "test/example-rule"); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); it("should load plugins from the `loadPluginsRelativeTo` directory, if specified", () => { @@ -2214,6 +2309,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results[0].messages.length, 1); assert.strictEqual(report.results[0].messages[0].ruleId, "with-rules/rule1"); assert.strictEqual(report.results[0].messages[0].message, "Rule report from plugin"); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); }); @@ -3171,6 +3267,7 @@ describe("CLIEngine", () => { assert.strictEqual(ret.results.length, 1); assert.strictEqual(ret.results[0].messages.length, 1); assert.strictEqual(ret.results[0].messages[0].ruleId, "no-unused-vars"); + assert.strictEqual(ret.results[0].suppressedMessages.length, 0); }); }); @@ -3208,6 +3305,7 @@ describe("CLIEngine", () => { assert.strictEqual(results.length, 1); assert.deepStrictEqual(results[0].messages, []); + assert.strictEqual(results[0].suppressedMessages.length, 0); }); }); @@ -3307,6 +3405,7 @@ describe("CLIEngine", () => { assert.strictEqual(results.length, 1); assert.deepStrictEqual(results[0].messages, []); assert.deepStrictEqual(results[0].output, "fixed;"); + assert.strictEqual(results[0].suppressedMessages.length, 0); }); }); @@ -3381,6 +3480,7 @@ describe("CLIEngine", () => { assert.strictEqual(results[0].messages.length, 1); assert.strictEqual(results[0].messages[0].ruleId, "semi"); assert.strictEqual(results[0].messages[0].line, 2); + assert.strictEqual(results[0].suppressedMessages.length, 0); }); it("should fix only JavaScript blocks if '--ext' was not given.", async () => { @@ -3407,6 +3507,7 @@ describe("CLIEngine", () => { assert.strictEqual(results.length, 1); assert.strictEqual(results[0].messages.length, 0); + assert.strictEqual(results[0].suppressedMessages.length, 0); assert.strictEqual(results[0].output, unIndent` \`\`\`js console.log("hello");${/* ← fixed */""} @@ -3450,6 +3551,7 @@ describe("CLIEngine", () => { assert.strictEqual(results[0].messages[0].line, 2); assert.strictEqual(results[0].messages[1].ruleId, "semi"); // JS block in HTML block assert.strictEqual(results[0].messages[1].line, 7); + assert.strictEqual(results[0].suppressedMessages.length, 0); }); it("should fix HTML blocks as well with multiple processors if '--ext' option was given.", async () => { @@ -3476,6 +3578,7 @@ describe("CLIEngine", () => { assert.strictEqual(results.length, 1); assert.strictEqual(results[0].messages.length, 0); + assert.strictEqual(results[0].suppressedMessages.length, 0); assert.strictEqual(results[0].output, unIndent` \`\`\`js console.log("hello");${/* ← fixed */""} @@ -3526,6 +3629,7 @@ describe("CLIEngine", () => { assert.strictEqual(results[0].messages[0].ruleId, "semi"); // JS Block in HTML Block assert.strictEqual(results[0].messages[0].line, 7); assert.strictEqual(results[0].messages[0].fix, void 0); + assert.strictEqual(results[0].suppressedMessages.length, 0); assert.strictEqual(results[0].output, unIndent` \`\`\`js console.log("hello");${/* ← fixed */""} @@ -3588,6 +3692,7 @@ describe("CLIEngine", () => { assert.strictEqual(results[0].messages[0].line, 2); assert.strictEqual(results[0].messages[1].ruleId, "no-console"); assert.strictEqual(results[0].messages[1].line, 7); + assert.strictEqual(results[0].suppressedMessages.length, 0); }); it("should use the same config as one which has 'processor' property in order to lint blocks in HTML if the processor was legacy style.", async () => { @@ -3637,6 +3742,7 @@ describe("CLIEngine", () => { assert.strictEqual(results[0].messages[1].line, 7); assert.strictEqual(results[0].messages[2].ruleId, "no-console"); assert.strictEqual(results[0].messages[2].line, 10); + assert.strictEqual(results[0].suppressedMessages.length, 0); }); it("should throw an error if invalid processor was specified.", async () => { @@ -3700,6 +3806,7 @@ describe("CLIEngine", () => { assert.strictEqual(results[0].messages[0].line, 2); assert.strictEqual(results[0].messages[1].ruleId, "semi"); // JS block in HTML block assert.strictEqual(results[0].messages[1].line, 7); + assert.strictEqual(results[0].suppressedMessages.length, 0); }); }); @@ -3838,6 +3945,7 @@ describe("CLIEngine", () => { assert.strictEqual(report.results.length, 1); assert.strictEqual(report.results[0].messages.length, 1); assert.strictEqual(report.results[0].messages[0].message, "ok"); + assert.strictEqual(report.results[0].suppressedMessages.length, 0); }); }); @@ -3930,6 +4038,7 @@ describe("CLIEngine", () => { assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].message, "'/*globals*/' has no effect because you have 'noInlineConfig' setting in your config (.eslintrc.yml)."); + assert.strictEqual(results[0].suppressedMessages.length, 0); }); it("should show the config file what the 'noInlineConfig' came from.", async () => { @@ -3952,6 +4061,7 @@ describe("CLIEngine", () => { assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].message, "'/*globals*/' has no effect because you have 'noInlineConfig' setting in your config (.eslintrc.yml » eslint-config-foo)."); + assert.strictEqual(results[0].suppressedMessages.length, 0); }); }); @@ -3985,6 +4095,7 @@ describe("CLIEngine", () => { assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].severity, 1); assert.strictEqual(messages[0].message, "Unused eslint-disable directive (no problems were reported from 'eqeqeq')."); + assert.strictEqual(results[0].suppressedMessages.length, 0); }); describe("the runtime option overrides config files.", () => { @@ -4009,6 +4120,7 @@ describe("CLIEngine", () => { const messages = results[0].messages; assert.strictEqual(messages.length, 0); + assert.strictEqual(results[0].suppressedMessages.length, 0); }); it("should warn unused 'eslint-disable' comments as error if 'reportUnusedDisableDirectives=error' was given in runtime.", async () => { @@ -4034,6 +4146,7 @@ describe("CLIEngine", () => { assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].severity, 2); assert.strictEqual(messages[0].message, "Unused eslint-disable directive (no problems were reported from 'eqeqeq')."); + assert.strictEqual(results[0].suppressedMessages.length, 0); }); }); }); @@ -4069,6 +4182,7 @@ describe("CLIEngine", () => { assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].ruleId, "no-console"); + assert.strictEqual(results[0].suppressedMessages.length, 0); }); }); @@ -4783,6 +4897,17 @@ describe("CLIEngine", () => { assert.strictEqual(errorResults[0].messages[3].severity, 2); assert.strictEqual(errorResults[0].messages[4].ruleId, "eol-last"); assert.strictEqual(errorResults[0].messages[4].severity, 2); + assert.lengthOf(errorResults[0].suppressedMessages, 0); + }); + + it("should report no error messages when looking for errors only", () => { + process.chdir(originalDir); + const engine = new CLIEngine(); + + const report = engine.executeOnText("var foo = 'bar'; // eslint-disable-line strict, no-var, no-unused-vars, quotes, eol-last -- justification"); + const errorResults = CLIEngine.getErrorResults(report.results); + + assert.lengthOf(errorResults, 0); }); it("should not mutate passed report.results parameter", () => { @@ -4799,6 +4924,24 @@ describe("CLIEngine", () => { assert.lengthOf(report.results[0].messages, reportResultsLength); }); + it("should report no suppressed error messages when looking for errors only", () => { + process.chdir(originalDir); + const engine = new CLIEngine({ + rules: { + quotes: [1, "double"], + "no-var": 2 + } + }); + + const report = engine.executeOnText("var foo = 'bar'; // eslint-disable-line quotes -- justification\n"); + const errorResults = CLIEngine.getErrorResults(report.results); + + assert.lengthOf(report.results[0].messages, 3); + assert.lengthOf(report.results[0].suppressedMessages, 1); + assert.lengthOf(errorResults[0].messages, 3); + assert.lengthOf(errorResults[0].suppressedMessages, 0); + }); + it("should report a warningCount of 0 when looking for errors only", () => { process.chdir(originalDir); @@ -4824,12 +4967,14 @@ describe("CLIEngine", () => { assert.lengthOf(report.results, 1); assert.strictEqual(report.errorCount, 0); assert.strictEqual(report.warningCount, 1); + assert.strictEqual(report.fatalErrorCount, 0); assert.strictEqual(report.fixableErrorCount, 0); assert.strictEqual(report.fixableWarningCount, 0); assert.strictEqual(report.results[0].errorCount, 0); assert.strictEqual(report.results[0].warningCount, 1); - assert.strictEqual(report.fixableErrorCount, 0); - assert.strictEqual(report.fixableWarningCount, 0); + assert.strictEqual(report.results[0].fatalErrorCount, 0); + assert.strictEqual(report.results[0].fixableErrorCount, 0); + assert.strictEqual(report.results[0].fixableWarningCount, 0); }); it("should return source code of file in the `source` property", () => { @@ -4944,9 +5089,9 @@ describe("CLIEngine", () => { }); it("should expose the list of plugin rules", () => { - const engine = new CLIEngine({ plugins: ["node"] }); + const engine = new CLIEngine({ plugins: ["n"] }); - assert(engine.getRules().has("node/no-deprecated-api"), "node/no-deprecated-api is present"); + assert(engine.getRules().has("n/no-deprecated-api"), "n/no-deprecated-api is present"); }); it("should expose the list of rules from a preloaded plugin", () => { @@ -4954,7 +5099,7 @@ describe("CLIEngine", () => { plugins: ["foo"] }, { preloadedPlugins: { - foo: require("eslint-plugin-node") + foo: require("eslint-plugin-n") } }); @@ -5109,10 +5254,11 @@ describe("CLIEngine", () => { const eslintCLI = new CLIEngine(config); const report = eslintCLI.executeOnText(code); - const messages = report.results[0].messages; + const { messages, suppressedMessages } = report.results[0]; assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].ruleId, "no-alert"); + assert.strictEqual(suppressedMessages.length, 0); }); it("should not report a violation by default", () => { @@ -5137,9 +5283,11 @@ describe("CLIEngine", () => { const eslintCLI = new CLIEngine(config); const report = eslintCLI.executeOnText(code); - const messages = report.results[0].messages; + const { messages, suppressedMessages } = report.results[0]; assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 1); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); }); }); @@ -5168,6 +5316,7 @@ describe("CLIEngine", () => { nodeType: null } ], + suppressedMessages: [], errorCount: 1, warningCount: 0, fatalErrorCount: 0, @@ -5187,7 +5336,7 @@ describe("CLIEngine", () => { }); }); - describe("when retreiving version number", () => { + describe("when retrieving version number", () => { it("should return current version number", () => { const eslintCLI = require("../../../lib/cli-engine").CLIEngine; const version = eslintCLI.version; @@ -6249,6 +6398,7 @@ describe("CLIEngine", () => { severity: 2 } ], + suppressedMessages: [], source: "a == b", warningCount: 0, fatalErrorCount: 0 @@ -6273,6 +6423,7 @@ describe("CLIEngine", () => { fixableErrorCount: 0, fixableWarningCount: 0, messages: [], + suppressedMessages: [], warningCount: 0, fatalErrorCount: 0 } @@ -6320,6 +6471,7 @@ describe("CLIEngine", () => { fixableErrorCount: 0, fixableWarningCount: 0, messages: [], + suppressedMessages: [], warningCount: 0, fatalErrorCount: 0 } @@ -6355,6 +6507,7 @@ describe("CLIEngine", () => { severity: 2 } ], + suppressedMessages: [], source: "a == b", warningCount: 0, fatalErrorCount: 0 diff --git a/eslint/tests/lib/cli-engine/file-enumerator.js b/eslint/tests/lib/cli-engine/file-enumerator.js index a1de4cd..2ccf15e 100644 --- a/eslint/tests/lib/cli-engine/file-enumerator.js +++ b/eslint/tests/lib/cli-engine/file-enumerator.js @@ -550,7 +550,7 @@ describe("FileEnumerator", () => { const files = { "file.js": "", ".eslintrc.json": JSON.stringify({ - extends: ["eslint:recommended"] + extends: ["eslint:recommended", "eslint:all"] }) }; const { prepare, cleanup, getPath } = createCustomTeardown({ cwd: root, files }); diff --git a/eslint/tests/lib/cli.js b/eslint/tests/lib/cli.js index 59ff0ea..a58a8c9 100644 --- a/eslint/tests/lib/cli.js +++ b/eslint/tests/lib/cli.js @@ -49,9 +49,10 @@ describe("cli", () => { * Verify that ESLint class receives correct opts via await cli.execute(). * @param {string} cmd CLI command. * @param {Object} opts Options hash that should match that received by ESLint class. + * @param {string} configType The config type to work with. * @returns {void} */ - async function verifyESLintOpts(cmd, opts) { + async function verifyESLintOpts(cmd, opts, configType) { // create a fake ESLint class to test with const fakeESLint = sinon.mock().withExactArgs(sinon.match(opts)); @@ -62,10 +63,11 @@ describe("cli", () => { const localCLI = proxyquire("../../lib/cli", { "./eslint": { ESLint: fakeESLint }, + "./flat-eslint": { FlatESLint: fakeESLint, findFlatConfigFile: () => null }, "./shared/logging": log }); - await localCLI.execute(cmd); + await localCLI.execute(cmd, null, configType === "flat"); sinon.verifyAndRestore(); } @@ -105,1123 +107,1237 @@ describe("cli", () => { sh.rm("-r", fixtureDir); }); - describe("execute()", () => { - it("should return error when text with incorrect quotes is passed as argument", async () => { - const configFile = getFixturePath("configurations", "quotes-error.json"); - const result = await cli.execute(`-c ${configFile}`, "var foo = 'bar';"); + ["eslintrc", "flat"].forEach(configType => { - assert.strictEqual(result, 1); - }); + const useFlatConfig = configType === "flat"; - it("should not print debug info when passed the empty string as text", async () => { - const result = await cli.execute(["--stdin", "--no-eslintrc"], ""); + describe("execute()", () => { - assert.strictEqual(result, 0); - assert.isTrue(log.info.notCalled); - }); + it(`should return error when text with incorrect quotes is passed as argument with configType:${configType}`, async () => { + const configFile = getFixturePath("configurations", "quotes-error.js"); + const result = await cli.execute(`-c ${configFile} --stdin --stdin-filename foo.js`, "var foo = 'bar';", useFlatConfig); - it("should return no error when --ext .js2 is specified", async () => { - const filePath = getFixturePath("files"); - const result = await cli.execute(`--ext .js2 ${filePath}`); + assert.strictEqual(result, 1); + }); - assert.strictEqual(result, 0); - }); + it(`should not print debug info when passed the empty string as text with configType:${configType}`, async () => { + const flag = useFlatConfig ? "--no-config-lookup" : "--no-eslintrc"; + const result = await cli.execute(["--stdin", flag, "--stdin-filename", "foo.js"], "", useFlatConfig); - it("should exit with console error when passed unsupported arguments", async () => { - const filePath = getFixturePath("files"); - const result = await cli.execute(`--blah --another ${filePath}`); + assert.strictEqual(result, 0); + assert.isTrue(log.info.notCalled); + }); + + it(`should exit with console error when passed unsupported arguments with configType:${configType}`, async () => { + const filePath = getFixturePath("files"); + const result = await cli.execute(`--blah --another ${filePath}`, null, useFlatConfig); + + assert.strictEqual(result, 2); + }); - assert.strictEqual(result, 2); }); - }); + describe("when given a config with rules with options and severity level set to error", () => { - describe("when given a config file", () => { - it("should load the specified config file", async () => { - const configPath = getFixturePath(".eslintrc"); - const filePath = getFixturePath("passing.js"); + const originalCwd = process.cwd; - await cli.execute(`--config ${configPath} ${filePath}`); - }); - }); + beforeEach(() => { + process.cwd = () => getFixturePath(); + }); - describe("when there is a local config file", () => { - const code = "lib/cli.js"; + afterEach(() => { + process.cwd = originalCwd; + }); + + it(`should exit with an error status (1) with configType:${configType}`, async () => { + const configPath = getFixturePath("configurations", "quotes-error.js"); + const filePath = getFixturePath("single-quoted.js"); + const code = `--no-ignore --config ${configPath} ${filePath}`; - it("should load the local config file", async () => { + const exitStatus = await cli.execute(code, null, useFlatConfig); - // Mock CWD - process.eslintCwd = getFixturePath("configurations", "single-quotes"); + assert.strictEqual(exitStatus, 1); + }); + }); - await cli.execute(code); + describe("when given a config file and a directory of files", () => { + it(`should load and execute without error with configType:${configType}`, async () => { + const configPath = getFixturePath("configurations", "semi-error.js"); + const filePath = getFixturePath("formatters"); + const code = `--config ${configPath} ${filePath}`; + const exitStatus = await cli.execute(code, null, useFlatConfig); - process.eslintCwd = null; + assert.strictEqual(exitStatus, 0); + }); }); - }); - describe("when given a config with rules with options and severity level set to error", () => { - it("should exit with an error status (1)", async () => { - const configPath = getFixturePath("configurations", "quotes-error.json"); - const filePath = getFixturePath("single-quoted.js"); - const code = `--no-ignore --config ${configPath} ${filePath}`; + describe("when there is a local config file", () => { + + it(`should load the local config file with configType:${configType}`, async () => { + await cli.execute("lib/cli.js", null, useFlatConfig); + }); - const exitStatus = await cli.execute(code); + if (useFlatConfig) { + it(`should load the local config file with glob pattern and configType:${configType}`, async () => { + await cli.execute("lib/cli*.js", null, useFlatConfig); + }); + } - assert.strictEqual(exitStatus, 1); + // only works on Windows + if (os.platform() === "win32") { + it(`should load the local config file with Windows slashes glob pattern and configType:${configType}`, async () => { + await cli.execute("lib\\cli*.js", null, useFlatConfig); + }); + } }); - }); - describe("when given a config file and a directory of files", () => { - it("should load and execute without error", async () => { - const configPath = getFixturePath("configurations", "semi-error.json"); - const filePath = getFixturePath("formatters"); - const code = `--config ${configPath} ${filePath}`; + describe("Formatters", () => { - const exitStatus = await cli.execute(code); + describe("when given a valid built-in formatter name", () => { + it(`should execute without any errors with configType:${configType}`, async () => { + const filePath = getFixturePath("passing.js"); + const flag = useFlatConfig ? "--no-config-lookup" : "--no-eslintrc"; + const exit = await cli.execute(`${flag} -f checkstyle ${filePath}`, null, useFlatConfig); - assert.strictEqual(exitStatus, 0); - }); - }); + assert.strictEqual(exit, 0); + }); + }); - describe("when given a config with environment set to browser", () => { - it("should execute without any errors", async () => { - const configPath = getFixturePath("configurations", "env-browser.json"); - const filePath = getFixturePath("globals-browser.js"); - const code = `--config ${configPath} ${filePath}`; + describe("when given a valid built-in formatter name that uses rules meta.", () => { + + const originalCwd = process.cwd; + + beforeEach(() => { + process.cwd = () => getFixturePath(); + }); + + afterEach(() => { + process.cwd = originalCwd; + }); + + it(`should execute without any errors with configType:${configType}`, async () => { + const filePath = getFixturePath("passing.js"); + const flag = useFlatConfig ? "--no-config-lookup" : "--no-eslintrc"; + const exit = await cli.execute(`--no-ignore -f json-with-metadata ${filePath} ${flag}`, null, useFlatConfig); + + assert.strictEqual(exit, 0); + + /* + * Note: There is a behavior difference between eslintrc and flat config + * when using formatters. For eslintrc, rulesMeta always contains every + * rule that was loaded during the last run; for flat config, rulesMeta + * only contains meta data for the rules that triggered messages in the + * results. (Flat config uses ESLint#getRulesMetaForResults().) + */ + + // Check metadata. + const { metadata } = JSON.parse(log.info.args[0][0]); + const expectedMetadata = { + cwd: process.cwd(), + rulesMeta: useFlatConfig ? {} : Array.from(BuiltinRules).reduce((obj, [ruleId, rule]) => { + obj[ruleId] = rule.meta; + return obj; + }, {}) + }; + + assert.deepStrictEqual(metadata, expectedMetadata); + }); + }); - const exit = await cli.execute(code); + describe("when given an invalid built-in formatter name", () => { + it(`should execute with error: with configType:${configType}`, async () => { + const filePath = getFixturePath("passing.js"); + const exit = await cli.execute(`-f fakeformatter ${filePath}`); - assert.strictEqual(exit, 0); - }); - }); + assert.strictEqual(exit, 2); + }); + }); - describe("when given a config with environment set to Node.js", () => { - it("should execute without any errors", async () => { - const configPath = getFixturePath("configurations", "env-node.json"); - const filePath = getFixturePath("globals-node.js"); - const code = `--config ${configPath} ${filePath}`; + describe("when given a valid formatter path", () => { + it(`should execute without any errors with configType:${configType}`, async () => { + const formatterPath = getFixturePath("formatters", "simple.js"); + const filePath = getFixturePath("passing.js"); + const exit = await cli.execute(`-f ${formatterPath} ${filePath}`); - const exit = await cli.execute(code); + assert.strictEqual(exit, 0); + }); + }); - assert.strictEqual(exit, 0); - }); - }); + describe("when given an invalid formatter path", () => { + it(`should execute with error with configType:${configType}`, async () => { + const formatterPath = getFixturePath("formatters", "file-does-not-exist.js"); + const filePath = getFixturePath("passing.js"); + const exit = await cli.execute(`-f ${formatterPath} ${filePath}`, null, useFlatConfig); - describe("when given a config with environment set to Nashorn", () => { - it("should execute without any errors", async () => { - const configPath = getFixturePath("configurations", "env-nashorn.json"); - const filePath = getFixturePath("globals-nashorn.js"); - const code = `--config ${configPath} ${filePath}`; + assert.strictEqual(exit, 2); + }); + }); - const exit = await cli.execute(code); + describe("when given an async formatter path", () => { + it(`should execute without any errors with configType:${configType}`, async () => { + const formatterPath = getFixturePath("formatters", "async.js"); + const filePath = getFixturePath("passing.js"); + const exit = await cli.execute(`-f ${formatterPath} ${filePath}`); - assert.strictEqual(exit, 0); + assert.strictEqual(log.info.getCall(0).args[0], "from async formatter"); + assert.strictEqual(exit, 0); + }); + }); }); - }); - describe("when given a config with environment set to WebExtensions", () => { - it("should execute without any errors", async () => { - const configPath = getFixturePath("configurations", "env-webextensions.json"); - const filePath = getFixturePath("globals-webextensions.js"); - const code = `--config ${configPath} ${filePath}`; + describe("Exit Codes", () => { - const exit = await cli.execute(code); + const originalCwd = process.cwd; - assert.strictEqual(exit, 0); - }); - }); + beforeEach(() => { + process.cwd = () => getFixturePath(); + }); - describe("when given a valid built-in formatter name", () => { - it("should execute without any errors", async () => { - const filePath = getFixturePath("passing.js"); - const exit = await cli.execute(`-f checkstyle ${filePath}`); + afterEach(() => { + process.cwd = originalCwd; + }); - assert.strictEqual(exit, 0); - }); - }); + describe("when executing a file with a lint error", () => { - describe("when given a valid built-in formatter name that uses rules meta.", () => { - it("should execute without any errors", async () => { - const filePath = getFixturePath("passing.js"); - const exit = await cli.execute(`-f json-with-metadata ${filePath} --no-eslintrc`); + it(`should exit with error with configType:${configType}`, async () => { + const filePath = getFixturePath("undef.js"); + const code = `--no-ignore --rule no-undef:2 ${filePath}`; - assert.strictEqual(exit, 0); + const exit = await cli.execute(code, null, useFlatConfig); - // Check metadata. - const { metadata } = JSON.parse(log.info.args[0][0]); - const expectedMetadata = { - cwd: process.cwd(), - rulesMeta: Array.from(BuiltinRules).reduce((obj, [ruleId, rule]) => { - obj[ruleId] = rule.meta; - return obj; - }, {}) - }; + assert.strictEqual(exit, 1); + }); + }); - assert.deepStrictEqual(metadata, expectedMetadata); - }); - }); + describe("when using --fix-type without --fix or --fix-dry-run", () => { + it(`should exit with error with configType:${configType}`, async () => { + const filePath = getFixturePath("passing.js"); + const code = `--fix-type suggestion ${filePath}`; - describe("when given an invalid built-in formatter name", () => { - it("should execute with error", async () => { - const filePath = getFixturePath("passing.js"); - const exit = await cli.execute(`-f fakeformatter ${filePath}`); + const exit = await cli.execute(code, null, useFlatConfig); - assert.strictEqual(exit, 2); - }); - }); + assert.strictEqual(exit, 2); + }); + }); - describe("when given a valid formatter path", () => { - it("should execute without any errors", async () => { - const formatterPath = getFixturePath("formatters", "simple.js"); - const filePath = getFixturePath("passing.js"); - const exit = await cli.execute(`-f ${formatterPath} ${filePath}`); + describe("when executing a file with a syntax error", () => { + it(`should exit with error with configType:${configType}`, async () => { + const filePath = getFixturePath("syntax-error.js"); + const exit = await cli.execute(`--no-ignore ${filePath}`, null, useFlatConfig); + + assert.strictEqual(exit, 1); + }); + }); - assert.strictEqual(exit, 0); }); - }); - describe("when given an invalid formatter path", () => { - it("should execute with error", async () => { - const formatterPath = getFixturePath("formatters", "file-does-not-exist.js"); - const filePath = getFixturePath("passing.js"); - const exit = await cli.execute(`-f ${formatterPath} ${filePath}`); + describe("when calling execute more than once", () => { - assert.strictEqual(exit, 2); - }); - }); + const originalCwd = process.cwd; - describe("when given an async formatter path", () => { - it("should execute without any errors", async () => { - const formatterPath = getFixturePath("formatters", "async.js"); - const filePath = getFixturePath("passing.js"); - const exit = await cli.execute(`-f ${formatterPath} ${filePath}`); + beforeEach(() => { + process.cwd = () => getFixturePath(); + }); - assert.strictEqual(log.info.getCall(0).args[0], "from async formatter"); - assert.strictEqual(exit, 0); - }); - }); + afterEach(() => { + process.cwd = originalCwd; + }); - describe("when executing a file with a lint error", () => { - it("should exit with error", async () => { - const filePath = getFixturePath("undef.js"); - const code = `--no-ignore --rule no-undef:2 ${filePath}`; + it(`should not print the results from previous execution with configType:${configType}`, async () => { + const filePath = getFixturePath("missing-semicolon.js"); + const passingPath = getFixturePath("passing.js"); - const exit = await cli.execute(code); + await cli.execute(`--no-ignore --rule semi:2 ${filePath}`, null, useFlatConfig); - assert.strictEqual(exit, 1); - }); - }); + assert.isTrue(log.info.called, "Log should have been called."); - describe("when using --fix-type without --fix or --fix-dry-run", () => { - it("should exit with error", async () => { - const filePath = getFixturePath("passing.js"); - const code = `--fix-type suggestion ${filePath}`; + log.info.resetHistory(); - const exit = await cli.execute(code); + await cli.execute(`--no-ignore --rule semi:2 ${passingPath}`, null, useFlatConfig); + assert.isTrue(log.info.notCalled); - assert.strictEqual(exit, 2); + }); }); - }); - describe("when executing a file with a syntax error", () => { - it("should exit with error", async () => { - const filePath = getFixturePath("syntax-error.js"); - const exit = await cli.execute(`--no-ignore ${filePath}`); - - assert.strictEqual(exit, 1); + describe("when executing with version flag", () => { + it(`should print out current version with configType:${configType}`, async () => { + assert.strictEqual(await cli.execute("-v", null, useFlatConfig), 0); + assert.strictEqual(log.info.callCount, 1); + }); }); - }); - describe("when calling execute more than once", () => { - it("should not print the results from previous execution", async () => { - const filePath = getFixturePath("missing-semicolon.js"); - const passingPath = getFixturePath("passing.js"); + describe("when executing with env-info flag", () => { - await cli.execute(`--no-ignore --rule semi:2 ${filePath}`); + it(`should print out environment information with configType:${configType}`, async () => { + assert.strictEqual(await cli.execute("--env-info", null, useFlatConfig), 0); + assert.strictEqual(log.info.callCount, 1); + }); - assert.isTrue(log.info.called, "Log should have been called."); + describe("With error condition", () => { - log.info.resetHistory(); + beforeEach(() => { + RuntimeInfo.environment = sinon.stub().throws("There was an error!"); + }); - await cli.execute(`--no-ignore --rule semi:2 ${passingPath}`); - assert.isTrue(log.info.notCalled); + afterEach(() => { + RuntimeInfo.environment = sinon.stub(); + }); - }); - }); + it(`should print error message and return error code with configType:${configType}`, async () => { + + assert.strictEqual(await cli.execute("--env-info", null, useFlatConfig), 2); + assert.strictEqual(log.error.callCount, 1); + }); + }); - describe("when executing with version flag", () => { - it("should print out current version", async () => { - assert.strictEqual(await cli.execute("-v"), 0); - assert.strictEqual(log.info.callCount, 1); }); - }); - describe("when executing with env-info flag", () => { - it("should print out environment information", async () => { - assert.strictEqual(await cli.execute("--env-info"), 0); - assert.strictEqual(log.info.callCount, 1); + describe("when executing with help flag", () => { + it(`should print out help with configType:${configType}`, async () => { + assert.strictEqual(await cli.execute("-h", null, useFlatConfig), 0); + assert.strictEqual(log.info.callCount, 1); + }); }); - it("should print error message and return error code", async () => { - RuntimeInfo.environment.throws("There was an error!"); + describe("when executing a file with a shebang", () => { + it(`should execute without error with configType:${configType}`, async () => { + const filePath = getFixturePath("shebang.js"); + const flag = useFlatConfig ? "--no-config-lookup" : "--no-eslintrc"; + const exit = await cli.execute(`${flag} --no-ignore ${filePath}`, null, useFlatConfig); - assert.strictEqual(await cli.execute("--env-info"), 2); - assert.strictEqual(log.error.callCount, 1); + assert.strictEqual(exit, 0); + }); }); - }); - describe("when executing without no-error-on-unmatched-pattern flag", () => { - it("should throw an error on unmatched glob pattern", async () => { - const filePath = getFixturePath("unmatched-patterns"); - const globPattern = "*.js3"; + describe("FixtureDir Dependent Tests", () => { - await stdAssert.rejects(async () => { - await cli.execute(`"${filePath}/${globPattern}"`); - }, new Error(`No files matching '${filePath}/${globPattern}' were found.`)); - }); + const originalCwd = process.cwd; - it("should throw an error on unmatched --ext", async () => { - const filePath = getFixturePath("unmatched-patterns"); - const extension = ".js3"; + beforeEach(() => { + process.cwd = () => getFixturePath(); + }); - await stdAssert.rejects(async () => { - await cli.execute(`--ext ${extension} ${filePath}`); - }, `No files matching '${filePath}' were found`); - }); - }); + afterEach(() => { + process.cwd = originalCwd; + }); - describe("when executing with no-error-on-unmatched-pattern flag", () => { - it("should not throw an error on unmatched node glob syntax patterns", async () => { - const filePath = getFixturePath("unmatched-patterns"); - const exit = await cli.execute(`--no-error-on-unmatched-pattern "${filePath}/*.js3"`); + describe("when executing with global flag", () => { - assert.strictEqual(exit, 0); - }); + it(`should default defined variables to read-only with configType:${configType}`, async () => { + const filePath = getFixturePath("undef.js"); + const exit = await cli.execute(`--global baz,bat --no-ignore --rule no-global-assign:2 ${filePath}`, null, useFlatConfig); - it("should not throw an error on unmatched --ext", async () => { - const filePath = getFixturePath("unmatched-patterns"); - const exit = await cli.execute(`--no-error-on-unmatched-pattern --ext .js3 ${filePath}`); + assert.isTrue(log.info.calledOnce); + assert.strictEqual(exit, 1); + }); - assert.strictEqual(exit, 0); - }); - }); + it(`should allow defining writable global variables with configType:${configType}`, async () => { + const filePath = getFixturePath("undef.js"); + const exit = await cli.execute(`--global baz:false,bat:true --no-ignore ${filePath}`, null, useFlatConfig); - describe("when executing with no-error-on-unmatched-pattern flag and multiple patterns", () => { - it("should not throw an error on multiple unmatched node glob syntax patterns", async () => { - const filePath = getFixturePath("unmatched-patterns"); - const exit = await cli.execute(`--no-error-on-unmatched-pattern ${filePath}/*.js3 ${filePath}/*.js4`); + assert.isTrue(log.info.notCalled); + assert.strictEqual(exit, 0); + }); - assert.strictEqual(exit, 0); - }); + it(`should allow defining variables with multiple flags with configType:${configType}`, async () => { + const filePath = getFixturePath("undef.js"); + const exit = await cli.execute(`--global baz --global bat:true --no-ignore ${filePath}`); - it("should still throw an error on when a matched pattern has lint errors", async () => { - const filePath = getFixturePath("unmatched-patterns"); - const exit = await cli.execute(`--no-error-on-unmatched-pattern ${filePath}/*.js3 ${filePath}/*.js`); + assert.isTrue(log.info.notCalled); + assert.strictEqual(exit, 0); + }); + }); - assert.strictEqual(exit, 1); - }); - }); - describe("when executing with no-error-on-unmatched-pattern flag and multiple --ext arguments", () => { - it("should not throw an error on multiple unmatched --ext arguments", async () => { - const filePath = getFixturePath("unmatched-patterns"); - const exit = await cli.execute(`--no-error-on-unmatched-pattern --ext .js3 --ext .js4 ${filePath}`); + describe("when supplied with rule flag and severity level set to error", () => { - assert.strictEqual(exit, 0); - }); - it("should still throw an error on when a matched pattern has lint errors", async () => { - const filePath = getFixturePath("unmatched-patterns"); - const exit = await cli.execute(`--no-error-on-unmatched-pattern --ext .js3 --ext .js ${filePath}`); + it(`should exit with an error status (2) with configType:${configType}`, async () => { + const filePath = getFixturePath("single-quoted.js"); + const code = `--no-ignore --rule 'quotes: [2, double]' ${filePath}`; + const exitStatus = await cli.execute(code, null, useFlatConfig); - assert.strictEqual(exit, 1); - }); - }); + assert.strictEqual(exitStatus, 1); + }); + }); - describe("when executing with help flag", () => { - it("should print out help", async () => { - assert.strictEqual(await cli.execute("-h"), 0); - assert.strictEqual(log.info.callCount, 1); - }); - }); + describe("when the quiet option is enabled", () => { - describe("when given a directory with eslint excluded files in the directory", () => { - it("should throw an error and not process any files", async () => { - const ignorePath = getFixturePath(".eslintignore"); - const filePath = getFixturePath("cli"); + it(`should only print error with configType:${configType}`, async () => { + const filePath = getFixturePath("single-quoted.js"); + const cliArgs = `--no-ignore --quiet -f compact --rule 'quotes: [2, double]' --rule 'no-unused-vars: 1' ${filePath}`; - await stdAssert.rejects(async () => { - await cli.execute(`--ignore-path ${ignorePath} ${filePath}`); - }, new Error(`All files matched by '${filePath}' are ignored.`)); - }); - }); + await cli.execute(cliArgs, null, useFlatConfig); - describe("when given a file in excluded files list", () => { - it("should not process the file", async () => { - const ignorePath = getFixturePath(".eslintignore"); - const filePath = getFixturePath("passing.js"); - const exit = await cli.execute(`--ignore-path ${ignorePath} ${filePath}`); + sinon.assert.calledOnce(log.info); - // a warning about the ignored file - assert.isTrue(log.info.called); - assert.strictEqual(exit, 0); - }); + const formattedOutput = log.info.firstCall.args[0]; - it("should process the file when forced", async () => { - const ignorePath = getFixturePath(".eslintignore"); - const filePath = getFixturePath("passing.js"); - const exit = await cli.execute(`--ignore-path ${ignorePath} --no-ignore ${filePath}`); + assert.include(formattedOutput, "Error"); + assert.notInclude(formattedOutput, "Warning"); + }); - // no warnings - assert.isFalse(log.info.called); - assert.strictEqual(exit, 0); - }); - }); + it(`should print nothing if there are no errors with configType:${configType}`, async () => { + const filePath = getFixturePath("single-quoted.js"); + const cliArgs = `--quiet -f compact --rule 'quotes: [1, double]' --rule 'no-unused-vars: 1' ${filePath}`; - describe("when given a pattern to ignore", () => { - it("should not process any files", async () => { - const ignoredFile = getFixturePath("cli/syntax-error.js"); - const filePath = getFixturePath("cli/passing.js"); - const exit = await cli.execute(`--ignore-pattern cli/ ${ignoredFile} ${filePath}`); + await cli.execute(cliArgs, null, useFlatConfig); - // warnings about the ignored files - assert.isTrue(log.info.called); - assert.strictEqual(exit, 0); - }); - }); + sinon.assert.notCalled(log.info); + }); + }); - describe("when given patterns to ignore", () => { - it("should not process any matching files", async () => { - const ignorePaths = ["a", "b"]; - const cmd = ignorePaths.map(ignorePath => `--ignore-pattern ${ignorePath}`).concat(".").join(" "); + describe("no-error-on-unmatched-pattern flag", () => { - const opts = { - overrideConfig: { - ignorePatterns: ignorePaths - } - }; + describe("when executing without no-error-on-unmatched-pattern flag", () => { + it(`should throw an error on unmatched glob pattern with configType:${configType}`, async () => { + let filePath = getFixturePath("unmatched-patterns"); + const globPattern = "unmatched*.js"; - await verifyESLintOpts(cmd, opts); - }); - }); + if (useFlatConfig) { + filePath = filePath.replace(/\\/gu, "/"); + } - describe("when executing a file with a shebang", () => { - it("should execute without error", async () => { - const filePath = getFixturePath("shebang.js"); - const exit = await cli.execute(`--no-ignore ${filePath}`); + await stdAssert.rejects(async () => { + await cli.execute(`"${filePath}/${globPattern}"`, null, useFlatConfig); + }, new Error(`No files matching '${filePath}/${globPattern}' were found.`)); + }); - assert.strictEqual(exit, 0); - }); - }); + }); - describe("when loading a custom rule", () => { - it("should return an error when rule isn't found", async () => { - const rulesPath = getFixturePath("rules", "wrong"); - const configPath = getFixturePath("rules", "eslint.json"); - const filePath = getFixturePath("rules", "test", "test-custom-rule.js"); - const code = `--rulesdir ${rulesPath} --config ${configPath} --no-ignore ${filePath}`; + describe("when executing with no-error-on-unmatched-pattern flag", () => { + it(`should not throw an error on unmatched node glob syntax patterns with configType:${configType}`, async () => { + const filePath = getFixturePath("unmatched-patterns"); + const exit = await cli.execute(`--no-error-on-unmatched-pattern "${filePath}/unmatched*.js"`, null, useFlatConfig); - await stdAssert.rejects(async () => { - const exit = await cli.execute(code); + assert.strictEqual(exit, 0); + }); + }); - assert.strictEqual(exit, 2); - }, /Error while loading rule 'custom-rule': Boom!/u); - }); + describe("when executing with no-error-on-unmatched-pattern flag and multiple patterns", () => { + it(`should not throw an error on multiple unmatched node glob syntax patterns with configType:${configType}`, async () => { + const filePath = getFixturePath("unmatched-patterns/js3"); + const exit = await cli.execute(`--no-error-on-unmatched-pattern ${filePath}/unmatched1*.js ${filePath}/unmatched2*.js`, null, useFlatConfig); - it("should return a warning when rule is matched", async () => { - const rulesPath = getFixturePath("rules"); - const configPath = getFixturePath("rules", "eslint.json"); - const filePath = getFixturePath("rules", "test", "test-custom-rule.js"); - const code = `--rulesdir ${rulesPath} --config ${configPath} --no-ignore ${filePath}`; + assert.strictEqual(exit, 0); + }); - await cli.execute(code); + it(`should still throw an error on when a matched pattern has lint errors with configType:${configType}`, async () => { + const filePath = getFixturePath("unmatched-patterns"); + const exit = await cli.execute(`--no-ignore --no-error-on-unmatched-pattern ${filePath}/unmatched1*.js ${filePath}/failing.js`, null, useFlatConfig); - assert.isTrue(log.info.calledOnce); - assert.isTrue(log.info.neverCalledWith("")); - }); + assert.strictEqual(exit, 1); + }); + }); - it("should return warnings from multiple rules in different directories", async () => { - const rulesPath = getFixturePath("rules", "dir1"); - const rulesPath2 = getFixturePath("rules", "dir2"); - const configPath = getFixturePath("rules", "multi-rulesdirs.json"); - const filePath = getFixturePath("rules", "test-multi-rulesdirs.js"); - const code = `--rulesdir ${rulesPath} --rulesdir ${rulesPath2} --config ${configPath} --no-ignore ${filePath}`; - const exit = await cli.execute(code); - - const call = log.info.getCall(0); - - assert.isTrue(log.info.calledOnce); - assert.isTrue(call.args[0].indexOf("String!") > -1); - assert.isTrue(call.args[0].indexOf("Literal!") > -1); - assert.isTrue(call.args[0].indexOf("2 problems") > -1); - assert.isTrue(log.info.neverCalledWith("")); - assert.strictEqual(exit, 1); - }); + }); + describe("Parser Options", () => { - }); + describe("when given parser options", () => { + it(`should exit with error if parser options are invalid with configType:${configType}`, async () => { + const filePath = getFixturePath("passing.js"); + const exit = await cli.execute(`--no-ignore --parser-options test111 ${filePath}`, null, useFlatConfig); - describe("when executing with no-eslintrc flag", () => { - it("should ignore a local config file", async () => { - const filePath = getFixturePath("eslintrc", "quotes.js"); - const exit = await cli.execute(`--no-eslintrc --no-ignore ${filePath}`); + assert.strictEqual(exit, 2); + }); - assert.isTrue(log.info.notCalled); - assert.strictEqual(exit, 0); - }); - }); + it(`should exit with no error if parser is valid with configType:${configType}`, async () => { + const filePath = getFixturePath("passing.js"); + const exit = await cli.execute(`--no-ignore --parser-options=ecmaVersion:6 ${filePath}`, null, useFlatConfig); - describe("when executing without no-eslintrc flag", () => { - it("should load a local config file", async () => { - const filePath = getFixturePath("eslintrc", "quotes.js"); - const exit = await cli.execute(`--no-ignore ${filePath}`); + assert.strictEqual(exit, 0); + }); - assert.isTrue(log.info.calledOnce); - assert.strictEqual(exit, 1); - }); - }); + it(`should exit with an error on ecmaVersion 7 feature in ecmaVersion 6 with configType:${configType}`, async () => { + const filePath = getFixturePath("passing-es7.js"); + const exit = await cli.execute(`--no-ignore --parser-options=ecmaVersion:6 ${filePath}`, null, useFlatConfig); - describe("when executing without env flag", () => { - it("should not define environment-specific globals", async () => { - const files = [ - getFixturePath("globals-browser.js"), - getFixturePath("globals-node.js") - ]; + assert.strictEqual(exit, 1); + }); - await cli.execute(`--no-eslintrc --config ./conf/eslint-recommended.js --no-ignore ${files.join(" ")}`); + it(`should exit with no error on ecmaVersion 7 feature in ecmaVersion 7 with configType:${configType}`, async () => { + const filePath = getFixturePath("passing-es7.js"); + const exit = await cli.execute(`--no-ignore --parser-options=ecmaVersion:7 ${filePath}`, null, useFlatConfig); - assert.strictEqual(log.info.args[0][0].split("\n").length, 10); - }); - }); + assert.strictEqual(exit, 0); + }); - describe("when executing with global flag", () => { - it("should default defined variables to read-only", async () => { - const filePath = getFixturePath("undef.js"); - const exit = await cli.execute(`--global baz,bat --no-ignore --rule no-global-assign:2 ${filePath}`); + it(`should exit with no error on ecmaVersion 7 feature with config ecmaVersion 6 and command line ecmaVersion 7 with configType:${configType}`, async () => { + const configPath = useFlatConfig + ? getFixturePath("configurations", "es6.js") + : getFixturePath("configurations", "es6.json"); + const filePath = getFixturePath("passing-es7.js"); + const exit = await cli.execute(`--no-ignore --config ${configPath} --parser-options=ecmaVersion:7 ${filePath}`, null, useFlatConfig); - assert.isTrue(log.info.calledOnce); - assert.strictEqual(exit, 1); - }); + assert.strictEqual(exit, 0); + }); + }); + }); - it("should allow defining writable global variables", async () => { - const filePath = getFixturePath("undef.js"); - const exit = await cli.execute(`--global baz:false,bat:true --no-ignore ${filePath}`); + describe("when given the max-warnings flag", () => { - assert.isTrue(log.info.notCalled); - assert.strictEqual(exit, 0); - }); + let filePath, configFilePath; - it("should allow defining variables with multiple flags", async () => { - const filePath = getFixturePath("undef.js"); - const exit = await cli.execute(`--global baz --global bat:true --no-ignore ${filePath}`); + before(() => { + filePath = getFixturePath("max-warnings/six-warnings.js"); + configFilePath = getFixturePath(useFlatConfig ? "max-warnings/eslint.config.js" : "max-warnings/.eslintrc"); + }); - assert.isTrue(log.info.notCalled); - assert.strictEqual(exit, 0); - }); - }); + it(`should not change exit code if warning count under threshold with configType:${configType}`, async () => { + const exitCode = await cli.execute(`--no-ignore --max-warnings 10 ${filePath} -c ${configFilePath}`, null, useFlatConfig); - describe("when supplied with rule flag and severity level set to error", () => { - it("should exit with an error status (2)", async () => { - const filePath = getFixturePath("single-quoted.js"); - const code = `--no-ignore --rule 'quotes: [2, double]' ${filePath}`; - const exitStatus = await cli.execute(code); + assert.strictEqual(exitCode, 0); + }); - assert.strictEqual(exitStatus, 1); - }); - }); + it(`should exit with exit code 1 if warning count exceeds threshold with configType:${configType}`, async () => { + const exitCode = await cli.execute(`--no-ignore --max-warnings 5 ${filePath} -c ${configFilePath}`, null, useFlatConfig); - describe("when the quiet option is enabled", () => { + assert.strictEqual(exitCode, 1); + assert.ok(log.error.calledOnce); + assert.include(log.error.getCall(0).args[0], "ESLint found too many warnings"); + }); - it("should only print error", async () => { - const filePath = getFixturePath("single-quoted.js"); - const cliArgs = `--no-ignore --quiet -f compact --rule 'quotes: [2, double]' --rule 'no-unused-vars: 1' ${filePath}`; + it(`should exit with exit code 1 without printing warnings if the quiet option is enabled and warning count exceeds threshold with configType:${configType}`, async () => { + const exitCode = await cli.execute(`--no-ignore --quiet --max-warnings 5 ${filePath} -c ${configFilePath}`, null, useFlatConfig); - await cli.execute(cliArgs); + assert.strictEqual(exitCode, 1); + assert.ok(log.error.calledOnce); + assert.include(log.error.getCall(0).args[0], "ESLint found too many warnings"); + assert.ok(log.info.notCalled); // didn't print warnings + }); - sinon.assert.calledOnce(log.info); + it(`should not change exit code if warning count equals threshold with configType:${configType}`, async () => { + const exitCode = await cli.execute(`--no-ignore --max-warnings 6 ${filePath} -c ${configFilePath}`, null, useFlatConfig); - const formattedOutput = log.info.firstCall.args[0]; + assert.strictEqual(exitCode, 0); + }); - assert.include(formattedOutput, "Error"); - assert.notInclude(formattedOutput, "Warning"); - }); + it(`should not change exit code if flag is not specified and there are warnings with configType:${configType}`, async () => { + const exitCode = await cli.execute(`-c ${configFilePath} ${filePath}`, null, useFlatConfig); - it("should print nothing if there are no errors", async () => { - const filePath = getFixturePath("single-quoted.js"); - const cliArgs = `--quiet -f compact --rule 'quotes: [1, double]' --rule 'no-unused-vars: 1' ${filePath}`; + assert.strictEqual(exitCode, 0); + }); + }); - await cli.execute(cliArgs); + describe("when given the exit-on-fatal-error flag", () => { + it(`should not change exit code if no fatal errors are reported with configType:${configType}`, async () => { + const filePath = getFixturePath("exit-on-fatal-error", "no-fatal-error.js"); + const exitCode = await cli.execute(`--no-ignore --exit-on-fatal-error ${filePath}`, null, useFlatConfig); - sinon.assert.notCalled(log.info); - }); - }); + assert.strictEqual(exitCode, 0); + }); - describe("when supplied with report output file path", () => { - afterEach(() => { - sh.rm("-rf", "tests/output"); - }); + it(`should exit with exit code 1 if no fatal errors are found, but rule violations are found with configType:${configType}`, async () => { + const filePath = getFixturePath("exit-on-fatal-error", "no-fatal-error-rule-violation.js"); + const exitCode = await cli.execute(`--no-ignore --exit-on-fatal-error ${filePath}`, null, useFlatConfig); - it("should write the file and create dirs if they don't exist", async () => { - const filePath = getFixturePath("single-quoted.js"); - const code = `--no-ignore --rule 'quotes: [1, double]' --o tests/output/eslint-output.txt ${filePath}`; + assert.strictEqual(exitCode, 1); + }); - await cli.execute(code); + it(`should exit with exit code 2 if fatal error is found with configType:${configType}`, async () => { + const filePath = getFixturePath("exit-on-fatal-error", "fatal-error.js"); + const exitCode = await cli.execute(`--no-ignore --exit-on-fatal-error ${filePath}`, null, useFlatConfig); - assert.include(fs.readFileSync("tests/output/eslint-output.txt", "utf8"), filePath); - assert.isTrue(log.info.notCalled); - }); + assert.strictEqual(exitCode, 2); + }); - it("should return an error if the path is a directory", async () => { - const filePath = getFixturePath("single-quoted.js"); - const code = `--no-ignore --rule 'quotes: [1, double]' --o tests/output ${filePath}`; + it(`should exit with exit code 2 if fatal error is found in any file with configType:${configType}`, async () => { + const filePath = getFixturePath("exit-on-fatal-error"); + const exitCode = await cli.execute(`--no-ignore --exit-on-fatal-error ${filePath}`, null, useFlatConfig); - fs.mkdirSync("tests/output"); + assert.strictEqual(exitCode, 2); + }); - const exit = await cli.execute(code); - assert.strictEqual(exit, 2); - assert.isTrue(log.info.notCalled); - assert.isTrue(log.error.calledOnce); - }); + }); - it("should return an error if the path could not be written to", async () => { - const filePath = getFixturePath("single-quoted.js"); - const code = `--no-ignore --rule 'quotes: [1, double]' --o tests/output/eslint-output.txt ${filePath}`; - fs.writeFileSync("tests/output", "foo"); + describe("Ignores", () => { + + describe("when given a directory with eslint excluded files in the directory", () => { + it(`should throw an error and not process any files with configType:${configType}`, async () => { + const ignorePath = getFixturePath(".eslintignore"); + const filePath = getFixturePath("cli"); + const expectedMessage = useFlatConfig + ? `All files matched by '${filePath.replace(/\\/gu, "/")}/**/*.js' are ignored.` + : `All files matched by '${filePath}' are ignored.`; + + await stdAssert.rejects(async () => { + await cli.execute(`--ignore-path ${ignorePath} ${filePath}`, null, useFlatConfig); + }, new Error(expectedMessage)); + }); + }); + + describe("when given a file in excluded files list", () => { + it(`should not process the file with configType:${configType}`, async () => { + const ignorePath = getFixturePath(".eslintignore"); + const filePath = getFixturePath("passing.js"); + const exit = await cli.execute(`--ignore-path ${ignorePath} ${filePath}`, null, useFlatConfig); + + // a warning about the ignored file + assert.isTrue(log.info.called); + assert.strictEqual(exit, 0); + }); + + it(`should process the file when forced with configType:${configType}`, async () => { + const ignorePath = getFixturePath(".eslintignore"); + const filePath = getFixturePath("passing.js"); + const exit = await cli.execute(`--ignore-path ${ignorePath} --no-ignore ${filePath}`, null, useFlatConfig); + + // no warnings + assert.isFalse(log.info.called); + assert.strictEqual(exit, 0); + }); + }); + + describe("when given a pattern to ignore", () => { + it(`should not process any files with configType:${configType}`, async () => { + const ignoredFile = getFixturePath("cli/syntax-error.js"); + const filePath = getFixturePath("cli/passing.js"); + const exit = await cli.execute(`--ignore-pattern cli/ ${ignoredFile} ${filePath}`, null, useFlatConfig); + + // warnings about the ignored files + assert.isTrue(log.info.called); + assert.strictEqual(exit, 0); + }); + }); - const exit = await cli.execute(code); + }); - assert.strictEqual(exit, 2); - assert.isTrue(log.info.notCalled); - assert.isTrue(log.error.calledOnce); }); - }); - describe("when supplied with a plugin", () => { - it("should pass plugins to ESLint", async () => { - const examplePluginName = "eslint-plugin-example"; - await verifyESLintOpts(`--no-ignore --plugin ${examplePluginName} foo.js`, { - overrideConfig: { - plugins: [examplePluginName] - } - }); - }); + describe("when given a parser name", () => { - }); + it(`should exit with a fatal error if parser is invalid with configType:${configType}`, async () => { + const filePath = getFixturePath("passing.js"); - describe("when supplied with a plugin-loading path", () => { - it("should pass the option to ESLint", async () => { - const examplePluginDirPath = "foo/bar"; + await stdAssert.rejects(async () => await cli.execute(`--no-ignore --parser test111 ${filePath}`, null, useFlatConfig), "Cannot find module 'test111'"); + }); + + it(`should exit with no error if parser is valid with configType:${configType}`, async () => { + const filePath = getFixturePath("passing.js"); + const flag = useFlatConfig ? "--no-config-lookup" : "--no-eslintrc"; + const exit = await cli.execute(`${flag} --no-ignore --parser espree ${filePath}`, null, useFlatConfig); - await verifyESLintOpts(`--resolve-plugins-relative-to ${examplePluginDirPath} foo.js`, { - resolvePluginsRelativeTo: examplePluginDirPath + assert.strictEqual(exit, 0); }); + }); - }); - describe("when given an parser name", () => { - it("should exit with a fatal error if parser is invalid", async () => { - const filePath = getFixturePath("passing.js"); + describe("when supplied with report output file path", () => { + afterEach(() => { + sh.rm("-rf", "tests/output"); + }); - await stdAssert.rejects(async () => await cli.execute(`--no-ignore --parser test111 ${filePath}`), "Cannot find module 'test111'"); - }); + it(`should write the file and create dirs if they don't exist with configType:${configType}`, async () => { + const filePath = getFixturePath("single-quoted.js"); + const code = `--no-ignore --rule 'quotes: [1, double]' --o tests/output/eslint-output.txt ${filePath}`; - it("should exit with no error if parser is valid", async () => { - const filePath = getFixturePath("passing.js"); - const exit = await cli.execute(`--no-ignore --parser espree ${filePath}`); + await cli.execute(code, null, useFlatConfig); - assert.strictEqual(exit, 0); - }); - }); + assert.include(fs.readFileSync("tests/output/eslint-output.txt", "utf8"), filePath); + assert.isTrue(log.info.notCalled); + }); - describe("when given parser options", () => { - it("should exit with error if parser options are invalid", async () => { - const filePath = getFixturePath("passing.js"); - const exit = await cli.execute(`--no-ignore --parser-options test111 ${filePath}`); + it(`should return an error if the path is a directory with configType:${configType}`, async () => { + const filePath = getFixturePath("single-quoted.js"); + const code = `--no-ignore --rule 'quotes: [1, double]' --o tests/output ${filePath}`; - assert.strictEqual(exit, 2); - }); + fs.mkdirSync("tests/output"); - it("should exit with no error if parser is valid", async () => { - const filePath = getFixturePath("passing.js"); - const exit = await cli.execute(`--no-ignore --parser-options=ecmaVersion:6 ${filePath}`); + const exit = await cli.execute(code, null, useFlatConfig); - assert.strictEqual(exit, 0); - }); + assert.strictEqual(exit, 2); + assert.isTrue(log.info.notCalled); + assert.isTrue(log.error.calledOnce); + }); - it("should exit with an error on ecmaVersion 7 feature in ecmaVersion 6", async () => { - const filePath = getFixturePath("passing-es7.js"); - const exit = await cli.execute(`--no-ignore --parser-options=ecmaVersion:6 ${filePath}`); + it(`should return an error if the path could not be written to with configType:${configType}`, async () => { + const filePath = getFixturePath("single-quoted.js"); + const code = `--no-ignore --rule 'quotes: [1, double]' --o tests/output/eslint-output.txt ${filePath}`; - assert.strictEqual(exit, 1); - }); + fs.writeFileSync("tests/output", "foo"); - it("should exit with no error on ecmaVersion 7 feature in ecmaVersion 7", async () => { - const filePath = getFixturePath("passing-es7.js"); - const exit = await cli.execute(`--no-ignore --parser-options=ecmaVersion:7 ${filePath}`); + const exit = await cli.execute(code, null, useFlatConfig); - assert.strictEqual(exit, 0); + assert.strictEqual(exit, 2); + assert.isTrue(log.info.notCalled); + assert.isTrue(log.error.calledOnce); + }); }); - it("should exit with no error on ecmaVersion 7 feature with config ecmaVersion 6 and command line ecmaVersion 7", async () => { - const configPath = getFixturePath("configurations", "es6.json"); - const filePath = getFixturePath("passing-es7.js"); - const exit = await cli.execute(`--no-ignore --config ${configPath} --parser-options=ecmaVersion:7 ${filePath}`); + describe("when passed --no-inline-config", () => { + let localCLI; - assert.strictEqual(exit, 0); - }); - }); + afterEach(() => { + sinon.verifyAndRestore(); + }); - describe("when given the max-warnings flag", () => { - it("should not change exit code if warning count under threshold", async () => { - const filePath = getFixturePath("max-warnings"); - const exitCode = await cli.execute(`--no-ignore --max-warnings 10 ${filePath}`); + it(`should pass allowInlineConfig:false to ESLint when --no-inline-config is used with configType:${configType}`, async () => { + + // create a fake ESLint class to test with + const fakeESLint = sinon.mock().withExactArgs(sinon.match({ allowInlineConfig: false })); + + Object.defineProperties(fakeESLint.prototype, Object.getOwnPropertyDescriptors(ESLint.prototype)); + sinon.stub(fakeESLint.prototype, "lintFiles").returns([{ + filePath: "./foo.js", + output: "bar", + messages: [ + { + severity: 2, + message: "Fake message" + } + ], + errorCount: 1, + warningCount: 0 + }]); + sinon.stub(fakeESLint.prototype, "loadFormatter").returns({ format: () => "done" }); + fakeESLint.outputFixes = sinon.stub(); + + localCLI = proxyquire("../../lib/cli", { + "./eslint": { ESLint: fakeESLint }, + "./eslint/flat-eslint": { ESLint: fakeESLint, findFlatConfigFile: () => null }, + "./shared/logging": log + }); + + await localCLI.execute("--no-inline-config .", null, useFlatConfig); + }); - assert.strictEqual(exitCode, 0); - }); + it(`should not error and allowInlineConfig should be true by default with configType:${configType}`, async () => { - it("should exit with exit code 1 if warning count exceeds threshold", async () => { - const filePath = getFixturePath("max-warnings"); - const exitCode = await cli.execute(`--no-ignore --max-warnings 5 ${filePath}`); + // create a fake ESLint class to test with + const fakeESLint = sinon.mock().withExactArgs(sinon.match({ allowInlineConfig: true })); - assert.strictEqual(exitCode, 1); - assert.ok(log.error.calledOnce); - assert.include(log.error.getCall(0).args[0], "ESLint found too many warnings"); - }); + Object.defineProperties(fakeESLint.prototype, Object.getOwnPropertyDescriptors(ESLint.prototype)); + sinon.stub(fakeESLint.prototype, "lintFiles").returns([]); + sinon.stub(fakeESLint.prototype, "loadFormatter").returns({ format: () => "done" }); + fakeESLint.outputFixes = sinon.stub(); - it("should exit with exit code 1 without printing warnings if the quiet option is enabled and warning count exceeds threshold", async () => { - const filePath = getFixturePath("max-warnings"); - const exitCode = await cli.execute(`--no-ignore --quiet --max-warnings 5 ${filePath}`); + localCLI = proxyquire("../../lib/cli", { + "./eslint": { ESLint: fakeESLint }, + "./eslint/flat-eslint": { ESLint: fakeESLint, findFlatConfigFile: () => null }, + "./shared/logging": log + }); - assert.strictEqual(exitCode, 1); - assert.ok(log.error.calledOnce); - assert.include(log.error.getCall(0).args[0], "ESLint found too many warnings"); - assert.ok(log.info.notCalled); // didn't print warnings - }); + const exitCode = await localCLI.execute(".", null, useFlatConfig); - it("should not change exit code if warning count equals threshold", async () => { - const filePath = getFixturePath("max-warnings"); - const exitCode = await cli.execute(`--no-ignore --max-warnings 6 ${filePath}`); + assert.strictEqual(exitCode, 0); + + }); - assert.strictEqual(exitCode, 0); }); - it("should not change exit code if flag is not specified and there are warnings", async () => { - const filePath = getFixturePath("max-warnings"); - const exitCode = await cli.execute(filePath); + describe("when passed --fix", () => { + let localCLI; - assert.strictEqual(exitCode, 0); - }); - }); + afterEach(() => { + sinon.verifyAndRestore(); + }); - describe("when given the exit-on-fatal-error flag", () => { - it("should not change exit code if no fatal errors are reported", async () => { - const filePath = getFixturePath("exit-on-fatal-error", "no-fatal-error.js"); - const exitCode = await cli.execute(`--no-ignore --exit-on-fatal-error ${filePath}`); + it(`should pass fix:true to ESLint when executing on files with configType:${configType}`, async () => { - assert.strictEqual(exitCode, 0); - }); + // create a fake ESLint class to test with + const fakeESLint = sinon.mock().withExactArgs(sinon.match({ fix: true })); - it("should exit with exit code 1 if no fatal errors are found, but rule violations are found", async () => { - const filePath = getFixturePath("exit-on-fatal-error", "no-fatal-error-rule-violation.js"); - const exitCode = await cli.execute(`--no-ignore --exit-on-fatal-error ${filePath}`); + Object.defineProperties(fakeESLint.prototype, Object.getOwnPropertyDescriptors(ESLint.prototype)); + sinon.stub(fakeESLint.prototype, "lintFiles").returns([]); + sinon.stub(fakeESLint.prototype, "loadFormatter").returns({ format: () => "done" }); + fakeESLint.outputFixes = sinon.mock().once(); - assert.strictEqual(exitCode, 1); - }); + localCLI = proxyquire("../../lib/cli", { + "./eslint": { ESLint: fakeESLint }, + "./eslint/flat-eslint": { ESLint: fakeESLint, findFlatConfigFile: () => null }, + "./shared/logging": log + }); - it("should exit with exit code 2 if fatal error is found", async () => { - const filePath = getFixturePath("exit-on-fatal-error", "fatal-error.js"); - const exitCode = await cli.execute(`--no-ignore --exit-on-fatal-error ${filePath}`); + const exitCode = await localCLI.execute("--fix .", null, useFlatConfig); - assert.strictEqual(exitCode, 2); - }); + assert.strictEqual(exitCode, 0); - it("should exit with exit code 2 if fatal error is found in any file", async () => { - const filePath = getFixturePath("exit-on-fatal-error"); - const exitCode = await cli.execute(`--no-ignore --exit-on-fatal-error ${filePath}`); + }); - assert.strictEqual(exitCode, 2); - }); + it(`should rewrite files when in fix mode with configType:${configType}`, async () => { - }); + const report = [{ + filePath: "./foo.js", + output: "bar", + messages: [ + { + severity: 2, + message: "Fake message" + } + ], + errorCount: 1, + warningCount: 0 + }]; - describe("when passed --no-inline-config", () => { - let localCLI; + // create a fake ESLint class to test with + const fakeESLint = sinon.mock().withExactArgs(sinon.match({ fix: true })); - afterEach(() => { - sinon.verifyAndRestore(); - }); + Object.defineProperties(fakeESLint.prototype, Object.getOwnPropertyDescriptors(ESLint.prototype)); + sinon.stub(fakeESLint.prototype, "lintFiles").returns(report); + sinon.stub(fakeESLint.prototype, "loadFormatter").returns({ format: () => "done" }); + fakeESLint.outputFixes = sinon.mock().withExactArgs(report); - it("should pass allowInlineConfig:false to ESLint when --no-inline-config is used", async () => { + localCLI = proxyquire("../../lib/cli", { + "./eslint": { ESLint: fakeESLint }, + "./eslint/flat-eslint": { ESLint: fakeESLint, findFlatConfigFile: () => null }, - // create a fake ESLint class to test with - const fakeESLint = sinon.mock().withExactArgs(sinon.match({ allowInlineConfig: false })); + "./shared/logging": log + }); - Object.defineProperties(fakeESLint.prototype, Object.getOwnPropertyDescriptors(ESLint.prototype)); - sinon.stub(fakeESLint.prototype, "lintFiles").returns([{ - filePath: "./foo.js", - output: "bar", - messages: [ - { - severity: 2, - message: "Fake message" - } - ], - errorCount: 1, - warningCount: 0 - }]); - sinon.stub(fakeESLint.prototype, "loadFormatter").returns({ format: () => "done" }); - fakeESLint.outputFixes = sinon.stub(); + const exitCode = await localCLI.execute("--fix .", null, useFlatConfig); + + assert.strictEqual(exitCode, 1); - localCLI = proxyquire("../../lib/cli", { - "./eslint": { ESLint: fakeESLint }, - "./shared/logging": log }); - await localCLI.execute("--no-inline-config ."); - }); + it(`should provide fix predicate and rewrite files when in fix mode and quiet mode with configType:${configType}`, async () => { - it("should not error and allowInlineConfig should be true by default", async () => { + const report = [{ + filePath: "./foo.js", + output: "bar", + messages: [ + { + severity: 1, + message: "Fake message" + } + ], + errorCount: 0, + warningCount: 1 + }]; - // create a fake ESLint class to test with - const fakeESLint = sinon.mock().withExactArgs(sinon.match({ allowInlineConfig: true })); + // create a fake ESLint class to test with + const fakeESLint = sinon.mock().withExactArgs(sinon.match({ fix: sinon.match.func })); - Object.defineProperties(fakeESLint.prototype, Object.getOwnPropertyDescriptors(ESLint.prototype)); - sinon.stub(fakeESLint.prototype, "lintFiles").returns([]); - sinon.stub(fakeESLint.prototype, "loadFormatter").returns({ format: () => "done" }); - fakeESLint.outputFixes = sinon.stub(); + Object.defineProperties(fakeESLint.prototype, Object.getOwnPropertyDescriptors(ESLint.prototype)); + sinon.stub(fakeESLint.prototype, "lintFiles").returns(report); + sinon.stub(fakeESLint.prototype, "loadFormatter").returns({ format: () => "done" }); + fakeESLint.getErrorResults = sinon.stub().returns([]); + fakeESLint.outputFixes = sinon.mock().withExactArgs(report); - localCLI = proxyquire("../../lib/cli", { - "./eslint": { ESLint: fakeESLint }, - "./shared/logging": log - }); + localCLI = proxyquire("../../lib/cli", { + "./eslint": { ESLint: fakeESLint }, + "./eslint/flat-eslint": { ESLint: fakeESLint, findFlatConfigFile: () => null }, - const exitCode = await localCLI.execute("."); + "./shared/logging": log + }); - assert.strictEqual(exitCode, 0); + const exitCode = await localCLI.execute("--fix --quiet .", null, useFlatConfig); - }); + assert.strictEqual(exitCode, 0); - }); + }); - describe("when passed --fix", () => { - let localCLI; + it(`should not call ESLint and return 2 when executing on text with configType:${configType}`, async () => { - afterEach(() => { - sinon.verifyAndRestore(); - }); + // create a fake ESLint class to test with + const fakeESLint = sinon.mock().never(); - it("should pass fix:true to ESLint when executing on files", async () => { + localCLI = proxyquire("../../lib/cli", { + "./eslint": { ESLint: fakeESLint }, + "./eslint/flat-eslint": { ESLint: fakeESLint, findFlatConfigFile: () => null }, - // create a fake ESLint class to test with - const fakeESLint = sinon.mock().withExactArgs(sinon.match({ fix: true })); + "./shared/logging": log + }); - Object.defineProperties(fakeESLint.prototype, Object.getOwnPropertyDescriptors(ESLint.prototype)); - sinon.stub(fakeESLint.prototype, "lintFiles").returns([]); - sinon.stub(fakeESLint.prototype, "loadFormatter").returns({ format: () => "done" }); - fakeESLint.outputFixes = sinon.mock().once(); + const exitCode = await localCLI.execute("--fix .", "foo = bar;", null, useFlatConfig); - localCLI = proxyquire("../../lib/cli", { - "./eslint": { ESLint: fakeESLint }, - "./shared/logging": log + assert.strictEqual(exitCode, 2); }); - const exitCode = await localCLI.execute("--fix ."); + }); - assert.strictEqual(exitCode, 0); + describe("when passed --fix-dry-run", () => { + let localCLI; - }); + afterEach(() => { + sinon.verifyAndRestore(); + }); + it(`should pass fix:true to ESLint when executing on files with configType:${configType}`, async () => { - it("should rewrite files when in fix mode", async () => { + // create a fake ESLint class to test with + const fakeESLint = sinon.mock().withExactArgs(sinon.match({ fix: true })); - const report = [{ - filePath: "./foo.js", - output: "bar", - messages: [ - { - severity: 2, - message: "Fake message" - } - ], - errorCount: 1, - warningCount: 0 - }]; + Object.defineProperties(fakeESLint.prototype, Object.getOwnPropertyDescriptors(ESLint.prototype)); + sinon.stub(fakeESLint.prototype, "lintFiles").returns([]); + sinon.stub(fakeESLint.prototype, "loadFormatter").returns({ format: () => "done" }); + fakeESLint.outputFixes = sinon.mock().never(); + + localCLI = proxyquire("../../lib/cli", { + "./eslint": { ESLint: fakeESLint }, + "./eslint/flat-eslint": { ESLint: fakeESLint, findFlatConfigFile: () => null }, - // create a fake ESLint class to test with - const fakeESLint = sinon.mock().withExactArgs(sinon.match({ fix: true })); + "./shared/logging": log + }); - Object.defineProperties(fakeESLint.prototype, Object.getOwnPropertyDescriptors(ESLint.prototype)); - sinon.stub(fakeESLint.prototype, "lintFiles").returns(report); - sinon.stub(fakeESLint.prototype, "loadFormatter").returns({ format: () => "done" }); - fakeESLint.outputFixes = sinon.mock().withExactArgs(report); + const exitCode = await localCLI.execute("--fix-dry-run .", null, useFlatConfig); + + assert.strictEqual(exitCode, 0); - localCLI = proxyquire("../../lib/cli", { - "./eslint": { ESLint: fakeESLint }, - "./shared/logging": log }); - const exitCode = await localCLI.execute("--fix ."); + it(`should pass fixTypes to ESLint when --fix-type is passed with configType:${configType}`, async () => { - assert.strictEqual(exitCode, 1); + const expectedESLintOptions = { + fix: true, + fixTypes: ["suggestion"] + }; - }); + // create a fake ESLint class to test with + const fakeESLint = sinon.mock().withExactArgs(sinon.match(expectedESLintOptions)); - it("should provide fix predicate and rewrite files when in fix mode and quiet mode", async () => { + Object.defineProperties(fakeESLint.prototype, Object.getOwnPropertyDescriptors(ESLint.prototype)); + sinon.stub(fakeESLint.prototype, "lintFiles").returns([]); + sinon.stub(fakeESLint.prototype, "loadFormatter").returns({ format: () => "done" }); + fakeESLint.outputFixes = sinon.stub(); - const report = [{ - filePath: "./foo.js", - output: "bar", - messages: [ - { - severity: 1, - message: "Fake message" - } - ], - errorCount: 0, - warningCount: 1 - }]; + localCLI = proxyquire("../../lib/cli", { + "./eslint": { ESLint: fakeESLint }, + "./eslint/flat-eslint": { ESLint: fakeESLint, findFlatConfigFile: () => null }, - // create a fake ESLint class to test with - const fakeESLint = sinon.mock().withExactArgs(sinon.match({ fix: sinon.match.func })); + "./shared/logging": log + }); - Object.defineProperties(fakeESLint.prototype, Object.getOwnPropertyDescriptors(ESLint.prototype)); - sinon.stub(fakeESLint.prototype, "lintFiles").returns(report); - sinon.stub(fakeESLint.prototype, "loadFormatter").returns({ format: () => "done" }); - fakeESLint.getErrorResults = sinon.stub().returns([]); - fakeESLint.outputFixes = sinon.mock().withExactArgs(report); + const exitCode = await localCLI.execute("--fix-dry-run --fix-type suggestion .", null, useFlatConfig); - localCLI = proxyquire("../../lib/cli", { - "./eslint": { ESLint: fakeESLint }, - "./shared/logging": log + assert.strictEqual(exitCode, 0); }); - const exitCode = await localCLI.execute("--fix --quiet ."); + it(`should not rewrite files when in fix-dry-run mode with configType:${configType}`, async () => { - assert.strictEqual(exitCode, 0); + const report = [{ + filePath: "./foo.js", + output: "bar", + messages: [ + { + severity: 2, + message: "Fake message" + } + ], + errorCount: 1, + warningCount: 0 + }]; - }); + // create a fake ESLint class to test with + const fakeESLint = sinon.mock().withExactArgs(sinon.match({ fix: true })); + + Object.defineProperties(fakeESLint.prototype, Object.getOwnPropertyDescriptors(ESLint.prototype)); + sinon.stub(fakeESLint.prototype, "lintFiles").returns(report); + sinon.stub(fakeESLint.prototype, "loadFormatter").returns({ format: () => "done" }); + fakeESLint.outputFixes = sinon.mock().never(); + + localCLI = proxyquire("../../lib/cli", { + "./eslint": { ESLint: fakeESLint }, + "./eslint/flat-eslint": { ESLint: fakeESLint, findFlatConfigFile: () => null }, - it("should not call ESLint and return 2 when executing on text", async () => { + "./shared/logging": log + }); - // create a fake ESLint class to test with - const fakeESLint = sinon.mock().never(); + const exitCode = await localCLI.execute("--fix-dry-run .", null, useFlatConfig); + + assert.strictEqual(exitCode, 1); - localCLI = proxyquire("../../lib/cli", { - "./eslint": { ESLint: fakeESLint }, - "./shared/logging": log }); - const exitCode = await localCLI.execute("--fix .", "foo = bar;"); + it(`should provide fix predicate when in fix-dry-run mode and quiet mode with configType:${configType}`, async () => { - assert.strictEqual(exitCode, 2); - }); + const report = [{ + filePath: "./foo.js", + output: "bar", + messages: [ + { + severity: 1, + message: "Fake message" + } + ], + errorCount: 0, + warningCount: 1 + }]; - }); + // create a fake ESLint class to test with + const fakeESLint = sinon.mock().withExactArgs(sinon.match({ fix: sinon.match.func })); - describe("when passed --fix-dry-run", () => { - let localCLI; + Object.defineProperties(fakeESLint.prototype, Object.getOwnPropertyDescriptors(ESLint.prototype)); + sinon.stub(fakeESLint.prototype, "lintFiles").returns(report); + sinon.stub(fakeESLint.prototype, "loadFormatter").returns({ format: () => "done" }); + fakeESLint.getErrorResults = sinon.stub().returns([]); + fakeESLint.outputFixes = sinon.mock().never(); - afterEach(() => { - sinon.verifyAndRestore(); - }); + localCLI = proxyquire("../../lib/cli", { + "./eslint": { ESLint: fakeESLint }, + "./eslint/flat-eslint": { ESLint: fakeESLint, findFlatConfigFile: () => null }, - it("should pass fix:true to ESLint when executing on files", async () => { + "./shared/logging": log + }); - // create a fake ESLint class to test with - const fakeESLint = sinon.mock().withExactArgs(sinon.match({ fix: true })); + const exitCode = await localCLI.execute("--fix-dry-run --quiet .", null, useFlatConfig); - Object.defineProperties(fakeESLint.prototype, Object.getOwnPropertyDescriptors(ESLint.prototype)); - sinon.stub(fakeESLint.prototype, "lintFiles").returns([]); - sinon.stub(fakeESLint.prototype, "loadFormatter").returns({ format: () => "done" }); - fakeESLint.outputFixes = sinon.mock().never(); + assert.strictEqual(exitCode, 0); - localCLI = proxyquire("../../lib/cli", { - "./eslint": { ESLint: fakeESLint }, - "./shared/logging": log }); - const exitCode = await localCLI.execute("--fix-dry-run ."); + it(`should allow executing on text with configType:${configType}`, async () => { - assert.strictEqual(exitCode, 0); + const report = [{ + filePath: "./foo.js", + output: "bar", + messages: [ + { + severity: 2, + message: "Fake message" + } + ], + errorCount: 1, + warningCount: 0 + }]; - }); + // create a fake ESLint class to test with + const fakeESLint = sinon.mock().withExactArgs(sinon.match({ fix: true })); - it("should pass fixTypes to ESLint when --fix-type is passed", async () => { + Object.defineProperties(fakeESLint.prototype, Object.getOwnPropertyDescriptors(ESLint.prototype)); + sinon.stub(fakeESLint.prototype, "lintText").returns(report); + sinon.stub(fakeESLint.prototype, "loadFormatter").returns({ format: () => "done" }); + fakeESLint.outputFixes = sinon.mock().never(); - const expectedESLintOptions = { - fix: true, - fixTypes: ["suggestion"] - }; + localCLI = proxyquire("../../lib/cli", { + "./eslint": { ESLint: fakeESLint }, + "./eslint/flat-eslint": { ESLint: fakeESLint, findFlatConfigFile: () => null }, - // create a fake ESLint class to test with - const fakeESLint = sinon.mock().withExactArgs(sinon.match(expectedESLintOptions)); + "./shared/logging": log + }); - Object.defineProperties(fakeESLint.prototype, Object.getOwnPropertyDescriptors(ESLint.prototype)); - sinon.stub(fakeESLint.prototype, "lintFiles").returns([]); - sinon.stub(fakeESLint.prototype, "loadFormatter").returns({ format: () => "done" }); - fakeESLint.outputFixes = sinon.stub(); + const exitCode = await localCLI.execute("--fix-dry-run .", "foo = bar;", useFlatConfig); - localCLI = proxyquire("../../lib/cli", { - "./eslint": { ESLint: fakeESLint }, - "./shared/logging": log + assert.strictEqual(exitCode, 1); }); - const exitCode = await localCLI.execute("--fix-dry-run --fix-type suggestion ."); + it(`should not call ESLint and return 2 when used with --fix with configType:${configType}`, async () => { + + // create a fake ESLint class to test with + const fakeESLint = sinon.mock().never(); + + localCLI = proxyquire("../../lib/cli", { + "./eslint": { ESLint: fakeESLint }, + "./eslint/flat-eslint": { ESLint: fakeESLint, findFlatConfigFile: () => null }, + + "./shared/logging": log + }); - assert.strictEqual(exitCode, 0); + const exitCode = await localCLI.execute("--fix --fix-dry-run .", "foo = bar;", useFlatConfig); + + assert.strictEqual(exitCode, 2); + }); }); - it("should not rewrite files when in fix-dry-run mode", async () => { + describe("when passing --print-config", () => { + it(`should print out the configuration with configType:${configType}`, async () => { + const filePath = getFixturePath("xxxx"); - const report = [{ - filePath: "./foo.js", - output: "bar", - messages: [ - { - severity: 2, - message: "Fake message" - } - ], - errorCount: 1, - warningCount: 0 - }]; + const exitCode = await cli.execute(`--print-config ${filePath}`, null, useFlatConfig); + + assert.isTrue(log.info.calledOnce); + assert.strictEqual(exitCode, 0); + }); + + it(`should error if any positional file arguments are passed with configType:${configType}`, async () => { + const filePath1 = getFixturePath("files", "bar.js"); + const filePath2 = getFixturePath("files", "foo.js"); - // create a fake ESLint class to test with - const fakeESLint = sinon.mock().withExactArgs(sinon.match({ fix: true })); + const exitCode = await cli.execute(`--print-config ${filePath1} ${filePath2}`, null, useFlatConfig); + + assert.isTrue(log.info.notCalled); + assert.isTrue(log.error.calledOnce); + assert.strictEqual(exitCode, 2); + }); - Object.defineProperties(fakeESLint.prototype, Object.getOwnPropertyDescriptors(ESLint.prototype)); - sinon.stub(fakeESLint.prototype, "lintFiles").returns(report); - sinon.stub(fakeESLint.prototype, "loadFormatter").returns({ format: () => "done" }); - fakeESLint.outputFixes = sinon.mock().never(); + it(`should error out when executing on text with configType:${configType}`, async () => { + const exitCode = await cli.execute("--print-config=myFile.js", "foo = bar;", useFlatConfig); - localCLI = proxyquire("../../lib/cli", { - "./eslint": { ESLint: fakeESLint }, - "./shared/logging": log + assert.isTrue(log.info.notCalled); + assert.isTrue(log.error.calledOnce); + assert.strictEqual(exitCode, 2); }); + }); + + // --------- + }); - const exitCode = await localCLI.execute("--fix-dry-run ."); - assert.strictEqual(exitCode, 1); + describe("when given a config file", () => { + it("should load the specified config file", async () => { + const configPath = getFixturePath(".eslintrc"); + const filePath = getFixturePath("passing.js"); + await cli.execute(`--config ${configPath} ${filePath}`); }); + }); - it("should provide fix predicate when in fix-dry-run mode and quiet mode", async () => { - const report = [{ - filePath: "./foo.js", - output: "bar", - messages: [ - { - severity: 1, - message: "Fake message" - } - ], - errorCount: 0, - warningCount: 1 - }]; + describe("eslintrc Only", () => { + + describe("Environments", () => { + + describe("when given a config with environment set to browser", () => { + it("should execute without any errors", async () => { + const configPath = getFixturePath("configurations", "env-browser.json"); + const filePath = getFixturePath("globals-browser.js"); + const code = `--config ${configPath} ${filePath}`; + + const exit = await cli.execute(code); + + assert.strictEqual(exit, 0); + }); + }); + + describe("when given a config with environment set to Node.js", () => { + it("should execute without any errors", async () => { + const configPath = getFixturePath("configurations", "env-node.json"); + const filePath = getFixturePath("globals-node.js"); + const code = `--config ${configPath} ${filePath}`; - // create a fake ESLint class to test with - const fakeESLint = sinon.mock().withExactArgs(sinon.match({ fix: sinon.match.func })); + const exit = await cli.execute(code); - Object.defineProperties(fakeESLint.prototype, Object.getOwnPropertyDescriptors(ESLint.prototype)); - sinon.stub(fakeESLint.prototype, "lintFiles").returns(report); - sinon.stub(fakeESLint.prototype, "loadFormatter").returns({ format: () => "done" }); - fakeESLint.getErrorResults = sinon.stub().returns([]); - fakeESLint.outputFixes = sinon.mock().never(); + assert.strictEqual(exit, 0); + }); + }); + + describe("when given a config with environment set to Nashorn", () => { + it("should execute without any errors", async () => { + const configPath = getFixturePath("configurations", "env-nashorn.json"); + const filePath = getFixturePath("globals-nashorn.js"); + const code = `--config ${configPath} ${filePath}`; - localCLI = proxyquire("../../lib/cli", { - "./eslint": { ESLint: fakeESLint }, - "./shared/logging": log + const exit = await cli.execute(code); + + assert.strictEqual(exit, 0); + }); }); - const exitCode = await localCLI.execute("--fix-dry-run --quiet ."); + describe("when given a config with environment set to WebExtensions", () => { + it("should execute without any errors", async () => { + const configPath = getFixturePath("configurations", "env-webextensions.json"); + const filePath = getFixturePath("globals-webextensions.js"); + const code = `--config ${configPath} ${filePath}`; - assert.strictEqual(exitCode, 0); + const exit = await cli.execute(code); + assert.strictEqual(exit, 0); + }); + }); }); - it("should allow executing on text", async () => { + describe("when loading a custom rule", () => { + it("should return an error when rule isn't found", async () => { + const rulesPath = getFixturePath("rules", "wrong"); + const configPath = getFixturePath("rules", "eslint.json"); + const filePath = getFixturePath("rules", "test", "test-custom-rule.js"); + const code = `--rulesdir ${rulesPath} --config ${configPath} --no-ignore ${filePath}`; - const report = [{ - filePath: "./foo.js", - output: "bar", - messages: [ - { - severity: 2, - message: "Fake message" - } - ], - errorCount: 1, - warningCount: 0 - }]; + await stdAssert.rejects(async () => { + const exit = await cli.execute(code); + + assert.strictEqual(exit, 2); + }, /Error while loading rule 'custom-rule': Boom!/u); + }); + + it("should return a warning when rule is matched", async () => { + const rulesPath = getFixturePath("rules"); + const configPath = getFixturePath("rules", "eslint.json"); + const filePath = getFixturePath("rules", "test", "test-custom-rule.js"); + const code = `--rulesdir ${rulesPath} --config ${configPath} --no-ignore ${filePath}`; - // create a fake ESLint class to test with - const fakeESLint = sinon.mock().withExactArgs(sinon.match({ fix: true })); + await cli.execute(code); - Object.defineProperties(fakeESLint.prototype, Object.getOwnPropertyDescriptors(ESLint.prototype)); - sinon.stub(fakeESLint.prototype, "lintText").returns(report); - sinon.stub(fakeESLint.prototype, "loadFormatter").returns({ format: () => "done" }); - fakeESLint.outputFixes = sinon.mock().never(); + assert.isTrue(log.info.calledOnce); + assert.isTrue(log.info.neverCalledWith("")); + }); + + it("should return warnings from multiple rules in different directories", async () => { + const rulesPath = getFixturePath("rules", "dir1"); + const rulesPath2 = getFixturePath("rules", "dir2"); + const configPath = getFixturePath("rules", "multi-rulesdirs.json"); + const filePath = getFixturePath("rules", "test-multi-rulesdirs.js"); + const code = `--rulesdir ${rulesPath} --rulesdir ${rulesPath2} --config ${configPath} --no-ignore ${filePath}`; + const exit = await cli.execute(code); + + const call = log.info.getCall(0); - localCLI = proxyquire("../../lib/cli", { - "./eslint": { ESLint: fakeESLint }, - "./shared/logging": log + assert.isTrue(log.info.calledOnce); + assert.isTrue(call.args[0].includes("String!")); + assert.isTrue(call.args[0].includes("Literal!")); + assert.isTrue(call.args[0].includes("2 problems")); + assert.isTrue(log.info.neverCalledWith("")); + assert.strictEqual(exit, 1); }); - const exitCode = await localCLI.execute("--fix-dry-run .", "foo = bar;"); - assert.strictEqual(exitCode, 1); }); - it("should not call ESLint and return 2 when used with --fix", async () => { + describe("when executing with no-eslintrc flag", () => { + it("should ignore a local config file", async () => { + const filePath = getFixturePath("eslintrc", "quotes.js"); + const exit = await cli.execute(`--no-eslintrc --no-ignore ${filePath}`); - // create a fake ESLint class to test with - const fakeESLint = sinon.mock().never(); - - localCLI = proxyquire("../../lib/cli", { - "./eslint": { ESLint: fakeESLint }, - "./shared/logging": log + assert.isTrue(log.info.notCalled); + assert.strictEqual(exit, 0); }); + }); - const exitCode = await localCLI.execute("--fix --fix-dry-run .", "foo = bar;"); + describe("when executing without no-eslintrc flag", () => { + it("should load a local config file", async () => { + const filePath = getFixturePath("eslintrc", "quotes.js"); + const exit = await cli.execute(`--no-ignore ${filePath}`); - assert.strictEqual(exitCode, 2); + assert.isTrue(log.info.calledOnce); + assert.strictEqual(exit, 1); + }); }); - }); - describe("when passing --print-config", () => { - it("should print out the configuration", async () => { - const filePath = getFixturePath("xxxx"); + describe("when executing without env flag", () => { + it("should not define environment-specific globals", async () => { + const files = [ + getFixturePath("globals-browser.js"), + getFixturePath("globals-node.js") + ]; - const exitCode = await cli.execute(`--print-config ${filePath}`); + await cli.execute(`--no-eslintrc --config ./conf/eslint-recommended.js --no-ignore ${files.join(" ")}`); - assert.isTrue(log.info.calledOnce); - assert.strictEqual(exitCode, 0); + assert.strictEqual(log.info.args[0][0].split("\n").length, 10); + }); }); - it("should error if any positional file arguments are passed", async () => { - const filePath1 = getFixturePath("files", "bar.js"); - const filePath2 = getFixturePath("files", "foo.js"); - const exitCode = await cli.execute(`--print-config ${filePath1} ${filePath2}`); + describe("when supplied with a plugin", () => { + it("should pass plugins to ESLint", async () => { + const examplePluginName = "eslint-plugin-example"; + + await verifyESLintOpts(`--no-ignore --plugin ${examplePluginName} foo.js`, { + overrideConfig: { + plugins: [examplePluginName] + } + }); + }); - assert.isTrue(log.info.notCalled); - assert.isTrue(log.error.calledOnce); - assert.strictEqual(exitCode, 2); }); - it("should error out when executing on text", async () => { - const exitCode = await cli.execute("--print-config=myFile.js", "foo = bar;"); + describe("when supplied with a plugin-loading path", () => { + it("should pass the option to ESLint", async () => { + const examplePluginDirPath = "foo/bar"; - assert.isTrue(log.info.notCalled); - assert.isTrue(log.error.calledOnce); - assert.strictEqual(exitCode, 2); + await verifyESLintOpts(`--resolve-plugins-relative-to ${examplePluginDirPath} foo.js`, { + resolvePluginsRelativeTo: examplePluginDirPath + }); + }); }); + + }); + }); diff --git a/eslint/tests/lib/config/flat-config-array.js b/eslint/tests/lib/config/flat-config-array.js index 64cad94..675257e 100644 --- a/eslint/tests/lib/config/flat-config-array.js +++ b/eslint/tests/lib/config/flat-config-array.js @@ -13,12 +13,14 @@ const { FlatConfigArray } = require("../../../lib/config/flat-config-array"); const assert = require("chai").assert; const allConfig = require("../../../conf/eslint-all"); const recommendedConfig = require("../../../conf/eslint-recommended"); +const stringify = require("json-stable-stringify-without-jsonify"); //----------------------------------------------------------------------------- // Helpers //----------------------------------------------------------------------------- const baseConfig = { + files: ["**/*.js"], plugins: { "@": { rules: { @@ -77,7 +79,6 @@ const baseConfig = { */ function createFlatConfigArray(configs) { return new FlatConfigArray(configs, { - basePath: __dirname, baseConfig: [baseConfig] }); } @@ -143,8 +144,26 @@ function normalizeRuleConfig(rulesConfig) { describe("FlatConfigArray", () => { + it("should allow noniterable baseConfig objects", () => { + const base = { + languageOptions: { + parserOptions: { + foo: true + } + } + }; + + const configs = new FlatConfigArray([], { + baseConfig: base + }); + + // should not throw error + configs.normalizeSync(); + }); + it("should not reuse languageOptions.parserOptions across configs", () => { const base = [{ + files: ["**/*.js"], languageOptions: { parserOptions: { foo: true @@ -153,7 +172,6 @@ describe("FlatConfigArray", () => { }]; const configs = new FlatConfigArray([], { - basePath: __dirname, baseConfig: base }); @@ -165,10 +183,81 @@ describe("FlatConfigArray", () => { assert.notStrictEqual(base[0].languageOptions.parserOptions, config.languageOptions.parserOptions, "parserOptions should be new object"); }); + describe("Serialization of configs", () => { + it("should convert config into normalized JSON object", () => { + + const configs = new FlatConfigArray([{ + plugins: { + a: {}, + b: {} + } + }]); + + configs.normalizeSync(); + + const config = configs.getConfig("foo.js"); + const expected = { + plugins: ["@", "a", "b"], + languageOptions: { + ecmaVersion: "latest", + sourceType: "module", + parser: "@/espree", + parserOptions: {} + }, + processor: void 0 + }; + const actual = config.toJSON(); + + assert.deepStrictEqual(actual, expected); + + assert.strictEqual(stringify(actual), stringify(expected)); + }); + + it("should throw an error when config with parser object is normalized", () => { + + const configs = new FlatConfigArray([{ + languageOptions: { + parser: { + parse() { /* empty */ } + } + } + }]); + + configs.normalizeSync(); + + const config = configs.getConfig("foo.js"); + + assert.throws(() => { + config.toJSON(); + }, /Caching is not supported/u); + + }); + + it("should throw an error when config with processor object is normalized", () => { + + const configs = new FlatConfigArray([{ + processor: { + preprocess() { /* empty */ }, + postprocess() { /* empty */ } + } + }]); + + configs.normalizeSync(); + + const config = configs.getConfig("foo.js"); + + assert.throws(() => { + config.toJSON(); + }, /Caching is not supported/u); + + }); + + + }); describe("Special configs", () => { it("eslint:recommended is replaced with an actual config", async () => { - const configs = new FlatConfigArray(["eslint:recommended"], { basePath: __dirname }); + const configs = new FlatConfigArray(["eslint:recommended"]); await configs.normalize(); const config = configs.getConfig("foo.js"); @@ -177,7 +266,7 @@ describe("FlatConfigArray", () => { }); it("eslint:all is replaced with an actual config", async () => { - const configs = new FlatConfigArray(["eslint:all"], { basePath: __dirname }); + const configs = new FlatConfigArray(["eslint:all"]); await configs.normalize(); const config = configs.getConfig("foo.js"); @@ -1442,7 +1531,7 @@ describe("FlatConfigArray", () => { }, { plugins: { - "foo/baz/boom": { + "@foo/baz/boom": { rules: { bang: {} } @@ -1451,13 +1540,13 @@ describe("FlatConfigArray", () => { rules: { foo: ["error"], bar: 0, - "foo/baz/boom/bang": "error" + "@foo/baz/boom/bang": "error" } } ], { plugins: { ...baseConfig.plugins, - "foo/baz/boom": { + "@foo/baz/boom": { rules: { bang: {} } @@ -1466,7 +1555,7 @@ describe("FlatConfigArray", () => { rules: { foo: [2, "always"], bar: [0], - "foo/baz/boom/bang": [2] + "@foo/baz/boom/bang": [2] } })); diff --git a/eslint/tests/lib/config/flat-config-helpers.js b/eslint/tests/lib/config/flat-config-helpers.js new file mode 100644 index 0000000..004fb82 --- /dev/null +++ b/eslint/tests/lib/config/flat-config-helpers.js @@ -0,0 +1,102 @@ +/** + * @fileoverview Tests for FlatConfigArray + * @author Nicholas C. Zakas + */ + +"use strict"; + +//----------------------------------------------------------------------------- +// Requirements +//----------------------------------------------------------------------------- + +const { + parseRuleId, + getRuleFromConfig +} = require("../../../lib/config/flat-config-helpers"); +const assert = require("chai").assert; + +//----------------------------------------------------------------------------- +// Tests +//----------------------------------------------------------------------------- + +describe("Config Helpers", () => { + + + describe("parseRuleId()", () => { + + it("should return plugin name and rule name for core rule", () => { + const result = parseRuleId("foo"); + + assert.deepStrictEqual(result, { + pluginName: "@", + ruleName: "foo" + }); + }); + + it("should return plugin name and rule name with a/b format", () => { + const result = parseRuleId("test/foo"); + + assert.deepStrictEqual(result, { + pluginName: "test", + ruleName: "foo" + }); + }); + + it("should return plugin name and rule name with a/b/c format", () => { + const result = parseRuleId("node/no-unsupported-features/es-builtins"); + + assert.deepStrictEqual(result, { + pluginName: "node", + ruleName: "no-unsupported-features/es-builtins" + }); + }); + + it("should return plugin name and rule name with @a/b/c format", () => { + const result = parseRuleId("@test/foo/bar"); + + assert.deepStrictEqual(result, { + pluginName: "@test/foo", + ruleName: "bar" + }); + }); + }); + + describe("getRuleFromConfig", () => { + it("should retrieve rule from plugin in config", () => { + const rule = {}; + const config = { + plugins: { + test: { + rules: { + one: rule + } + } + } + }; + + const result = getRuleFromConfig("test/one", config); + + assert.strictEqual(result, rule); + + }); + + it("should retrieve rule from core in config", () => { + const rule = {}; + const config = { + plugins: { + "@": { + rules: { + semi: rule + } + } + } + }; + + const result = getRuleFromConfig("semi", config); + + assert.strictEqual(result, rule); + + }); + }); + +}); diff --git a/eslint/tests/lib/eslint/eslint.config.js b/eslint/tests/lib/eslint/eslint.config.js new file mode 100644 index 0000000..6b389dc --- /dev/null +++ b/eslint/tests/lib/eslint/eslint.config.js @@ -0,0 +1,11 @@ +"use strict"; + +module.exports = { + rules: { + quotes: 2, + "no-var": 2, + "eol-last": 2, + strict: 2, + "no-unused-vars": 2 + } +}; diff --git a/eslint/tests/lib/eslint/eslint.js b/eslint/tests/lib/eslint/eslint.js index 4e140f7..74f26cf 100644 --- a/eslint/tests/lib/eslint/eslint.js +++ b/eslint/tests/lib/eslint/eslint.js @@ -27,6 +27,7 @@ const { const hash = require("../../../lib/cli-engine/hash"); const { unIndent, createCustomTeardown } = require("../../_utils"); const coreRules = require("../../../lib/rules"); +const childProcess = require("child_process"); //------------------------------------------------------------------------------ // Tests @@ -324,6 +325,7 @@ describe("ESLint", () => { assert.strictEqual(results[0].messages[0].output, void 0); assert.strictEqual(results[0].errorCount, 0); assert.strictEqual(results[0].warningCount, 1); + assert.strictEqual(results[0].fatalErrorCount, 0); assert.strictEqual(results[0].fixableErrorCount, 0); assert.strictEqual(results[0].fixableWarningCount, 0); assert.strictEqual(results[0].usedDeprecatedRules.length, 0); @@ -399,6 +401,7 @@ describe("ESLint", () => { { filePath: getFixturePath("passing.js"), messages: [], + suppressedMessages: [], errorCount: 0, warningCount: 0, fatalErrorCount: 0, @@ -410,6 +413,55 @@ describe("ESLint", () => { ]); }); + it("should use eslint:recommended rules when eslint:recommended configuration is specified", async () => { + eslint = new ESLint({ + useEslintrc: false, + overrideConfig: { + extends: ["eslint:recommended"] + }, + ignore: false, + cwd: getFixturePath() + }); + const options = { filePath: "file.js" }; + const results = await eslint.lintText("foo ()", options); + + assert.strictEqual(results.length, 1); + assert.strictEqual(results[0].messages.length, 1); + assert.strictEqual(results[0].messages[0].ruleId, "no-undef"); + assert.strictEqual(results[0].messages[0].severity, 2); + }); + + it("should use eslint:all rules when eslint:all configuration is specified", async () => { + eslint = new ESLint({ + useEslintrc: false, + overrideConfig: { + extends: ["eslint:all"] + }, + ignore: false, + cwd: getFixturePath() + }); + const options = { filePath: "file.js" }; + const results = await eslint.lintText("foo ()", options); + + assert.strictEqual(results.length, 1); + + const { messages } = results[0]; + + // Some rules that should report errors in the given code. Not all, as we don't want to update this test when we add new rules. + const expectedRules = ["no-undef", "semi", "func-call-spacing"]; + + expectedRules.forEach(ruleId => { + const messageFromRule = messages.find(message => message.ruleId === ruleId); + + assert.ok( + typeof messageFromRule === "object" && messageFromRule !== null, // LintMessage object + `Expected a message from rule '${ruleId}'` + ); + assert.strictEqual(messageFromRule.severity, 2); + }); + + }); + it("correctly autofixes semicolon-conflicting-fixes", async () => { eslint = new ESLint({ cwd: path.join(fixtureDir, ".."), @@ -600,6 +652,7 @@ describe("ESLint", () => { nodeType: "Identifier" } ], + suppressedMessages: [], errorCount: 1, warningCount: 0, fatalErrorCount: 0, @@ -640,6 +693,7 @@ describe("ESLint", () => { column: 19 } ], + suppressedMessages: [], errorCount: 1, warningCount: 0, fatalErrorCount: 1, @@ -679,6 +733,7 @@ describe("ESLint", () => { column: 10 } ], + suppressedMessages: [], errorCount: 1, warningCount: 0, fatalErrorCount: 1, @@ -767,6 +822,7 @@ describe("ESLint", () => { column: 19 } ], + suppressedMessages: [], errorCount: 1, warningCount: 0, fatalErrorCount: 1, @@ -1044,6 +1100,7 @@ describe("ESLint", () => { assert.strictEqual(results.length, 1); assert.strictEqual(results[0].errorCount, 0); assert.strictEqual(results[0].warningCount, 1); + assert.strictEqual(results[0].fatalErrorCount, 0); assert.strictEqual(results[0].fixableErrorCount, 0); assert.strictEqual(results[0].fixableWarningCount, 0); assert.strictEqual(results[0].messages[0].message, expectedMsg); @@ -1105,6 +1162,7 @@ describe("ESLint", () => { assert.strictEqual(results.length, 1); assert.strictEqual(results[0].errorCount, 0); assert.strictEqual(results[0].warningCount, 1); + assert.strictEqual(results[0].fatalErrorCount, 0); assert.strictEqual(results[0].fixableErrorCount, 0); assert.strictEqual(results[0].fixableWarningCount, 0); assert.strictEqual(results[0].messages[0].message, expectedMsg); @@ -1127,6 +1185,7 @@ describe("ESLint", () => { assert.strictEqual(results.length, 1); assert.strictEqual(results[0].errorCount, 0); assert.strictEqual(results[0].warningCount, 1); + assert.strictEqual(results[0].fatalErrorCount, 0); assert.strictEqual(results[0].fixableErrorCount, 0); assert.strictEqual(results[0].fixableWarningCount, 0); assert.strictEqual(results[0].messages[0].message, expectedMsg); @@ -1387,6 +1446,21 @@ describe("ESLint", () => { }, /All files matched by '\.\/tests\/fixtures\/cli-engine\/' are ignored\./u); }); + // https://github.com/eslint/eslint/issues/15642 + it("should ignore files that are ignored by patterns with escaped brackets", async () => { + eslint = new ESLint({ + ignorePath: getFixturePath("ignored-paths", ".eslintignoreWithEscapedBrackets"), + useEslintrc: false, + cwd: getFixturePath("ignored-paths") + }); + + // Only `brackets/index.js` should be linted. Other files in `brackets/` should be ignored. + const results = await eslint.lintFiles(["brackets/*.js"]); + + assert.strictEqual(results.length, 1); + assert.strictEqual(results[0].filePath, getFixturePath("ignored-paths", "brackets", "index.js")); + }); + it("should throw an error when all given files are ignored via ignore-pattern", async () => { eslint = new ESLint({ overrideConfig: { @@ -1413,6 +1487,7 @@ describe("ESLint", () => { assert.strictEqual(results[0].messages[0].message, "File ignored because of a matching ignore pattern. Use \"--no-ignore\" to override."); assert.strictEqual(results[0].errorCount, 0); assert.strictEqual(results[0].warningCount, 1); + assert.strictEqual(results[0].fatalErrorCount, 0); assert.strictEqual(results[0].fixableErrorCount, 0); assert.strictEqual(results[0].fixableWarningCount, 0); }); @@ -1681,6 +1756,7 @@ describe("ESLint", () => { { filePath: fs.realpathSync(path.resolve(fixtureDir, "fixmode/multipass.js")), messages: [], + suppressedMessages: [], errorCount: 0, warningCount: 0, fatalErrorCount: 0, @@ -1692,6 +1768,7 @@ describe("ESLint", () => { { filePath: fs.realpathSync(path.resolve(fixtureDir, "fixmode/ok.js")), messages: [], + suppressedMessages: [], errorCount: 0, warningCount: 0, fatalErrorCount: 0, @@ -1714,6 +1791,7 @@ describe("ESLint", () => { severity: 2 } ], + suppressedMessages: [], errorCount: 1, warningCount: 0, fatalErrorCount: 0, @@ -1737,6 +1815,7 @@ describe("ESLint", () => { severity: 2 } ], + suppressedMessages: [], errorCount: 1, warningCount: 0, fatalErrorCount: 0, @@ -4613,6 +4692,28 @@ describe("ESLint", () => { assert(!await engine.isPathIgnored(getFixturePath("ignored-paths", "negation", "unignore.js"))); }); + + // https://github.com/eslint/eslint/issues/15642 + it("should correctly handle patterns with escaped brackets", async () => { + const cwd = getFixturePath("ignored-paths"); + const ignorePath = getFixturePath("ignored-paths", ".eslintignoreWithEscapedBrackets"); + const engine = new ESLint({ ignorePath, cwd }); + + const subdir = "brackets"; + + assert( + !await engine.isPathIgnored(getFixturePath("ignored-paths", subdir, "index.js")), + `'${subdir}/index.js' should not be ignored` + ); + + for (const filename of ["[index.js", "index].js", "[index].js"]) { + assert( + await engine.isPathIgnored(getFixturePath("ignored-paths", subdir, filename)), + `'${subdir}/${filename}' should be ignored` + ); + } + + }); }); describe("with --ignore-path option and --ignore-pattern option", () => { @@ -4822,6 +4923,9 @@ describe("ESLint", () => { assert.strictEqual(results.length, 1); assert.strictEqual(results[0].errorCount, 0); assert.strictEqual(results[0].warningCount, 1); + assert.strictEqual(results[0].fatalErrorCount, 0); + assert.strictEqual(results[0].fixableErrorCount, 0); + assert.strictEqual(results[0].fixableWarningCount, 0); }); it("should return source code of file in the `source` property", async () => { @@ -4886,6 +4990,22 @@ describe("ESLint", () => { assert.strictEqual(rulesMeta.semi, coreRules.get("semi").meta); }); + it("should return one rule meta when there is a suppressed linting error", async () => { + const engine = new ESLint({ + useEslintrc: false, + overrideConfig: { + rules: { + semi: 2 + } + } + }); + + const results = await engine.lintText("a // eslint-disable-line semi"); + const rulesMeta = engine.getRulesMetaForResults(results); + + assert.strictEqual(rulesMeta.semi, coreRules.get("semi").meta); + }); + it("should return multiple rule meta when there are multiple linting errors", async () => { const engine = new ESLint({ useEslintrc: false, @@ -4905,16 +5025,16 @@ describe("ESLint", () => { }); it("should return multiple rule meta when there are multiple linting errors from a plugin", async () => { - const nodePlugin = require("eslint-plugin-node"); + const nodePlugin = require("eslint-plugin-n"); const engine = new ESLint({ useEslintrc: false, plugins: { node: nodePlugin }, overrideConfig: { - plugins: ["node"], + plugins: ["n"], rules: { - "node/no-new-require": 2, + "n/no-new-require": 2, semi: 2, quotes: [2, "double"] } @@ -4927,7 +5047,7 @@ describe("ESLint", () => { assert.strictEqual(rulesMeta.semi, coreRules.get("semi").meta); assert.strictEqual(rulesMeta.quotes, coreRules.get("quotes").meta); assert.strictEqual( - rulesMeta["node/no-new-require"], + rulesMeta["n/no-new-require"], nodePlugin.rules["no-new-require"].meta ); }); @@ -5078,6 +5198,7 @@ describe("ESLint", () => { nodeType: null } ], + suppressedMessages: [], errorCount: 1, warningCount: 0, fatalErrorCount: 0, @@ -5091,7 +5212,7 @@ describe("ESLint", () => { }); }); - describe("when retreiving version number", () => { + describe("when retrieving version number", () => { it("should return current version number", () => { const eslintCLI = require("../../../lib/eslint").ESLint; const version = eslintCLI.version; @@ -6133,6 +6254,7 @@ describe("ESLint", () => { severity: 2 } ], + suppressedMessages: [], source: "a == b", usedDeprecatedRules: [], warningCount: 0, @@ -6158,6 +6280,7 @@ describe("ESLint", () => { fixableErrorCount: 0, fixableWarningCount: 0, messages: [], + suppressedMessages: [], usedDeprecatedRules: [], warningCount: 0, fatalErrorCount: 0 @@ -6206,6 +6329,7 @@ describe("ESLint", () => { fixableErrorCount: 0, fixableWarningCount: 0, messages: [], + suppressedMessages: [], usedDeprecatedRules: [], warningCount: 0, fatalErrorCount: 0 @@ -6242,6 +6366,7 @@ describe("ESLint", () => { severity: 2 } ], + suppressedMessages: [], source: "a == b", usedDeprecatedRules: [], warningCount: 0, @@ -6656,4 +6781,45 @@ describe("ESLint", () => { }); }); }); + + describe("loading rules", () => { + it("should not load unused core rules", done => { + let calledDone = false; + + const cwd = getFixturePath("lazy-loading-rules"); + const pattern = "foo.js"; + const usedRules = ["semi"]; + + const forkedProcess = childProcess.fork( + path.join(__dirname, "../../_utils/test-lazy-loading-rules.js"), + [cwd, pattern, String(usedRules)] + ); + + // this is an error message + forkedProcess.on("message", ({ message, stack }) => { + if (calledDone) { + return; + } + calledDone = true; + + const error = new Error(message); + + error.stack = stack; + done(error); + }); + + forkedProcess.on("exit", exitCode => { + if (calledDone) { + return; + } + calledDone = true; + + if (exitCode === 0) { + done(); + } else { + done(new Error("Forked process exited with a non-zero exit code")); + } + }); + }); + }); }); diff --git a/eslint/tests/lib/eslint/flat-eslint.js b/eslint/tests/lib/eslint/flat-eslint.js new file mode 100644 index 0000000..c69cba4 --- /dev/null +++ b/eslint/tests/lib/eslint/flat-eslint.js @@ -0,0 +1,4746 @@ +/** + * @fileoverview Tests for the ESLint class. + * @author Kai Cataldo + * @author Toru Nagashima + */ + +"use strict"; + +//------------------------------------------------------------------------------ +// Requirements +//------------------------------------------------------------------------------ + +const assert = require("assert"); +const fs = require("fs"); +const fsp = fs.promises; +const os = require("os"); +const path = require("path"); +const escapeStringRegExp = require("escape-string-regexp"); +const fCache = require("file-entry-cache"); +const sinon = require("sinon"); +const proxyquire = require("proxyquire").noCallThru().noPreserveCache(); +const shell = require("shelljs"); +const hash = require("../../../lib/cli-engine/hash"); +const { unIndent, createCustomTeardown } = require("../../_utils"); +const coreRules = require("../../../lib/rules"); + +//------------------------------------------------------------------------------ +// Tests +//------------------------------------------------------------------------------ + +describe("FlatESLint", () => { + const examplePluginName = "eslint-plugin-example"; + const examplePluginNameWithNamespace = "@eslint/eslint-plugin-example"; + const examplePlugin = { + rules: { + "example-rule": require("../../fixtures/rules/custom-rule"), + "make-syntax-error": require("../../fixtures/rules/make-syntax-error-rule") + } + }; + const examplePreprocessorName = "eslint-plugin-processor"; + const originalDir = process.cwd(); + const fixtureDir = path.resolve(fs.realpathSync(os.tmpdir()), "eslint/fixtures"); + + /** @type {import("../../../lib/flat-eslint").FlatESLint} */ + let FlatESLint; + + /** + * Returns the path inside of the fixture directory. + * @param {...string} args file path segments. + * @returns {string} The path inside the fixture directory. + * @private + */ + function getFixturePath(...args) { + const filepath = path.join(fixtureDir, ...args); + + try { + return fs.realpathSync(filepath); + } catch { + return filepath; + } + } + + /** + * Create the ESLint object by mocking some of the plugins + * @param {Object} options options for ESLint + * @returns {ESLint} engine object + * @private + */ + function eslintWithPlugins(options) { + return new FlatESLint({ + ...options, + plugins: { + [examplePluginName]: examplePlugin, + [examplePluginNameWithNamespace]: examplePlugin, + [examplePreprocessorName]: require("../../fixtures/processors/custom-processor") + } + }); + } + + // copy into clean area so as not to get "infected" by this project's .eslintrc files + before(function() { + + /* + * GitHub Actions Windows and macOS runners occasionally exhibit + * extremely slow filesystem operations, during which copying fixtures + * exceeds the default test timeout, so raise it just for this hook. + * Mocha uses `this` to set timeouts on an individual hook level. + */ + this.timeout(60 * 1000); // eslint-disable-line no-invalid-this -- Mocha API + shell.mkdir("-p", fixtureDir); + shell.cp("-r", "./tests/fixtures/.", fixtureDir); + }); + + beforeEach(() => { + ({ FlatESLint } = require("../../../lib/eslint/flat-eslint")); + }); + + after(() => { + shell.rm("-r", fixtureDir); + }); + + describe("ESLint constructor function", () => { + it("the default value of 'options.cwd' should be the current working directory.", async () => { + process.chdir(__dirname); + try { + const engine = new FlatESLint(); + const results = await engine.lintFiles("eslint.js"); + + assert.strictEqual(path.dirname(results[0].filePath), __dirname); + } finally { + process.chdir(originalDir); + } + }); + + // https://github.com/eslint/eslint/issues/2380 + it("should not modify baseConfig when format is specified", () => { + const customBaseConfig = { root: true }; + + new FlatESLint({ baseConfig: customBaseConfig }); // eslint-disable-line no-new -- Check for argument side effects + + assert.deepStrictEqual(customBaseConfig, { root: true }); + }); + + it("should throw readable messages if removed options are present", () => { + assert.throws( + () => new FlatESLint({ + cacheFile: "", + configFile: "", + envs: [], + globals: [], + ignorePattern: [], + parser: "", + parserOptions: {}, + rules: {}, + plugins: [] + }), + new RegExp(escapeStringRegExp([ + "Invalid Options:", + "- Unknown options: cacheFile, configFile, envs, globals, ignorePattern, parser, parserOptions, rules" + ].join("\n")), "u") + ); + }); + + it("should throw readable messages if wrong type values are given to options", () => { + assert.throws( + () => new FlatESLint({ + allowInlineConfig: "", + baseConfig: "", + cache: "", + cacheLocation: "", + cwd: "foo", + errorOnUnmatchedPattern: "", + fix: "", + fixTypes: ["xyz"], + globInputPaths: "", + ignore: "", + ignorePath: "", + overrideConfig: "", + overrideConfigFile: "", + plugins: "", + reportUnusedDisableDirectives: "" + }), + new RegExp(escapeStringRegExp([ + "Invalid Options:", + "- 'allowInlineConfig' must be a boolean.", + "- 'baseConfig' must be an object or null.", + "- 'cache' must be a boolean.", + "- 'cacheLocation' must be a non-empty string.", + "- 'cwd' must be an absolute path.", + "- 'errorOnUnmatchedPattern' must be a boolean.", + "- 'fix' must be a boolean or a function.", + "- 'fixTypes' must be an array of any of \"directive\", \"problem\", \"suggestion\", and \"layout\".", + "- 'globInputPaths' must be a boolean.", + "- 'ignore' must be a boolean.", + "- 'ignorePath' must be a non-empty string or null.", + "- 'overrideConfig' must be an object or null.", + "- 'overrideConfigFile' must be a non-empty string, null, or true.", + "- 'plugins' must be an object or null.", + "- 'reportUnusedDisableDirectives' must be any of \"error\", \"warn\", \"off\", and null." + ].join("\n")), "u") + ); + }); + + it("should throw readable messages if 'plugins' option contains empty key", () => { + assert.throws( + () => new FlatESLint({ + plugins: { + "eslint-plugin-foo": {}, + "eslint-plugin-bar": {}, + "": {} + } + }), + new RegExp(escapeStringRegExp([ + "Invalid Options:", + "- 'plugins' must not include an empty string." + ].join("\n")), "u") + ); + }); + }); + + describe("lintText()", () => { + let eslint; + + it("should report the total and per file errors when using local cwd eslint.config.js", async () => { + eslint = new FlatESLint({ + cwd: __dirname + }); + + const results = await eslint.lintText("var foo = 'bar';"); + + assert.strictEqual(results.length, 1); + assert.strictEqual(results[0].messages.length, 4); + assert.strictEqual(results[0].messages[0].ruleId, "no-var"); + assert.strictEqual(results[0].messages[1].ruleId, "no-unused-vars"); + assert.strictEqual(results[0].messages[2].ruleId, "quotes"); + assert.strictEqual(results[0].messages[3].ruleId, "eol-last"); + assert.strictEqual(results[0].fixableErrorCount, 3); + assert.strictEqual(results[0].fixableWarningCount, 0); + assert.strictEqual(results[0].usedDeprecatedRules.length, 0); + assert.strictEqual(results[0].suppressedMessages.length, 0); + }); + + it("should report the total and per file warnings when using local cwd .eslintrc", async () => { + eslint = new FlatESLint({ + overrideConfig: { + rules: { + quotes: 1, + "no-var": 1, + "eol-last": 1, + "no-unused-vars": 1 + } + }, + overrideConfigFile: true + }); + const results = await eslint.lintText("var foo = 'bar';"); + + assert.strictEqual(results.length, 1); + assert.strictEqual(results[0].messages.length, 4); + assert.strictEqual(results[0].messages[0].ruleId, "no-var"); + assert.strictEqual(results[0].messages[1].ruleId, "no-unused-vars"); + assert.strictEqual(results[0].messages[2].ruleId, "quotes"); + assert.strictEqual(results[0].messages[3].ruleId, "eol-last"); + assert.strictEqual(results[0].fixableErrorCount, 0); + assert.strictEqual(results[0].fixableWarningCount, 3); + assert.strictEqual(results[0].usedDeprecatedRules.length, 0); + assert.strictEqual(results[0].suppressedMessages.length, 0); + }); + + it("should report one message when using specific config file", async () => { + eslint = new FlatESLint({ + overrideConfigFile: "fixtures/configurations/quotes-error.js", + cwd: getFixturePath("..") + }); + const results = await eslint.lintText("var foo = 'bar';"); + + assert.strictEqual(results.length, 1); + assert.strictEqual(results[0].messages.length, 1); + assert.strictEqual(results[0].messages[0].ruleId, "quotes"); + assert.strictEqual(results[0].messages[0].output, void 0); + assert.strictEqual(results[0].errorCount, 1); + assert.strictEqual(results[0].fixableErrorCount, 1); + assert.strictEqual(results[0].warningCount, 0); + assert.strictEqual(results[0].fatalErrorCount, 0); + assert.strictEqual(results[0].usedDeprecatedRules.length, 0); + assert.strictEqual(results[0].suppressedMessages.length, 0); + }); + + it("should report the filename when passed in", async () => { + eslint = new FlatESLint({ + ignore: false, + cwd: getFixturePath() + }); + const options = { filePath: "test.js" }; + const results = await eslint.lintText("var foo = 'bar';", options); + + assert.strictEqual(results[0].filePath, getFixturePath("test.js")); + }); + + it("should return a warning when given a filename by --stdin-filename in excluded files list if warnIgnored is true", async () => { + eslint = new FlatESLint({ + ignorePath: getFixturePath(".eslintignore"), + cwd: getFixturePath(".."), + overrideConfigFile: "fixtures/eslint.config.js" + }); + + const options = { filePath: "fixtures/passing.js", warnIgnored: true }; + const results = await eslint.lintText("var bar = foo;", options); + + assert.strictEqual(results.length, 1); + assert.strictEqual(results[0].filePath, getFixturePath("passing.js")); + assert.strictEqual(results[0].messages[0].severity, 1); + assert.strictEqual(results[0].messages[0].message, "File ignored because of a matching ignore pattern. Use \"--no-ignore\" to override."); + assert.strictEqual(results[0].messages[0].output, void 0); + assert.strictEqual(results[0].errorCount, 0); + assert.strictEqual(results[0].warningCount, 1); + assert.strictEqual(results[0].fatalErrorCount, 0); + assert.strictEqual(results[0].fixableErrorCount, 0); + assert.strictEqual(results[0].fixableWarningCount, 0); + assert.strictEqual(results[0].usedDeprecatedRules.length, 0); + assert.strictEqual(results[0].suppressedMessages.length, 0); + }); + + it("should not return a warning when given a filename by --stdin-filename in excluded files list if warnIgnored is false", async () => { + eslint = new FlatESLint({ + ignorePath: getFixturePath(".eslintignore"), + cwd: getFixturePath(".."), + overrideConfigFile: "fixtures/eslint.config.js" + }); + const options = { + filePath: "fixtures/passing.js", + warnIgnored: false + }; + + // intentional parsing error + const results = await eslint.lintText("va r bar = foo;", options); + + // should not report anything because the file is ignored + assert.strictEqual(results.length, 0); + }); + + it("should suppress excluded file warnings by default", async () => { + eslint = new FlatESLint({ + ignorePath: getFixturePath(".eslintignore"), + cwd: getFixturePath(".."), + overrideConfigFile: "fixtures/eslint.config.js" + }); + const options = { filePath: "fixtures/passing.js" }; + const results = await eslint.lintText("var bar = foo;", options); + + // should not report anything because there are no errors + assert.strictEqual(results.length, 0); + }); + + it("should return a message when given a filename by --stdin-filename in excluded files list and ignore is off", async () => { + eslint = new FlatESLint({ + ignorePath: "fixtures/.eslintignore", + cwd: getFixturePath(".."), + ignore: false, + overrideConfigFile: true, + overrideConfig: { + rules: { + "no-undef": 2 + } + } + }); + const options = { filePath: "fixtures/passing.js" }; + const results = await eslint.lintText("var bar = foo;", options); + + assert.strictEqual(results.length, 1); + assert.strictEqual(results[0].filePath, getFixturePath("passing.js")); + assert.strictEqual(results[0].messages[0].ruleId, "no-undef"); + assert.strictEqual(results[0].messages[0].severity, 2); + assert.strictEqual(results[0].messages[0].output, void 0); + assert.strictEqual(results[0].suppressedMessages.length, 0); + }); + + it("should return a message and fixed text when in fix mode", async () => { + eslint = new FlatESLint({ + overrideConfigFile: true, + fix: true, + overrideConfig: { + rules: { + semi: 2 + } + }, + ignore: false, + cwd: getFixturePath() + }); + const options = { filePath: "passing.js" }; + const results = await eslint.lintText("var bar = foo", options); + + assert.deepStrictEqual(results, [ + { + filePath: getFixturePath("passing.js"), + messages: [], + suppressedMessages: [], + errorCount: 0, + warningCount: 0, + fatalErrorCount: 0, + fixableErrorCount: 0, + fixableWarningCount: 0, + output: "var bar = foo;", + usedDeprecatedRules: [] + } + ]); + }); + + it("should return a message and omit fixed text when in fix mode and fixes aren't done", async () => { + eslint = new FlatESLint({ + overrideConfigFile: true, + fix: true, + overrideConfig: { + rules: { + "no-undef": 2 + } + }, + ignore: false, + cwd: getFixturePath() + }); + const options = { filePath: "passing.js" }; + const results = await eslint.lintText("var bar = foo", options); + + assert.deepStrictEqual(results, [ + { + filePath: getFixturePath("passing.js"), + messages: [ + { + ruleId: "no-undef", + severity: 2, + messageId: "undef", + message: "'foo' is not defined.", + line: 1, + column: 11, + endLine: 1, + endColumn: 14, + nodeType: "Identifier" + } + ], + suppressedMessages: [], + errorCount: 1, + warningCount: 0, + fatalErrorCount: 0, + fixableErrorCount: 0, + fixableWarningCount: 0, + source: "var bar = foo", + usedDeprecatedRules: [] + } + ]); + }); + + it("should not delete code if there is a syntax error after trying to autofix.", async () => { + eslint = eslintWithPlugins({ + overrideConfigFile: true, + fix: true, + overrideConfig: { + rules: { + "example/make-syntax-error": "error" + } + }, + ignore: false, + cwd: getFixturePath(".") + }); + const options = { filePath: "test.js" }; + const results = await eslint.lintText("var bar = foo", options); + + assert.deepStrictEqual(results, [ + { + filePath: getFixturePath("test.js"), + messages: [ + { + ruleId: null, + fatal: true, + severity: 2, + message: "Parsing error: Unexpected token is", + line: 1, + column: 19 + } + ], + suppressedMessages: [], + errorCount: 1, + warningCount: 0, + fatalErrorCount: 1, + fixableErrorCount: 0, + fixableWarningCount: 0, + output: "var bar = foothis is a syntax error.", + usedDeprecatedRules: [] + } + ]); + }); + + it("should not crash even if there are any syntax error since the first time.", async () => { + eslint = eslintWithPlugins({ + overrideConfigFile: true, + fix: true, + overrideConfig: { + rules: { + "example/make-syntax-error": "error" + } + }, + ignore: false, + cwd: getFixturePath() + }); + const options = { filePath: "test.js" }; + const results = await eslint.lintText("var bar =", options); + + assert.deepStrictEqual(results, [ + { + filePath: getFixturePath("test.js"), + messages: [ + { + ruleId: null, + fatal: true, + severity: 2, + message: "Parsing error: Unexpected token", + line: 1, + column: 10 + } + ], + suppressedMessages: [], + errorCount: 1, + warningCount: 0, + fatalErrorCount: 1, + fixableErrorCount: 0, + fixableWarningCount: 0, + source: "var bar =", + usedDeprecatedRules: [] + } + ]); + }); + + it("should return source code of file in `source` property when errors are present", async () => { + eslint = new FlatESLint({ + overrideConfigFile: true, + overrideConfig: { + rules: { semi: 2 } + } + }); + const results = await eslint.lintText("var foo = 'bar'"); + + assert.strictEqual(results[0].source, "var foo = 'bar'"); + }); + + it("should return source code of file in `source` property when warnings are present", async () => { + eslint = new FlatESLint({ + overrideConfigFile: true, + overrideConfig: { + rules: { semi: 1 } + } + }); + const results = await eslint.lintText("var foo = 'bar'"); + + assert.strictEqual(results[0].source, "var foo = 'bar'"); + }); + + + it("should not return a `source` property when no errors or warnings are present", async () => { + eslint = new FlatESLint({ + overrideConfigFile: true, + overrideConfig: { + rules: { semi: 2 } + } + }); + const results = await eslint.lintText("var foo = 'bar';"); + + assert.strictEqual(results[0].messages.length, 0); + assert.strictEqual(results[0].source, void 0); + assert.strictEqual(results[0].suppressedMessages.length, 0); + }); + + it("should not return a `source` property when fixes are applied", async () => { + eslint = new FlatESLint({ + overrideConfigFile: true, + fix: true, + overrideConfig: { + rules: { + semi: 2, + "no-unused-vars": 2 + } + } + }); + const results = await eslint.lintText("var msg = 'hi' + foo\n"); + + assert.strictEqual(results[0].source, void 0); + assert.strictEqual(results[0].output, "var msg = 'hi' + foo;\n"); + }); + + it("should return a `source` property when a parsing error has occurred", async () => { + eslint = new FlatESLint({ + overrideConfigFile: true, + overrideConfig: { + rules: { semi: 2 } + } + }); + const results = await eslint.lintText("var bar = foothis is a syntax error.\n return bar;"); + + assert.deepStrictEqual(results, [ + { + filePath: "<text>", + messages: [ + { + ruleId: null, + fatal: true, + severity: 2, + message: "Parsing error: Unexpected token is", + line: 1, + column: 19 + } + ], + suppressedMessages: [], + errorCount: 1, + warningCount: 0, + fatalErrorCount: 1, + fixableErrorCount: 0, + fixableWarningCount: 0, + source: "var bar = foothis is a syntax error.\n return bar;", + usedDeprecatedRules: [] + } + ]); + }); + + // https://github.com/eslint/eslint/issues/5547 + it("should respect default ignore rules (ignoring node_modules), even with --no-ignore", async () => { + eslint = new FlatESLint({ + cwd: getFixturePath(), + ignore: false + }); + const results = await eslint.lintText("var bar = foo;", { filePath: "node_modules/passing.js", warnIgnored: true }); + const expectedMsg = "File ignored by default. Use \"--ignore-pattern '!node_modules/*'\" to override."; + + assert.strictEqual(results.length, 1); + assert.strictEqual(results[0].filePath, getFixturePath("node_modules/passing.js")); + assert.strictEqual(results[0].messages[0].message, expectedMsg); + assert.strictEqual(results[0].suppressedMessages.length, 0); + }); + + it("should warn when deprecated rules are found in a config", async () => { + eslint = new FlatESLint({ + cwd: originalDir, + overrideConfigFile: "tests/fixtures/cli-engine/deprecated-rule-config/eslint.config.js" + }); + const [result] = await eslint.lintText("foo"); + + assert.deepStrictEqual( + result.usedDeprecatedRules, + [{ ruleId: "indent-legacy", replacedBy: ["indent"] }] + ); + }); + + it("should throw if non-string value is given to 'code' parameter", async () => { + eslint = new FlatESLint(); + await assert.rejects(() => eslint.lintText(100), /'code' must be a string/u); + }); + + it("should throw if non-object value is given to 'options' parameter", async () => { + eslint = new FlatESLint(); + await assert.rejects(() => eslint.lintText("var a = 0", "foo.js"), /'options' must be an object, null, or undefined/u); + }); + + it("should throw if 'options' argument contains unknown key", async () => { + eslint = new FlatESLint(); + await assert.rejects(() => eslint.lintText("var a = 0", { filename: "foo.js" }), /'options' must not include the unknown option\(s\): filename/u); + }); + + it("should throw if non-string value is given to 'options.filePath' option", async () => { + eslint = new FlatESLint(); + await assert.rejects(() => eslint.lintText("var a = 0", { filePath: "" }), /'options.filePath' must be a non-empty string or undefined/u); + }); + + it("should throw if non-boolean value is given to 'options.warnIgnored' option", async () => { + eslint = new FlatESLint(); + await assert.rejects(() => eslint.lintText("var a = 0", { warnIgnored: "" }), /'options.warnIgnored' must be a boolean or undefined/u); + }); + }); + + describe("lintFiles()", () => { + + /** @type {InstanceType<import("../../../lib/eslint").ESLint>} */ + let eslint; + + it("should use correct parser when custom parser is specified", async () => { + const filePath = path.resolve(__dirname, "../../fixtures/configurations/parser/custom.js"); + + eslint = new FlatESLint({ + cwd: originalDir, + ignore: false, + overrideConfigFile: true, + overrideConfig: { + languageOptions: { + parser: require(filePath) + } + } + }); + + const results = await eslint.lintFiles([filePath]); + + assert.strictEqual(results.length, 1); + assert.strictEqual(results[0].messages.length, 1); + assert.strictEqual(results[0].messages[0].message, "Parsing error: Boom!"); + assert.strictEqual(results[0].suppressedMessages.length, 0); + }); + + it("should report zero messages when given a config file and a valid file", async () => { + eslint = new FlatESLint({ + cwd: originalDir, + overrideConfigFile: "eslint.config.js" + }); + const results = await eslint.lintFiles(["lib/**/cli*.js"]); + + assert.strictEqual(results.length, 2); + assert.strictEqual(results[0].messages.length, 0); + assert.strictEqual(results[1].messages.length, 0); + assert.strictEqual(results[0].suppressedMessages.length, 0); + }); + + it("should handle multiple patterns with overlapping files", async () => { + eslint = new FlatESLint({ + cwd: originalDir, + overrideConfigFile: "eslint.config.js" + }); + const results = await eslint.lintFiles(["lib/**/cli*.js", "lib/cli.?s", "lib/{cli,cli-engine/cli-engine}.js"]); + + assert.strictEqual(results.length, 2); + assert.strictEqual(results[0].messages.length, 0); + assert.strictEqual(results[1].messages.length, 0); + assert.strictEqual(results[0].suppressedMessages.length, 0); + }); + + it("should report zero messages when given a config file and a valid file and espree as parser", async () => { + eslint = new FlatESLint({ + overrideConfig: { + languageOptions: { + parser: require("espree"), + parserOptions: { + ecmaVersion: 2021 + } + } + }, + overrideConfigFile: true + }); + const results = await eslint.lintFiles(["lib/cli.js"]); + + assert.strictEqual(results.length, 1); + assert.strictEqual(results[0].messages.length, 0); + assert.strictEqual(results[0].suppressedMessages.length, 0); + }); + + it("should report zero messages when given a config file and a valid file and esprima as parser", async () => { + eslint = new FlatESLint({ + overrideConfig: { + languageOptions: { + parser: require("esprima") + } + }, + overrideConfigFile: true, + ignore: false + }); + const results = await eslint.lintFiles(["tests/fixtures/passing.js"]); + + assert.strictEqual(results.length, 1); + assert.strictEqual(results[0].messages.length, 0); + assert.strictEqual(results[0].suppressedMessages.length, 0); + }); + + it("should throw an error when given a config file and a valid file and invalid parser", async () => { + eslint = new FlatESLint({ + overrideConfig: { + languageOptions: { + parser: "test11" + } + }, + overrideConfigFile: true + }); + + await assert.rejects(async () => await eslint.lintFiles(["lib/cli.js"]), /Expected string in the form "pluginName\/objectName" but found "test11"/u); + }); + + it("should report zero messages when given a directory with a .js2 file", async () => { + eslint = new FlatESLint({ + cwd: path.join(fixtureDir, ".."), + overrideConfigFile: getFixturePath("eslint.config.js"), + overrideConfig: { + files: ["**/*.js2"] + } + }); + const results = await eslint.lintFiles([getFixturePath("files/foo.js2")]); + + assert.strictEqual(results.length, 1); + assert.strictEqual(results[0].messages.length, 0); + assert.strictEqual(results[0].suppressedMessages.length, 0); + }); + + it("should report zero messages when given a directory with a .js and a .js2 file", async () => { + eslint = new FlatESLint({ + ignore: false, + cwd: getFixturePath(".."), + overrideConfig: { files: ["**/*.js", "**/*.js2"] }, + overrideConfigFile: getFixturePath("eslint.config.js") + }); + const results = await eslint.lintFiles(["fixtures/files/"]); + + assert.strictEqual(results.length, 2); + assert.strictEqual(results[0].messages.length, 0); + assert.strictEqual(results[1].messages.length, 0); + assert.strictEqual(results[0].suppressedMessages.length, 0); + }); + + // https://github.com/eslint/eslint/issues/16260 + describe("Globbing based on configs", () => { + it("should report zero messages when given a directory with a .js and config file specifying a subdirectory", async () => { + eslint = new FlatESLint({ + ignore: false, + cwd: getFixturePath("shallow-glob") + }); + const results = await eslint.lintFiles(["target-dir"]); + + assert.strictEqual(results.length, 1); + assert.strictEqual(results[0].messages.length, 0); + assert.strictEqual(results[0].suppressedMessages.length, 0); + }); + + it("should glob for .jsx file in a subdirectory of the passed-in directory and not glob for any other patterns", async () => { + eslint = new FlatESLint({ + ignore: false, + overrideConfigFile: true, + overrideConfig: { + files: ["subdir/**/*.jsx", "target-dir/*.js"], + languageOptions: { + parserOptions: { + jsx: true + } + } + }, + cwd: getFixturePath("shallow-glob") + }); + const results = await eslint.lintFiles(["subdir/subsubdir"]); + + assert.strictEqual(results.length, 2); + assert.strictEqual(results[0].messages.length, 1); + assert(results[0].messages[0].fatal, "Fatal error expected."); + assert.strictEqual(results[0].suppressedMessages.length, 0); + assert.strictEqual(results[1].messages.length, 0); + assert.strictEqual(results[1].suppressedMessages.length, 0); + }); + + it("should glob for all files in subdir when passed-in on the command line with a partial matching glob", async () => { + eslint = new FlatESLint({ + ignore: false, + overrideConfigFile: true, + overrideConfig: { + files: ["s*/subsubdir/*.jsx", "target-dir/*.js"], + languageOptions: { + parserOptions: { + jsx: true + } + } + }, + cwd: getFixturePath("shallow-glob") + }); + const results = await eslint.lintFiles(["subdir"]); + + assert.strictEqual(results.length, 3); + assert.strictEqual(results[0].messages.length, 1); + assert(results[0].messages[0].fatal, "Fatal error expected."); + assert.strictEqual(results[0].suppressedMessages.length, 0); + assert.strictEqual(results[1].messages.length, 1); + assert(results[0].messages[0].fatal, "Fatal error expected."); + assert.strictEqual(results[1].suppressedMessages.length, 0); + assert.strictEqual(results[2].messages.length, 0); + assert.strictEqual(results[2].suppressedMessages.length, 0); + }); + }); + + it("should report zero messages when given a '**' pattern with a .js and a .js2 file", async () => { + eslint = new FlatESLint({ + ignore: false, + cwd: path.join(fixtureDir, ".."), + overrideConfig: { files: ["**/*.js", "**/*.js2"] }, + overrideConfigFile: getFixturePath("eslint.config.js") + + }); + const results = await eslint.lintFiles(["fixtures/files/*"]); + + assert.strictEqual(results.length, 2); + assert.strictEqual(results[0].messages.length, 0); + assert.strictEqual(results[1].messages.length, 0); + assert.strictEqual(results[0].suppressedMessages.length, 0); + assert.strictEqual(results[1].suppressedMessages.length, 0); + }); + + it("should resolve globs when 'globInputPaths' option is true", async () => { + eslint = new FlatESLint({ + ignore: false, + cwd: getFixturePath(".."), + overrideConfig: { files: ["**/*.js", "**/*.js2"] }, + overrideConfigFile: getFixturePath("eslint.config.js") + + }); + const results = await eslint.lintFiles(["fixtures/files/*"]); + + assert.strictEqual(results.length, 2); + assert.strictEqual(results[0].messages.length, 0); + assert.strictEqual(results[1].messages.length, 0); + assert.strictEqual(results[0].suppressedMessages.length, 0); + assert.strictEqual(results[1].suppressedMessages.length, 0); + }); + + // only works on a Windows machine + if (os.platform() === "win32") { + + it("should resolve globs with Windows slashes when 'globInputPaths' option is true", async () => { + eslint = new FlatESLint({ + ignore: false, + cwd: getFixturePath(".."), + overrideConfig: { files: ["**/*.js", "**/*.js2"] }, + overrideConfigFile: getFixturePath("eslint.config.js") + + }); + const results = await eslint.lintFiles(["fixtures\\files\\*"]); + + assert.strictEqual(results.length, 2); + assert.strictEqual(results[0].messages.length, 0); + assert.strictEqual(results[1].messages.length, 0); + assert.strictEqual(results[0].suppressedMessages.length, 0); + assert.strictEqual(results[1].suppressedMessages.length, 0); + }); + + } + + + it("should not resolve globs when 'globInputPaths' option is false", async () => { + eslint = new FlatESLint({ + ignore: false, + cwd: getFixturePath(".."), + overrideConfig: { files: ["**/*.js", "**/*.js2"] }, + overrideConfigFile: true, + globInputPaths: false + }); + + await assert.rejects(async () => { + await eslint.lintFiles(["fixtures/files/*"]); + }, /No files matching 'fixtures\/files\/\*' were found \(glob was disabled\)\./u); + }); + + describe("Ignoring Files", () => { + + it("should report on all files passed explicitly, even if ignored by default", async () => { + eslint = new FlatESLint({ + cwd: getFixturePath("cli-engine") + }); + const results = await eslint.lintFiles(["node_modules/foo.js"]); + const expectedMsg = "File ignored by default. Use \"--ignore-pattern '!node_modules/*'\" to override."; + + assert.strictEqual(results.length, 1); + assert.strictEqual(results[0].errorCount, 0); + assert.strictEqual(results[0].warningCount, 1); + assert.strictEqual(results[0].fatalErrorCount, 0); + assert.strictEqual(results[0].fixableErrorCount, 0); + assert.strictEqual(results[0].fixableWarningCount, 0); + assert.strictEqual(results[0].messages[0].message, expectedMsg); + assert.strictEqual(results[0].suppressedMessages.length, 0); + }); + + it("should report on globs with explicit inclusion of dotfiles", async () => { + eslint = new FlatESLint({ + cwd: getFixturePath("cli-engine"), + overrideConfigFile: true, + overrideConfig: { + rules: { + quotes: [2, "single"] + } + } + }); + const results = await eslint.lintFiles(["hidden/.hiddenfolder/*.js"]); + + assert.strictEqual(results.length, 1); + assert.strictEqual(results[0].errorCount, 1); + assert.strictEqual(results[0].warningCount, 0); + assert.strictEqual(results[0].fatalErrorCount, 0); + assert.strictEqual(results[0].fixableErrorCount, 1); + assert.strictEqual(results[0].fixableWarningCount, 0); + }); + + it("should ignore node_modules files when using ignore file", async () => { + eslint = new FlatESLint({ + cwd: getFixturePath("cli-engine"), + overrideConfigFile: true + }); + + await assert.rejects(async () => { + await eslint.lintFiles(["node_modules"]); + }, /All files matched by 'node_modules\/\*\*\/\*.js' are ignored\./u); + }); + + // https://github.com/eslint/eslint/issues/5547 + it("should ignore node_modules files even with ignore: false", async () => { + eslint = new FlatESLint({ + cwd: getFixturePath("cli-engine"), + ignore: false + }); + + await assert.rejects(async () => { + await eslint.lintFiles(["node_modules"]); + }, /All files matched by 'node_modules\/\*\*\/\*\.js' are ignored\./u); + }); + + it("should throw an error when given a directory with all eslint excluded files in the directory", async () => { + eslint = new FlatESLint({ + ignorePath: getFixturePath(".eslintignore") + }); + + await assert.rejects(async () => { + await eslint.lintFiles([getFixturePath("./cli-engine/")]); + }, /All files matched by '.*?cli-engine[\\/]\*\*[\\/]\*\.js' are ignored/u); + }); + + it("should throw an error when all given files are ignored", async () => { + eslint = new FlatESLint({ + ignorePath: getFixturePath(".eslintignore") + }); + + await assert.rejects(async () => { + await eslint.lintFiles(["tests/fixtures/cli-engine/"]); + }, /All files matched by 'tests\/fixtures\/cli-engine\/\*\*\/\*\.js' are ignored\./u); + }); + + it("should throw an error when all given files are ignored even with a `./` prefix", async () => { + eslint = new FlatESLint({ + ignorePath: getFixturePath(".eslintignore") + }); + + await assert.rejects(async () => { + await eslint.lintFiles(["./tests/fixtures/cli-engine/"]); + }, /All files matched by 'tests\/fixtures\/cli-engine\/\*\*\/\*\.js' are ignored\./u); + }); + + // https://github.com/eslint/eslint/issues/3788 + it("should ignore one-level down node_modules when ignore file has 'node_modules/' in it", async () => { + eslint = new FlatESLint({ + ignorePath: getFixturePath("cli-engine", "nested_node_modules", ".eslintignore"), + overrideConfigFile: true, + overrideConfig: { + rules: { + quotes: [2, "double"] + } + }, + cwd: getFixturePath("cli-engine", "nested_node_modules") + }); + const results = await eslint.lintFiles(["."]); + + assert.strictEqual(results.length, 1); + assert.strictEqual(results[0].errorCount, 0); + assert.strictEqual(results[0].warningCount, 0); + assert.strictEqual(results[0].fatalErrorCount, 0); + assert.strictEqual(results[0].fixableErrorCount, 0); + assert.strictEqual(results[0].fixableWarningCount, 0); + }); + + // https://github.com/eslint/eslint/issues/3812 + it("should ignore all files and throw an error when fixtures/ is in ignore file", async () => { + eslint = new FlatESLint({ + ignorePath: getFixturePath("cli-engine/.eslintignore2"), + overrideConfigFile: true, + overrideConfig: { + rules: { + quotes: [2, "double"] + } + } + }); + + await assert.rejects(async () => { + await eslint.lintFiles(["./tests/fixtures/cli-engine/"]); + }, /All files matched by 'tests\/fixtures\/cli-engine\/\*\*\/\*\.js' are ignored\./u); + }); + + it("should throw an error when all given files are ignored via ignore-pattern", async () => { + eslint = new FlatESLint({ + overrideConfig: { + ignorePatterns: "tests/fixtures/single-quoted.js" + } + }); + + await assert.rejects(async () => { + await eslint.lintFiles(["tests/fixtures/*-quoted.js"]); + }, /All files matched by 'tests\/fixtures\/\*-quoted\.js' are ignored\./u); + }); + + it("should return a warning when an explicitly given file is ignored", async () => { + eslint = new FlatESLint({ + ignorePath: getFixturePath(".eslintignore"), + cwd: getFixturePath() + }); + const filePath = getFixturePath("passing.js"); + const results = await eslint.lintFiles([filePath]); + + assert.strictEqual(results.length, 1); + assert.strictEqual(results[0].filePath, filePath); + assert.strictEqual(results[0].messages[0].severity, 1); + assert.strictEqual(results[0].messages[0].message, "File ignored because of a matching ignore pattern. Use \"--no-ignore\" to override."); + assert.strictEqual(results[0].errorCount, 0); + assert.strictEqual(results[0].warningCount, 1); + assert.strictEqual(results[0].fatalErrorCount, 0); + assert.strictEqual(results[0].fixableErrorCount, 0); + assert.strictEqual(results[0].fixableWarningCount, 0); + assert.strictEqual(results[0].suppressedMessages.length, 0); + }); + + it("should return two messages when given a file in excluded files list while ignore is off", async () => { + eslint = new FlatESLint({ + cwd: getFixturePath(), + ignorePath: getFixturePath(".eslintignore"), + ignore: false, + overrideConfigFile: true, + overrideConfig: { + rules: { + "no-undef": 2 + } + } + }); + const filePath = fs.realpathSync(getFixturePath("undef.js")); + const results = await eslint.lintFiles([filePath]); + + assert.strictEqual(results.length, 1); + assert.strictEqual(results[0].filePath, filePath); + assert.strictEqual(results[0].messages[0].ruleId, "no-undef"); + assert.strictEqual(results[0].messages[0].severity, 2); + assert.strictEqual(results[0].messages[1].ruleId, "no-undef"); + assert.strictEqual(results[0].messages[1].severity, 2); + assert.strictEqual(results[0].suppressedMessages.length, 0); + }); + }); + + + it("should report zero messages when given a pattern with a .js and a .js2 file", async () => { + eslint = new FlatESLint({ + overrideConfig: { files: ["**/*.js", "**/*.js2"] }, + ignore: false, + cwd: path.join(fixtureDir, ".."), + overrideConfigFile: true + }); + const results = await eslint.lintFiles(["fixtures/files/*.?s*"]); + + assert.strictEqual(results.length, 2); + assert.strictEqual(results[0].messages.length, 0); + assert.strictEqual(results[0].suppressedMessages.length, 0); + assert.strictEqual(results[1].messages.length, 0); + assert.strictEqual(results[1].suppressedMessages.length, 0); + }); + + it("should return one error message when given a config with rules with options and severity level set to error", async () => { + eslint = new FlatESLint({ + cwd: getFixturePath(), + overrideConfigFile: true, + overrideConfig: { + rules: { + quotes: ["error", "double"] + } + }, + ignore: false + }); + const results = await eslint.lintFiles([getFixturePath("single-quoted.js")]); + + assert.strictEqual(results.length, 1); + assert.strictEqual(results[0].messages.length, 1); + assert.strictEqual(results[0].messages[0].ruleId, "quotes"); + assert.strictEqual(results[0].messages[0].severity, 2); + assert.strictEqual(results[0].errorCount, 1); + assert.strictEqual(results[0].warningCount, 0); + assert.strictEqual(results[0].fatalErrorCount, 0); + assert.strictEqual(results[0].fixableErrorCount, 1); + assert.strictEqual(results[0].fixableWarningCount, 0); + assert.strictEqual(results[0].suppressedMessages.length, 0); + }); + + it("should return 5 results when given a config and a directory of 5 valid files", async () => { + eslint = new FlatESLint({ + cwd: path.join(fixtureDir, ".."), + overrideConfigFile: true, + overrideConfig: { + rules: { + semi: 1, + strict: 0 + } + } + }); + + const formattersDir = getFixturePath("formatters"); + const results = await eslint.lintFiles([formattersDir]); + + assert.strictEqual(results.length, 5); + assert.strictEqual(path.relative(formattersDir, results[0].filePath), "async.js"); + assert.strictEqual(results[0].errorCount, 0); + assert.strictEqual(results[0].warningCount, 0); + assert.strictEqual(results[0].fatalErrorCount, 0); + assert.strictEqual(results[0].fixableErrorCount, 0); + assert.strictEqual(results[0].fixableWarningCount, 0); + assert.strictEqual(results[0].messages.length, 0); + assert.strictEqual(results[0].suppressedMessages.length, 0); + assert.strictEqual(path.relative(formattersDir, results[1].filePath), "broken.js"); + assert.strictEqual(results[1].errorCount, 0); + assert.strictEqual(results[1].warningCount, 0); + assert.strictEqual(results[1].fatalErrorCount, 0); + assert.strictEqual(results[1].fixableErrorCount, 0); + assert.strictEqual(results[1].fixableWarningCount, 0); + assert.strictEqual(results[1].messages.length, 0); + assert.strictEqual(results[1].suppressedMessages.length, 0); + assert.strictEqual(path.relative(formattersDir, results[2].filePath), "cwd.js"); + assert.strictEqual(results[2].errorCount, 0); + assert.strictEqual(results[2].warningCount, 0); + assert.strictEqual(results[2].fatalErrorCount, 0); + assert.strictEqual(results[2].fixableErrorCount, 0); + assert.strictEqual(results[2].fixableWarningCount, 0); + assert.strictEqual(results[2].messages.length, 0); + assert.strictEqual(results[2].suppressedMessages.length, 0); + assert.strictEqual(path.relative(formattersDir, results[3].filePath), "simple.js"); + assert.strictEqual(results[3].errorCount, 0); + assert.strictEqual(results[3].warningCount, 0); + assert.strictEqual(results[3].fatalErrorCount, 0); + assert.strictEqual(results[3].fixableErrorCount, 0); + assert.strictEqual(results[3].fixableWarningCount, 0); + assert.strictEqual(results[3].messages.length, 0); + assert.strictEqual(results[3].suppressedMessages.length, 0); + assert.strictEqual(path.relative(formattersDir, results[4].filePath), path.join("test", "simple.js")); + assert.strictEqual(results[4].errorCount, 0); + assert.strictEqual(results[4].warningCount, 0); + assert.strictEqual(results[4].fatalErrorCount, 0); + assert.strictEqual(results[4].fixableErrorCount, 0); + assert.strictEqual(results[4].fixableWarningCount, 0); + assert.strictEqual(results[4].messages.length, 0); + assert.strictEqual(results[4].suppressedMessages.length, 0); + }); + + it("should return zero messages when given a config with browser globals", async () => { + eslint = new FlatESLint({ + cwd: path.join(fixtureDir, ".."), + overrideConfigFile: getFixturePath("configurations", "env-browser.js") + }); + const results = await eslint.lintFiles([fs.realpathSync(getFixturePath("globals-browser.js"))]); + + assert.strictEqual(results.length, 1); + assert.strictEqual(results[0].messages.length, 0, "Should have no messages."); + assert.strictEqual(results[0].suppressedMessages.length, 0); + }); + + it("should return zero messages when given an option to add browser globals", async () => { + eslint = new FlatESLint({ + cwd: path.join(fixtureDir, ".."), + overrideConfigFile: true, + overrideConfig: { + languageOptions: { + globals: { + window: false + } + }, + rules: { + "no-alert": 0, + "no-undef": 2 + } + } + }); + const results = await eslint.lintFiles([fs.realpathSync(getFixturePath("globals-browser.js"))]); + + assert.strictEqual(results.length, 1); + assert.strictEqual(results[0].messages.length, 0); + assert.strictEqual(results[0].suppressedMessages.length, 0); + }); + + it("should return zero messages when given a config with sourceType set to commonjs and Node.js globals", async () => { + eslint = new FlatESLint({ + cwd: path.join(fixtureDir, ".."), + overrideConfigFile: getFixturePath("configurations", "env-node.js") + }); + const results = await eslint.lintFiles([fs.realpathSync(getFixturePath("globals-node.js"))]); + + assert.strictEqual(results.length, 1); + assert.strictEqual(results[0].messages.length, 0, "Should have no messages."); + assert.strictEqual(results[0].suppressedMessages.length, 0); + }); + + it("should not return results from previous call when calling more than once", async () => { + eslint = new FlatESLint({ + cwd: path.join(fixtureDir, ".."), + overrideConfigFile: getFixturePath("eslint.config.js"), + ignore: false, + overrideConfig: { + rules: { + semi: 2 + } + } + }); + const failFilePath = fs.realpathSync(getFixturePath("missing-semicolon.js")); + const passFilePath = fs.realpathSync(getFixturePath("passing.js")); + + let results = await eslint.lintFiles([failFilePath]); + + assert.strictEqual(results.length, 1); + assert.strictEqual(results[0].filePath, failFilePath); + assert.strictEqual(results[0].messages.length, 1); + assert.strictEqual(results[0].messages[0].ruleId, "semi"); + assert.strictEqual(results[0].suppressedMessages.length, 0); + assert.strictEqual(results[0].messages[0].severity, 2); + + results = await eslint.lintFiles([passFilePath]); + assert.strictEqual(results.length, 1); + assert.strictEqual(results[0].filePath, passFilePath); + assert.strictEqual(results[0].messages.length, 0); + assert.strictEqual(results[0].suppressedMessages.length, 0); + }); + + it("should return zero messages when executing a file with a shebang", async () => { + eslint = new FlatESLint({ + ignore: false, + cwd: getFixturePath(), + overrideConfigFile: getFixturePath("eslint.config.js") + }); + const results = await eslint.lintFiles([getFixturePath("shebang.js")]); + + assert.strictEqual(results.length, 1); + assert.strictEqual(results[0].messages.length, 0, "Should have lint messages."); + assert.strictEqual(results[0].suppressedMessages.length, 0); + }); + + it("should return zero messages when executing without a config file", async () => { + eslint = new FlatESLint({ + cwd: getFixturePath(), + ignore: false, + overrideConfigFile: true + }); + const filePath = fs.realpathSync(getFixturePath("missing-semicolon.js")); + const results = await eslint.lintFiles([filePath]); + + assert.strictEqual(results.length, 1); + assert.strictEqual(results[0].filePath, filePath); + assert.strictEqual(results[0].messages.length, 0); + assert.strictEqual(results[0].suppressedMessages.length, 0); + }); + + // working + describe("Deprecated Rules", () => { + + it("should warn when deprecated rules are configured", async () => { + eslint = new FlatESLint({ + cwd: originalDir, + overrideConfig: { + rules: { + "indent-legacy": 1, + "require-jsdoc": 1, + "valid-jsdoc": 1 + } + } + }); + const results = await eslint.lintFiles(["lib/cli*.js"]); + + assert.deepStrictEqual( + results[0].usedDeprecatedRules, + [ + { ruleId: "indent-legacy", replacedBy: ["indent"] }, + { ruleId: "require-jsdoc", replacedBy: [] }, + { ruleId: "valid-jsdoc", replacedBy: [] } + ] + ); + }); + + it("should not warn when deprecated rules are not configured", async () => { + eslint = new FlatESLint({ + cwd: originalDir, + overrideConfig: { + rules: { indent: 1, "valid-jsdoc": 0, "require-jsdoc": 0 } + } + }); + const results = await eslint.lintFiles(["lib/cli*.js"]); + + assert.deepStrictEqual(results[0].usedDeprecatedRules, []); + }); + + it("should warn when deprecated rules are found in a config", async () => { + eslint = new FlatESLint({ + cwd: originalDir, + overrideConfigFile: "tests/fixtures/cli-engine/deprecated-rule-config/eslint.config.js" + }); + const results = await eslint.lintFiles(["lib/cli*.js"]); + + assert.deepStrictEqual( + results[0].usedDeprecatedRules, + [{ ruleId: "indent-legacy", replacedBy: ["indent"] }] + ); + }); + }); + + // working + describe("Fix Mode", () => { + + it("correctly autofixes semicolon-conflicting-fixes", async () => { + eslint = new FlatESLint({ + cwd: path.join(fixtureDir, ".."), + overrideConfigFile: true, + fix: true + }); + const inputPath = getFixturePath("autofix/semicolon-conflicting-fixes.js"); + const outputPath = getFixturePath("autofix/semicolon-conflicting-fixes.expected.js"); + const results = await eslint.lintFiles([inputPath]); + const expectedOutput = fs.readFileSync(outputPath, "utf8"); + + assert.strictEqual(results[0].output, expectedOutput); + }); + + it("correctly autofixes return-conflicting-fixes", async () => { + eslint = new FlatESLint({ + cwd: path.join(fixtureDir, ".."), + overrideConfigFile: true, + fix: true + }); + const inputPath = getFixturePath("autofix/return-conflicting-fixes.js"); + const outputPath = getFixturePath("autofix/return-conflicting-fixes.expected.js"); + const results = await eslint.lintFiles([inputPath]); + const expectedOutput = fs.readFileSync(outputPath, "utf8"); + + assert.strictEqual(results[0].output, expectedOutput); + }); + + it("should return fixed text on multiple files when in fix mode", async () => { + + /** + * Converts CRLF to LF in output. + * This is a workaround for git's autocrlf option on Windows. + * @param {Object} result A result object to convert. + * @returns {void} + */ + function convertCRLF(result) { + if (result && result.output) { + result.output = result.output.replace(/\r\n/gu, "\n"); + } + } + + eslint = new FlatESLint({ + cwd: path.join(fixtureDir, ".."), + overrideConfigFile: true, + fix: true, + overrideConfig: { + rules: { + semi: 2, + quotes: [2, "double"], + eqeqeq: 2, + "no-undef": 2, + "space-infix-ops": 2 + } + } + }); + const results = await eslint.lintFiles([path.resolve(fixtureDir, `${fixtureDir}/fixmode`)]); + + results.forEach(convertCRLF); + assert.deepStrictEqual(results, [ + { + filePath: fs.realpathSync(path.resolve(fixtureDir, "fixmode/multipass.js")), + messages: [], + suppressedMessages: [], + errorCount: 0, + warningCount: 0, + fatalErrorCount: 0, + fixableErrorCount: 0, + fixableWarningCount: 0, + output: "true ? \"yes\" : \"no\";\n", + usedDeprecatedRules: [] + }, + { + filePath: fs.realpathSync(path.resolve(fixtureDir, "fixmode/ok.js")), + messages: [], + suppressedMessages: [], + errorCount: 0, + warningCount: 0, + fatalErrorCount: 0, + fixableErrorCount: 0, + fixableWarningCount: 0, + usedDeprecatedRules: [] + }, + { + filePath: fs.realpathSync(path.resolve(fixtureDir, "fixmode/quotes-semi-eqeqeq.js")), + messages: [ + { + column: 9, + line: 2, + endColumn: 11, + endLine: 2, + message: "Expected '===' and instead saw '=='.", + messageId: "unexpected", + nodeType: "BinaryExpression", + ruleId: "eqeqeq", + severity: 2 + } + ], + suppressedMessages: [], + errorCount: 1, + warningCount: 0, + fatalErrorCount: 0, + fixableErrorCount: 0, + fixableWarningCount: 0, + output: "var msg = \"hi\";\nif (msg == \"hi\") {\n\n}\n", + usedDeprecatedRules: [] + }, + { + filePath: fs.realpathSync(path.resolve(fixtureDir, "fixmode/quotes.js")), + messages: [ + { + column: 18, + line: 1, + endColumn: 21, + endLine: 1, + messageId: "undef", + message: "'foo' is not defined.", + nodeType: "Identifier", + ruleId: "no-undef", + severity: 2 + } + ], + suppressedMessages: [], + errorCount: 1, + warningCount: 0, + fatalErrorCount: 0, + fixableErrorCount: 0, + fixableWarningCount: 0, + output: "var msg = \"hi\" + foo;\n", + usedDeprecatedRules: [] + } + ]); + }); + + // Cannot be run properly until cache is implemented + it("should run autofix even if files are cached without autofix results", async () => { + const baseOptions = { + cwd: path.join(fixtureDir, ".."), + overrideConfigFile: true, + overrideConfig: { + rules: { + semi: 2, + quotes: [2, "double"], + eqeqeq: 2, + "no-undef": 2, + "space-infix-ops": 2 + } + } + }; + + eslint = new FlatESLint(Object.assign({}, baseOptions, { cache: true, fix: false })); + + // Do initial lint run and populate the cache file + await eslint.lintFiles([path.resolve(fixtureDir, `${fixtureDir}/fixmode`)]); + + eslint = new FlatESLint(Object.assign({}, baseOptions, { cache: true, fix: true })); + const results = await eslint.lintFiles([path.resolve(fixtureDir, `${fixtureDir}/fixmode`)]); + + assert(results.some(result => result.output)); + }); + }); + + describe("plugins", () => { + it("should return two messages when executing with config file that specifies a plugin", async () => { + eslint = eslintWithPlugins({ + cwd: path.resolve(fixtureDir, ".."), + overrideConfigFile: getFixturePath("configurations", "plugins-with-prefix.js") + }); + const results = await eslint.lintFiles([fs.realpathSync(getFixturePath("rules", "test/test-custom-rule.js"))]); + + assert.strictEqual(results.length, 1); + assert.strictEqual(results[0].messages.length, 2, "Expected two messages."); + assert.strictEqual(results[0].messages[0].ruleId, "example/example-rule"); + assert.strictEqual(results[0].suppressedMessages.length, 0); + + }); + + it("should return two messages when executing with cli option that specifies a plugin", async () => { + eslint = eslintWithPlugins({ + cwd: path.resolve(fixtureDir, ".."), + overrideConfigFile: true, + overrideConfig: { + rules: { "example/example-rule": 1 } + } + }); + const results = await eslint.lintFiles([fs.realpathSync(getFixturePath("rules", "test", "test-custom-rule.js"))]); + + assert.strictEqual(results.length, 1); + assert.strictEqual(results[0].messages.length, 2); + assert.strictEqual(results[0].messages[0].ruleId, "example/example-rule"); + assert.strictEqual(results[0].suppressedMessages.length, 0); + + }); + + it("should return two messages when executing with cli option that specifies preloaded plugin", async () => { + eslint = new FlatESLint({ + cwd: path.resolve(fixtureDir, ".."), + overrideConfigFile: true, + overrideConfig: { + rules: { "test/example-rule": 1 } + }, + plugins: { + "eslint-plugin-test": { rules: { "example-rule": require("../../fixtures/rules/custom-rule") } } + } + }); + const results = await eslint.lintFiles([fs.realpathSync(getFixturePath("rules", "test", "test-custom-rule.js"))]); + + assert.strictEqual(results.length, 1); + assert.strictEqual(results[0].messages.length, 2); + assert.strictEqual(results[0].messages[0].ruleId, "test/example-rule"); + assert.strictEqual(results[0].suppressedMessages.length, 0); + + }); + }); + + describe("cache", () => { + + /** + * helper method to delete a file without caring about exceptions + * @param {string} filePath The file path + * @returns {void} + */ + function doDelete(filePath) { + try { + fs.unlinkSync(filePath); + } catch { + + /* + * we don't care if the file didn't exist, since our + * intention was to remove the file + */ + } + } + + /** + * helper method to delete the cache files created during testing + * @returns {void} + */ + function deleteCache() { + doDelete(path.resolve(".eslintcache")); + doDelete(path.resolve(".cache/custom-cache")); + } + + beforeEach(() => { + deleteCache(); + }); + + afterEach(() => { + sinon.restore(); + deleteCache(); + }); + + describe("when the cacheFile is a directory or looks like a directory", () => { + + /** + * helper method to delete the cache files created during testing + * @returns {void} + */ + function deleteCacheDir() { + try { + fs.unlinkSync("./tmp/.cacheFileDir/.cache_hashOfCurrentWorkingDirectory"); + } catch { + + /* + * we don't care if the file didn't exist, since our + * intention was to remove the file + */ + } + } + beforeEach(() => { + deleteCacheDir(); + }); + + afterEach(() => { + deleteCacheDir(); + }); + + it("should create the cache file inside the provided directory", async () => { + assert(!shell.test("-d", path.resolve("./tmp/.cacheFileDir/.cache_hashOfCurrentWorkingDirectory")), "the cache for eslint does not exist"); + + eslint = new FlatESLint({ + overrideConfigFile: true, + + // specifying cache true the cache will be created + cache: true, + cacheLocation: "./tmp/.cacheFileDir/", + overrideConfig: { + rules: { + "no-console": 0, + "no-unused-vars": 2 + } + }, + ignore: false + }); + const file = getFixturePath("cache/src", "test-file.js"); + + await eslint.lintFiles([file]); + + assert(shell.test("-f", path.resolve(`./tmp/.cacheFileDir/.cache_${hash(process.cwd())}`)), "the cache for eslint was created"); + + sinon.restore(); + }); + }); + + it("should create the cache file inside the provided directory using the cacheLocation option", async () => { + assert(!shell.test("-d", path.resolve("./tmp/.cacheFileDir/.cache_hashOfCurrentWorkingDirectory")), "the cache for eslint does not exist"); + + eslint = new FlatESLint({ + overrideConfigFile: true, + + // specifying cache true the cache will be created + cache: true, + cacheLocation: "./tmp/.cacheFileDir/", + overrideConfig: { + rules: { + "no-console": 0, + "no-unused-vars": 2 + } + }, + ignore: false + }); + const file = getFixturePath("cache/src", "test-file.js"); + + await eslint.lintFiles([file]); + + assert(shell.test("-f", path.resolve(`./tmp/.cacheFileDir/.cache_${hash(process.cwd())}`)), "the cache for eslint was created"); + + sinon.restore(); + }); + + it("should create the cache file inside cwd when no cacheLocation provided", async () => { + const cwd = path.resolve(getFixturePath("cli-engine")); + + eslint = new FlatESLint({ + overrideConfigFile: true, + cache: true, + cwd, + overrideConfig: { + rules: { + "no-console": 0 + } + }, + ignore: false + }); + const file = getFixturePath("cli-engine", "console.js"); + + await eslint.lintFiles([file]); + + assert(shell.test("-f", path.resolve(cwd, ".eslintcache")), "the cache for eslint was created at provided cwd"); + }); + + it("should invalidate the cache if the overrideConfig changed between executions", async () => { + const cwd = getFixturePath("cache/src"); + const cacheLocation = path.resolve(cwd, ".eslintcache"); + + assert(!shell.test("-f", cacheLocation), "the cache for eslint does not exist"); + + eslint = new FlatESLint({ + overrideConfigFile: true, + cwd, + + // specifying cache true the cache will be created + cache: true, + overrideConfig: { + rules: { + "no-console": 0, + "no-unused-vars": 2 + } + }, + ignore: false + }); + + let spy = sinon.spy(fs.promises, "readFile"); + + let file = path.join(cwd, "test-file.js"); + + file = fs.realpathSync(file); + const results = await eslint.lintFiles([file]); + + for (const { errorCount, warningCount } of results) { + assert.strictEqual(errorCount + warningCount, 0, "the file passed without errors or warnings"); + } + + assert(spy.calledWith(file), "ESLint should have read the file because it's considered changed"); + assert(shell.test("-f", cacheLocation), "the cache for eslint should still exist"); + + // destroy the spy + sinon.restore(); + + eslint = new FlatESLint({ + overrideConfigFile: true, + cwd, + + // specifying cache true the cache will be created + cache: true, + overrideConfig: { + rules: { + "no-console": 2, + "no-unused-vars": 2 + } + }, + ignore: false + }); + + // create a new spy + spy = sinon.spy(fs.promises, "readFile"); + + const [cachedResult] = await eslint.lintFiles([file]); + + assert(spy.calledWith(file), "ESLint should have read the file again because is considered changed because the config changed"); + assert.strictEqual(cachedResult.errorCount, 1, "since configuration changed the cache was not used and one error was reported"); + assert(shell.test("-f", cacheLocation), "The cache for ESLint should still exist (2)"); + }); + + it("should remember the files from a previous run and do not operate on them if not changed", async () => { + + const cwd = getFixturePath("cache/src"); + const cacheLocation = path.resolve(cwd, ".eslintcache"); + + eslint = new FlatESLint({ + overrideConfigFile: true, + cwd, + + // specifying cache true the cache will be created + cache: true, + overrideConfig: { + rules: { + "no-console": 0, + "no-unused-vars": 2 + } + }, + ignore: false + }); + + let spy = sinon.spy(fs.promises, "readFile"); + + let file = getFixturePath("cache/src", "test-file.js"); + + file = fs.realpathSync(file); + + const result = await eslint.lintFiles([file]); + + assert(spy.calledWith(file), "the module read the file because is considered changed"); + assert(shell.test("-f", cacheLocation), "the cache for eslint was created"); + + // destroy the spy + sinon.restore(); + + eslint = new FlatESLint({ + overrideConfigFile: true, + cwd, + + // specifying cache true the cache will be created + cache: true, + overrideConfig: { + rules: { + "no-console": 0, + "no-unused-vars": 2 + } + }, + ignore: false + }); + + // create a new spy + spy = sinon.spy(fs.promises, "readFile"); + + const cachedResult = await eslint.lintFiles([file]); + + assert.deepStrictEqual(result, cachedResult, "the result is the same regardless of using cache or not"); + + // assert the file was not processed because the cache was used + assert(!spy.calledWith(file), "the file was not loaded because it used the cache"); + }); + + it("should remember the files from a previous run and do not operate on then if not changed", async () => { + const cacheLocation = getFixturePath(".eslintcache"); + const eslintOptions = { + overrideConfigFile: true, + + // specifying cache true the cache will be created + cache: true, + cacheLocation, + overrideConfig: { + rules: { + "no-console": 0, + "no-unused-vars": 2 + } + }, + cwd: path.join(fixtureDir, "..") + }; + + assert(!shell.test("-f", cacheLocation), "the cache for eslint does not exist"); + + eslint = new FlatESLint(eslintOptions); + + let file = getFixturePath("cache/src", "test-file.js"); + + file = fs.realpathSync(file); + + await eslint.lintFiles([file]); + + assert(shell.test("-f", cacheLocation), "the cache for eslint was created"); + + eslintOptions.cache = false; + eslint = new FlatESLint(eslintOptions); + + await eslint.lintFiles([file]); + + assert(!shell.test("-f", cacheLocation), "the cache for eslint was deleted since last run did not used the cache"); + }); + + it("should store in the cache a file that failed the test", async () => { + const cacheLocation = getFixturePath(".eslintcache"); + + assert(!shell.test("-f", cacheLocation), "the cache for eslint does not exist"); + + eslint = new FlatESLint({ + cwd: path.join(fixtureDir, ".."), + overrideConfigFile: true, + + // specifying cache true the cache will be created + cache: true, + cacheLocation, + overrideConfig: { + rules: { + "no-console": 0, + "no-unused-vars": 2 + } + } + }); + const badFile = fs.realpathSync(getFixturePath("cache/src", "fail-file.js")); + const goodFile = fs.realpathSync(getFixturePath("cache/src", "test-file.js")); + const result = await eslint.lintFiles([badFile, goodFile]); + + assert(shell.test("-f", cacheLocation), "the cache for eslint was created"); + const fileCache = fCache.createFromFile(cacheLocation); + const { cache } = fileCache; + + assert.strictEqual(typeof cache.getKey(goodFile), "object", "the entry for the good file is in the cache"); + assert.strictEqual(typeof cache.getKey(badFile), "object", "the entry for the bad file is in the cache"); + const cachedResult = await eslint.lintFiles([badFile, goodFile]); + + assert.deepStrictEqual(result, cachedResult, "result is the same with or without cache"); + }); + + it("should not contain in the cache a file that was deleted", async () => { + const cacheLocation = getFixturePath(".eslintcache"); + + doDelete(cacheLocation); + + eslint = new FlatESLint({ + cwd: path.join(fixtureDir, ".."), + overrideConfigFile: true, + + // specifying cache true the cache will be created + cache: true, + cacheLocation, + overrideConfig: { + rules: { + "no-console": 0, + "no-unused-vars": 2 + } + } + }); + const badFile = fs.realpathSync(getFixturePath("cache/src", "fail-file.js")); + const goodFile = fs.realpathSync(getFixturePath("cache/src", "test-file.js")); + const toBeDeletedFile = fs.realpathSync(getFixturePath("cache/src", "file-to-delete.js")); + + await eslint.lintFiles([badFile, goodFile, toBeDeletedFile]); + const fileCache = fCache.createFromFile(cacheLocation); + let { cache } = fileCache; + + assert.strictEqual(typeof cache.getKey(toBeDeletedFile), "object", "the entry for the file to be deleted is in the cache"); + + // delete the file from the file system + fs.unlinkSync(toBeDeletedFile); + + /* + * file-entry-cache@2.0.0 will remove from the cache deleted files + * even when they were not part of the array of files to be analyzed + */ + await eslint.lintFiles([badFile, goodFile]); + + cache = JSON.parse(fs.readFileSync(cacheLocation)); + + assert.strictEqual(typeof cache[toBeDeletedFile], "undefined", "the entry for the file to be deleted is not in the cache"); + }); + + it("should contain files that were not visited in the cache provided they still exist", async () => { + const cacheLocation = getFixturePath(".eslintcache"); + + doDelete(cacheLocation); + + eslint = new FlatESLint({ + cwd: path.join(fixtureDir, ".."), + overrideConfigFile: true, + + // specifying cache true the cache will be created + cache: true, + cacheLocation, + overrideConfig: { + rules: { + "no-console": 0, + "no-unused-vars": 2 + } + } + }); + const badFile = fs.realpathSync(getFixturePath("cache/src", "fail-file.js")); + const goodFile = fs.realpathSync(getFixturePath("cache/src", "test-file.js")); + const testFile2 = fs.realpathSync(getFixturePath("cache/src", "test-file2.js")); + + await eslint.lintFiles([badFile, goodFile, testFile2]); + + let fileCache = fCache.createFromFile(cacheLocation); + let { cache } = fileCache; + + assert.strictEqual(typeof cache.getKey(testFile2), "object", "the entry for the test-file2 is in the cache"); + + /* + * we pass a different set of files minus test-file2 + * previous version of file-entry-cache would remove the non visited + * entries. 2.0.0 version will keep them unless they don't exist + */ + await eslint.lintFiles([badFile, goodFile]); + + fileCache = fCache.createFromFile(cacheLocation); + cache = fileCache.cache; + + assert.strictEqual(typeof cache.getKey(testFile2), "object", "the entry for the test-file2 is in the cache"); + }); + + it("should not delete cache when executing on text", async () => { + const cacheLocation = getFixturePath(".eslintcache"); + + eslint = new FlatESLint({ + cwd: path.join(fixtureDir, ".."), + overrideConfigFile: true, + cacheLocation, + overrideConfig: { + rules: { + "no-console": 0, + "no-unused-vars": 2 + } + } + }); + + assert(shell.test("-f", cacheLocation), "the cache for eslint exists"); + + await eslint.lintText("var foo = 'bar';"); + + assert(shell.test("-f", cacheLocation), "the cache for eslint still exists"); + }); + + it("should not delete cache when executing on text with a provided filename", async () => { + const cacheLocation = getFixturePath(".eslintcache"); + + eslint = new FlatESLint({ + cwd: path.join(fixtureDir, ".."), + overrideConfigFile: true, + cacheLocation, + overrideConfig: { + rules: { + "no-console": 0, + "no-unused-vars": 2 + } + } + }); + + assert(shell.test("-f", cacheLocation), "the cache for eslint exists"); + + await eslint.lintText("var bar = foo;", { filePath: "fixtures/passing.js" }); + + assert(shell.test("-f", cacheLocation), "the cache for eslint still exists"); + }); + + it("should not delete cache when executing on files with --cache flag", async () => { + const cacheLocation = getFixturePath(".eslintcache"); + + eslint = new FlatESLint({ + cwd: path.join(fixtureDir, ".."), + overrideConfigFile: true, + cache: true, + cacheLocation, + overrideConfig: { + rules: { + "no-console": 0, + "no-unused-vars": 2 + } + } + }); + const file = getFixturePath("cli-engine", "console.js"); + + assert(shell.test("-f", cacheLocation), "the cache for eslint exists"); + + await eslint.lintFiles([file]); + + assert(shell.test("-f", cacheLocation), "the cache for eslint still exists"); + }); + + it("should delete cache when executing on files without --cache flag", async () => { + const cacheLocation = getFixturePath(".eslintcache"); + + eslint = new FlatESLint({ + cwd: path.join(fixtureDir, ".."), + overrideConfigFile: true, + cacheLocation, + overrideConfig: { + rules: { + "no-console": 0, + "no-unused-vars": 2 + } + } + + }); + const file = getFixturePath("cli-engine", "console.js"); + + assert(shell.test("-f", cacheLocation), "the cache for eslint exists"); + + await eslint.lintFiles([file]); + + assert(!shell.test("-f", cacheLocation), "the cache for eslint has been deleted"); + }); + + describe("cacheFile", () => { + it("should use the specified cache file", async () => { + const customCacheFile = path.resolve(".cache/custom-cache"); + + assert(!shell.test("-f", customCacheFile), "the cache for eslint does not exist"); + + eslint = new FlatESLint({ + overrideConfigFile: true, + + // specify a custom cache file + cacheLocation: customCacheFile, + + // specifying cache true the cache will be created + cache: true, + overrideConfig: { + rules: { + "no-console": 0, + "no-unused-vars": 2 + } + }, + + cwd: path.join(fixtureDir, "..") + }); + const badFile = fs.realpathSync(getFixturePath("cache/src", "fail-file.js")); + const goodFile = fs.realpathSync(getFixturePath("cache/src", "test-file.js")); + const result = await eslint.lintFiles([badFile, goodFile]); + + assert(shell.test("-f", customCacheFile), "the cache for eslint was created"); + const fileCache = fCache.createFromFile(customCacheFile); + const { cache } = fileCache; + + assert(typeof cache.getKey(goodFile) === "object", "the entry for the good file is in the cache"); + + assert(typeof cache.getKey(badFile) === "object", "the entry for the bad file is in the cache"); + const cachedResult = await eslint.lintFiles([badFile, goodFile]); + + assert.deepStrictEqual(result, cachedResult, "result is the same with or without cache"); + }); + }); + + describe("cacheStrategy", () => { + it("should detect changes using a file's modification time when set to 'metadata'", async () => { + const cacheLocation = getFixturePath(".eslintcache"); + + doDelete(cacheLocation); + + eslint = new FlatESLint({ + cwd: path.join(fixtureDir, ".."), + overrideConfigFile: true, + + // specifying cache true the cache will be created + cache: true, + cacheLocation, + cacheStrategy: "metadata", + overrideConfig: { + rules: { + "no-console": 0, + "no-unused-vars": 2 + } + } + + }); + const badFile = fs.realpathSync(getFixturePath("cache/src", "fail-file.js")); + const goodFile = fs.realpathSync(getFixturePath("cache/src", "test-file.js")); + + await eslint.lintFiles([badFile, goodFile]); + let fileCache = fCache.createFromFile(cacheLocation); + const entries = fileCache.normalizeEntries([badFile, goodFile]); + + entries.forEach(entry => { + assert(entry.changed === false, `the entry for ${entry.key} is initially unchanged`); + }); + + // this should result in a changed entry + shell.touch(goodFile); + fileCache = fCache.createFromFile(cacheLocation); + assert(fileCache.getFileDescriptor(badFile).changed === false, `the entry for ${badFile} is unchanged`); + assert(fileCache.getFileDescriptor(goodFile).changed === true, `the entry for ${goodFile} is changed`); + }); + + it("should not detect changes using a file's modification time when set to 'content'", async () => { + const cacheLocation = getFixturePath(".eslintcache"); + + doDelete(cacheLocation); + + eslint = new FlatESLint({ + cwd: path.join(fixtureDir, ".."), + overrideConfigFile: true, + + // specifying cache true the cache will be created + cache: true, + cacheLocation, + cacheStrategy: "content", + overrideConfig: { + rules: { + "no-console": 0, + "no-unused-vars": 2 + } + } + + }); + const badFile = fs.realpathSync(getFixturePath("cache/src", "fail-file.js")); + const goodFile = fs.realpathSync(getFixturePath("cache/src", "test-file.js")); + + await eslint.lintFiles([badFile, goodFile]); + let fileCache = fCache.createFromFile(cacheLocation, true); + let entries = fileCache.normalizeEntries([badFile, goodFile]); + + entries.forEach(entry => { + assert(entry.changed === false, `the entry for ${entry.key} is initially unchanged`); + }); + + // this should NOT result in a changed entry + shell.touch(goodFile); + fileCache = fCache.createFromFile(cacheLocation, true); + entries = fileCache.normalizeEntries([badFile, goodFile]); + entries.forEach(entry => { + assert(entry.changed === false, `the entry for ${entry.key} remains unchanged`); + }); + }); + + it("should detect changes using a file's contents when set to 'content'", async () => { + const cacheLocation = getFixturePath(".eslintcache"); + + doDelete(cacheLocation); + + eslint = new FlatESLint({ + cwd: path.join(fixtureDir, ".."), + overrideConfigFile: true, + + // specifying cache true the cache will be created + cache: true, + cacheLocation, + cacheStrategy: "content", + overrideConfig: { + rules: { + "no-console": 0, + "no-unused-vars": 2 + } + } + + }); + const badFile = fs.realpathSync(getFixturePath("cache/src", "fail-file.js")); + const goodFile = fs.realpathSync(getFixturePath("cache/src", "test-file.js")); + const goodFileCopy = path.resolve(`${path.dirname(goodFile)}`, "test-file-copy.js"); + + shell.cp(goodFile, goodFileCopy); + + await eslint.lintFiles([badFile, goodFileCopy]); + let fileCache = fCache.createFromFile(cacheLocation, true); + const entries = fileCache.normalizeEntries([badFile, goodFileCopy]); + + entries.forEach(entry => { + assert(entry.changed === false, `the entry for ${entry.key} is initially unchanged`); + }); + + // this should result in a changed entry + shell.sed("-i", "abc", "xzy", goodFileCopy); + fileCache = fCache.createFromFile(cacheLocation, true); + assert(fileCache.getFileDescriptor(badFile).changed === false, `the entry for ${badFile} is unchanged`); + assert(fileCache.getFileDescriptor(goodFileCopy).changed === true, `the entry for ${goodFileCopy} is changed`); + }); + }); + }); + + describe("processors", () => { + + it("should return two messages when executing with config file that specifies preloaded processor", async () => { + eslint = new FlatESLint({ + overrideConfigFile: true, + overrideConfig: [ + { + plugins: { + test: { + processors: { + txt: { + preprocess(text) { + return [text]; + }, + postprocess(messages) { + return messages[0]; + } + } + } + } + }, + processor: "test/txt", + rules: { + "no-console": 2, + "no-unused-vars": 2 + } + }, + { + files: ["**/*.txt", "**/*.txt/*.txt"] + } + ], + cwd: path.join(fixtureDir, "..") + }); + const results = await eslint.lintFiles([fs.realpathSync(getFixturePath("processors", "test", "test-processor.txt"))]); + + assert.strictEqual(results.length, 1); + assert.strictEqual(results[0].messages.length, 2); + assert.strictEqual(results[0].suppressedMessages.length, 0); + + }); + + it("should run processors when calling lintFiles with config file that specifies preloaded processor", async () => { + eslint = new FlatESLint({ + overrideConfigFile: true, + overrideConfig: [ + { + plugins: { + test: { + processors: { + txt: { + preprocess(text) { + return [text.replace("a()", "b()")]; + }, + postprocess(messages) { + messages[0][0].ruleId = "post-processed"; + return messages[0]; + } + } + } + } + }, + processor: "test/txt", + rules: { + "no-console": 2, + "no-unused-vars": 2 + } + }, + { + files: ["**/*.txt", "**/*.txt/*.txt"] + } + ], + cwd: path.join(fixtureDir, "..") + }); + const results = await eslint.lintFiles([getFixturePath("processors", "test", "test-processor.txt")]); + + assert.strictEqual(results[0].messages[0].message, "'b' is defined but never used."); + assert.strictEqual(results[0].messages[0].ruleId, "post-processed"); + assert.strictEqual(results[0].suppressedMessages.length, 0); + + }); + + it("should run processors when calling lintText with config file that specifies preloaded processor", async () => { + eslint = new FlatESLint({ + overrideConfigFile: true, + overrideConfig: [ + { + plugins: { + test: { + processors: { + txt: { + preprocess(text) { + return [text.replace("a()", "b()")]; + }, + postprocess(messages) { + messages[0][0].ruleId = "post-processed"; + return messages[0]; + } + } + } + } + }, + processor: "test/txt", + rules: { + "no-console": 2, + "no-unused-vars": 2 + } + }, + { + files: ["**/*.txt", "**/*.txt/*.txt"] + } + ], + ignore: false + }); + const results = await eslint.lintText("function a() {console.log(\"Test\");}", { filePath: "tests/fixtures/processors/test/test-processor.txt" }); + + assert.strictEqual(results[0].messages[0].message, "'b' is defined but never used."); + assert.strictEqual(results[0].messages[0].ruleId, "post-processed"); + assert.strictEqual(results[0].suppressedMessages.length, 0); + }); + + it("should run processors when calling lintText with processor resolves same extension but different content correctly", async () => { + let count = 0; + + eslint = new FlatESLint({ + overrideConfigFile: true, + overrideConfig: [ + { + plugins: { + test: { + processors: { + txt: { + preprocess(text) { + count++; + return [ + { + + // it will be run twice, and text will be as-is at the second time, then it will not run third time + text: text.replace("a()", "b()"), + filename: ".txt" + } + ]; + }, + postprocess(messages) { + messages[0][0].ruleId = "post-processed"; + return messages[0]; + } + } + } + } + }, + processor: "test/txt" + }, + { + files: ["**/*.txt/*.txt"], + rules: { + "no-console": 2, + "no-unused-vars": 2 + } + }, + { + files: ["**/*.txt"] + } + ], + ignore: false + }); + const results = await eslint.lintText("function a() {console.log(\"Test\");}", { filePath: "tests/fixtures/processors/test/test-processor.txt" }); + + assert.strictEqual(count, 2); + assert.strictEqual(results[0].messages[0].message, "'b' is defined but never used."); + assert.strictEqual(results[0].messages[0].ruleId, "post-processed"); + assert.strictEqual(results[0].suppressedMessages.length, 0); + + }); + + describe("autofixing with processors", () => { + const HTML_PROCESSOR = Object.freeze({ + preprocess(text) { + return [text.replace(/^<script>/u, "").replace(/<\/script>$/u, "")]; + }, + postprocess(problemLists) { + return problemLists[0].map(problem => { + if (problem.fix) { + const updatedFix = Object.assign({}, problem.fix, { + range: problem.fix.range.map(index => index + "<script>".length) + }); + + return Object.assign({}, problem, { fix: updatedFix }); + } + return problem; + }); + } + }); + + + it("should run in autofix mode when using a processor that supports autofixing", async () => { + eslint = new FlatESLint({ + overrideConfigFile: true, + overrideConfig: [ + { + files: ["**/*.html"], + plugins: { + test: { processors: { html: Object.assign({ supportsAutofix: true }, HTML_PROCESSOR) } } + }, + processor: "test/html", + rules: { + semi: 2 + } + }, + { + files: ["**/*.txt"] + } + ], + ignore: false, + fix: true + }); + const results = await eslint.lintText("<script>foo</script>", { filePath: "foo.html" }); + + assert.strictEqual(results[0].messages.length, 0); + assert.strictEqual(results[0].suppressedMessages.length, 0); + assert.strictEqual(results[0].output, "<script>foo;</script>"); + }); + + it("should not run in autofix mode when using a processor that does not support autofixing", async () => { + eslint = new FlatESLint({ + overrideConfigFile: true, + overrideConfig: { + files: ["**/*.html"], + plugins: { + test: { processors: { html: HTML_PROCESSOR } } + }, + processor: "test/html", + rules: { + semi: 2 + } + }, + ignore: false, + fix: true + }); + const results = await eslint.lintText("<script>foo</script>", { filePath: "foo.html" }); + + assert.strictEqual(results[0].messages.length, 1); + assert.strictEqual(results[0].suppressedMessages.length, 0); + assert(!Object.prototype.hasOwnProperty.call(results[0], "output")); + }); + + it("should not run in autofix mode when `fix: true` is not provided, even if the processor supports autofixing", async () => { + eslint = new FlatESLint({ + overrideConfigFile: true, + overrideConfig: [ + { + files: ["**/*.html"], + plugins: { + test: { processors: { html: Object.assign({ supportsAutofix: true }, HTML_PROCESSOR) } } + }, + processor: "test/html", + rules: { + semi: 2 + } + }, + { + files: ["**/*.txt"] + } + ], + ignore: false + }); + const results = await eslint.lintText("<script>foo</script>", { filePath: "foo.html" }); + + assert.strictEqual(results[0].messages.length, 1); + assert.strictEqual(results[0].suppressedMessages.length, 0); + assert(!Object.prototype.hasOwnProperty.call(results[0], "output")); + }); + }); + }); + + describe("Patterns which match no file should throw errors.", () => { + beforeEach(() => { + eslint = new FlatESLint({ + cwd: getFixturePath("cli-engine"), + overrideConfigFile: true + }); + }); + + it("one file", async () => { + await assert.rejects(async () => { + await eslint.lintFiles(["non-exist.js"]); + }, /No files matching 'non-exist\.js' were found\./u); + }); + + it("should throw if the directory exists and is empty", async () => { + await assert.rejects(async () => { + await eslint.lintFiles(["empty"]); + }, /No files matching 'empty\/\*\*\/\*\.js' were found\./u); + }); + + it("one glob pattern", async () => { + await assert.rejects(async () => { + await eslint.lintFiles(["non-exist/**/*.js"]); + }, /No files matching 'non-exist\/\*\*\/\*\.js' were found\./u); + }); + + it("two files", async () => { + await assert.rejects(async () => { + await eslint.lintFiles(["aaa.js", "bbb.js"]); + }, /No files matching 'aaa\.js' were found\./u); + }); + + it("a mix of an existing file and a non-existing file", async () => { + await assert.rejects(async () => { + await eslint.lintFiles(["console.js", "non-exist.js"]); + }, /No files matching 'non-exist\.js' were found\./u); + }); + }); + + describe("multiple processors", () => { + const root = path.join(os.tmpdir(), "eslint/eslint/multiple-processors"); + const commonFiles = { + "node_modules/pattern-processor/index.js": fs.readFileSync( + require.resolve("../../fixtures/processors/pattern-processor"), + "utf8" + ), + "node_modules/eslint-plugin-markdown/index.js": ` + const { defineProcessor } = require("pattern-processor"); + const processor = defineProcessor(${/```(\w+)\n([\s\S]+?)\n```/gu}); + exports.processors = { + "markdown": { ...processor, supportsAutofix: true }, + "non-fixable": processor + }; + `, + "node_modules/eslint-plugin-html/index.js": ` + const { defineProcessor } = require("pattern-processor"); + const processor = defineProcessor(${/<script lang="(\w*)">\n([\s\S]+?)\n<\/script>/gu}); + const legacyProcessor = defineProcessor(${/<script lang="(\w*)">\n([\s\S]+?)\n<\/script>/gu}, true); + exports.processors = { + "html": { ...processor, supportsAutofix: true }, + "non-fixable": processor, + "legacy": legacyProcessor + }; + `, + "test.md": unIndent` + \`\`\`js + console.log("hello") + \`\`\` + \`\`\`html + <div>Hello</div> + <script lang="js"> + console.log("hello") + </script> + <script lang="ts"> + console.log("hello") + </script> + \`\`\` + ` + }; + + // unique directory for each test to avoid quirky disk-cleanup errors + let id; + + beforeEach(() => (id = Date.now().toString())); + afterEach(async () => fsp.rmdir(root, { recursive: true, force: true })); + + it("should lint only JavaScript blocks.", async () => { + const teardown = createCustomTeardown({ + cwd: path.join(root, id), + files: { + ...commonFiles, + "eslint.config.js": `module.exports = [ + { + plugins: { + markdown: require("eslint-plugin-markdown"), + html: require("eslint-plugin-html") + } + }, + { + files: ["**/*.js"], + rules: { semi: "error" } + }, + { + files: ["**/*.md"], + processor: "markdown/markdown" + } + ];` + } + }); + + await teardown.prepare(); + eslint = new FlatESLint({ cwd: teardown.getPath() }); + const results = await eslint.lintFiles(["test.md"]); + + assert.strictEqual(results.length, 1, "Should have one result."); + assert.strictEqual(results[0].messages.length, 1, "Should have one message."); + assert.strictEqual(results[0].messages[0].ruleId, "semi"); + assert.strictEqual(results[0].messages[0].line, 2, "Message should be on line 2."); + assert.strictEqual(results[0].suppressedMessages.length, 0); + + }); + + it("should lint HTML blocks as well with multiple processors if represented in config.", async () => { + const teardown = createCustomTeardown({ + cwd: path.join(root, id), + files: { + ...commonFiles, + "eslint.config.js": `module.exports = [ + { + plugins: { + markdown: require("eslint-plugin-markdown"), + html: require("eslint-plugin-html") + } + }, + { + files: ["**/*.js"], + rules: { semi: "error" } + }, + { + files: ["**/*.md"], + processor: "markdown/markdown" + }, + { + files: ["**/*.html"], + processor: "html/html" + } + ];` + } + }); + + await teardown.prepare(); + eslint = new FlatESLint({ cwd: teardown.getPath(), overrideConfig: { files: ["**/*.html"] } }); + const results = await eslint.lintFiles(["test.md"]); + + assert.strictEqual(results.length, 1, "Should have one result."); + assert.strictEqual(results[0].messages.length, 2, "Should have two messages."); + assert.strictEqual(results[0].messages[0].ruleId, "semi"); // JS block + assert.strictEqual(results[0].messages[0].line, 2, "First error should be on line 2"); + assert.strictEqual(results[0].messages[1].ruleId, "semi"); // JS block in HTML block + assert.strictEqual(results[0].messages[1].line, 7, "Second error should be on line 7."); + assert.strictEqual(results[0].suppressedMessages.length, 0); + }); + + it("should fix HTML blocks as well with multiple processors if represented in config.", async () => { + const teardown = createCustomTeardown({ + cwd: path.join(root, id), + files: { + ...commonFiles, + "eslint.config.js": `module.exports = [ + { + plugins: { + markdown: require("eslint-plugin-markdown"), + html: require("eslint-plugin-html") + } + }, + { + files: ["**/*.js"], + rules: { semi: "error" } + }, + { + files: ["**/*.md"], + processor: "markdown/markdown" + }, + { + files: ["**/*.html"], + processor: "html/html" + } + ];` + } + }); + + await teardown.prepare(); + eslint = new FlatESLint({ cwd: teardown.getPath(), overrideConfig: { files: ["**/*.html"] }, fix: true }); + const results = await eslint.lintFiles(["test.md"]); + + assert.strictEqual(results.length, 1); + assert.strictEqual(results[0].messages.length, 0); + assert.strictEqual(results[0].suppressedMessages.length, 0); + assert.strictEqual(results[0].output, unIndent` + \`\`\`js + console.log("hello");${/* ← fixed */""} + \`\`\` + \`\`\`html + <div>Hello</div> + <script lang="js"> + console.log("hello");${/* ← fixed */""} + </script> + <script lang="ts"> + console.log("hello")${/* ← ignored */""} + </script> + \`\`\` + `); + }); + + it("should use the config '**/*.html/*.js' to lint JavaScript blocks in HTML.", async () => { + const teardown = createCustomTeardown({ + cwd: path.join(root, id), + files: { + ...commonFiles, + "eslint.config.js": `module.exports = [ + { + plugins: { + markdown: require("eslint-plugin-markdown"), + html: require("eslint-plugin-html") + } + }, + { + files: ["**/*.js"], + rules: { semi: "error" } + }, + { + files: ["**/*.md"], + processor: "markdown/markdown" + }, + { + files: ["**/*.html"], + processor: "html/html" + }, + { + files: ["**/*.html/*.js"], + rules: { + semi: "off", + "no-console": "error" + } + } + + ];` + + } + }); + + await teardown.prepare(); + eslint = new FlatESLint({ cwd: teardown.getPath(), overrideConfig: { files: ["**/*.html"] } }); + const results = await eslint.lintFiles(["test.md"]); + + assert.strictEqual(results.length, 1); + assert.strictEqual(results[0].messages.length, 2); + assert.strictEqual(results[0].messages[0].ruleId, "semi"); + assert.strictEqual(results[0].messages[0].line, 2); + assert.strictEqual(results[0].messages[1].ruleId, "no-console"); + assert.strictEqual(results[0].messages[1].line, 7); + assert.strictEqual(results[0].suppressedMessages.length, 0); + + }); + + it("should use the same config as one which has 'processor' property in order to lint blocks in HTML if the processor was legacy style.", async () => { + const teardown = createCustomTeardown({ + cwd: path.join(root, id), + files: { + ...commonFiles, + "eslint.config.js": `module.exports = [ + { + plugins: { + markdown: require("eslint-plugin-markdown"), + html: require("eslint-plugin-html") + }, + rules: { semi: "error" } + }, + { + files: ["**/*.md"], + processor: "markdown/markdown" + }, + { + files: ["**/*.html"], + processor: "html/legacy", // this processor returns strings rather than '{ text, filename }' + rules: { + semi: "off", + "no-console": "error" + } + }, + { + files: ["**/*.html/*.js"], + rules: { + semi: "error", + "no-console": "off" + } + } + + ];` + } + }); + + await teardown.prepare(); + eslint = new FlatESLint({ cwd: teardown.getPath(), overrideConfig: { files: ["**/*.html"] } }); + const results = await eslint.lintFiles(["test.md"]); + + assert.strictEqual(results.length, 1); + assert.strictEqual(results[0].messages.length, 3); + assert.strictEqual(results[0].messages[0].ruleId, "semi"); + assert.strictEqual(results[0].messages[0].line, 2); + assert.strictEqual(results[0].messages[1].ruleId, "no-console"); + assert.strictEqual(results[0].messages[1].line, 7); + assert.strictEqual(results[0].messages[2].ruleId, "no-console"); + assert.strictEqual(results[0].messages[2].line, 10); + assert.strictEqual(results[0].suppressedMessages.length, 0); + }); + + it("should throw an error if invalid processor was specified.", async () => { + const teardown = createCustomTeardown({ + cwd: path.join(root, id), + files: { + ...commonFiles, + "eslint.config.js": `module.exports = [ + { + plugins: { + markdown: require("eslint-plugin-markdown"), + html: require("eslint-plugin-html") + } + }, + { + files: ["**/*.md"], + processor: "markdown/unknown" + } + + ];` + } + }); + + await teardown.prepare(); + eslint = new FlatESLint({ cwd: teardown.getPath() }); + + await assert.rejects(async () => { + await eslint.lintFiles(["test.md"]); + }, /Key "processor": Could not find "unknown" in plugin "markdown"/u); + }); + + }); + + describe("glob pattern '[ab].js'", () => { + const root = getFixturePath("cli-engine/unmatched-glob"); + + let cleanup; + + beforeEach(() => { + cleanup = () => { }; + }); + + afterEach(() => cleanup()); + + it("should match '[ab].js' if existed.", async () => { + + const teardown = createCustomTeardown({ + cwd: root, + files: { + "a.js": "", + "b.js": "", + "ab.js": "", + "[ab].js": "", + "eslint.config.js": "module.exports = [];" + } + }); + + await teardown.prepare(); + cleanup = teardown.cleanup; + + eslint = new FlatESLint({ cwd: teardown.getPath() }); + const results = await eslint.lintFiles(["[ab].js"]); + const filenames = results.map(r => path.basename(r.filePath)); + + assert.deepStrictEqual(filenames, ["[ab].js"]); + }); + + it("should match 'a.js' and 'b.js' if '[ab].js' didn't existed.", async () => { + const teardown = createCustomTeardown({ + cwd: root, + files: { + "a.js": "", + "b.js": "", + "ab.js": "", + "eslint.config.js": "module.exports = [];" + } + }); + + await teardown.prepare(); + cleanup = teardown.cleanup; + eslint = new FlatESLint({ cwd: teardown.getPath() }); + const results = await eslint.lintFiles(["[ab].js"]); + const filenames = results.map(r => path.basename(r.filePath)); + + assert.deepStrictEqual(filenames, ["a.js", "b.js"]); + }); + }); + + describe("with 'noInlineConfig' setting", () => { + const root = getFixturePath("cli-engine/noInlineConfig"); + + let cleanup; + + beforeEach(() => { + cleanup = () => { }; + }); + + afterEach(() => cleanup()); + + it("should warn directive comments if 'noInlineConfig' was given.", async () => { + const teardown = createCustomTeardown({ + cwd: root, + files: { + "test.js": "/* globals foo */", + "eslint.config.js": "module.exports = [{ linterOptions: { noInlineConfig: true } }];" + } + }); + + await teardown.prepare(); + cleanup = teardown.cleanup; + eslint = new FlatESLint({ cwd: teardown.getPath() }); + + const results = await eslint.lintFiles(["test.js"]); + const messages = results[0].messages; + + assert.strictEqual(messages.length, 1); + assert.strictEqual(messages[0].message, "'/*globals*/' has no effect because you have 'noInlineConfig' setting in your config."); + }); + + }); + + describe("with 'reportUnusedDisableDirectives' setting", () => { + const root = getFixturePath("cli-engine/reportUnusedDisableDirectives"); + + let cleanup; + + beforeEach(() => { + cleanup = () => { }; + }); + + afterEach(() => cleanup()); + + it("should warn unused 'eslint-disable' comments if 'reportUnusedDisableDirectives' was given.", async () => { + const teardown = createCustomTeardown({ + cwd: root, + files: { + "test.js": "/* eslint-disable eqeqeq */", + "eslint.config.js": "module.exports = { linterOptions: { reportUnusedDisableDirectives: true } }" + } + }); + + + await teardown.prepare(); + cleanup = teardown.cleanup; + eslint = new FlatESLint({ cwd: teardown.getPath() }); + + const results = await eslint.lintFiles(["test.js"]); + const messages = results[0].messages; + + assert.strictEqual(messages.length, 1); + assert.strictEqual(messages[0].severity, 1); + assert.strictEqual(messages[0].message, "Unused eslint-disable directive (no problems were reported from 'eqeqeq')."); + assert.strictEqual(results[0].suppressedMessages.length, 0); + }); + + describe("the runtime option overrides config files.", () => { + it("should not warn unused 'eslint-disable' comments if 'reportUnusedDisableDirectives=off' was given in runtime.", async () => { + const teardown = createCustomTeardown({ + cwd: root, + files: { + "test.js": "/* eslint-disable eqeqeq */", + ".eslintrc.yml": "reportUnusedDisableDirectives: true" + } + }); + + await teardown.prepare(); + cleanup = teardown.cleanup; + + eslint = new FlatESLint({ + cwd: teardown.getPath(), + reportUnusedDisableDirectives: "off" + }); + + const results = await eslint.lintFiles(["test.js"]); + const messages = results[0].messages; + + assert.strictEqual(messages.length, 0); + }); + + it("should warn unused 'eslint-disable' comments as error if 'reportUnusedDisableDirectives=error' was given in runtime.", async () => { + const teardown = createCustomTeardown({ + cwd: root, + files: { + "test.js": "/* eslint-disable eqeqeq */", + ".eslintrc.yml": "reportUnusedDisableDirectives: true" + } + }); + + await teardown.prepare(); + cleanup = teardown.cleanup; + + eslint = new FlatESLint({ + cwd: teardown.getPath(), + reportUnusedDisableDirectives: "error" + }); + + const results = await eslint.lintFiles(["test.js"]); + const messages = results[0].messages; + + assert.strictEqual(messages.length, 1); + assert.strictEqual(messages[0].severity, 2); + assert.strictEqual(messages[0].message, "Unused eslint-disable directive (no problems were reported from 'eqeqeq')."); + assert.strictEqual(results[0].suppressedMessages.length, 0); + }); + }); + }); + + it("should throw if non-boolean value is given to 'options.warnIgnored' option", async () => { + eslint = new FlatESLint(); + await assert.rejects(() => eslint.lintFiles(777), /'patterns' must be a non-empty string or an array of non-empty strings/u); + await assert.rejects(() => eslint.lintFiles([null]), /'patterns' must be a non-empty string or an array of non-empty strings/u); + }); + }); + + describe("Fix Types", () => { + + let eslint; + + it("should throw an error when an invalid fix type is specified", () => { + assert.throws(() => { + eslint = new FlatESLint({ + cwd: path.join(fixtureDir, ".."), + overrideConfigFile: true, + fix: true, + fixTypes: ["layou"] + }); + }, /'fixTypes' must be an array of any of "directive", "problem", "suggestion", and "layout"\./iu); + }); + + it("should not fix any rules when fixTypes is used without fix", async () => { + eslint = new FlatESLint({ + cwd: path.join(fixtureDir, ".."), + overrideConfigFile: true, + fix: false, + fixTypes: ["layout"] + }); + const inputPath = getFixturePath("fix-types/fix-only-semi.js"); + const results = await eslint.lintFiles([inputPath]); + + assert.strictEqual(results[0].output, void 0); + }); + + it("should not fix non-style rules when fixTypes has only 'layout'", async () => { + eslint = new FlatESLint({ + cwd: path.join(fixtureDir, ".."), + overrideConfigFile: true, + fix: true, + fixTypes: ["layout"] + }); + const inputPath = getFixturePath("fix-types/fix-only-semi.js"); + const outputPath = getFixturePath("fix-types/fix-only-semi.expected.js"); + const results = await eslint.lintFiles([inputPath]); + const expectedOutput = fs.readFileSync(outputPath, "utf8"); + + assert.strictEqual(results[0].output, expectedOutput); + }); + + it("should not fix style or problem rules when fixTypes has only 'suggestion'", async () => { + eslint = new FlatESLint({ + cwd: path.join(fixtureDir, ".."), + overrideConfigFile: true, + fix: true, + fixTypes: ["suggestion"] + }); + const inputPath = getFixturePath("fix-types/fix-only-prefer-arrow-callback.js"); + const outputPath = getFixturePath("fix-types/fix-only-prefer-arrow-callback.expected.js"); + const results = await eslint.lintFiles([inputPath]); + const expectedOutput = fs.readFileSync(outputPath, "utf8"); + + assert.strictEqual(results[0].output, expectedOutput); + }); + + it("should fix both style and problem rules when fixTypes has 'suggestion' and 'layout'", async () => { + eslint = new FlatESLint({ + cwd: path.join(fixtureDir, ".."), + overrideConfigFile: true, + fix: true, + fixTypes: ["suggestion", "layout"] + }); + const inputPath = getFixturePath("fix-types/fix-both-semi-and-prefer-arrow-callback.js"); + const outputPath = getFixturePath("fix-types/fix-both-semi-and-prefer-arrow-callback.expected.js"); + const results = await eslint.lintFiles([inputPath]); + const expectedOutput = fs.readFileSync(outputPath, "utf8"); + + assert.strictEqual(results[0].output, expectedOutput); + }); + + }); + + describe("isPathIgnored", () => { + it("should check if the given path is ignored", async () => { + const engine = new FlatESLint({ + ignorePath: getFixturePath(".eslintignore2"), + cwd: getFixturePath() + }); + + assert(await engine.isPathIgnored("undef.js")); + assert(!await engine.isPathIgnored("passing.js")); + }); + + it("should return false if ignoring is disabled", async () => { + const engine = new FlatESLint({ + ignore: false, + ignorePath: getFixturePath(".eslintignore2"), + cwd: getFixturePath() + }); + + assert(!await engine.isPathIgnored("undef.js")); + }); + + // https://github.com/eslint/eslint/issues/5547 + it("should return true for default ignores even if ignoring is disabled", async () => { + const engine = new FlatESLint({ + ignore: false, + cwd: getFixturePath("cli-engine") + }); + + assert(await engine.isPathIgnored("node_modules/foo.js")); + }); + + describe("about the default ignore patterns", () => { + it("should always apply default ignore patterns if ignore option is true", async () => { + const cwd = getFixturePath("ignored-paths"); + const engine = new FlatESLint({ cwd }); + + assert(await engine.isPathIgnored(getFixturePath("ignored-paths", "node_modules/package/file.js"))); + assert(await engine.isPathIgnored(getFixturePath("ignored-paths", "subdir/node_modules/package/file.js"))); + }); + + it("should still apply default ignore patterns if ignore option is is false", async () => { + const cwd = getFixturePath("ignored-paths"); + const engine = new FlatESLint({ ignore: false, cwd }); + + assert(await engine.isPathIgnored(getFixturePath("ignored-paths", "node_modules/package/file.js"))); + assert(await engine.isPathIgnored(getFixturePath("ignored-paths", "subdir/node_modules/package/file.js"))); + }); + + it("should allow subfolders of defaultPatterns to be unignored by ignorePattern", async () => { + const cwd = getFixturePath("ignored-paths"); + const engine = new FlatESLint({ + cwd, + overrideConfigFile: true, + ignorePatterns: "!/node_modules/package" + }); + + const result = await engine.isPathIgnored(getFixturePath("ignored-paths", "node_modules", "package", "file.js")); + + assert(!result, "File should not be ignored"); + }); + + it("should allow subfolders of defaultPatterns to be unignored by ignorePath", async () => { + const cwd = getFixturePath("ignored-paths"); + const engine = new FlatESLint({ + cwd, + overrideConfigFile: true, + ignorePath: getFixturePath("ignored-paths", ".eslintignoreWithUnignoredDefaults") + }); + + assert(!await engine.isPathIgnored(getFixturePath("ignored-paths", "node_modules", "package", "file.js"))); + }); + + it("should ignore .git directory", async () => { + const cwd = getFixturePath("ignored-paths"); + const engine = new FlatESLint({ cwd }); + + assert(await engine.isPathIgnored(getFixturePath("ignored-paths", ".git/bar"))); + }); + + it("should still ignore .git directory when ignore option disabled", async () => { + const cwd = getFixturePath("ignored-paths"); + const engine = new FlatESLint({ ignore: false, cwd }); + + assert(await engine.isPathIgnored(getFixturePath("ignored-paths", ".git/bar"))); + }); + + it("should not ignore absolute paths containing '..'", async () => { + const cwd = getFixturePath("ignored-paths"); + const engine = new FlatESLint({ cwd }); + + assert(!await engine.isPathIgnored(`${getFixturePath("ignored-paths", "foo")}/../unignored.js`)); + }); + + it("should ignore /node_modules/ relative to .eslintignore when loaded", async () => { + const cwd = getFixturePath("ignored-paths"); + const engine = new FlatESLint({ ignorePath: getFixturePath("ignored-paths", ".eslintignore"), cwd }); + + assert(await engine.isPathIgnored(getFixturePath("ignored-paths", "node_modules", "existing.js"))); + assert(await engine.isPathIgnored(getFixturePath("ignored-paths", "foo", "node_modules", "existing.js"))); + }); + + it("should ignore /node_modules/ relative to cwd without an .eslintignore", async () => { + const cwd = getFixturePath("ignored-paths", "no-ignore-file"); + const engine = new FlatESLint({ cwd }); + + assert(await engine.isPathIgnored(getFixturePath("ignored-paths", "no-ignore-file", "node_modules", "existing.js"))); + assert(await engine.isPathIgnored(getFixturePath("ignored-paths", "no-ignore-file", "foo", "node_modules", "existing.js"))); + }); + }); + + describe("with no .eslintignore file", () => { + it("should not travel to parent directories to find .eslintignore when it's missing and cwd is provided", async () => { + const cwd = getFixturePath("ignored-paths", "configurations"); + const engine = new FlatESLint({ cwd }); + + // a .eslintignore in parent directories includes `*.js`, but don't load it. + assert(!await engine.isPathIgnored("foo.js")); + assert(await engine.isPathIgnored("node_modules/foo.js")); + }); + + it("should return false for files outside of the cwd (with no ignore file provided)", async () => { + + // Default ignore patterns should not inadvertently ignore files in parent directories + const engine = new FlatESLint({ cwd: getFixturePath("ignored-paths", "no-ignore-file") }); + + assert(!await engine.isPathIgnored(getFixturePath("ignored-paths", "undef.js"))); + }); + }); + + describe("with .eslintignore file or package.json file", () => { + it("should load .eslintignore from cwd when explicitly passed", async () => { + const cwd = getFixturePath("ignored-paths"); + const engine = new FlatESLint({ cwd }); + + // `${cwd}/.eslintignore` includes `sampleignorepattern`. + assert(await engine.isPathIgnored("sampleignorepattern")); + }); + + }); + + describe("with ignorePatterns option", () => { + it("should accept a string for options.ignorePatterns", async () => { + const cwd = getFixturePath("ignored-paths", "ignore-pattern"); + const engine = new FlatESLint({ + ignorePatterns: ["ignore-me.txt"], + cwd + }); + + assert(await engine.isPathIgnored("ignore-me.txt")); + }); + + it("should accept an array for options.ignorePattern", async () => { + const engine = new FlatESLint({ + ignorePatterns: ["a.js", "b.js"], + overrideConfigFile: true + }); + + assert(await engine.isPathIgnored("a.js"), "a.js should be ignored"); + assert(await engine.isPathIgnored("b.js"), "b.js should be ignored"); + assert(!await engine.isPathIgnored("c.js"), "c.js should not be ignored"); + }); + + it("should return true for files which match an ignorePattern even if they do not exist on the filesystem", async () => { + const cwd = getFixturePath("ignored-paths"); + const engine = new FlatESLint({ + ignorePatterns: ["not-a-file"], + cwd + }); + + assert(await engine.isPathIgnored(getFixturePath("ignored-paths", "not-a-file"))); + }); + + it("should return true for file matching an ignore pattern exactly", async () => { + const cwd = getFixturePath("ignored-paths"); + const engine = new FlatESLint({ ignorePatterns: ["undef.js"], cwd }); + + assert(await engine.isPathIgnored(getFixturePath("ignored-paths", "undef.js"))); + }); + + it("should return false for file in subfolder of cwd matching an ignore pattern with leading '/'", async () => { + const cwd = getFixturePath("ignored-paths"); + const filePath = getFixturePath("ignored-paths", "subdir", "undef.js"); + const engine = new FlatESLint({ + ignorePatterns: ["/undef.js"], + overrideConfigFile: true, + cwd + }); + + assert(!await engine.isPathIgnored(filePath)); + }); + + it("should return true for file matching a child of an ignore pattern", async () => { + const cwd = getFixturePath("ignored-paths"); + const engine = new FlatESLint({ ignorePatterns: ["ignore-pattern"], cwd }); + + assert(await engine.isPathIgnored(getFixturePath("ignored-paths", "ignore-pattern", "ignore-me.txt"))); + }); + + it("should return true for file matching a grandchild of an ignore pattern", async () => { + const cwd = getFixturePath("ignored-paths"); + const engine = new FlatESLint({ ignorePatterns: ["ignore-pattern"], cwd }); + + assert(await engine.isPathIgnored(getFixturePath("ignored-paths", "ignore-pattern", "subdir", "ignore-me.txt"))); + }); + + it("should return false for file not matching any ignore pattern", async () => { + const cwd = getFixturePath("ignored-paths"); + const engine = new FlatESLint({ ignorePatterns: ["failing.js"], cwd }); + + assert(!await engine.isPathIgnored(getFixturePath("ignored-paths", "unignored.js"))); + }); + + it("two globstar '**' ignore pattern should ignore files in nested directories", async () => { + const cwd = getFixturePath("ignored-paths"); + const engine = new FlatESLint({ + overrideConfigFile: true, + ignorePatterns: ["**/*.js"], + cwd + }); + + assert(await engine.isPathIgnored(getFixturePath("ignored-paths", "foo.js")), "foo.js should be ignored"); + assert(await engine.isPathIgnored(getFixturePath("ignored-paths", "foo/bar.js")), "foo/bar.js should be ignored"); + assert(await engine.isPathIgnored(getFixturePath("ignored-paths", "foo/bar/baz.js")), "foo/bar/baz.js"); + assert(!await engine.isPathIgnored(getFixturePath("ignored-paths", "foo.cjs")), "foo.cjs should not be ignored"); + assert(!await engine.isPathIgnored(getFixturePath("ignored-paths", "foo/bar.cjs")), "foo/bar.cjs should not be ignored"); + assert(!await engine.isPathIgnored(getFixturePath("ignored-paths", "foo/bar/baz.cjs")), "foo/bar/baz.cjs should not be ignored"); + }); + }); + + describe("with ignorePath option", () => { + it("initialization with ignorePath should work when cwd is a parent directory", async () => { + const cwd = getFixturePath("ignored-paths"); + const ignorePath = getFixturePath("ignored-paths", "custom-name", "ignore-file"); + const engine = new FlatESLint({ ignorePath, cwd }); + + assert(await engine.isPathIgnored("custom-name/foo.js")); + }); + + it("initialization with ignorePath should work when the file is in the cwd", async () => { + const cwd = getFixturePath("ignored-paths", "custom-name"); + const ignorePath = getFixturePath("ignored-paths", "custom-name", "ignore-file"); + const engine = new FlatESLint({ ignorePath, cwd }); + + assert(await engine.isPathIgnored("foo.js")); + }); + + it("initialization with ignorePath should work when cwd is a subdirectory", async () => { + const cwd = getFixturePath("ignored-paths", "custom-name", "subdirectory"); + const ignorePath = getFixturePath("ignored-paths", "custom-name", "ignore-file"); + const engine = new FlatESLint({ ignorePath, cwd }); + + assert(await engine.isPathIgnored("../custom-name/foo.js")); + }); + + it("missing ignore file should throw error", done => { + const cwd = getFixturePath("ignored-paths"); + const ignorePath = getFixturePath("ignored-paths", "not-a-directory", ".foobaz"); + const engine = new FlatESLint({ ignorePath, cwd }); + + engine.isPathIgnored("foo.js").then(() => { + assert.fail("missing file should not succeed"); + }).catch(error => { + assert(/Cannot read ignore file/u.test(error)); + done(); + }); + }); + + it("should return false for files outside of ignorePath's directory", async () => { + const cwd = getFixturePath("ignored-paths"); + const ignorePath = getFixturePath("ignored-paths", "custom-name", "ignore-file"); + const engine = new FlatESLint({ ignorePath, cwd }); + + assert(!await engine.isPathIgnored(getFixturePath("ignored-paths", "undef.js"))); + }); + + it("should resolve relative paths from CWD", async () => { + const cwd = getFixturePath("ignored-paths", "subdir"); + + // /undef.js in ignore file + const ignorePath = getFixturePath("ignored-paths", ".eslintignoreForDifferentCwd"); + const engine = new FlatESLint({ ignorePath, cwd, overrideConfigFile: true }); + + assert(await engine.isPathIgnored(getFixturePath("ignored-paths", "subdir/undef.js")), "subdir/undef.js should be ignored"); + assert(!await engine.isPathIgnored(getFixturePath("ignored-paths", "subdir/subdir/undef.js")), "subdir/subdir/undef.js should not be ignored"); + }); + + it("should resolve relative paths from CWD when it's in a child directory", async () => { + const cwd = getFixturePath("ignored-paths"); + const ignorePath = getFixturePath("ignored-paths", "subdir/.eslintignoreInChildDir"); + const engine = new FlatESLint({ ignorePath, cwd }); + + assert(!await engine.isPathIgnored(getFixturePath("ignored-paths", "subdir/undef.js"))); + assert(await engine.isPathIgnored(getFixturePath("ignored-paths", "undef.js"))); + assert(await engine.isPathIgnored(getFixturePath("ignored-paths", "foo.js"))); + assert(await engine.isPathIgnored(getFixturePath("ignored-paths", "subdir/foo.js"))); + + assert(await engine.isPathIgnored(getFixturePath("ignored-paths", "node_modules/bar.js"))); + }); + + it("should resolve relative paths from CWD when it contains negated globs", async () => { + const cwd = getFixturePath("ignored-paths"); + const ignorePath = getFixturePath("ignored-paths", "subdir/.eslintignoreInChildDir"); + const engine = new FlatESLint({ + ignorePath, + cwd, + overrideConfig: { + files: ["**/*.txt"] + } + }); + + assert(await engine.isPathIgnored("subdir/blah.txt"), "subdir/blah.txt should be ignore"); + assert(await engine.isPathIgnored("blah.txt"), "blah.txt should be ignored"); + assert(await engine.isPathIgnored("subdir/bar.txt"), "subdir/bar.txt should be ignored"); + assert(!await engine.isPathIgnored("bar.txt"), "bar.txt should not be ignored"); + assert(!await engine.isPathIgnored("baz.txt"), "baz.txt should not be ignored"); + assert(!await engine.isPathIgnored("subdir/baz.txt"), "subdir/baz.txt should not be ignored"); + }); + + it("should resolve default ignore patterns from the CWD even when the ignorePath is in a subdirectory", async () => { + const cwd = getFixturePath("ignored-paths"); + const ignorePath = getFixturePath("ignored-paths", "subdir/.eslintignoreInChildDir"); + const engine = new FlatESLint({ ignorePath, cwd }); + + assert(await engine.isPathIgnored("node_modules/blah.js")); + }); + + it("should resolve default ignore patterns from the CWD even when the ignorePath is in a parent directory", async () => { + const cwd = getFixturePath("ignored-paths", "subdir"); + const ignorePath = getFixturePath("ignored-paths", ".eslintignoreForDifferentCwd"); + const engine = new FlatESLint({ ignorePath, cwd }); + + assert(await engine.isPathIgnored("node_modules/blah.js")); + }); + + it("should handle .eslintignore which contains CRLF correctly.", async () => { + const ignoreFileContent = fs.readFileSync(getFixturePath("ignored-paths", "crlf/.eslintignore"), "utf8"); + + assert(ignoreFileContent.includes("\r"), "crlf/.eslintignore should contains CR.", "Ignore file must have CRLF for test to pass."); + const cwd = getFixturePath("ignored-paths"); + const ignorePath = getFixturePath("ignored-paths", "crlf/.eslintignore"); + const engine = new FlatESLint({ ignorePath, cwd }); + + assert(await engine.isPathIgnored(getFixturePath("ignored-paths", "crlf/hide1/a.js"))); + assert(await engine.isPathIgnored(getFixturePath("ignored-paths", "crlf/hide2/a.js"))); + assert(!await engine.isPathIgnored(getFixturePath("ignored-paths", "crlf/hide3/a.js"))); + }); + + it("should ignore a non-negated pattern", async () => { + const cwd = getFixturePath("ignored-paths"); + const ignorePath = getFixturePath("ignored-paths", ".eslintignoreWithNegation"); + const engine = new FlatESLint({ ignorePath, cwd }); + + assert(await engine.isPathIgnored(getFixturePath("ignored-paths", "negation", "ignore.js"))); + }); + + it("should not ignore a negated pattern", async () => { + const cwd = getFixturePath("ignored-paths"); + const ignorePath = getFixturePath("ignored-paths", ".eslintignoreWithNegation"); + const engine = new FlatESLint({ ignorePath, cwd }); + + assert(!await engine.isPathIgnored(getFixturePath("ignored-paths", "negation", "unignore.js"))); + }); + }); + + describe("with ignorePath option and ignorePatterns option", () => { + it("should return false for ignored file when unignored with ignore pattern", async () => { + const cwd = getFixturePath("ignored-paths"); + const engine = new FlatESLint({ + ignorePath: getFixturePath("ignored-paths", ".eslintignoreForNegationTest"), + ignorePatterns: ["!undef.js"], + cwd + }); + + assert(!await engine.isPathIgnored(getFixturePath("ignored-paths", "undef.js"))); + }); + }); + + it("should throw if non-string value is given to 'filePath' parameter", async () => { + const eslint = new FlatESLint(); + + await assert.rejects(() => eslint.isPathIgnored(null), /'filePath' must be a non-empty string/u); + }); + }); + + describe("loadFormatter()", () => { + it("should return a formatter object when a bundled formatter is requested", async () => { + const engine = new FlatESLint(); + const formatter = await engine.loadFormatter("compact"); + + assert.strictEqual(typeof formatter, "object"); + assert.strictEqual(typeof formatter.format, "function"); + }); + + it("should return a formatter object when no argument is passed", async () => { + const engine = new FlatESLint(); + const formatter = await engine.loadFormatter(); + + assert.strictEqual(typeof formatter, "object"); + assert.strictEqual(typeof formatter.format, "function"); + }); + + it("should return a formatter object when a custom formatter is requested", async () => { + const engine = new FlatESLint(); + const formatter = await engine.loadFormatter(getFixturePath("formatters", "simple.js")); + + assert.strictEqual(typeof formatter, "object"); + assert.strictEqual(typeof formatter.format, "function"); + }); + + it("should return a formatter object when a custom formatter is requested, also if the path has backslashes", async () => { + const engine = new FlatESLint({ + cwd: path.join(fixtureDir, "..") + }); + const formatter = await engine.loadFormatter(".\\fixtures\\formatters\\simple.js"); + + assert.strictEqual(typeof formatter, "object"); + assert.strictEqual(typeof formatter.format, "function"); + }); + + it("should return a formatter object when a formatter prefixed with eslint-formatter is requested", async () => { + const engine = new FlatESLint({ + cwd: getFixturePath("cli-engine") + }); + const formatter = await engine.loadFormatter("bar"); + + assert.strictEqual(typeof formatter, "object"); + assert.strictEqual(typeof formatter.format, "function"); + }); + + it("should return a formatter object when a formatter is requested, also when the eslint-formatter prefix is included in the format argument", async () => { + const engine = new FlatESLint({ + cwd: getFixturePath("cli-engine") + }); + const formatter = await engine.loadFormatter("eslint-formatter-bar"); + + assert.strictEqual(typeof formatter, "object"); + assert.strictEqual(typeof formatter.format, "function"); + }); + + it("should return a formatter object when a formatter is requested within a scoped npm package", async () => { + const engine = new FlatESLint({ + cwd: getFixturePath("cli-engine") + }); + const formatter = await engine.loadFormatter("@somenamespace/foo"); + + assert.strictEqual(typeof formatter, "object"); + assert.strictEqual(typeof formatter.format, "function"); + }); + + it("should return a formatter object when a formatter is requested within a scoped npm package, also when the eslint-formatter prefix is included in the format argument", async () => { + const engine = new FlatESLint({ + cwd: getFixturePath("cli-engine") + }); + const formatter = await engine.loadFormatter("@somenamespace/eslint-formatter-foo"); + + assert.strictEqual(typeof formatter, "object"); + assert.strictEqual(typeof formatter.format, "function"); + }); + + it("should throw if a custom formatter doesn't exist", async () => { + const engine = new FlatESLint(); + const formatterPath = getFixturePath("formatters", "doesntexist.js"); + const fullFormatterPath = path.resolve(formatterPath); + + await assert.rejects(async () => { + await engine.loadFormatter(formatterPath); + }, new RegExp(escapeStringRegExp(`There was a problem loading formatter: ${fullFormatterPath}\nError: Cannot find module '${fullFormatterPath}'`), "u")); + }); + + it("should throw if a built-in formatter doesn't exist", async () => { + const engine = new FlatESLint(); + const fullFormatterPath = path.resolve(__dirname, "../../../lib/cli-engine/formatters/special"); + + await assert.rejects(async () => { + await engine.loadFormatter("special"); + }, new RegExp(escapeStringRegExp(`There was a problem loading formatter: ${fullFormatterPath}.js\nError: Cannot find module '${fullFormatterPath}.js'`), "u")); + }); + + it("should throw if the required formatter exists but has an error", async () => { + const engine = new FlatESLint(); + const formatterPath = getFixturePath("formatters", "broken.js"); + + await assert.rejects(async () => { + await engine.loadFormatter(formatterPath); + + // for some reason, the error here contains multiple "there was a problem loading formatter" lines, so omitting + }, new RegExp(escapeStringRegExp("Error: Cannot find module 'this-module-does-not-exist'"), "u")); + }); + + it("should throw if a non-string formatter name is passed", async () => { + const engine = new FlatESLint(); + + await assert.rejects(async () => { + await engine.loadFormatter(5); + }, /'name' must be a string/u); + }); + }); + + describe("getErrorResults()", () => { + + it("should report 5 error messages when looking for errors only", async () => { + process.chdir(originalDir); + const engine = new FlatESLint({ + overrideConfigFile: true, + overrideConfig: { + rules: { + quotes: "error", + "no-var": "error", + "eol-last": "error", + "no-unused-vars": "error" + } + } + }); + const results = await engine.lintText("var foo = 'bar';"); + const errorResults = FlatESLint.getErrorResults(results); + + assert.strictEqual(errorResults[0].messages.length, 4, "messages.length is wrong"); + assert.strictEqual(errorResults[0].errorCount, 4, "errorCount is wrong"); + assert.strictEqual(errorResults[0].fixableErrorCount, 3, "fixableErrorCount is wrong"); + assert.strictEqual(errorResults[0].fixableWarningCount, 0, "fixableWarningCount is wrong"); + assert.strictEqual(errorResults[0].messages[0].ruleId, "no-var"); + assert.strictEqual(errorResults[0].messages[0].severity, 2); + assert.strictEqual(errorResults[0].messages[1].ruleId, "no-unused-vars"); + assert.strictEqual(errorResults[0].messages[1].severity, 2); + assert.strictEqual(errorResults[0].messages[2].ruleId, "quotes"); + assert.strictEqual(errorResults[0].messages[2].severity, 2); + assert.strictEqual(errorResults[0].messages[3].ruleId, "eol-last"); + assert.strictEqual(errorResults[0].messages[3].severity, 2); + }); + + it("should not mutate passed report parameter", async () => { + process.chdir(originalDir); + const engine = new FlatESLint({ + overrideConfigFile: true, + overrideConfig: { + rules: { quotes: [1, "double"] } + } + }); + const results = await engine.lintText("var foo = 'bar';"); + const reportResultsLength = results[0].messages.length; + + FlatESLint.getErrorResults(results); + + assert.strictEqual(results[0].messages.length, reportResultsLength); + }); + + it("should report a warningCount of 0 when looking for errors only", async () => { + const engine = new FlatESLint({ + overrideConfigFile: true, + overrideConfig: { + rules: { + strict: ["error", "global"], + quotes: "error", + "no-var": "error", + "eol-last": "error", + "no-unused-vars": "error" + } + } + }); + const lintResults = await engine.lintText("var foo = 'bar';"); + const errorResults = FlatESLint.getErrorResults(lintResults); + + assert.strictEqual(errorResults[0].warningCount, 0); + assert.strictEqual(errorResults[0].fixableWarningCount, 0); + }); + + it("should return 0 error or warning messages even when the file has warnings", async () => { + const engine = new FlatESLint({ + overrideConfigFile: true, + ignorePath: path.join(fixtureDir, ".eslintignore"), + cwd: path.join(fixtureDir, "..") + }); + const options = { + filePath: "fixtures/passing.js", + warnIgnored: true + }; + const results = await engine.lintText("var bar = foo;", options); + const errorReport = FlatESLint.getErrorResults(results); + + assert.strictEqual(errorReport.length, 0); + assert.strictEqual(results.length, 1); + assert.strictEqual(results[0].errorCount, 0); + assert.strictEqual(results[0].warningCount, 1); + }); + + it("should return source code of file in the `source` property", async () => { + process.chdir(originalDir); + const engine = new FlatESLint({ + overrideConfigFile: true, + overrideConfig: { + rules: { quotes: [2, "double"] } + } + }); + const results = await engine.lintText("var foo = 'bar';"); + const errorResults = FlatESLint.getErrorResults(results); + + assert.strictEqual(errorResults[0].messages.length, 1); + assert.strictEqual(errorResults[0].source, "var foo = 'bar';"); + }); + + it("should contain `output` property after fixes", async () => { + process.chdir(originalDir); + const engine = new FlatESLint({ + overrideConfigFile: true, + fix: true, + overrideConfig: { + rules: { + semi: 2, + "no-console": 2 + } + } + }); + const results = await engine.lintText("console.log('foo')"); + const errorResults = FlatESLint.getErrorResults(results); + + assert.strictEqual(errorResults[0].messages.length, 1); + assert.strictEqual(errorResults[0].output, "console.log('foo');"); + }); + }); + + describe("getRulesMetaForResults()", () => { + + it("should throw an error when results were not created from this instance", async () => { + const engine = new FlatESLint({ + overrideConfigFile: true + }); + + assert.throws(() => { + engine.getRulesMetaForResults([ + { + filePath: "path/to/file.js", + messages: [ + { + ruleId: "curly", + severity: 2, + message: "Expected { after 'if' condition.", + line: 2, + column: 1, + nodeType: "IfStatement" + }, + { + ruleId: "no-process-exit", + severity: 2, + message: "Don't use process.exit(); throw an error instead.", + line: 3, + column: 1, + nodeType: "CallExpression" + } + ], + suppressedMessages: [], + errorCount: 2, + warningCount: 0, + fatalErrorCount: 0, + fixableErrorCount: 0, + fixableWarningCount: 0, + source: + "var err = doStuff();\nif (err) console.log('failed tests: ' + err);\nprocess.exit(1);\n" + } + ]); + }, /Results object was not created from this ESLint instance/u); + }); + + it("should return empty object when there are no linting errors", async () => { + const engine = new FlatESLint({ + overrideConfigFile: true + }); + + const rulesMeta = engine.getRulesMetaForResults([]); + + assert.strictEqual(Object.keys(rulesMeta).length, 0); + }); + + it("should return one rule meta when there is a linting error", async () => { + const engine = new FlatESLint({ + overrideConfigFile: true, + overrideConfig: { + rules: { + semi: 2 + } + } + }); + + const results = await engine.lintText("a", { filePath: "foo.js" }); + const rulesMeta = engine.getRulesMetaForResults(results); + + assert.strictEqual(rulesMeta.semi, coreRules.get("semi").meta); + }); + + it("should return multiple rule meta when there are multiple linting errors", async () => { + const engine = new FlatESLint({ + overrideConfigFile: true, + overrideConfig: { + rules: { + semi: 2, + quotes: [2, "double"] + } + } + }); + + const results = await engine.lintText("'a'"); + const rulesMeta = engine.getRulesMetaForResults(results); + + assert.strictEqual(rulesMeta.semi, coreRules.get("semi").meta); + assert.strictEqual(rulesMeta.quotes, coreRules.get("quotes").meta); + }); + + it("should return multiple rule meta when there are multiple linting errors from a plugin", async () => { + const nodePlugin = require("eslint-plugin-n"); + const engine = new FlatESLint({ + overrideConfigFile: true, + overrideConfig: { + plugins: { + n: nodePlugin + }, + rules: { + "n/no-new-require": 2, + semi: 2, + quotes: [2, "double"] + } + } + }); + + const results = await engine.lintText("new require('hi')"); + const rulesMeta = engine.getRulesMetaForResults(results); + + assert.strictEqual(rulesMeta.semi, coreRules.get("semi").meta); + assert.strictEqual(rulesMeta.quotes, coreRules.get("quotes").meta); + assert.strictEqual( + rulesMeta["n/no-new-require"], + nodePlugin.rules["no-new-require"].meta + ); + }); + }); + + describe("outputFixes()", () => { + afterEach(() => { + sinon.verifyAndRestore(); + }); + + it("should call fs.writeFile() for each result with output", async () => { + const fakeFS = { + writeFile: sinon.spy(() => Promise.resolve()) + }; + const spy = fakeFS.writeFile; + const { FlatESLint: localESLint } = proxyquire("../../../lib/eslint/flat-eslint", { + fs: { + promises: fakeFS + } + }); + + const results = [ + { + filePath: path.resolve("foo.js"), + output: "bar" + }, + { + filePath: path.resolve("bar.js"), + output: "baz" + } + ]; + + await localESLint.outputFixes(results); + + assert.strictEqual(spy.callCount, 2); + assert(spy.firstCall.calledWithExactly(path.resolve("foo.js"), "bar"), "First call was incorrect."); + assert(spy.secondCall.calledWithExactly(path.resolve("bar.js"), "baz"), "Second call was incorrect."); + }); + + it("should call fs.writeFile() for each result with output and not at all for a result without output", async () => { + const fakeFS = { + writeFile: sinon.spy(() => Promise.resolve()) + }; + const spy = fakeFS.writeFile; + const { FlatESLint: localESLint } = proxyquire("../../../lib/eslint/flat-eslint", { + fs: { + promises: fakeFS + } + }); + const results = [ + { + filePath: path.resolve("foo.js"), + output: "bar" + }, + { + filePath: path.resolve("abc.js") + }, + { + filePath: path.resolve("bar.js"), + output: "baz" + } + ]; + + await localESLint.outputFixes(results); + + assert.strictEqual(spy.callCount, 2, "Call count was wrong"); + assert(spy.firstCall.calledWithExactly(path.resolve("foo.js"), "bar"), "First call was incorrect."); + assert(spy.secondCall.calledWithExactly(path.resolve("bar.js"), "baz"), "Second call was incorrect."); + }); + + it("should throw if non object array is given to 'results' parameter", async () => { + await assert.rejects(() => FlatESLint.outputFixes(null), /'results' must be an array/u); + await assert.rejects(() => FlatESLint.outputFixes([null]), /'results' must include only objects/u); + }); + }); + + describe("when evaluating code with comments to change config when allowInlineConfig is disabled", () => { + it("should report a violation for disabling rules", async () => { + const code = [ + "alert('test'); // eslint-disable-line no-alert" + ].join("\n"); + const config = { + ignore: true, + overrideConfigFile: true, + allowInlineConfig: false, + overrideConfig: { + rules: { + "eol-last": 0, + "no-alert": 1, + "no-trailing-spaces": 0, + strict: 0, + quotes: 0 + } + } + }; + const eslintCLI = new FlatESLint(config); + const results = await eslintCLI.lintText(code); + const messages = results[0].messages; + + assert.strictEqual(messages.length, 1); + assert.strictEqual(messages[0].ruleId, "no-alert"); + assert.strictEqual(results[0].suppressedMessages.length, 0); + }); + + it("should not report a violation by default", async () => { + const code = [ + "alert('test'); // eslint-disable-line no-alert" + ].join("\n"); + const config = { + ignore: true, + overrideConfigFile: true, + allowInlineConfig: true, + overrideConfig: { + rules: { + "eol-last": 0, + "no-alert": 1, + "no-trailing-spaces": 0, + strict: 0, + quotes: 0 + } + } + }; + const eslintCLI = new FlatESLint(config); + const results = await eslintCLI.lintText(code); + const messages = results[0].messages; + + assert.strictEqual(messages.length, 0); + assert.strictEqual(results[0].suppressedMessages.length, 1); + assert.strictEqual(results[0].suppressedMessages[0].ruleId, "no-alert"); + }); + }); + + describe("when evaluating code when reportUnusedDisableDirectives is enabled", () => { + it("should report problems for unused eslint-disable directives", async () => { + const eslint = new FlatESLint({ overrideConfigFile: true, reportUnusedDisableDirectives: "error" }); + + assert.deepStrictEqual( + await eslint.lintText("/* eslint-disable */"), + [ + { + filePath: "<text>", + messages: [ + { + ruleId: null, + message: "Unused eslint-disable directive (no problems were reported).", + line: 1, + column: 1, + fix: { + range: [0, 20], + text: " " + }, + severity: 2, + nodeType: null + } + ], + suppressedMessages: [], + errorCount: 1, + warningCount: 0, + fatalErrorCount: 0, + fixableErrorCount: 1, + fixableWarningCount: 0, + source: "/* eslint-disable */", + usedDeprecatedRules: [] + } + ] + ); + }); + }); + + describe("when retrieving version number", () => { + it("should return current version number", () => { + const eslintCLI = require("../../../lib/eslint/flat-eslint").FlatESLint; + const version = eslintCLI.version; + + assert.strictEqual(typeof version, "string"); + assert(parseInt(version[0], 10) >= 3); + }); + }); + + describe("mutability", () => { + + describe("rules", () => { + it("Loading rules in one instance doesn't mutate to another instance", async () => { + const filePath = getFixturePath("single-quoted.js"); + const engine1 = new FlatESLint({ + cwd: path.join(fixtureDir, ".."), + overrideConfigFile: true, + overrideConfig: { + plugins: { + example: { + rules: { + "example-rule"() { + return {}; + } + } + } + }, + rules: { "example/example-rule": 1 } + } + }); + const engine2 = new FlatESLint({ + cwd: path.join(fixtureDir, ".."), + overrideConfigFile: true + }); + const fileConfig1 = await engine1.calculateConfigForFile(filePath); + const fileConfig2 = await engine2.calculateConfigForFile(filePath); + + // plugin + assert.deepStrictEqual(fileConfig1.rules["example/example-rule"], [1], "example is present for engine 1"); + assert.strictEqual(fileConfig2.rules, void 0, "example is not present for engine 2"); + }); + }); + }); + + describe("with ignores config", () => { + const root = getFixturePath("cli-engine/ignore-patterns"); + + describe("ignores can add an ignore pattern ('foo.js').", () => { + const { prepare, cleanup, getPath } = createCustomTeardown({ + cwd: root, + files: { + "eslint.config.js": `module.exports = { + ignores: ["**/foo.js"] + };`, + "foo.js": "", + "bar.js": "", + "subdir/foo.js": "", + "subdir/bar.js": "" + } + }); + + beforeEach(prepare); + afterEach(cleanup); + + it("'isPathIgnored()' should return 'true' for 'foo.js'.", async () => { + const engine = new FlatESLint({ cwd: getPath() }); + + assert.strictEqual(await engine.isPathIgnored("foo.js"), true); + assert.strictEqual(await engine.isPathIgnored("subdir/foo.js"), true); + }); + + it("'isPathIgnored()' should return 'false' for 'bar.js'.", async () => { + const engine = new FlatESLint({ cwd: getPath() }); + + assert.strictEqual(await engine.isPathIgnored("bar.js"), false); + assert.strictEqual(await engine.isPathIgnored("subdir/bar.js"), false); + }); + + it("'lintFiles()' should not verify 'foo.js'.", async () => { + const engine = new FlatESLint({ cwd: getPath() }); + const filePaths = (await engine.lintFiles("**/*.js")) + .map(r => r.filePath) + .sort(); + + assert.deepStrictEqual(filePaths, [ + path.join(root, "bar.js"), + path.join(root, "eslint.config.js"), + path.join(root, "subdir/bar.js") + ]); + }); + }); + + describe("ignores can add ignore patterns ('**/foo.js', '/bar.js').", () => { + const { prepare, cleanup, getPath } = createCustomTeardown({ + cwd: root + Date.now(), + files: { + "eslint.config.js": `module.exports = { + ignores: ["**/foo.js", "bar.js"] + };`, + "foo.js": "", + "bar.js": "", + "baz.js": "", + "subdir/foo.js": "", + "subdir/bar.js": "", + "subdir/baz.js": "" + } + }); + + beforeEach(prepare); + afterEach(cleanup); + + it("'isPathIgnored()' should return 'true' for 'foo.js'.", async () => { + const engine = new FlatESLint({ cwd: getPath() }); + + assert.strictEqual(await engine.isPathIgnored("foo.js"), true); + assert.strictEqual(await engine.isPathIgnored("subdir/foo.js"), true); + }); + + it("'isPathIgnored()' should return 'true' for '/bar.js'.", async () => { + const engine = new FlatESLint({ cwd: getPath() }); + + assert.strictEqual(await engine.isPathIgnored("bar.js"), true); + assert.strictEqual(await engine.isPathIgnored("subdir/bar.js"), false); + }); + + it("'lintFiles()' should not verify 'foo.js' and '/bar.js'.", async () => { + const engine = new FlatESLint({ cwd: getPath() }); + const filePaths = (await engine.lintFiles("**/*.js")) + .map(r => r.filePath) + .sort(); + + assert.deepStrictEqual(filePaths, [ + path.join(getPath(), "baz.js"), + path.join(getPath(), "eslint.config.js"), + path.join(getPath(), "subdir/bar.js"), + path.join(getPath(), "subdir/baz.js") + ]); + }); + }); + + + /* + * These tests fail due to a bug in fast-flob that doesn't allow + * negated patterns inside of ignores. These tests won't work until + * this bug is fixed: + * https://github.com/mrmlnc/fast-glob/issues/356 + */ + xdescribe("ignorePatterns can unignore '/node_modules/foo'.", () => { + + const { prepare, cleanup, getPath } = createCustomTeardown({ + cwd: root, + files: { + "eslint.config.js": `module.exports = { + ignores: ["!**/node_modules/foo/**"] + };`, + "node_modules/foo/index.js": "", + "node_modules/foo/.dot.js": "", + "node_modules/bar/index.js": "", + "foo.js": "" + } + }); + + beforeEach(prepare); + afterEach(cleanup); + + it("'isPathIgnored()' should return 'false' for 'node_modules/foo/index.js'.", async () => { + const engine = new FlatESLint({ cwd: getPath() }); + + assert.strictEqual(await engine.isPathIgnored("node_modules/foo/index.js"), false); + }); + + it("'isPathIgnored()' should return 'false' for 'node_modules/foo/.dot.js'.", async () => { + const engine = new FlatESLint({ cwd: getPath() }); + + assert.strictEqual(await engine.isPathIgnored("node_modules/foo/.dot.js"), false); + }); + + it("'isPathIgnored()' should return 'true' for 'node_modules/bar/index.js'.", async () => { + const engine = new FlatESLint({ cwd: getPath() }); + + assert.strictEqual(await engine.isPathIgnored("node_modules/bar/index.js"), true); + }); + + it("'lintFiles()' should verify 'node_modules/foo/index.js'.", async () => { + const engine = new FlatESLint({ cwd: getPath() }); + const filePaths = (await engine.lintFiles("**/*.js")) + .map(r => r.filePath) + .sort(); + + assert.deepStrictEqual(filePaths, [ + path.join(root, "eslint.config.js"), + path.join(root, "foo.js"), + path.join(root, "node_modules/foo/index.js") + ]); + }); + }); + + xdescribe(".eslintignore can re-ignore files that are unignored by ignorePatterns.", () => { + const { prepare, cleanup, getPath } = createCustomTeardown({ + cwd: root, + files: { + "eslint.config.js": `module.exports = ${JSON.stringify({ + ignores: ["!.*"] + })}`, + ".eslintignore": ".foo*", + ".foo.js": "", + ".bar.js": "" + } + }); + + beforeEach(prepare); + afterEach(cleanup); + + it("'isPathIgnored()' should return 'true' for re-ignored '.foo.js'.", async () => { + const engine = new FlatESLint({ cwd: getPath() }); + + assert.strictEqual(await engine.isPathIgnored(".foo.js"), true); + }); + + it("'isPathIgnored()' should return 'false' for unignored '.bar.js'.", async () => { + const engine = new FlatESLint({ cwd: getPath() }); + + assert.strictEqual(await engine.isPathIgnored(".bar.js"), false); + }); + + it("'lintFiles()' should not lint re-ignored '.foo.js'.", async () => { + const engine = new FlatESLint({ cwd: getPath() }); + const filePaths = (await engine.lintFiles("**/*.js")) + .map(r => r.filePath) + .sort(); + + assert.deepStrictEqual(filePaths, [ + path.join(root, ".bar.js"), + path.join(root, "eslint.config.js") + ]); + }); + }); + + xdescribe(".eslintignore can unignore files that are ignored by ignorePatterns.", () => { + const { prepare, cleanup, getPath } = createCustomTeardown({ + cwd: root, + files: { + "eslint.config.js": `module.exports = ${JSON.stringify({ + ignores: ["**/*.js"] + })}`, + ".eslintignore": "!foo.js", + "foo.js": "", + "bar.js": "" + } + }); + + beforeEach(prepare); + afterEach(cleanup); + + it("'isPathIgnored()' should return 'false' for unignored 'foo.js'.", async () => { + const engine = new FlatESLint({ cwd: getPath() }); + + assert.strictEqual(await engine.isPathIgnored("foo.js"), false); + }); + + it("'isPathIgnored()' should return 'true' for ignored 'bar.js'.", async () => { + const engine = new FlatESLint({ cwd: getPath() }); + + assert.strictEqual(await engine.isPathIgnored("bar.js"), true); + }); + + it("'lintFiles()' should verify unignored 'foo.js'.", async () => { + const engine = new FlatESLint({ cwd: getPath() }); + const filePaths = (await engine.lintFiles("**/*.js")) + .map(r => r.filePath) + .sort(); + + assert.deepStrictEqual(filePaths, [ + path.join(root, "foo.js") + ]); + }); + }); + + describe("ignores in a config file should not be used if ignore: false.", () => { + + const { prepare, cleanup, getPath } = createCustomTeardown({ + cwd: root, + files: { + "eslint.config.js": `module.exports = { + ignores: ["*.js"] + }`, + "foo.js": "" + } + }); + + beforeEach(prepare); + afterEach(cleanup); + + it("'isPathIgnored()' should return 'false' for 'foo.js'.", async () => { + const engine = new FlatESLint({ cwd: getPath(), ignore: false }); + + assert.strictEqual(await engine.isPathIgnored("foo.js"), false); + }); + + it("'lintFiles()' should verify 'foo.js'.", async () => { + const engine = new FlatESLint({ cwd: getPath(), ignore: false }); + const filePaths = (await engine.lintFiles("**/*.js")) + .map(r => r.filePath) + .sort(); + + assert.deepStrictEqual(filePaths, [ + path.join(root, "eslint.config.js"), + path.join(root, "foo.js") + ]); + }); + }); + + }); + + describe("config.files adds lint targets", () => { + const root = getFixturePath("cli-engine/additional-lint-targets"); + + + describe("if { files: 'foo/*.txt', ignores: '**/ignore.txt' } is present,", () => { + const { prepare, cleanup, getPath } = createCustomTeardown({ + cwd: root + 1, + files: { + "eslint.config.js": `module.exports = [{ + files: ["foo/*.txt"], + ignores: ["**/ignore.txt"] + }];`, + "foo/nested/test.txt": "", + "foo/test.js": "", + "foo/test.txt": "", + "foo/ignore.txt": "", + "bar/test.js": "", + "bar/test.txt": "", + "bar/ignore.txt": "", + "test.js": "", + "test.txt": "", + "ignore.txt": "" + } + }); + + beforeEach(prepare); + afterEach(cleanup); + + it("'lintFiles()' with a directory path should contain 'foo/test.txt'.", async () => { + const engine = new FlatESLint({ cwd: getPath() }); + const filePaths = (await engine.lintFiles(".")) + .map(r => r.filePath) + .sort(); + + assert.deepStrictEqual(filePaths, [ + path.join(getPath(), "bar/test.js"), + path.join(getPath(), "eslint.config.js"), + path.join(getPath(), "foo/test.js"), + path.join(getPath(), "foo/test.txt"), + path.join(getPath(), "test.js") + ]); + }); + + it("'lintFiles()' with a glob pattern '*.js' should not contain 'foo/test.txt'.", async () => { + const engine = new FlatESLint({ cwd: getPath() }); + const filePaths = (await engine.lintFiles("**/*.js")) + .map(r => r.filePath) + .sort(); + + assert.deepStrictEqual(filePaths, [ + path.join(getPath(), "bar/test.js"), + path.join(getPath(), "eslint.config.js"), + path.join(getPath(), "foo/test.js"), + path.join(getPath(), "test.js") + ]); + }); + }); + + describe("if { files: 'foo/*.txt', ignores: '**/ignore.txt' } is present and subdirectory is passed,", () => { + const { prepare, cleanup, getPath } = createCustomTeardown({ + cwd: root + 2, + files: { + "eslint.config.js": `module.exports = [{ + files: ["foo/*.txt"], + ignores: ["**/ignore.txt"] + }];`, + "foo/nested/test.txt": "", + "foo/test.js": "", + "foo/test.txt": "", + "foo/ignore.txt": "", + "bar/test.js": "", + "bar/test.txt": "", + "bar/ignore.txt": "", + "test.js": "", + "test.txt": "", + "ignore.txt": "" + } + }); + + beforeEach(prepare); + afterEach(cleanup); + + it("'lintFiles()' with a directory path should contain 'foo/test.txt'.", async () => { + const engine = new FlatESLint({ cwd: getPath() }); + const filePaths = (await engine.lintFiles("foo")) + .map(r => r.filePath) + .sort(); + + assert.deepStrictEqual(filePaths, [ + path.join(getPath(), "foo/test.js"), + path.join(getPath(), "foo/test.txt") + ]); + }); + + it("'lintFiles()' with a glob pattern '*.js' should not contain 'foo/test.txt'.", async () => { + const engine = new FlatESLint({ cwd: getPath() }); + const filePaths = (await engine.lintFiles("foo/*.js")) + .map(r => r.filePath) + .sort(); + + assert.deepStrictEqual(filePaths, [ + path.join(getPath(), "foo/test.js") + ]); + }); + }); + + describe("if { files: 'foo/**/*.txt' } is present,", () => { + + const { prepare, cleanup, getPath } = createCustomTeardown({ + cwd: root + 3, + files: { + "eslint.config.js": `module.exports = [ + { + files: ["foo/**/*.txt"] + } + ]`, + "foo/nested/test.txt": "", + "foo/test.js": "", + "foo/test.txt": "", + "bar/test.js": "", + "bar/test.txt": "", + "test.js": "", + "test.txt": "" + } + }); + + beforeEach(prepare); + afterEach(cleanup); + + it("'lintFiles()' with a directory path should contain 'foo/test.txt' and 'foo/nested/test.txt'.", async () => { + const engine = new FlatESLint({ cwd: getPath() }); + const filePaths = (await engine.lintFiles(".")) + .map(r => r.filePath) + .sort(); + + assert.deepStrictEqual(filePaths, [ + path.join(getPath(), "bar/test.js"), + path.join(getPath(), "eslint.config.js"), + path.join(getPath(), "foo/nested/test.txt"), + path.join(getPath(), "foo/test.js"), + path.join(getPath(), "foo/test.txt"), + path.join(getPath(), "test.js") + ]); + }); + }); + + describe("if { files: 'foo/**/*' } is present,", () => { + + const { prepare, cleanup, getPath } = createCustomTeardown({ + cwd: root + 4, + files: { + "eslint.config.js": `module.exports = [ + { + files: ["foo/**/*"] + } + ]`, + "foo/nested/test.txt": "", + "foo/test.js": "", + "foo/test.txt": "", + "bar/test.js": "", + "bar/test.txt": "", + "test.js": "", + "test.txt": "" + } + }); + + beforeEach(prepare); + afterEach(cleanup); + + it("'lintFiles()' with a directory path should NOT contain 'foo/test.txt' and 'foo/nested/test.txt'.", async () => { + const engine = new FlatESLint({ cwd: getPath() }); + const filePaths = (await engine.lintFiles(".")) + .map(r => r.filePath) + .sort(); + + assert.deepStrictEqual(filePaths, [ + path.join(getPath(), "bar/test.js"), + path.join(getPath(), "eslint.config.js"), + path.join(getPath(), "foo/test.js"), + path.join(getPath(), "test.js") + ]); + }); + }); + + }); + + describe("'ignores', 'files' of the configuration that the '--config' option provided should be resolved from CWD.", () => { + const root = getFixturePath("cli-engine/config-and-overrides-files"); + + describe("if { files: 'foo/*.txt', ... } is present by '--config node_modules/myconf/eslint.config.js',", () => { + const { prepare, cleanup, getPath } = createCustomTeardown({ + cwd: `${root}a1`, + files: { + "node_modules/myconf/eslint.config.js": `module.exports = [ + { + files: ["foo/*.js"], + rules: { + eqeqeq: "error" + } + } + ];`, + "node_modules/myconf/foo/test.js": "a == b", + "foo/test.js": "a == b" + } + }); + + beforeEach(prepare); + afterEach(cleanup); + + it("'lintFiles()' with 'foo/test.js' should use the files entry.", async () => { + const engine = new FlatESLint({ + overrideConfigFile: "node_modules/myconf/eslint.config.js", + cwd: getPath(), + ignore: false + }); + const results = await engine.lintFiles("foo/test.js"); + + // Expected to be an 'eqeqeq' error because the file matches to `$CWD/foo/*.js`. + assert.deepStrictEqual(results, [ + { + suppressedMessages: [], + errorCount: 1, + filePath: path.join(getPath(), "foo/test.js"), + fixableErrorCount: 0, + fixableWarningCount: 0, + messages: [ + { + column: 3, + endColumn: 5, + endLine: 1, + line: 1, + message: "Expected '===' and instead saw '=='.", + messageId: "unexpected", + nodeType: "BinaryExpression", + ruleId: "eqeqeq", + severity: 2 + } + ], + source: "a == b", + usedDeprecatedRules: [], + warningCount: 0, + fatalErrorCount: 0 + } + ]); + }); + + it("'lintFiles()' with 'node_modules/myconf/foo/test.js' should NOT use the files entry.", async () => { + const engine = new FlatESLint({ + overrideConfigFile: "node_modules/myconf/eslint.config.js", + cwd: getPath(), + ignore: false + }); + const results = await engine.lintFiles("node_modules/myconf/foo/test.js"); + + // Expected to be no errors because the file doesn't match to `$CWD/foo/*.js`. + assert.deepStrictEqual(results, [ + { + suppressedMessages: [], + errorCount: 0, + filePath: path.join(getPath(), "node_modules/myconf/foo/test.js"), + fixableErrorCount: 0, + fixableWarningCount: 0, + messages: [ + { + fatal: false, + message: "File ignored by default. Use \"--ignore-pattern '!node_modules/*'\" to override.", + severity: 1 + } + ], + usedDeprecatedRules: [], + warningCount: 1, + fatalErrorCount: 0 + } + ]); + }); + }); + + describe("if { files: '*', ignores: 'foo/*.txt', ... } is present by '--config bar/myconf/eslint.config.js',", () => { + const { prepare, cleanup, getPath } = createCustomTeardown({ + cwd: `${root}a2`, + files: { + "bar/myconf/eslint.config.js": `module.exports = [ + { + files: ["**/*"], + ignores: ["foo/*.js"], + rules: { + eqeqeq: "error" + } + } + ]`, + "bar/myconf/foo/test.js": "a == b", + "foo/test.js": "a == b" + } + }); + + beforeEach(prepare); + afterEach(cleanup); + + it("'lintFiles()' with 'foo/test.js' should have no errors because no rules are enabled.", async () => { + const engine = new FlatESLint({ + overrideConfigFile: "bar/myconf/eslint.config.js", + cwd: getPath(), + ignore: false + }); + const results = await engine.lintFiles("foo/test.js"); + + // Expected to be no errors because the file matches to `$CWD/foo/*.js`. + assert.deepStrictEqual(results, [ + { + suppressedMessages: [], + errorCount: 0, + filePath: path.join(getPath(), "foo/test.js"), + fixableErrorCount: 0, + fixableWarningCount: 0, + messages: [], + usedDeprecatedRules: [], + warningCount: 0, + fatalErrorCount: 0 + } + ]); + }); + + it("'lintFiles()' with 'bar/myconf/foo/test.js' should have an error because eqeqeq is enabled.", async () => { + const engine = new FlatESLint({ + overrideConfigFile: "bar/myconf/eslint.config.js", + cwd: getPath(), + ignore: false + }); + const results = await engine.lintFiles("bar/myconf/foo/test.js"); + + // Expected to be an 'eqeqeq' error because the file doesn't match to `$CWD/foo/*.js`. + assert.deepStrictEqual(results, [ + { + suppressedMessages: [], + errorCount: 1, + filePath: path.join(getPath(), "bar/myconf/foo/test.js"), + fixableErrorCount: 0, + fixableWarningCount: 0, + messages: [ + { + column: 3, + endColumn: 5, + endLine: 1, + line: 1, + message: "Expected '===' and instead saw '=='.", + messageId: "unexpected", + nodeType: "BinaryExpression", + ruleId: "eqeqeq", + severity: 2 + } + ], + source: "a == b", + usedDeprecatedRules: [], + warningCount: 0, + fatalErrorCount: 0 + } + ]); + }); + }); + + // dependent on https://github.com/mrmlnc/fast-glob/issues/86 + xdescribe("if { ignores: 'foo/*.js', ... } is present by '--config node_modules/myconf/eslint.config.js',", () => { + const { prepare, cleanup, getPath } = createCustomTeardown({ + cwd: `${root}a3`, + files: { + "node_modules/myconf/eslint.config.js": `module.exports = { + ignores: ["**/eslint.config.js", "!node_modules/myconf", "foo/*.js"], + rules: { + eqeqeq: "error" + } + }`, + "node_modules/myconf/foo/test.js": "a == b", + "foo/test.js": "a == b" + } + }); + + beforeEach(prepare); + afterEach(cleanup); + + it("'lintFiles()' with '**/*.js' should iterate 'node_modules/myconf/foo/test.js' but not 'foo/test.js'.", async () => { + const engine = new FlatESLint({ + overrideConfigFile: "node_modules/myconf/eslint.config.js", + cwd: getPath() + }); + const files = (await engine.lintFiles("**/*.js")) + .map(r => r.filePath) + .sort(); + + assert.deepStrictEqual(files, [ + path.join(getPath(), "node_modules/myconf/foo/test.js") + ]); + }); + }); + }); + +}); diff --git a/eslint/tests/lib/init/autoconfig.js b/eslint/tests/lib/init/autoconfig.js deleted file mode 100644 index 3db6a63..0000000 --- a/eslint/tests/lib/init/autoconfig.js +++ /dev/null @@ -1,385 +0,0 @@ -/** - * @fileoverview Used for creating a suggested configuration based on project code. - * @author Ian VanSchooten - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const assert = require("chai").assert, - autoconfig = require("../../../lib/init/autoconfig"), - sourceCodeUtils = require("../../../lib/init/source-code-utils"), - baseDefaultOptions = require("../../../conf/default-cli-options"), - recommendedConfig = require("../../conf/eslint-recommended"); - -const defaultOptions = Object.assign({}, baseDefaultOptions, { cwd: process.cwd() }); - -//------------------------------------------------------------------------------ -// Data -//------------------------------------------------------------------------------ - -const SOURCE_CODE_FIXTURE_FILENAME = "./tests/fixtures/autoconfig/source.js"; -const CONFIG_COMMENTS_FILENAME = "./tests/fixtures/autoconfig/source-with-comments.js"; -const SEVERITY = 2; - -//------------------------------------------------------------------------------ -// Tests -//------------------------------------------------------------------------------ - -const rulesConfig = { - semi: [SEVERITY, [SEVERITY, "always"], [SEVERITY, "never"]], - "semi-spacing": [SEVERITY, - [SEVERITY, { before: true, after: true }], - [SEVERITY, { before: true, after: false }], - [SEVERITY, { before: false, after: true }], - [SEVERITY, { before: false, after: false }] - ], - quotes: [SEVERITY, - [SEVERITY, "single"], - [SEVERITY, "double"], - [SEVERITY, "backtick"], - [SEVERITY, "single", "avoid-escape"], - [SEVERITY, "double", "avoid-escape"], - [SEVERITY, "backtick", "avoid-escape"]] -}; - -const errorRulesConfig = { - "no-unused-vars": [SEVERITY], - "semi-spacing": [SEVERITY, - [SEVERITY, { before: true, after: true }], - [SEVERITY, { before: true, after: false }], - [SEVERITY, { before: false, after: true }], - [SEVERITY, { before: false, after: false }] - ] -}; - -describe("autoconfig", () => { - - describe("Registry", () => { - - it("should set up a registry for rules in a provided rulesConfig", () => { - const expectedRules = Object.keys(rulesConfig); - const registry = new autoconfig.Registry(rulesConfig); - - assert.strictEqual(Object.keys(registry.rules).length, 3); - assert.sameMembers(Object.keys(registry.rules), expectedRules); - assert.isArray(registry.rules.semi); - assert.isArray(registry.rules["semi-spacing"]); - assert.isArray(registry.rules.quotes); - assert.lengthOf(registry.rules.semi, 3); - assert.lengthOf(registry.rules["semi-spacing"], 5); - assert.lengthOf(registry.rules.quotes, 7); - }); - - it("should not have any rules if constructed without a config argument", () => { - const registry = new autoconfig.Registry(); - - assert.isObject(registry.rules); - assert.lengthOf(Object.keys(registry.rules), 0); - }); - - it("should create registryItems for each rule with the proper keys", () => { - const registry = new autoconfig.Registry(rulesConfig); - - assert.isObject(registry.rules.semi[0]); - assert.isObject(registry.rules["semi-spacing"][0]); - assert.isObject(registry.rules.quotes[0]); - assert.property(registry.rules.semi[0], "config"); - assert.property(registry.rules.semi[0], "specificity"); - assert.property(registry.rules.semi[0], "errorCount"); - }); - - it("should populate the config property correctly", () => { - const registry = new autoconfig.Registry(rulesConfig); - - assert.strictEqual(registry.rules.quotes[0].config, SEVERITY); - assert.deepStrictEqual(registry.rules.quotes[1].config, [SEVERITY, "single"]); - assert.deepStrictEqual(registry.rules.quotes[2].config, [SEVERITY, "double"]); - assert.deepStrictEqual(registry.rules.quotes[3].config, [SEVERITY, "backtick"]); - assert.deepStrictEqual(registry.rules.quotes[4].config, [SEVERITY, "single", "avoid-escape"]); - assert.deepStrictEqual(registry.rules.quotes[5].config, [SEVERITY, "double", "avoid-escape"]); - assert.deepStrictEqual(registry.rules.quotes[6].config, [SEVERITY, "backtick", "avoid-escape"]); - }); - - it("should assign the correct specificity", () => { - const registry = new autoconfig.Registry(rulesConfig); - - assert.strictEqual(registry.rules.quotes[0].specificity, 1); - assert.strictEqual(registry.rules.quotes[1].specificity, 2); - assert.strictEqual(registry.rules.quotes[6].specificity, 3); - }); - - it("should initially leave the errorCount as undefined", () => { - const registry = new autoconfig.Registry(rulesConfig); - - assert.isUndefined(registry.rules.quotes[0].errorCount); - assert.isUndefined(registry.rules.quotes[1].errorCount); - assert.isUndefined(registry.rules.quotes[6].errorCount); - }); - - describe("populateFromCoreRules()", () => { - - it("should add core rules to registry", () => { - const registry = new autoconfig.Registry(); - - registry.populateFromCoreRules(); - const finalRuleCount = Object.keys(registry.rules).length; - - assert(finalRuleCount > 0); - assert.include(Object.keys(registry.rules), "eqeqeq"); - }); - - it("should not add deprecated rules", () => { - const registry = new autoconfig.Registry(); - - registry.populateFromCoreRules(); - - const { rules } = registry; - - assert.notProperty(rules, "id-blacklist"); - assert.notProperty(rules, "no-negated-in-lhs"); - assert.notProperty(rules, "no-process-exit"); - assert.notProperty(rules, "no-spaced-func"); - assert.notProperty(rules, "prefer-reflect"); - }); - - it("should not add duplicate rules", () => { - const registry = new autoconfig.Registry(rulesConfig); - - registry.populateFromCoreRules(); - const semiCount = Object.keys(registry.rules).filter(ruleId => ruleId === "semi").length; - - assert.strictEqual(semiCount, 1); - }); - }); - - describe("buildRuleSets()", () => { - let ruleSets; - - beforeEach(() => { - const registry = new autoconfig.Registry(rulesConfig); - - ruleSets = registry.buildRuleSets(); - }); - - it("should create an array of rule configuration sets", () => { - assert.isArray(ruleSets); - }); - - it("should include configs for each rule (at least for the first set)", () => { - assert.sameMembers(Object.keys(ruleSets[0]), ["semi", "semi-spacing", "quotes"]); - }); - - it("should create the first set from default rule configs (severity only)", () => { - assert.deepStrictEqual(ruleSets[0], { semi: SEVERITY, "semi-spacing": SEVERITY, quotes: SEVERITY }); - }); - - it("should create as many ruleSets as the highest number of configs in a rule", () => { - - // `quotes` has 7 possible configurations - assert.lengthOf(ruleSets, 7); - }); - }); - - describe("lintSourceCode()", () => { - let registry; - - beforeEach(() => { - const config = { ignore: false }; - const sourceCode = sourceCodeUtils.getSourceCodeOfFiles(SOURCE_CODE_FIXTURE_FILENAME, config); - - registry = new autoconfig.Registry(rulesConfig); - registry = registry.lintSourceCode(sourceCode, defaultOptions); - }); - - it("should populate the errorCount of all registryItems", () => { - const expectedRules = ["semi", "semi-spacing", "quotes"]; - - assert.sameMembers(Object.keys(registry.rules), expectedRules); - expectedRules.forEach(ruleId => { - assert(registry.rules[ruleId].length > 0); - registry.rules[ruleId].forEach(conf => { - assert.isNumber(conf.errorCount); - }); - }); - }); - - it("should correctly set the error count of configurations", () => { - assert.strictEqual(registry.rules.semi[0].config, SEVERITY); - assert.strictEqual(registry.rules.semi[0].errorCount, 0); - assert.deepStrictEqual(registry.rules.semi[2].config, [SEVERITY, "never"]); - assert.strictEqual(registry.rules.semi[2].errorCount, 3); - }); - - it("should respect inline eslint config comments (and not crash when they make linting errors)", () => { - const config = { ignore: false }; - const sourceCode = sourceCodeUtils.getSourceCodeOfFiles(CONFIG_COMMENTS_FILENAME, config); - const expectedRegistry = [ - { config: 2, specificity: 1, errorCount: 3 }, - { config: [2, "always"], specificity: 2, errorCount: 3 }, - { config: [2, "never"], specificity: 2, errorCount: 3 } - ]; - - registry = new autoconfig.Registry(rulesConfig); - registry = registry.lintSourceCode(sourceCode, defaultOptions); - - assert.deepStrictEqual(registry.rules.semi, expectedRegistry); - }); - }); - - describe("stripFailingConfigs()", () => { - let registry; - - beforeEach(() => { - const config = { ignore: false }; - const sourceCode = sourceCodeUtils.getSourceCodeOfFiles(SOURCE_CODE_FIXTURE_FILENAME, config); - - registry = new autoconfig.Registry(rulesConfig); - registry = registry.lintSourceCode(sourceCode, defaultOptions); - registry = registry.stripFailingConfigs(); - }); - - it("should remove all registryItems with a non-zero errorCount", () => { - assert.lengthOf(registry.rules.semi, 2); - assert.lengthOf(registry.rules["semi-spacing"], 3); - assert.lengthOf(registry.rules.quotes, 1); - registry.rules.semi.forEach(registryItem => { - assert.strictEqual(registryItem.errorCount, 0); - }); - registry.rules["semi-spacing"].forEach(registryItem => { - assert.strictEqual(registryItem.errorCount, 0); - }); - registry.rules.quotes.forEach(registryItem => { - assert.strictEqual(registryItem.errorCount, 0); - }); - }); - }); - - describe("getFailingRulesRegistry()", () => { - let failingRegistry; - - beforeEach(() => { - const config = { ignore: false }; - const sourceCode = sourceCodeUtils.getSourceCodeOfFiles(SOURCE_CODE_FIXTURE_FILENAME, config); - let registry = new autoconfig.Registry(errorRulesConfig); - - registry = registry.lintSourceCode(sourceCode, defaultOptions); - failingRegistry = registry.getFailingRulesRegistry(); - }); - - it("should return a registry with no registryItems with an errorCount of zero", () => { - const failingRules = Object.keys(failingRegistry.rules); - - assert.deepStrictEqual(failingRules, ["no-unused-vars"]); - assert.lengthOf(failingRegistry.rules["no-unused-vars"], 1); - assert(failingRegistry.rules["no-unused-vars"][0].errorCount > 0); - }); - }); - - describe("createConfig()", () => { - let createdConfig; - - beforeEach(() => { - const config = { ignore: false }; - const sourceCode = sourceCodeUtils.getSourceCodeOfFiles(SOURCE_CODE_FIXTURE_FILENAME, config); - let registry = new autoconfig.Registry(rulesConfig); - - registry = registry.lintSourceCode(sourceCode, defaultOptions); - registry = registry.stripFailingConfigs(); - createdConfig = registry.createConfig(); - }); - - it("should create a config with a rules property", () => { - assert.property(createdConfig, "rules"); - }); - - it("should add rules which have only one registryItem to the config", () => { - const configuredRules = Object.keys(createdConfig.rules); - - assert.deepStrictEqual(configuredRules, ["quotes"]); - }); - - it("should set the configuration of the rule to the registryItem's `config` value", () => { - assert.deepStrictEqual(createdConfig.rules.quotes, [2, "double", "avoid-escape"]); - }); - - it("should not care how many errors the config has", () => { - const config = { ignore: false }; - const sourceCode = sourceCodeUtils.getSourceCodeOfFiles(SOURCE_CODE_FIXTURE_FILENAME, config); - let registry = new autoconfig.Registry(errorRulesConfig); - - registry = registry.lintSourceCode(sourceCode, defaultOptions); - const failingRegistry = registry.getFailingRulesRegistry(); - - createdConfig = failingRegistry.createConfig(); - const configuredRules = Object.keys(createdConfig.rules); - - assert.deepStrictEqual(configuredRules, ["no-unused-vars"]); - }); - }); - - describe("filterBySpecificity()", () => { - let registry; - - beforeEach(() => { - registry = new autoconfig.Registry(rulesConfig); - }); - - it("should return a registry where all configs have a desired specificity", () => { - const filteredRegistry1 = registry.filterBySpecificity(1); - const filteredRegistry2 = registry.filterBySpecificity(2); - const filteredRegistry3 = registry.filterBySpecificity(3); - - assert.lengthOf(filteredRegistry1.rules.semi, 1); - assert.lengthOf(filteredRegistry1.rules["semi-spacing"], 1); - assert.lengthOf(filteredRegistry1.rules.quotes, 1); - assert.lengthOf(filteredRegistry2.rules.semi, 2); - assert.lengthOf(filteredRegistry2.rules["semi-spacing"], 4); - assert.lengthOf(filteredRegistry2.rules.quotes, 3); - assert.lengthOf(filteredRegistry3.rules.quotes, 3); - }); - }); - }); - - describe("extendFromRecommended()", () => { - it("should return a configuration which has `extends` key with Array type value", () => { - const oldConfig = { extends: [], rules: {} }; - const newConfig = autoconfig.extendFromRecommended(oldConfig); - - assert.exists(newConfig.extends); - assert.isArray(newConfig.extends); - }); - - it("should return a configuration which has array property `extends`", () => { - const oldConfig = { extends: [], rules: {} }; - const newConfig = autoconfig.extendFromRecommended(oldConfig); - - assert.include(newConfig.extends, "eslint:recommended"); - }); - - it("should return a configuration which preserves the previous extending configurations", () => { - const oldConfig = { extends: ["previous:configuration1", "previous:configuration2"], rules: {} }; - const newConfig = autoconfig.extendFromRecommended(oldConfig); - - assert.includeMembers(newConfig.extends, oldConfig.extends); - }); - - it("should return a configuration which has `eslint:recommended` at the first of `extends`", () => { - const oldConfig = { extends: ["previous:configuration1", "previous:configuration2"], rules: {} }; - const newConfig = autoconfig.extendFromRecommended(oldConfig); - const [firstExtendInNewConfig] = newConfig.extends; - - assert.strictEqual(firstExtendInNewConfig, "eslint:recommended"); - }); - - it("should return a configuration which not includes rules configured in `eslint:recommended`", () => { - const oldConfig = { extends: [], rules: { ...recommendedConfig.rules } }; - const newConfig = autoconfig.extendFromRecommended(oldConfig); - - assert.notInclude(newConfig.rules, oldConfig.rules); - }); - }); -}); diff --git a/eslint/tests/lib/init/config-file.js b/eslint/tests/lib/init/config-file.js deleted file mode 100644 index 50a9af1..0000000 --- a/eslint/tests/lib/init/config-file.js +++ /dev/null @@ -1,159 +0,0 @@ -/** - * @fileoverview Tests for ConfigFile - * @author Nicholas C. Zakas - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const assert = require("chai").assert, - sinon = require("sinon"), - path = require("path"), - yaml = require("js-yaml"), - espree = require("espree"), - ConfigFile = require("../../../lib/init/config-file"), - { CLIEngine } = require("../../../lib/cli-engine"); - -const proxyquire = require("proxyquire").noCallThru().noPreserveCache(); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -/** - * Helper function get easily get a path in the fixtures directory. - * @param {string} filepath The path to find in the fixtures directory. - * @returns {string} Full path in the fixtures directory. - * @private - */ -function getFixturePath(filepath) { - return path.resolve(__dirname, "../../fixtures/config-file", filepath); -} - -//------------------------------------------------------------------------------ -// Tests -//------------------------------------------------------------------------------ - -describe("ConfigFile", () => { - describe("write()", () => { - let config; - - beforeEach(() => { - config = { - env: { - browser: true, - node: true - }, - rules: { - quotes: 2, - semi: 1 - } - }; - }); - - afterEach(() => { - sinon.verifyAndRestore(); - }); - - [ - ["JavaScript", "foo.js", espree.parse], - ["JSON", "bar.json", JSON.parse], - ["YAML", "foo.yaml", yaml.load], - ["YML", "foo.yml", yaml.load] - ].forEach(([fileType, filename, validate]) => { - - it(`should write a file through fs when a ${fileType} path is passed`, () => { - const fakeFS = { - writeFileSync: () => {} - }; - - sinon.mock(fakeFS).expects("writeFileSync").withExactArgs( - filename, - sinon.match(value => !!validate(value)), - "utf8" - ); - - const StubbedConfigFile = proxyquire("../../../lib/init/config-file", { - fs: fakeFS - }); - - StubbedConfigFile.write(config, filename); - }); - - it("should include a newline character at EOF", () => { - const fakeFS = { - writeFileSync: () => {} - }; - - sinon.mock(fakeFS).expects("writeFileSync").withExactArgs( - filename, - sinon.match(value => value.endsWith("\n")), - "utf8" - ); - - const StubbedConfigFile = proxyquire("../../../lib/init/config-file", { - fs: fakeFS - }); - - StubbedConfigFile.write(config, filename); - }); - }); - - it("should make sure js config files match linting rules", () => { - const fakeFS = { - writeFileSync: () => {} - }; - - const singleQuoteConfig = { - rules: { - quotes: [2, "single"] - } - }; - - sinon.mock(fakeFS).expects("writeFileSync").withExactArgs( - "test-config.js", - sinon.match(value => !value.includes("\"")), - "utf8" - ); - - const StubbedConfigFile = proxyquire("../../../lib/init/config-file", { - fs: fakeFS - }); - - StubbedConfigFile.write(singleQuoteConfig, "test-config.js"); - }); - - it("should still write a js config file even if linting fails", () => { - const fakeFS = { - writeFileSync: () => {} - }; - const fakeCLIEngine = sinon.mock().withExactArgs(sinon.match({ - baseConfig: config, - fix: true, - useEslintrc: false - })); - - Object.defineProperties(fakeCLIEngine.prototype, Object.getOwnPropertyDescriptors(CLIEngine.prototype)); - sinon.stub(fakeCLIEngine.prototype, "executeOnText").throws(); - - sinon.mock(fakeFS).expects("writeFileSync").once(); - - const StubbedConfigFile = proxyquire("../../../lib/init/config-file", { - fs: fakeFS, - "../cli-engine": { CLIEngine: fakeCLIEngine } - }); - - assert.throws(() => { - StubbedConfigFile.write(config, "test-config.js"); - }); - }); - - it("should throw error if file extension is not valid", () => { - assert.throws(() => { - ConfigFile.write({}, getFixturePath("yaml/.eslintrc.class")); - }, /write to unknown file type/u); - }); - }); -}); diff --git a/eslint/tests/lib/init/config-initializer.js b/eslint/tests/lib/init/config-initializer.js deleted file mode 100644 index 81e4e52..0000000 --- a/eslint/tests/lib/init/config-initializer.js +++ /dev/null @@ -1,577 +0,0 @@ -/** - * @fileoverview Tests for configInitializer. - * @author Ilya Volodin - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const assert = require("chai").assert, - fs = require("fs"), - path = require("path"), - os = require("os"), - sinon = require("sinon"), - sh = require("shelljs"), - espree = require("espree"), - autoconfig = require("../../../lib/init/autoconfig"), - npmUtils = require("../../../lib/init/npm-utils"); - -const originalDir = process.cwd(); -const proxyquire = require("proxyquire").noPreserveCache(); - -//------------------------------------------------------------------------------ -// Tests -//------------------------------------------------------------------------------ - -let answers = {}; -let pkgJSONContents = {}; -let pkgJSONPath = ""; - -describe("configInitializer", () => { - - let fixtureDir, - npmCheckStub, - npmInstallStub, - npmFetchPeerDependenciesStub, - init, - localESLintVersion = null; - - const log = { - info: sinon.spy(), - error: sinon.spy() - }; - const requireStubs = { - "../shared/logging": log, - "../shared/relative-module-resolver": { - resolve() { - if (localESLintVersion) { - return `local-eslint-${localESLintVersion}`; - } - throw new Error("Cannot find module"); - } - }, - "local-eslint-3.18.0": { linter: { version: "3.18.0" }, "@noCallThru": true }, - "local-eslint-3.19.0": { linter: { version: "3.19.0" }, "@noCallThru": true }, - "local-eslint-4.0.0": { linter: { version: "4.0.0" }, "@noCallThru": true } - }; - - /** - * Returns the path inside of the fixture directory. - * @param {...string} args file path segments. - * @returns {string} The path inside the fixture directory. - * @private - */ - function getFixturePath(...args) { - const filepath = path.join(fixtureDir, ...args); - - try { - return fs.realpathSync(filepath); - } catch { - return filepath; - } - } - - // copy into clean area so as not to get "infected" by this project's .eslintrc files - before(() => { - fixtureDir = path.join(os.tmpdir(), "eslint/fixtures/config-initializer"); - sh.mkdir("-p", fixtureDir); - sh.cp("-r", "./tests/fixtures/config-initializer/.", fixtureDir); - fixtureDir = fs.realpathSync(fixtureDir); - }); - - beforeEach(() => { - npmInstallStub = sinon.stub(npmUtils, "installSyncSaveDev"); - npmCheckStub = sinon.stub(npmUtils, "checkDevDeps").callsFake(packages => packages.reduce((status, pkg) => { - status[pkg] = false; - return status; - }, {})); - npmFetchPeerDependenciesStub = sinon - .stub(npmUtils, "fetchPeerDependencies") - .returns({ - eslint: "^3.19.0", - "eslint-plugin-jsx-a11y": "^5.0.1", - "eslint-plugin-import": "^2.2.0", - "eslint-plugin-react": "^7.0.1" - }); - init = proxyquire("../../../lib/init/config-initializer", requireStubs); - }); - - afterEach(() => { - log.info.resetHistory(); - log.error.resetHistory(); - npmInstallStub.restore(); - npmCheckStub.restore(); - npmFetchPeerDependenciesStub.restore(); - }); - - after(() => { - sh.rm("-r", fixtureDir); - }); - - describe("processAnswers()", () => { - - describe("prompt", () => { - - beforeEach(() => { - answers = { - purpose: "style", - source: "prompt", - extendDefault: true, - indent: 2, - quotes: "single", - linebreak: "unix", - semi: true, - moduleType: "esm", - es6Globals: true, - env: ["browser"], - format: "JSON" - }; - }); - - it("should create default config", () => { - const config = init.processAnswers(answers); - - assert.deepStrictEqual(config.rules.indent, ["error", 2]); - assert.deepStrictEqual(config.rules.quotes, ["error", "single"]); - assert.deepStrictEqual(config.rules["linebreak-style"], ["error", "unix"]); - assert.deepStrictEqual(config.rules.semi, ["error", "always"]); - assert.strictEqual(config.env.es2021, true); - assert.strictEqual(config.parserOptions.ecmaVersion, espree.latestEcmaVersion); - assert.strictEqual(config.parserOptions.sourceType, "module"); - assert.strictEqual(config.env.browser, true); - assert.strictEqual(config.extends, "eslint:recommended"); - }); - - it("should disable semi", () => { - answers.semi = false; - const config = init.processAnswers(answers); - - assert.deepStrictEqual(config.rules.semi, ["error", "never"]); - }); - - it("should enable react plugin", () => { - answers.framework = "react"; - const config = init.processAnswers(answers); - - assert.strictEqual(config.parserOptions.ecmaFeatures.jsx, true); - assert.strictEqual(config.parserOptions.ecmaVersion, espree.latestEcmaVersion); - assert.deepStrictEqual(config.plugins, ["react"]); - }); - - it("should enable vue plugin", () => { - answers.framework = "vue"; - const config = init.processAnswers(answers); - - assert.strictEqual(config.parserOptions.ecmaVersion, espree.latestEcmaVersion); - assert.deepStrictEqual(config.plugins, ["vue"]); - assert.deepStrictEqual(config.extends, ["eslint:recommended", "plugin:vue/essential"]); - }); - - it("should enable typescript parser and plugin", () => { - answers.typescript = true; - const config = init.processAnswers(answers); - - assert.strictEqual(config.parser, "@typescript-eslint/parser"); - assert.deepStrictEqual(config.plugins, ["@typescript-eslint"]); - assert.deepStrictEqual(config.extends, ["eslint:recommended", "plugin:@typescript-eslint/recommended"]); - }); - - it("should enable typescript parser and plugin with vue", () => { - answers.framework = "vue"; - answers.typescript = true; - const config = init.processAnswers(answers); - - assert.deepStrictEqual(config.extends, ["eslint:recommended", "plugin:vue/essential", "plugin:@typescript-eslint/recommended"]); - assert.strictEqual(config.parserOptions.parser, "@typescript-eslint/parser"); - assert.deepStrictEqual(config.plugins, ["vue", "@typescript-eslint"]); - }); - - it("should extend eslint:recommended", () => { - const config = init.processAnswers(answers); - - assert.strictEqual(config.extends, "eslint:recommended"); - }); - - it("should not use commonjs by default", () => { - const config = init.processAnswers(answers); - - assert.isUndefined(config.env.commonjs); - }); - - it("should use commonjs when set", () => { - answers.moduleType = "commonjs"; - const config = init.processAnswers(answers); - - assert.isTrue(config.env.commonjs); - }); - }); - - describe("guide", () => { - it("should support the google style guide", () => { - const config = { extends: "google" }; - const modules = init.getModulesList(config); - - assert.deepStrictEqual(config, { extends: "google", installedESLint: true }); - assert.include(modules, "eslint-config-google@latest"); - }); - - it("should support the airbnb style guide", () => { - const config = { extends: "airbnb" }; - const modules = init.getModulesList(config); - - assert.deepStrictEqual(config, { extends: "airbnb", installedESLint: true }); - assert.include(modules, "eslint-config-airbnb@latest"); - }); - - it("should support the airbnb base style guide", () => { - const config = { extends: "airbnb-base" }; - const modules = init.getModulesList(config); - - assert.deepStrictEqual(config, { extends: "airbnb-base", installedESLint: true }); - assert.include(modules, "eslint-config-airbnb-base@latest"); - }); - - it("should support the standard style guide", () => { - const config = { extends: "standard" }; - const modules = init.getModulesList(config); - - assert.deepStrictEqual(config, { extends: "standard", installedESLint: true }); - assert.include(modules, "eslint-config-standard@latest"); - }); - - it("should support the xo style guide", () => { - const config = { extends: "xo" }; - const modules = init.getModulesList(config); - - assert.deepStrictEqual(config, { extends: "xo", installedESLint: true }); - assert.include(modules, "eslint-config-xo@latest"); - }); - - it("should install required sharable config", () => { - const config = { extends: "google" }; - - init.installModules(init.getModulesList(config)); - assert(npmInstallStub.calledOnce); - assert(npmInstallStub.firstCall.args[0].some(name => name.startsWith("eslint-config-google@"))); - }); - - it("should install ESLint if not installed locally", () => { - const config = { extends: "google" }; - - init.installModules(init.getModulesList(config)); - assert(npmInstallStub.calledOnce); - assert(npmInstallStub.firstCall.args[0].some(name => name.startsWith("eslint@"))); - }); - - it("should install peerDependencies of the sharable config", () => { - const config = { extends: "airbnb" }; - - init.installModules(init.getModulesList(config)); - - assert(npmFetchPeerDependenciesStub.calledOnce); - assert(npmFetchPeerDependenciesStub.firstCall.args[0] === "eslint-config-airbnb@latest"); - assert(npmInstallStub.calledOnce); - assert.deepStrictEqual( - npmInstallStub.firstCall.args[0], - [ - "eslint-config-airbnb@latest", - "eslint@^3.19.0", - "eslint-plugin-jsx-a11y@^5.0.1", - "eslint-plugin-import@^2.2.0", - "eslint-plugin-react@^7.0.1" - ] - ); - }); - - describe("hasESLintVersionConflict (Note: peerDependencies always `eslint: \"^3.19.0\"` by stubs)", () => { - describe("if local ESLint is not found,", () => { - before(() => { - localESLintVersion = null; - }); - - it("should return false.", () => { - const result = init.hasESLintVersionConflict({ styleguide: "airbnb" }); - - assert.strictEqual(result, false); - }); - }); - - describe("if local ESLint is 3.19.0,", () => { - before(() => { - localESLintVersion = "3.19.0"; - }); - - it("should return false.", () => { - const result = init.hasESLintVersionConflict({ styleguide: "airbnb" }); - - assert.strictEqual(result, false); - }); - }); - - describe("if local ESLint is 4.0.0,", () => { - before(() => { - localESLintVersion = "4.0.0"; - }); - - it("should return true.", () => { - const result = init.hasESLintVersionConflict({ styleguide: "airbnb" }); - - assert.strictEqual(result, true); - }); - }); - - describe("if local ESLint is 3.18.0,", () => { - before(() => { - localESLintVersion = "3.18.0"; - }); - - it("should return true.", () => { - const result = init.hasESLintVersionConflict({ styleguide: "airbnb" }); - - assert.strictEqual(result, true); - }); - }); - }); - - it("should support the standard style guide with Vue.js", () => { - const config = { - plugins: ["vue"], - extends: ["plugin:vue/essential", "standard"] - }; - const modules = init.getModulesList(config); - - assert.include(modules, "eslint-plugin-vue@latest"); - assert.include(modules, "eslint-config-standard@latest"); - }); - - it("should support custom parser", () => { - const config = { - parser: "@typescript-eslint/parser" - }; - const modules = init.getModulesList(config); - - assert.include(modules, "@typescript-eslint/parser@latest"); - }); - - it("should support custom parser with Vue.js", () => { - const config = { - - // We should declare the parser at `parserOptions` when using with `eslint-plugin-vue`. - parserOptions: { - parser: "@typescript-eslint/parser" - } - }; - const modules = init.getModulesList(config); - - assert.include(modules, "@typescript-eslint/parser@latest"); - }); - }); - - describe("auto", () => { - const completeSpy = sinon.spy(); - let config; - - before(() => { - const patterns = [ - getFixturePath("lib"), - getFixturePath("tests") - ].join(" "); - - answers = { - purpose: "style", - source: "auto", - patterns, - env: ["browser"], - format: "JSON" - }; - - sinon.stub(console, "log"); // necessary to replace, because of progress bar - - process.chdir(fixtureDir); - config = init.processAnswers(answers); - sinon.restore(); - }); - - after(() => { - sinon.restore(); - }); - - afterEach(() => { - process.chdir(originalDir); - sinon.restore(); - }); - - it("should create a config", () => { - assert.isTrue(completeSpy.notCalled); - assert.ok(config); - }); - - it("should create the config based on examined files", () => { - assert.deepStrictEqual(config.rules.quotes, ["error", "double"]); - assert.strictEqual(config.rules.semi, "off"); - }); - - it("should extend and not disable recommended rules", () => { - assert.strictEqual(config.extends, "eslint:recommended"); - assert.notProperty(config.rules, "no-debugger"); - }); - - it("should not include deprecated rules", () => { - assert.notProperty(config.rules, "id-blacklist"); - assert.notProperty(config.rules, "no-negated-in-lhs"); - assert.notProperty(config.rules, "no-process-exit"); - assert.notProperty(config.rules, "no-spaced-func"); - assert.notProperty(config.rules, "prefer-reflect"); - }); - - it("should support new ES features if using later ES version", () => { - const filename = getFixturePath("new-es-features"); - - answers.patterns = filename; - answers.ecmaVersion = 2017; - process.chdir(fixtureDir); - config = init.processAnswers(answers); - }); - - it("should throw on fatal parsing error", () => { - const filename = getFixturePath("parse-error"); - - sinon.stub(autoconfig, "extendFromRecommended"); - answers.patterns = filename; - process.chdir(fixtureDir); - assert.throws(() => { - config = init.processAnswers(answers); - }, "Parsing error: Unexpected token ;"); - }); - - it("should throw if no files are matched from patterns", () => { - sinon.stub(autoconfig, "extendFromRecommended"); - answers.patterns = "not-a-real-filename"; - process.chdir(fixtureDir); - assert.throws(() => { - config = init.processAnswers(answers); - }, "No files matching 'not-a-real-filename' were found."); - }); - }); - }); - - describe("writeFile()", () => { - - beforeEach(() => { - answers = { - purpose: "style", - source: "prompt", - extendDefault: true, - indent: 2, - quotes: "single", - linebreak: "unix", - semi: true, - moduleType: "esm", - es6Globals: true, - env: ["browser"], - format: "JSON" - }; - - pkgJSONContents = { - name: "config-initializer", - version: "1.0.0" - }; - - process.chdir(fixtureDir); - - pkgJSONPath = path.resolve(fixtureDir, "package.json"); - }); - - afterEach(() => { - process.chdir(originalDir); - }); - - it("should create .eslintrc.json", () => { - const config = init.processAnswers(answers); - const filePath = path.resolve(fixtureDir, ".eslintrc.json"); - - fs.writeFileSync(pkgJSONPath, JSON.stringify(pkgJSONContents)); - - init.writeFile(config, answers.format); - - assert.isTrue(fs.existsSync(filePath)); - - fs.unlinkSync(filePath); - fs.unlinkSync(pkgJSONPath); - }); - - it("should create .eslintrc.js", () => { - answers.format = "JavaScript"; - - const config = init.processAnswers(answers); - const filePath = path.resolve(fixtureDir, ".eslintrc.js"); - - fs.writeFileSync(pkgJSONPath, JSON.stringify(pkgJSONContents)); - - init.writeFile(config, answers.format); - - assert.isTrue(fs.existsSync(filePath)); - - fs.unlinkSync(filePath); - fs.unlinkSync(pkgJSONPath); - }); - - it("should create .eslintrc.yml", () => { - answers.format = "YAML"; - - const config = init.processAnswers(answers); - const filePath = path.resolve(fixtureDir, ".eslintrc.yml"); - - fs.writeFileSync(pkgJSONPath, JSON.stringify(pkgJSONContents)); - - init.writeFile(config, answers.format); - - assert.isTrue(fs.existsSync(filePath)); - - fs.unlinkSync(filePath); - fs.unlinkSync(pkgJSONPath); - }); - - // For https://github.com/eslint/eslint/issues/14137 - it("should create .eslintrc.cjs", () => { - answers.format = "JavaScript"; - - // create package.json with "type": "module" - pkgJSONContents.type = "module"; - - fs.writeFileSync(pkgJSONPath, JSON.stringify(pkgJSONContents)); - - const config = init.processAnswers(answers); - const filePath = path.resolve(fixtureDir, ".eslintrc.cjs"); - - init.writeFile(config, answers.format); - - assert.isTrue(fs.existsSync(filePath)); - - fs.unlinkSync(filePath); - fs.unlinkSync(pkgJSONPath); - }); - - it("should create .eslintrc.json even with type: 'module'", () => { - answers.format = "JSON"; - - // create package.json with "type": "module" - pkgJSONContents.type = "module"; - - fs.writeFileSync(pkgJSONPath, JSON.stringify(pkgJSONContents)); - - const config = init.processAnswers(answers); - const filePath = path.resolve(fixtureDir, ".eslintrc.json"); - - init.writeFile(config, answers.format); - - assert.isTrue(fs.existsSync(filePath)); - - fs.unlinkSync(filePath); - fs.unlinkSync(pkgJSONPath); - }); - }); -}); diff --git a/eslint/tests/lib/init/npm-utils.js b/eslint/tests/lib/init/npm-utils.js deleted file mode 100644 index 8465796..0000000 --- a/eslint/tests/lib/init/npm-utils.js +++ /dev/null @@ -1,228 +0,0 @@ -/** - * @fileoverview Tests for rule fixer. - * @author Ian VanSchooten - */ -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const - assert = require("chai").assert, - spawn = require("cross-spawn"), - sinon = require("sinon"), - npmUtils = require("../../../lib/init/npm-utils"), - log = require("../../../lib/shared/logging"), - { defineInMemoryFs } = require("../../_utils"); - -const proxyquire = require("proxyquire").noCallThru().noPreserveCache(); - -//------------------------------------------------------------------------------ -// Helpers -//------------------------------------------------------------------------------ - -/** - * Import `npm-utils` with the in-memory file system. - * @param {Object} files The file definitions. - * @returns {Object} `npm-utils`. - */ -function requireNpmUtilsWithInMemoryFileSystem(files) { - const fs = defineInMemoryFs({ files }); - - return proxyquire("../../../lib/init/npm-utils", { fs }); -} - -//------------------------------------------------------------------------------ -// Tests -//------------------------------------------------------------------------------ - -describe("npmUtils", () => { - afterEach(() => { - sinon.verifyAndRestore(); - }); - - describe("checkDevDeps()", () => { - let installStatus; - - before(() => { - installStatus = npmUtils.checkDevDeps(["debug", "mocha", "notarealpackage", "jshint"]); - }); - - it("should not find a direct dependency of the project", () => { - assert.isFalse(installStatus.debug); - }); - - it("should find a dev dependency of the project", () => { - assert.isTrue(installStatus.mocha); - }); - - it("should not find non-dependencies", () => { - assert.isFalse(installStatus.notarealpackage); - }); - - it("should not find nested dependencies", () => { - assert.isFalse(installStatus.jshint); - }); - - it("should return false for a single, non-existent package", () => { - installStatus = npmUtils.checkDevDeps(["notarealpackage"]); - assert.isFalse(installStatus.notarealpackage); - }); - - it("should handle missing devDependencies key", () => { - const stubbedNpmUtils = requireNpmUtilsWithInMemoryFileSystem({ - "package.json": JSON.stringify({ private: true, dependencies: {} }) - }); - - // Should not throw. - stubbedNpmUtils.checkDevDeps(["some-package"]); - }); - - it("should throw with message when parsing invalid package.json", () => { - const stubbedNpmUtils = requireNpmUtilsWithInMemoryFileSystem({ - "package.json": "{ \"not: \"valid json\" }" - }); - - assert.throws(() => { - try { - stubbedNpmUtils.checkDevDeps(["some-package"]); - } catch (error) { - assert.strictEqual(error.messageTemplate, "failed-to-read-json"); - throw error; - } - }, "SyntaxError: Unexpected token v"); - }); - }); - - describe("checkDeps()", () => { - let installStatus; - - before(() => { - installStatus = npmUtils.checkDeps(["debug", "mocha", "notarealpackage", "jshint"]); - }); - - it("should find a direct dependency of the project", () => { - assert.isTrue(installStatus.debug); - }); - - it("should not find a dev dependency of the project", () => { - assert.isFalse(installStatus.mocha); - }); - - it("should not find non-dependencies", () => { - assert.isFalse(installStatus.notarealpackage); - }); - - it("should not find nested dependencies", () => { - assert.isFalse(installStatus.jshint); - }); - - it("should return false for a single, non-existent package", () => { - installStatus = npmUtils.checkDeps(["notarealpackage"]); - assert.isFalse(installStatus.notarealpackage); - }); - - it("should throw if no package.json can be found", () => { - assert.throws(() => { - installStatus = npmUtils.checkDeps(["notarealpackage"], "/fakepath"); - }, "Could not find a package.json file"); - }); - - it("should handle missing dependencies key", () => { - const stubbedNpmUtils = requireNpmUtilsWithInMemoryFileSystem({ - "package.json": JSON.stringify({ private: true, devDependencies: {} }) - }); - - // Should not throw. - stubbedNpmUtils.checkDeps(["some-package"]); - }); - - it("should throw with message when parsing invalid package.json", () => { - const stubbedNpmUtils = requireNpmUtilsWithInMemoryFileSystem({ - "package.json": "{ \"not: \"valid json\" }" - }); - - assert.throws(() => { - try { - stubbedNpmUtils.checkDeps(["some-package"]); - } catch (error) { - assert.strictEqual(error.messageTemplate, "failed-to-read-json"); - throw error; - } - }, "SyntaxError: Unexpected token v"); - }); - }); - - describe("checkPackageJson()", () => { - it("should return true if package.json exists", () => { - const stubbedNpmUtils = requireNpmUtilsWithInMemoryFileSystem({ - "package.json": "{ \"file\": \"contents\" }" - }); - - assert.strictEqual(stubbedNpmUtils.checkPackageJson(), true); - }); - - it("should return false if package.json does not exist", () => { - const stubbedNpmUtils = requireNpmUtilsWithInMemoryFileSystem({}); - - assert.strictEqual(stubbedNpmUtils.checkPackageJson(), false); - }); - }); - - describe("installSyncSaveDev()", () => { - it("should invoke npm to install a single desired package", () => { - const stub = sinon.stub(spawn, "sync").returns({ stdout: "" }); - - npmUtils.installSyncSaveDev("desired-package"); - assert(stub.calledOnce); - assert.strictEqual(stub.firstCall.args[0], "npm"); - assert.deepStrictEqual(stub.firstCall.args[1], ["i", "--save-dev", "desired-package"]); - stub.restore(); - }); - - it("should accept an array of packages to install", () => { - const stub = sinon.stub(spawn, "sync").returns({ stdout: "" }); - - npmUtils.installSyncSaveDev(["first-package", "second-package"]); - assert(stub.calledOnce); - assert.strictEqual(stub.firstCall.args[0], "npm"); - assert.deepStrictEqual(stub.firstCall.args[1], ["i", "--save-dev", "first-package", "second-package"]); - stub.restore(); - }); - - it("should log an error message if npm throws ENOENT error", () => { - const logErrorStub = sinon.stub(log, "error"); - const npmUtilsStub = sinon.stub(spawn, "sync").returns({ error: { code: "ENOENT" } }); - - npmUtils.installSyncSaveDev("some-package"); - - assert(logErrorStub.calledOnce); - - logErrorStub.restore(); - npmUtilsStub.restore(); - }); - }); - - describe("fetchPeerDependencies()", () => { - it("should execute 'npm show --json <packageName> peerDependencies' command", () => { - const stub = sinon.stub(spawn, "sync").returns({ stdout: "" }); - - npmUtils.fetchPeerDependencies("desired-package"); - assert(stub.calledOnce); - assert.strictEqual(stub.firstCall.args[0], "npm"); - assert.deepStrictEqual(stub.firstCall.args[1], ["show", "--json", "desired-package", "peerDependencies"]); - stub.restore(); - }); - - it("should return null if npm throws ENOENT error", () => { - const stub = sinon.stub(spawn, "sync").returns({ error: { code: "ENOENT" } }); - - const peerDependencies = npmUtils.fetchPeerDependencies("desired-package"); - - assert.isNull(peerDependencies); - - stub.restore(); - }); - }); -}); diff --git a/eslint/tests/lib/init/source-code-utils.js b/eslint/tests/lib/init/source-code-utils.js deleted file mode 100644 index 994d23d..0000000 --- a/eslint/tests/lib/init/source-code-utils.js +++ /dev/null @@ -1,250 +0,0 @@ -/** - * @fileoverview Tests for source-code-util. - * @author Ian VanSchooten - */ - -"use strict"; - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -const path = require("path"), - fs = require("fs"), - os = require("os"), - assert = require("chai").assert, - sinon = require("sinon"), - sh = require("shelljs"), - { SourceCode } = require("../../../lib/source-code"); - -const proxyquire = require("proxyquire").noCallThru().noPreserveCache(); -const originalDir = process.cwd(); - -//------------------------------------------------------------------------------ -// Tests -//------------------------------------------------------------------------------ - -describe("SourceCodeUtil", () => { - - let fixtureDir, - getSourceCodeOfFiles; - - /** - * Returns the path inside of the fixture directory. - * @param {...string} args file path segments. - * @returns {string} The path inside the fixture directory. - * @private - */ - function getFixturePath(...args) { - let filepath = path.join(fixtureDir, ...args); - - try { - filepath = fs.realpathSync(filepath); - return filepath; - } catch { - return filepath; - } - } - - const log = { - info: sinon.spy(), - error: sinon.spy() - }; - const requireStubs = { - "../logging": log - }; - - // copy into clean area so as not to get "infected" by this project's .eslintrc files - before(() => { - fixtureDir = `${os.tmpdir()}/eslint/fixtures/source-code-util`; - sh.mkdir("-p", fixtureDir); - sh.cp("-r", "./tests/fixtures/source-code-util/.", fixtureDir); - fixtureDir = fs.realpathSync(fixtureDir); - }); - - beforeEach(() => { - getSourceCodeOfFiles = proxyquire("../../../lib/init/source-code-utils", requireStubs).getSourceCodeOfFiles; - }); - - afterEach(() => { - log.info.resetHistory(); - log.error.resetHistory(); - }); - - after(() => { - sh.rm("-r", fixtureDir); - }); - - describe("getSourceCodeOfFiles()", () => { - - it("should handle single string filename arguments", () => { - const filename = getFixturePath("foo.js"); - const sourceCode = getSourceCodeOfFiles(filename, { cwd: fixtureDir }); - - assert.isObject(sourceCode); - }); - - it("should accept an array of string filenames", () => { - const fooFilename = getFixturePath("foo.js"); - const barFilename = getFixturePath("bar.js"); - const sourceCode = getSourceCodeOfFiles([fooFilename, barFilename], { cwd: fixtureDir }); - - assert.isObject(sourceCode); - }); - - it("should accept a glob argument", () => { - const glob = getFixturePath("*.js"); - const filename = getFixturePath("foo.js"); - const sourceCode = getSourceCodeOfFiles(glob, { cwd: fixtureDir }); - - assert.isObject(sourceCode); - assert.property(sourceCode, filename); - }); - - it("should accept a relative filename", () => { - const filename = "foo.js"; - const sourceCode = getSourceCodeOfFiles(filename, { cwd: fixtureDir }); - - assert.isObject(sourceCode); - assert.property(sourceCode, getFixturePath(filename)); - }); - - it("should accept a relative path to a file in a parent directory", () => { - const filename = "../foo.js"; - const sourceCode = getSourceCodeOfFiles(filename, { cwd: getFixturePath("nested") }); - - assert.isObject(sourceCode); - assert.property(sourceCode, getFixturePath("foo.js")); - }); - - it("should accept a callback", () => { - const filename = getFixturePath("foo.js"); - const spy = sinon.spy(); - - process.chdir(fixtureDir); - getSourceCodeOfFiles(filename, {}, spy); - process.chdir(originalDir); - assert(spy.calledOnce); - }); - - it("should call the callback with total number of files being processed", () => { - const filename = getFixturePath("foo.js"); - const spy = sinon.spy(); - - process.chdir(fixtureDir); - getSourceCodeOfFiles(filename, {}, spy); - process.chdir(originalDir); - assert.strictEqual(spy.firstCall.args[0], 1); - }); - - it("should create an object with located filenames as keys", () => { - const fooFilename = getFixturePath("foo.js"); - const barFilename = getFixturePath("bar.js"); - const sourceCode = getSourceCodeOfFiles([fooFilename, barFilename], { cwd: fixtureDir }); - - assert.property(sourceCode, fooFilename); - assert.property(sourceCode, barFilename); - }); - - it("should should not include non-existent filenames in results", () => { - const filename = getFixturePath("missing.js"); - - assert.throws(() => { - getSourceCodeOfFiles(filename, { cwd: fixtureDir }); - }, `No files matching '${filename}' were found.`); - }); - - it("should throw for files with parsing errors", () => { - const filename = getFixturePath("parse-error", "parse-error.js"); - - assert.throw(() => { - getSourceCodeOfFiles(filename, { cwd: fixtureDir }); - }, /Parsing error: Unexpected token ;/u); - - }); - - it("should obtain the sourceCode of a file", () => { - const filename = getFixturePath("foo.js"); - const sourceCode = getSourceCodeOfFiles(filename, { cwd: fixtureDir }); - - assert.isObject(sourceCode); - assert.instanceOf(sourceCode[filename], SourceCode); - }); - - it("should obtain the sourceCode of JSX files", () => { - const filename = getFixturePath("jsx", "foo.jsx"); - const options = { - cwd: fixtureDir, - parserOptions: { - ecmaFeatures: { - jsx: true - } - } - }; - const sourceCode = getSourceCodeOfFiles(filename, options); - - assert.isObject(sourceCode); - assert.instanceOf(sourceCode[filename], SourceCode); - }); - - it("should honor .eslintignore files by default", () => { - const glob = getFixturePath("*.js"); - const unignoredFilename = getFixturePath("foo.js"); - const ignoredFilename = getFixturePath("ignored.js"); - const sourceCode = getSourceCodeOfFiles(glob, { cwd: fixtureDir }); - - assert.property(sourceCode, unignoredFilename); - assert.notProperty(sourceCode, ignoredFilename); - }); - - it("should obtain the sourceCode of all files in a specified folder", () => { - const folder = getFixturePath("nested"); - const fooFile = getFixturePath("nested/foo.js"); - const barFile = getFixturePath("nested/bar.js"); - const sourceCode = getSourceCodeOfFiles(folder, { cwd: fixtureDir }); - - assert.strictEqual(Object.keys(sourceCode).length, 2); - assert.instanceOf(sourceCode[fooFile], SourceCode); - assert.instanceOf(sourceCode[barFile], SourceCode); - }); - - it("should accept cli options", () => { - const pattern = getFixturePath("ext"); - const abcFile = getFixturePath("ext/foo.abc"); - const cliOptions = { extensions: [".abc"], cwd: fixtureDir }; - const sourceCode = getSourceCodeOfFiles(pattern, cliOptions); - - assert.strictEqual(Object.keys(sourceCode).length, 1); - assert.instanceOf(sourceCode[abcFile], SourceCode); - }); - - it("should execute the callback function, if provided", () => { - const callback = sinon.spy(); - const filename = getFixturePath("foo.js"); - - getSourceCodeOfFiles(filename, { cwd: fixtureDir }, callback); - assert(callback.calledOnce); - }); - - it("should execute callback function once per file", () => { - const callback = sinon.spy(); - const fooFilename = getFixturePath("foo.js"); - const barFilename = getFixturePath("bar.js"); - - getSourceCodeOfFiles([fooFilename, barFilename], { cwd: fixtureDir }, callback); - assert.strictEqual(callback.callCount, 2); - }); - - it("should call callback function with total number of files with sourceCode", () => { - const callback = sinon.spy(); - const firstFn = getFixturePath("foo.js"); - const secondFn = getFixturePath("bar.js"); - const thirdFn = getFixturePath("nested/foo.js"); - - getSourceCodeOfFiles([firstFn, secondFn, thirdFn], { cwd: fixtureDir }, callback); - assert(callback.calledWith(3)); - }); - - }); - -}); diff --git a/eslint/tests/lib/linter/apply-disable-directives.js b/eslint/tests/lib/linter/apply-disable-directives.js index 72708bc..de56f72 100644 --- a/eslint/tests/lib/linter/apply-disable-directives.js +++ b/eslint/tests/lib/linter/apply-disable-directives.js @@ -25,7 +25,20 @@ const applyDisableDirectives = require("../../../lib/linter/apply-disable-direct */ function createParentComment(range, value, ruleIds = []) { return { - commentToken: { range, value }, + commentToken: { + range, + loc: { + start: { + line: 1, + column: 1 + }, + end: { + line: 1, + column: value ? value.length : 10 + } + }, + value + }, ruleIds }; } @@ -39,50 +52,50 @@ describe("apply-disable-directives", () => { it("keeps problems before the comment on the same line", () => { assert.deepStrictEqual( applyDisableDirectives({ - directives: [{ parentComment: createParentComment([0, 7]), type: "disable", line: 1, column: 8, ruleId: null }], + directives: [{ parentComment: createParentComment([0, 7]), type: "disable", line: 1, column: 8, ruleId: null, justification: "justification" }], problems: [{ line: 1, column: 7, ruleId: "foo" }] }), - [{ ruleId: "foo", line: 1, column: 7 }] + [{ line: 1, column: 7, ruleId: "foo" }] ); }); it("keeps problems on a previous line before the comment", () => { assert.deepStrictEqual( applyDisableDirectives({ - directives: [{ parentComment: createParentComment([21, 27]), type: "disable", line: 2, column: 1, ruleId: null }], + directives: [{ parentComment: createParentComment([21, 27]), type: "disable", line: 2, column: 1, ruleId: null, justification: "justification" }], problems: [{ line: 1, column: 10, ruleId: "foo" }] }), - [{ ruleId: "foo", line: 1, column: 10 }] + [{ line: 1, column: 10, ruleId: "foo" }] ); }); it("filters problems at the same location as the comment", () => { assert.deepStrictEqual( applyDisableDirectives({ - directives: [{ type: "disable", line: 1, column: 8, ruleId: null }], + directives: [{ type: "disable", line: 1, column: 8, ruleId: null, justification: "justification" }], problems: [{ line: 1, column: 8, ruleId: null }] }), - [] + [{ line: 1, column: 8, ruleId: null, suppressions: [{ kind: "directive", justification: "justification" }] }] ); }); it("filters out problems after the comment on the same line", () => { assert.deepStrictEqual( applyDisableDirectives({ - directives: [{ type: "disable", line: 1, column: 8, ruleId: null }], + directives: [{ type: "disable", line: 1, column: 8, ruleId: null, justification: "justification" }], problems: [{ line: 1, column: 10, ruleId: "foo" }] }), - [] + [{ line: 1, column: 10, ruleId: "foo", suppressions: [{ kind: "directive", justification: "justification" }] }] ); }); it("filters out problems on a later line than the comment", () => { assert.deepStrictEqual( applyDisableDirectives({ - directives: [{ type: "disable", line: 1, column: 8, ruleId: null }], + directives: [{ type: "disable", line: 1, column: 8, ruleId: null, justification: "justification" }], problems: [{ line: 2, column: 3, ruleId: "foo" }] }), - [] + [{ line: 2, column: 3, ruleId: "foo", suppressions: [{ kind: "directive", justification: "justification" }] }] ); }); }); @@ -91,20 +104,20 @@ describe("apply-disable-directives", () => { it("filters problems after the comment that have the same ruleId", () => { assert.deepStrictEqual( applyDisableDirectives({ - directives: [{ type: "disable", line: 1, column: 8, ruleId: "foo" }], + directives: [{ type: "disable", line: 1, column: 8, ruleId: "foo", justification: "justification" }], problems: [{ line: 2, column: 3, ruleId: "foo" }] }), - [] + [{ line: 2, column: 3, ruleId: "foo", suppressions: [{ kind: "directive", justification: "justification" }] }] ); }); it("filters problems in the same location as the comment that have the same ruleId", () => { assert.deepStrictEqual( applyDisableDirectives({ - directives: [{ type: "disable", line: 1, column: 8, ruleId: "foo" }], + directives: [{ type: "disable", line: 1, column: 8, ruleId: "foo", justification: "justification" }], problems: [{ line: 1, column: 8, ruleId: "foo" }] }), - [] + [{ line: 1, column: 8, ruleId: "foo", suppressions: [{ kind: "directive", justification: "justification" }] }] ); }); @@ -116,7 +129,8 @@ describe("apply-disable-directives", () => { type: "disable", line: 1, column: 1, - ruleId: "foo" + ruleId: "foo", + justification: "justification" }], problems: [{ line: 2, column: 3, ruleId: "not-foo" }] }), @@ -151,14 +165,16 @@ describe("apply-disable-directives", () => { type: "disable", line: 1, column: 1, - ruleId: null + ruleId: null, + justification: "j1" }, { parentComment: createParentComment([27, 45]), type: "enable", line: 1, column: 26, - ruleId: null + ruleId: null, + justification: "j2" } ], problems: [{ line: 1, column: 27, ruleId: "foo" }] @@ -176,14 +192,16 @@ describe("apply-disable-directives", () => { type: "disable", line: 1, column: 1, - ruleId: null + ruleId: null, + justification: "j1" }, { parentComment: createParentComment([26, 40]), type: "enable", line: 1, column: 26, - ruleId: null + ruleId: null, + justification: "j2" } ], problems: [{ line: 1, column: 26, ruleId: "foo" }] @@ -196,12 +214,12 @@ describe("apply-disable-directives", () => { assert.deepStrictEqual( applyDisableDirectives({ directives: [ - { type: "disable", line: 1, column: 1, ruleId: null }, - { type: "enable", line: 1, column: 26, ruleId: null } + { type: "disable", line: 1, column: 1, ruleId: null, justification: "j1" }, + { type: "enable", line: 1, column: 26, ruleId: null, justification: "j2" } ], problems: [{ line: 1, column: 3, ruleId: "foo" }] }), - [] + [{ line: 1, column: 3, ruleId: "foo", suppressions: [{ kind: "directive", justification: "j1" }] }] ); }); @@ -214,26 +232,29 @@ describe("apply-disable-directives", () => { type: "disable", line: 1, column: 1, - ruleId: null + ruleId: null, + justification: "j1" }, { parentComment: createParentComment([26, 44]), type: "enable", line: 1, column: 26, - ruleId: "foo" + ruleId: "foo", + justification: "j2" }, { parentComment: createParentComment([45, 63]), type: "disable", line: 2, column: 1, - ruleId: "foo" + ruleId: "foo", + justification: "j3" } ], problems: [{ line: 3, column: 3, ruleId: "foo" }] }), - [] + [{ line: 3, column: 3, ruleId: "foo", suppressions: [{ kind: "directive", justification: "j3" }] }] ); }); @@ -246,26 +267,29 @@ describe("apply-disable-directives", () => { type: "disable", line: 1, column: 1, - ruleId: null + ruleId: null, + justification: "j1" }, { parentComment: createParentComment([21, 44]), type: "enable", line: 1, column: 26, - ruleId: "foo" + ruleId: "foo", + justification: "j2" }, { parentComment: createParentComment([45, 63]), type: "disable", line: 2, column: 1, - ruleId: null + ruleId: null, + justification: "j3" } ], problems: [{ line: 3, column: 3, ruleId: "foo" }] }), - [] + [{ line: 3, column: 3, ruleId: "foo", suppressions: [{ kind: "directive", justification: "j3" }] }] ); }); @@ -278,14 +302,16 @@ describe("apply-disable-directives", () => { type: "disable", line: 1, column: 1, - ruleId: "foo" + ruleId: "foo", + justification: "j1" }, { parentComment: createParentComment([25, 44]), type: "enable", line: 1, column: 26, - ruleId: null + ruleId: null, + justification: "j2" } ], problems: [{ line: 1, column: 3, ruleId: "not-foo" }] @@ -305,14 +331,16 @@ describe("apply-disable-directives", () => { type: "disable", line: 1, column: 1, - ruleId: null + ruleId: null, + justification: "j1" }, { parentComment: createParentComment([21, 44]), type: "enable", line: 2, column: 1, - ruleId: "foo" + ruleId: "foo", + justification: "j2" } ], problems: [{ line: 2, column: 4, ruleId: "foo" }] @@ -330,14 +358,16 @@ describe("apply-disable-directives", () => { type: "disable", line: 1, column: 1, - ruleId: null + ruleId: null, + justification: "j1" }, { parentComment: createParentComment([21, 44]), type: "enable", line: 2, column: 1, - ruleId: "foo" + ruleId: "foo", + justification: "j2" } ], problems: [{ line: 2, column: 1, ruleId: "foo" }] @@ -350,12 +380,26 @@ describe("apply-disable-directives", () => { assert.deepStrictEqual( applyDisableDirectives({ directives: [ - { type: "disable", line: 1, column: 1, ruleId: null }, - { type: "enable", line: 2, column: 1, ruleId: "foo" } + { + parentComment: createParentComment([0, 20]), + type: "disable", + line: 1, + column: 1, + ruleId: null, + justification: "j1" + }, + { + parentComment: createParentComment([21, 44]), + type: "enable", + line: 2, + column: 1, + ruleId: "foo", + justification: "j2" + } ], problems: [{ line: 2, column: 4, ruleId: "not-foo" }] }), - [] + [{ line: 2, column: 4, ruleId: "not-foo", suppressions: [{ kind: "directive", justification: "j1" }] }] ); }); @@ -363,9 +407,9 @@ describe("apply-disable-directives", () => { assert.deepStrictEqual( applyDisableDirectives({ directives: [ - { type: "disable", line: 1, column: 1, ruleId: null }, - { type: "enable", line: 1, column: 22, ruleId: "foo" }, - { type: "enable", line: 1, column: 46, ruleId: "bar" } + { type: "disable", line: 1, column: 1, ruleId: null, justification: "j1" }, + { type: "enable", line: 1, column: 22, ruleId: "foo", justification: "j2" }, + { type: "enable", line: 1, column: 46, ruleId: "bar", justification: "j3" } ], problems: [ { line: 1, column: 10, ruleId: "foo" }, @@ -377,7 +421,10 @@ describe("apply-disable-directives", () => { ] }), [ + { line: 1, column: 10, ruleId: "foo", suppressions: [{ kind: "directive", justification: "j1" }] }, + { line: 1, column: 10, ruleId: "bar", suppressions: [{ kind: "directive", justification: "j1" }] }, { line: 1, column: 30, ruleId: "foo" }, + { line: 1, column: 30, ruleId: "bar", suppressions: [{ kind: "directive", justification: "j1" }] }, { line: 1, column: 50, ruleId: "foo" }, { line: 1, column: 50, ruleId: "bar" } ] @@ -394,7 +441,8 @@ describe("apply-disable-directives", () => { type: "disable-line", line: 2, column: 1, - ruleId: null + ruleId: null, + justification: "justification" }], problems: [{ line: 1, column: 5, ruleId: "foo" }] }), @@ -410,11 +458,12 @@ describe("apply-disable-directives", () => { type: "disable-line", line: 1, column: 8, - ruleId: null + ruleId: null, + justification: "justification" }], problems: [{ line: 1, column: 1, ruleId: "foo" }] }), - [] + [{ line: 1, column: 1, ruleId: "foo", suppressions: [{ kind: "directive", justification: "justification" }] }] ); }); @@ -426,11 +475,12 @@ describe("apply-disable-directives", () => { type: "disable-line", line: 1, column: 8, - ruleId: null + ruleId: null, + justification: "justification" }], problems: [{ line: 1, column: 10, ruleId: "foo" }] }), - [] + [{ line: 1, column: 10, ruleId: "foo", suppressions: [{ kind: "directive", justification: "justification" }] }] ); }); @@ -442,7 +492,8 @@ describe("apply-disable-directives", () => { type: "disable-line", line: 1, column: 8, - ruleId: "foo" + ruleId: "foo", + justification: "justification" }], problems: [{ line: 2, column: 1, ruleId: "foo" }] }), @@ -460,18 +511,26 @@ describe("apply-disable-directives", () => { type: "disable-line", line: 1, column: 8, - ruleId: "foo" + ruleId: "foo", + justification: "justification" }], problems: [{ line: 1, column: 2, ruleId: "foo" }] }), - [] + [{ line: 1, column: 2, ruleId: "foo", suppressions: [{ kind: "directive", justification: "justification" }] }] ); }); it("keeps problems on the current line that do not match the ruleId", () => { assert.deepStrictEqual( applyDisableDirectives({ - directives: [{ parentComment: createParentComment([0, 27]), type: "disable-line", line: 1, column: 1, ruleId: "foo" }], + directives: [{ + parentComment: createParentComment([0, 27]), + type: "disable-line", + line: 1, + column: 1, + ruleId: "foo", + justification: "justification" + }], problems: [{ line: 1, column: 2, ruleId: "not-foo" }] }), [{ line: 1, column: 2, ruleId: "not-foo" }] @@ -487,19 +546,21 @@ describe("apply-disable-directives", () => { type: "disable", line: 1, column: 1, - ruleId: null + ruleId: null, + justification: "j1" }, { parentComment: createParentComment([24, 28]), type: "disable-line", line: 1, column: 22, - ruleId: "foo" + ruleId: "foo", + justification: "j2" } ], problems: [{ line: 1, column: 5, ruleId: "not-foo" }] }), - [] + [{ line: 1, column: 5, ruleId: "not-foo", suppressions: [{ kind: "directive", justification: "j1" }] }] ); }); @@ -512,47 +573,53 @@ describe("apply-disable-directives", () => { type: "disable-line", line: 1, column: 8, - ruleId: "foo" + ruleId: "foo", + justification: "j1" }, { parentComment: createParentComment([38, 73]), type: "disable-line", line: 2, column: 8, - ruleId: "foo" + ruleId: "foo", + justification: "j2" }, { parentComment: createParentComment([76, 111]), type: "disable-line", line: 3, column: 8, - ruleId: "foo" + ruleId: "foo", + justification: "j3" }, { parentComment: createParentComment([114, 149]), type: "disable-line", line: 4, column: 8, - ruleId: "foo" + ruleId: "foo", + justification: "j4" }, { parentComment: createParentComment([152, 187]), type: "disable-line", line: 5, column: 8, - ruleId: "foo" + ruleId: "foo", + justification: "j5" }, { parentComment: createParentComment([190, 225]), type: "disable-line", line: 6, column: 8, - ruleId: "foo" + ruleId: "foo", + justification: "j6" } ], problems: [{ line: 2, column: 1, ruleId: "foo" }] }), - [] + [{ line: 2, column: 1, ruleId: "foo", suppressions: [{ kind: "directive", justification: "j2" }] }] ); }); }); @@ -566,11 +633,12 @@ describe("apply-disable-directives", () => { type: "disable-next-line", line: 1, column: 1, - ruleId: null + ruleId: null, + justification: "justification" }], problems: [{ line: 2, column: 3, ruleId: "foo" }] }), - [] + [{ line: 2, column: 3, ruleId: "foo", suppressions: [{ kind: "directive", justification: "justification" }] }] ); }); @@ -598,7 +666,8 @@ describe("apply-disable-directives", () => { type: "disable-next-line", line: 1, column: 1, - ruleId: null + ruleId: null, + justification: "justification" }], problems: [{ line: 3, column: 3, ruleId: "foo" }] }), @@ -610,12 +679,12 @@ describe("apply-disable-directives", () => { assert.deepStrictEqual( applyDisableDirectives({ directives: [ - { type: "disable-next-line", line: 1, column: 1, ruleId: null }, - { type: "enable", line: 1, column: 5, ruleId: null } + { parentComment: createParentComment([0, 31]), type: "disable-next-line", line: 1, column: 1, ruleId: null, justification: "j1" }, + { type: "enable", line: 1, column: 5, ruleId: null, justification: "j2" } ], problems: [{ line: 2, column: 2, ruleId: "foo" }] }), - [] + [{ line: 2, column: 2, ruleId: "foo", suppressions: [{ kind: "directive", justification: "j1" }] }] ); }); }); @@ -624,10 +693,10 @@ describe("apply-disable-directives", () => { it("filters problems on the next line that match the ruleId", () => { assert.deepStrictEqual( applyDisableDirectives({ - directives: [{ type: "disable-next-line", line: 1, column: 1, ruleId: "foo" }], + directives: [{ type: "disable-next-line", line: 1, column: 1, ruleId: "foo", justification: "justification" }], problems: [{ line: 2, column: 1, ruleId: "foo" }] }), - [] + [{ line: 2, column: 1, ruleId: "foo", suppressions: [{ kind: "directive", justification: "justification" }] }] ); }); @@ -639,7 +708,8 @@ describe("apply-disable-directives", () => { type: "disable-next-line", line: 1, column: 1, - ruleId: "foo" + ruleId: "foo", + justification: "justification" }], problems: [{ line: 2, column: 1, ruleId: "not-foo" }] }), @@ -653,7 +723,7 @@ describe("apply-disable-directives", () => { assert.throws( () => applyDisableDirectives({ - directives: [{ type: "foo", line: 1, column: 4, ruleId: "foo" }], + directives: [{ type: "foo", line: 1, column: 4, ruleId: "foo", justification: "justification" }], problems: [] }), "Unrecognized directive type 'foo'" @@ -669,25 +739,24 @@ describe("apply-disable-directives", () => { parentComment: createParentComment([0, 20]), type: "disable", line: 1, - column: 1 + column: 1, + justification: "justification" }], problems: [], reportUnusedDisableDirectives: "error" }), - [ - { - ruleId: null, - message: "Unused eslint-disable directive (no problems were reported).", - line: 1, - column: 1, - fix: { - range: [0, 20], - text: " " - }, - severity: 2, - nodeType: null - } - ] + [{ + ruleId: null, + message: "Unused eslint-disable directive (no problems were reported).", + line: 1, + column: 1, + fix: { + range: [0, 20], + text: " " + }, + severity: 2, + nodeType: null + }] ); }); @@ -698,33 +767,32 @@ describe("apply-disable-directives", () => { parentComment: createParentComment([0, 20]), type: "disable", line: 1, - column: 1 + column: 1, + justification: "justification" }], disableFixes: true, problems: [], reportUnusedDisableDirectives: "error" }), - [ - { - ruleId: null, - message: "Unused eslint-disable directive (no problems were reported).", - line: 1, - column: 1, - severity: 2, - nodeType: null - } - ] + [{ + ruleId: null, + message: "Unused eslint-disable directive (no problems were reported).", + line: 1, + column: 1, + severity: 2, + nodeType: null + }] ); }); it("Does not add a problem for /* eslint-disable */ /* (problem) */", () => { assert.deepStrictEqual( applyDisableDirectives({ - directives: [{ type: "disable", line: 1, column: 1, ruleId: null }], + directives: [{ type: "disable", line: 1, column: 1, ruleId: null, justification: "justification" }], problems: [{ line: 2, column: 1, ruleId: "foo" }], reportUnusedDisableDirectives: "error" }), - [] + [{ line: 2, column: 1, ruleId: "foo", suppressions: [{ kind: "directive", justification: "justification" }] }] ); }); @@ -736,25 +804,24 @@ describe("apply-disable-directives", () => { type: "disable", line: 1, column: 1, - ruleId: "foo" + ruleId: "foo", + justification: "justification" }], problems: [], reportUnusedDisableDirectives: "error" }), - [ - { - ruleId: null, - message: "Unused eslint-disable directive (no problems were reported from 'foo').", - line: 1, - column: 1, - fix: { - range: [0, 21], - text: " " - }, - severity: 2, - nodeType: null - } - ] + [{ + ruleId: null, + message: "Unused eslint-disable directive (no problems were reported from 'foo').", + line: 1, + column: 1, + fix: { + range: [0, 21], + text: " " + }, + severity: 2, + nodeType: null + }] ); }); @@ -766,7 +833,8 @@ describe("apply-disable-directives", () => { type: "disable", line: 1, column: 1, - ruleId: "foo" + ruleId: "foo", + justification: "justification" }], problems: [{ line: 1, column: 20, ruleId: "not-foo" }], reportUnusedDisableDirectives: "error" @@ -802,14 +870,16 @@ describe("apply-disable-directives", () => { type: "disable", line: 1, column: 8, - ruleId: null + ruleId: null, + justification: "j1" }, { parentComment: createParentComment([0, 21]), type: "enable", line: 1, column: 24, - ruleId: "foo" + ruleId: "foo", + justification: "j2" } ], problems: [{ line: 1, column: 2, ruleId: "foo" }], @@ -846,33 +916,33 @@ describe("apply-disable-directives", () => { type: "disable", line: 1, column: 1, - ruleId: null + ruleId: null, + justification: "j1" }, { parentComment: createParentComment([21, 41]), type: "enable", line: 1, column: 12, - ruleId: null + ruleId: null, + justification: "j2" } ], problems: [], reportUnusedDisableDirectives: "error" }), - [ - { - ruleId: null, - message: "Unused eslint-disable directive (no problems were reported).", - line: 1, - column: 1, - fix: { - range: [0, 20], - text: " " - }, - severity: 2, - nodeType: null - } - ] + [{ + ruleId: null, + message: "Unused eslint-disable directive (no problems were reported).", + line: 1, + column: 1, + fix: { + range: [0, 20], + text: " " + }, + severity: 2, + nodeType: null + }] ); }); @@ -885,14 +955,16 @@ describe("apply-disable-directives", () => { type: "disable", line: 1, column: 1, - ruleId: null + ruleId: null, + justification: "j1" }, { parentComment: createParentComment([21, 42]), type: "disable", line: 2, column: 1, - ruleId: null + ruleId: null, + justification: "j2" } ], problems: [], @@ -936,14 +1008,16 @@ describe("apply-disable-directives", () => { type: "disable", line: 1, column: 1, - ruleId: null + ruleId: null, + justification: "j1" }, { parentComment: createParentComment([22, 45]), type: "disable", line: 2, column: 1, - ruleId: null + ruleId: null, + justification: "j2" } ], problems: [{ line: 3, column: 1, ruleId: "foo" }], @@ -961,6 +1035,15 @@ describe("apply-disable-directives", () => { }, severity: 2, nodeType: null + }, + { + line: 3, + column: 1, + ruleId: "foo", + suppressions: [ + { kind: "directive", justification: "j1" }, + { kind: "directive", justification: "j2" } + ] } ] ); @@ -975,14 +1058,16 @@ describe("apply-disable-directives", () => { type: "disable", line: 1, column: 1, - ruleId: "foo" + ruleId: "foo", + justification: "j1" }, { parentComment: createParentComment([22, 45]), type: "disable", line: 2, column: 1, - ruleId: null + ruleId: null, + justification: "j2" } ], problems: [{ line: 3, column: 1, ruleId: "foo" }], @@ -1000,6 +1085,15 @@ describe("apply-disable-directives", () => { }, severity: 2, nodeType: null + }, + { + line: 3, + column: 1, + ruleId: "foo", + suppressions: [ + { kind: "directive", justification: "j1" }, + { kind: "directive", justification: "j2" } + ] } ] ); @@ -1008,11 +1102,11 @@ describe("apply-disable-directives", () => { it("Does not add a problem for /* eslint-disable foo */ /* (problem from foo) */", () => { assert.deepStrictEqual( applyDisableDirectives({ - directives: [{ type: "disable", line: 1, column: 1, ruleId: "foo" }], + directives: [{ type: "disable", line: 1, column: 1, ruleId: "foo", justification: "justification" }], problems: [{ line: 1, column: 6, ruleId: "foo" }], reportUnusedDisableDirectives: "error" }), - [] + [{ line: 1, column: 6, ruleId: "foo", suppressions: [{ kind: "directive", justification: "justification" }] }] ); }); @@ -1025,14 +1119,16 @@ describe("apply-disable-directives", () => { type: "disable", line: 1, column: 1, - ruleId: null + ruleId: null, + justification: "j1" }, { parentComment: createParentComment([22, 45]), type: "disable", line: 2, column: 1, - ruleId: "foo" + ruleId: "foo", + justification: "j2" } ], problems: [{ line: 3, column: 1, ruleId: "foo" }], @@ -1050,6 +1146,15 @@ describe("apply-disable-directives", () => { }, severity: 2, nodeType: null + }, + { + line: 3, + column: 1, + ruleId: "foo", + suppressions: [ + { kind: "directive", justification: "j1" }, + { kind: "directive", justification: "j2" } + ] } ] ); @@ -1064,14 +1169,16 @@ describe("apply-disable-directives", () => { type: "disable", line: 1, column: 1, - ruleId: null + ruleId: null, + justification: "j1" }, { parentComment: createParentComment([21, 45]), type: "disable", line: 2, column: 1, - ruleId: "foo" + ruleId: "foo", + justification: "j2" } ], problems: [{ line: 3, column: 1, ruleId: "bar" }], @@ -1089,6 +1196,12 @@ describe("apply-disable-directives", () => { }, severity: 2, nodeType: null + }, + { + line: 3, + column: 1, + ruleId: "bar", + suppressions: [{ kind: "directive", justification: "j1" }] } ] ); @@ -1103,14 +1216,16 @@ describe("apply-disable-directives", () => { type: "disable", line: 1, column: 1, - ruleId: "foo" + ruleId: "foo", + justification: "j1" }, { parentComment: createParentComment([25, 46]), type: "enable", line: 1, column: 26, - ruleId: "foo" + ruleId: "foo", + justification: "j2" } ], problems: [{ line: 1, column: 30, ruleId: "foo" }], @@ -1147,14 +1262,16 @@ describe("apply-disable-directives", () => { type: "disable", line: 1, column: 1, - ruleId: "foo" + ruleId: "foo", + justification: "j1" }, { parentComment: createParentComment([25, 49]), type: "enable", line: 1, column: 26, - ruleId: null + ruleId: null, + justification: "j2" } ], problems: [{ line: 1, column: 30, ruleId: "foo" }], @@ -1191,21 +1308,24 @@ describe("apply-disable-directives", () => { type: "disable", line: 1, column: 1, - ruleId: null + ruleId: null, + justification: "j1" }, { parentComment: createParentComment([22, 45]), type: "disable", line: 2, column: 1, - ruleId: "foo" + ruleId: "foo", + justification: "j2" }, { parentComment: createParentComment([46, 69]), type: "enable", line: 3, column: 1, - ruleId: "foo" + ruleId: "foo", + justification: "j3" } ], problems: [{ line: 4, column: 1, ruleId: "foo" }], @@ -1253,7 +1373,8 @@ describe("apply-disable-directives", () => { type: "disable-line", line: 1, column: 1, - ruleId: null + ruleId: null, + justification: "justification" }], problems: [], reportUnusedDisableDirectives: "error" @@ -1279,11 +1400,11 @@ describe("apply-disable-directives", () => { it("Does not add a problem for // eslint-disable-line (problem)", () => { assert.deepStrictEqual( applyDisableDirectives({ - directives: [{ type: "disable-line", line: 1, column: 1, ruleId: null }], + directives: [{ type: "disable-line", line: 1, column: 1, ruleId: null, justification: "justification" }], problems: [{ line: 1, column: 10, ruleId: "foo" }], reportUnusedDisableDirectives: "error" }), - [] + [{ line: 1, column: 10, ruleId: "foo", suppressions: [{ kind: "directive", justification: "justification" }] }] ); }); @@ -1294,8 +1415,9 @@ describe("apply-disable-directives", () => { parentComment: createParentComment([0, 27]), type: "disable-next-line", line: 1, - column: 1, - ruleId: null + column: 2, + ruleId: null, + justification: "justification" }], problems: [], reportUnusedDisableDirectives: "error" @@ -1305,7 +1427,7 @@ describe("apply-disable-directives", () => { ruleId: null, message: "Unused eslint-disable directive (no problems were reported).", line: 1, - column: 1, + column: 2, fix: { range: [0, 27], text: " " @@ -1320,11 +1442,11 @@ describe("apply-disable-directives", () => { it("Does not add a problem for // eslint-disable-next-line \\n (problem)", () => { assert.deepStrictEqual( applyDisableDirectives({ - directives: [{ type: "disable-next-line", line: 1, column: 1, ruleId: null }], + directives: [{ type: "disable-next-line", line: 1, column: 1, ruleId: null, justification: "justification" }], problems: [{ line: 2, column: 10, ruleId: "foo" }], reportUnusedDisableDirectives: "error" }), - [] + [{ line: 2, column: 10, ruleId: "foo", suppressions: [{ kind: "directive", justification: "justification" }] }] ); }); @@ -1370,7 +1492,14 @@ describe("apply-disable-directives", () => { it("Does not add problems when reportUnusedDisableDirectives: \"off\" is used", () => { assert.deepStrictEqual( applyDisableDirectives({ - directives: [{ parentComment: createParentComment([0, 27]), type: "disable-next-line", line: 1, column: 1, ruleId: null }], + directives: [{ + parentComment: createParentComment([0, 27]), + type: "disable-next-line", + line: 1, + column: 1, + ruleId: null, + justification: "justification" + }], problems: [], reportUnusedDisableDirectives: "off" }), @@ -1391,14 +1520,16 @@ describe("apply-disable-directives", () => { ruleId: "used", type: "disable", line: 1, - column: 18 + column: 18, + justification: "j1" }, { parentComment, ruleId: "unused", type: "disable", line: 1, - column: 22 + column: 22, + justification: "j2" } ], problems: [{ line: 2, column: 1, ruleId: "used" }], @@ -1416,6 +1547,12 @@ describe("apply-disable-directives", () => { }, severity: 2, nodeType: null + }, + { + line: 2, + column: 1, + ruleId: "used", + suppressions: [{ kind: "directive", justification: "j1" }] } ] ); @@ -1431,14 +1568,16 @@ describe("apply-disable-directives", () => { ruleId: "used", type: "disable", line: 1, - column: 18 + column: 18, + justification: "j1" }, { parentComment, ruleId: "unused", type: "disable", line: 1, - column: 24 + column: 24, + justification: "j2" } ], problems: [{ line: 2, column: 1, ruleId: "used" }], @@ -1456,6 +1595,12 @@ describe("apply-disable-directives", () => { }, severity: 2, nodeType: null + }, + { + line: 2, + column: 1, + ruleId: "used", + suppressions: [{ kind: "directive", justification: "j1" }] } ] ); @@ -1472,14 +1617,16 @@ describe("apply-disable-directives", () => { ruleId: "unused", type: "disable", line: 1, - column: 18 + column: 18, + justification: "j1" }, { parentComment, ruleId: "used", type: "disable", line: 1, - column: 25 + column: 25, + justification: "j2" } ], problems: [{ line: 2, column: 1, ruleId: "used" }], @@ -1497,6 +1644,12 @@ describe("apply-disable-directives", () => { }, severity: 2, nodeType: null + }, + { + line: 2, + column: 1, + ruleId: "used", + suppressions: [{ kind: "directive", justification: "j2" }] } ] ); @@ -1513,14 +1666,16 @@ describe("apply-disable-directives", () => { ruleId: "unused", type: "disable", line: 1, - column: 18 + column: 18, + justification: "j1" }, { parentComment, ruleId: "used", type: "disable", line: 1, - column: 29 + column: 29, + justification: "j2" } ], problems: [{ line: 2, column: 1, ruleId: "used" }], @@ -1538,6 +1693,12 @@ describe("apply-disable-directives", () => { }, severity: 2, nodeType: null + }, + { + line: 2, + column: 1, + ruleId: "used", + suppressions: [{ kind: "directive", justification: "j2" }] } ] ); @@ -1554,21 +1715,24 @@ describe("apply-disable-directives", () => { ruleId: "unused-1", type: "disable", line: 1, - column: 18 + column: 18, + justification: "j1" }, { parentComment, ruleId: "unused-2", type: "disable", line: 1, - column: 28 + column: 28, + justification: "j2" }, { parentComment, ruleId: "used", type: "disable", line: 1, - column: 38 + column: 38, + justification: "j3" } ], problems: [{ line: 2, column: 1, ruleId: "used" }], @@ -1598,6 +1762,12 @@ describe("apply-disable-directives", () => { }, severity: 2, nodeType: null + }, + { + line: 2, + column: 1, + ruleId: "used", + suppressions: [{ kind: "directive", justification: "j3" }] } ] ); @@ -1614,28 +1784,32 @@ describe("apply-disable-directives", () => { ruleId: "unused-1", type: "disable", line: 1, - column: 18 + column: 18, + justification: "j1" }, { parentComment, ruleId: "unused-2", type: "disable", line: 1, - column: 28 + column: 28, + justification: "j2" }, { parentComment, ruleId: "used", type: "disable", line: 1, - column: 38 + column: 38, + justification: "j3" }, { parentComment, ruleId: "unused-3", type: "disable", line: 1, - column: 43 + column: 43, + justification: "j4" } ], problems: [{ line: 2, column: 1, ruleId: "used" }], @@ -1677,6 +1851,12 @@ describe("apply-disable-directives", () => { }, severity: 2, nodeType: null + }, + { + line: 2, + column: 1, + ruleId: "used", + suppressions: [{ kind: "directive", justification: "j3" }] } ] ); @@ -1693,14 +1873,16 @@ describe("apply-disable-directives", () => { ruleId: "unused-1", type: "disable", line: 1, - column: 18 + column: 18, + justification: "j1" }, { parentComment, ruleId: "unused-2", type: "disable", line: 1, - column: 28 + column: 28, + justification: "j2" } ], problems: [], @@ -1770,5 +1952,72 @@ describe("apply-disable-directives", () => { ] ); }); + + it("Adds a problem for /* eslint-disable foo */ \\n (problem from foo and bar) // eslint-disable-line foo, bar", () => { + assert.deepStrictEqual( + applyDisableDirectives({ + directives: [ + { + parentComment: createParentComment([0, 29], " eslint-disable foo ", ["foo"]), + ruleId: "foo", + type: "disable", + line: 1, + column: 1, + justification: "j1" + }, + { + parentComment: createParentComment([41, 81], " eslint-disable-line foo, bar", ["foo", "bar"]), + ruleId: "foo", + type: "disable-line", + line: 2, + column: 11, + justification: "j2" + }, + { + parentComment: createParentComment([41, 81], " eslint-disable-line foo, bar ", ["foo", "bar"]), + ruleId: "bar", + type: "disable-line", + line: 2, + column: 11, + justification: "j2" + } + ], + problems: [ + { line: 2, column: 1, ruleId: "bar" }, + { line: 2, column: 6, ruleId: "foo" } + ], + reportUnusedDisableDirectives: "error" + }), + [ + { + ruleId: "bar", + line: 2, + column: 1, + suppressions: [{ kind: "directive", justification: "j2" }] + }, + { + ruleId: "foo", + line: 2, + column: 6, + suppressions: [ + { kind: "directive", justification: "j1" }, + { kind: "directive", justification: "j2" } + ] + }, + { + ruleId: null, + message: "Unused eslint-disable directive (no problems were reported from 'foo').", + line: 2, + column: 11, + fix: { + range: [64, 69], + text: "" + }, + severity: 2, + nodeType: null + } + ] + ); + }); }); }); diff --git a/eslint/tests/lib/linter/code-path-analysis/code-path.js b/eslint/tests/lib/linter/code-path-analysis/code-path.js index 760d5b3..40fb017 100644 --- a/eslint/tests/lib/linter/code-path-analysis/code-path.js +++ b/eslint/tests/lib/linter/code-path-analysis/code-path.js @@ -54,7 +54,7 @@ function getOrderOfTraversing(codePath, options, callback) { codePath.traverseSegments(options, (segment, controller) => { retv.push(segment.id); if (callback) { - callback(segment, controller); // eslint-disable-line node/callback-return -- At end of inner function + callback(segment, controller); // eslint-disable-line n/callback-return -- At end of inner function } }); @@ -69,7 +69,7 @@ describe("CodePathAnalyzer", () => { /* * If you need to output the code paths and DOT graph information for a - * particular piece of code, udpate and uncomment the following test and + * particular piece of code, update and uncomment the following test and * then run: * DEBUG=eslint:code-path npx mocha tests/lib/linter/code-path-analysis/ * diff --git a/eslint/tests/lib/linter/config-comment-parser.js b/eslint/tests/lib/linter/config-comment-parser.js index f51fe69..e9f595d 100644 --- a/eslint/tests/lib/linter/config-comment-parser.js +++ b/eslint/tests/lib/linter/config-comment-parser.js @@ -215,7 +215,7 @@ describe("ConfigCommentParser", () => { }); }); - it("should parse list config with two items and exta whitespace", () => { + it("should parse list config with two items and extra whitespace", () => { const code = " a , b "; const result = commentParser.parseListConfig(code); diff --git a/eslint/tests/lib/linter/linter.js b/eslint/tests/lib/linter/linter.js index 3343461..407194d 100644 --- a/eslint/tests/lib/linter/linter.js +++ b/eslint/tests/lib/linter/linter.js @@ -217,6 +217,131 @@ describe("Linter", () => { }); + describe("getSuppressedMessages()", () => { + it("should have no suppressed messages", () => { + const suppressedMessages = linter.getSuppressedMessages(); + + assert.strictEqual(suppressedMessages.length, 0); + }); + + it("should have a suppressed message", () => { + const code = "/* eslint-disable no-alert -- justification */\nalert(\"test\");"; + const config = { + rules: { "no-alert": 1 } + }; + const messages = linter.verify(code, config); + const suppressedMessages = linter.getSuppressedMessages(); + + assert.strictEqual(messages.length, 0); + + assert.strictEqual(suppressedMessages.length, 1); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); + assert.deepStrictEqual( + suppressedMessages[0].suppressions, + [{ kind: "directive", justification: "justification" }] + ); + }); + + it("should have a suppressed message", () => { + const code = [ + "/* eslint-disable no-alert --- j1", + " * --- j2", + " */", + "alert(\"test\");" + ].join("\n"); + const config = { + rules: { "no-alert": 1 } + }; + const messages = linter.verify(code, config); + const suppressedMessages = linter.getSuppressedMessages(); + + assert.strictEqual(messages.length, 0); + + assert.strictEqual(suppressedMessages.length, 1); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); + assert.deepStrictEqual( + suppressedMessages[0].suppressions, + [{ kind: "directive", justification: "j1\n * --- j2" }] + ); + }); + + it("should not report a lint message", () => { + const code = [ + "/* eslint-disable -- j1 */", + "// eslint-disable-next-line -- j2", + "alert(\"test\");" + ].join("\n"); + const config = { + rules: { "no-alert": 1 } + }; + const messages = linter.verify(code, config); + const suppressedMessages = linter.getSuppressedMessages(); + + assert.strictEqual(messages.length, 0); + + assert.strictEqual(suppressedMessages.length, 1); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); + assert.deepStrictEqual( + suppressedMessages[0].suppressions, + [ + { kind: "directive", justification: "j1" }, + { kind: "directive", justification: "j2" } + ] + ); + }); + + it("should not report a lint message", () => { + const code = [ + "/* eslint-disable -- j1 */", + "alert(\"test\"); // eslint-disable-line -- j2" + ].join("\n"); + const config = { + rules: { "no-alert": 1 } + }; + const messages = linter.verify(code, config); + const suppressedMessages = linter.getSuppressedMessages(); + + assert.strictEqual(messages.length, 0); + + assert.strictEqual(suppressedMessages.length, 1); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); + assert.deepStrictEqual( + suppressedMessages[0].suppressions, + [ + { kind: "directive", justification: "j1" }, + { kind: "directive", justification: "j2" } + ] + ); + }); + + it("should have a suppressed message with multiple suppressions", () => { + const code = [ + "/* eslint-disable no-alert -- j1 */", + "/* eslint-disable no-console -- unused */", + "/* eslint-disable-next-line no-alert -- j2 */", + "alert(\"test\"); // eslint-disable-line no-alert -- j3" + ].join("\n"); + const config = { + rules: { "no-alert": 1 } + }; + const messages = linter.verify(code, config); + const suppressedMessages = linter.getSuppressedMessages(); + + assert.strictEqual(messages.length, 0); + + assert.strictEqual(suppressedMessages.length, 1); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); + assert.deepStrictEqual( + suppressedMessages[0].suppressions, + [ + { kind: "directive", justification: "j1" }, + { kind: "directive", justification: "j2" }, + { kind: "directive", justification: "j3" } + ] + ); + }); + }); + describe("context.getSource()", () => { const code = TEST_CODE; @@ -832,8 +957,10 @@ describe("Linter", () => { })); const messages = linter.verify(code, config, filename, true); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); sinon.assert.calledOnce(spyVariableDeclaration); sinon.assert.calledOnce(spyVariableDeclarator); sinon.assert.calledOnce(spyIdentifier); @@ -871,9 +998,11 @@ describe("Linter", () => { config.rules[code] = 1; const messages = linter.verify("0", config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].message, "Hello"); + assert.strictEqual(suppressedMessages.length, 0); }); it("should not have any settings if they were not passed in", () => { @@ -890,8 +1019,10 @@ describe("Linter", () => { config.rules[code] = 1; const messages = linter.verify("0", config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); }); @@ -951,8 +1082,10 @@ describe("Linter", () => { linter.defineParser("test-parser", parser); const config = { rules: {}, parser: "test-parser" }; const messages = linter.verify("0", config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); }); @@ -978,8 +1111,10 @@ describe("Linter", () => { linter.defineParser("enhanced-parser", testParsers.enhancedParser); const messages = linter.verify("0", config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); it("should expose parser services when using parseForESLint() and services are specified", () => { @@ -995,9 +1130,11 @@ describe("Linter", () => { const config = { rules: { "test-service-rule": 2 }, parser: "enhanced-parser" }; const messages = linter.verify("0", config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].message, "Hi!"); + assert.strictEqual(suppressedMessages.length, 0); }); it("should use the same parserServices if source code object is reused", () => { @@ -1013,14 +1150,18 @@ describe("Linter", () => { const config = { rules: { "test-service-rule": 2 }, parser: "enhanced-parser" }; const messages = linter.verify("0", config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].message, "Hi!"); + assert.strictEqual(suppressedMessages.length, 0); const messages2 = linter.verify(linter.getSourceCode(), config, filename); + const suppressedMessages2 = linter.getSuppressedMessages(); assert.strictEqual(messages2.length, 1); assert.strictEqual(messages2[0].message, "Hi!"); + assert.strictEqual(suppressedMessages2.length, 0); }); it("should pass parser as parserPath to all rules when default parser is used", () => { @@ -1046,9 +1187,12 @@ describe("Linter", () => { config.rules[rule] = 1; const messages = linter.verify(code, config, filename, true); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].ruleId, rule); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should be configurable by only setting the string value", () => { @@ -1058,10 +1202,13 @@ describe("Linter", () => { config.rules[rule] = "warn"; const messages = linter.verify(code, config, filename, true); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].severity, 1); assert.strictEqual(messages[0].ruleId, rule); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should be configurable by passing in values as an array", () => { @@ -1071,9 +1218,12 @@ describe("Linter", () => { config.rules[rule] = [1]; const messages = linter.verify(code, config, filename, true); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].ruleId, rule); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should be configurable by passing in string value as an array", () => { @@ -1083,10 +1233,13 @@ describe("Linter", () => { config.rules[rule] = ["warn"]; const messages = linter.verify(code, config, filename, true); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].severity, 1); assert.strictEqual(messages[0].ruleId, rule); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should not be configurable by setting other value", () => { @@ -1096,15 +1249,19 @@ describe("Linter", () => { config.rules[rule] = "1"; const messages = linter.verify(code, config, filename, true); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); it("should process empty config", () => { const config = {}; const messages = linter.verify(code, config, filename, true); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); }); @@ -1504,10 +1661,13 @@ describe("Linter", () => { config.rules[code] = 1; const messages = linter.verify("0", config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].ruleId, code); assert.strictEqual(messages[0].nodeType, "Literal"); + + assert.strictEqual(suppressedMessages.length, 0); }); }); @@ -1531,6 +1691,7 @@ describe("Linter", () => { linter.defineRules(newRules); const messages = linter.verify("0", config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, code.length); code.forEach(item => { @@ -1539,6 +1700,8 @@ describe("Linter", () => { messages.forEach(message => { assert.strictEqual(message.nodeType, "Literal"); }); + + assert.strictEqual(suppressedMessages.length, 0); }); }); @@ -1557,8 +1720,10 @@ describe("Linter", () => { config.rules[code] = 1; const messages = linter.verify("0", config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages[0].message, filename); + assert.strictEqual(suppressedMessages.length, 0); }); it("has access to the physicalFilename", () => { @@ -1573,8 +1738,10 @@ describe("Linter", () => { config.rules[code] = 1; const messages = linter.verify("0", config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages[0].message, filename); + assert.strictEqual(suppressedMessages.length, 0); }); it("defaults filename to '<input>'", () => { @@ -1589,8 +1756,10 @@ describe("Linter", () => { config.rules[code] = 1; const messages = linter.verify("0", config); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages[0].message, "<input>"); + assert.strictEqual(suppressedMessages.length, 0); }); }); @@ -1601,11 +1770,14 @@ describe("Linter", () => { const config = { rules: {} }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].ruleId, "no-alert"); assert.strictEqual(messages[0].message, "Unexpected alert."); assert.include(messages[0].nodeType, "CallExpression"); + + assert.strictEqual(suppressedMessages.length, 0); }); it("rules should not change initial config", () => { @@ -1613,11 +1785,16 @@ describe("Linter", () => { const codeA = "/*eslint strict: 0*/ function bar() { return 2; }"; const codeB = "function foo() { return 1; }"; let messages = linter.verify(codeA, config, filename, false); + let suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); messages = linter.verify(codeB, config, filename, false); + suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); + + assert.strictEqual(suppressedMessages.length, 0); }); it("rules should not change initial config", () => { @@ -1625,42 +1802,62 @@ describe("Linter", () => { const codeA = "/*eslint quotes: 0*/ function bar() { return '2'; }"; const codeB = "function foo() { return '1'; }"; let messages = linter.verify(codeA, config, filename, false); + let suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); messages = linter.verify(codeB, config, filename, false); + suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); + + assert.strictEqual(suppressedMessages.length, 0); }); it("rules should not change initial config", () => { const config = { rules: { quotes: [2, "double"] } }; const codeA = "/*eslint quotes: [0, \"single\"]*/ function bar() { return '2'; }"; const codeB = "function foo() { return '1'; }"; + let messages = linter.verify(codeA, config, filename, false); + let suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); messages = linter.verify(codeB, config, filename, false); + suppressedMessages = linter.getSuppressedMessages(); + assert.strictEqual(messages.length, 1); + assert.strictEqual(suppressedMessages.length, 0); }); it("rules should not change initial config", () => { const config = { rules: { "no-unused-vars": [2, { vars: "all" }] } }; const codeA = "/*eslint no-unused-vars: [0, {\"vars\": \"local\"}]*/ var a = 44;"; const codeB = "var b = 55;"; + let messages = linter.verify(codeA, config, filename, false); + let suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); messages = linter.verify(codeB, config, filename, false); + suppressedMessages = linter.getSuppressedMessages(); + assert.strictEqual(messages.length, 1); + assert.strictEqual(suppressedMessages.length, 0); }); }); describe("when evaluating code with invalid comments to enable rules", () => { it("should report a violation when the config is not a valid rule configuration", () => { + const messages = linter.verify("/*eslint no-alert:true*/ alert('test');", {}); + const suppressedMessages = linter.getSuppressedMessages(); + assert.deepStrictEqual( - linter.verify("/*eslint no-alert:true*/ alert('test');", {}), + messages, [ { severity: 2, @@ -1674,11 +1871,16 @@ describe("Linter", () => { } ] ); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should report a violation when the config violates a rule's schema", () => { + const messages = linter.verify("/* eslint no-alert: [error, {nonExistentPropertyName: true}]*/", {}); + const suppressedMessages = linter.getSuppressedMessages(); + assert.deepStrictEqual( - linter.verify("/* eslint no-alert: [error, {nonExistentPropertyName: true}]*/", {}), + messages, [ { severity: 2, @@ -1692,6 +1894,8 @@ describe("Linter", () => { } ] ); + + assert.strictEqual(suppressedMessages.length, 0); }); }); @@ -1702,52 +1906,68 @@ describe("Linter", () => { const config = { rules: { "no-alert": 1 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); }); describe("when evaluating code with comments to disable rules", () => { - let code, messages; + let code, messages, suppressedMessages; it("should report an error when disabling a non-existent rule in inline comment", () => { code = "/*eslint foo:0*/ ;"; messages = linter.verify(code, {}, filename); + suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].message, "Definition for rule 'foo' was not found."); + assert.strictEqual(suppressedMessages.length, 0); code = "/*eslint-disable foo*/ ;"; messages = linter.verify(code, {}, filename); + suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].message, "Definition for rule 'foo' was not found."); + assert.strictEqual(suppressedMessages.length, 0); code = "/*eslint-disable-line foo*/ ;"; messages = linter.verify(code, {}, filename); + suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].message, "Definition for rule 'foo' was not found."); + assert.strictEqual(suppressedMessages.length, 0); code = "/*eslint-disable-next-line foo*/ ;"; messages = linter.verify(code, {}, filename); + suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].message, "Definition for rule 'foo' was not found."); + assert.strictEqual(suppressedMessages.length, 0); }); it("should not report an error, when disabling a non-existent rule in config", () => { messages = linter.verify("", { rules: { foo: 0 } }, filename); + suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); it("should report an error, when config a non-existent rule in config", () => { messages = linter.verify("", { rules: { foo: 1 } }, filename); + suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].severity, 2); assert.strictEqual(messages[0].message, "Definition for rule 'foo' was not found."); + assert.strictEqual(suppressedMessages.length, 0); messages = linter.verify("", { rules: { foo: 2 } }, filename); + suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].severity, 2); assert.strictEqual(messages[0].message, "Definition for rule 'foo' was not found."); + assert.strictEqual(suppressedMessages.length, 0); }); }); @@ -1758,12 +1978,15 @@ describe("Linter", () => { const config = { rules: {} }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 2); assert.strictEqual(messages[0].ruleId, "no-alert"); assert.strictEqual(messages[0].message, "Unexpected alert."); assert.include(messages[0].nodeType, "CallExpression"); assert.strictEqual(messages[1].ruleId, "no-console"); + + assert.strictEqual(suppressedMessages.length, 0); }); }); @@ -1774,11 +1997,14 @@ describe("Linter", () => { const config = { rules: { "no-console": 1, "no-alert": 0 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].ruleId, "no-alert"); assert.strictEqual(messages[0].message, "Unexpected alert."); assert.include(messages[0].nodeType, "CallExpression"); + + assert.strictEqual(suppressedMessages.length, 0); }); }); @@ -1799,8 +2025,10 @@ describe("Linter", () => { const code = "/*eslint test-plugin/test-rule: 2*/ var a = \"no violation\";"; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); it("should not report a violation when inline comment disables plugin rule", () => { @@ -1808,8 +2036,10 @@ describe("Linter", () => { const config = { rules: { "test-plugin/test-rule": 1 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); it("should report a violation when the report is right before the comment", () => { @@ -1821,9 +2051,11 @@ describe("Linter", () => { } })); const problems = linter.verify(code, { rules: { checker: "error" } }); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(problems.length, 1); assert.strictEqual(problems[0].message, "foo"); + assert.strictEqual(suppressedMessages.length, 0); }); it("should not report a violation when the report is right at the start of the comment", () => { @@ -1835,20 +2067,32 @@ describe("Linter", () => { } })); const problems = linter.verify(code, { rules: { checker: "error" } }); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(problems.length, 0); + + assert.strictEqual(suppressedMessages.length, 1); + assert.strictEqual(suppressedMessages[0].message, "foo"); + assert.strictEqual(suppressedMessages[0].suppressions.length, 1); + assert.strictEqual(suppressedMessages[0].suppressions[0].justification, ""); }); it("rules should not change initial config", () => { const config = { rules: { "test-plugin/test-rule": 2 } }; const codeA = "/*eslint test-plugin/test-rule: 0*/ var a = \"trigger violation\";"; const codeB = "var a = \"trigger violation\";"; + let messages = linter.verify(codeA, config, filename, false); + let suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); messages = linter.verify(codeB, config, filename, false); + suppressedMessages = linter.getSuppressedMessages(); + assert.strictEqual(messages.length, 1); + assert.strictEqual(suppressedMessages.length, 0); }); }); @@ -1864,12 +2108,20 @@ describe("Linter", () => { const config = { rules: { "no-alert": 1 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].ruleId, "no-alert"); assert.strictEqual(messages[0].message, "Unexpected alert."); assert.include(messages[0].nodeType, "CallExpression"); assert.strictEqual(messages[0].line, 4); + + assert.strictEqual(suppressedMessages.length, 1); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); + assert.strictEqual(suppressedMessages[0].message, "Unexpected alert."); + assert.strictEqual(suppressedMessages[0].line, 2); + assert.strictEqual(suppressedMessages[0].suppressions.length, 1); + assert.strictEqual(suppressedMessages[0].suppressions[0].justification, ""); }); it("should not report a violation", () => { @@ -1881,8 +2133,15 @@ describe("Linter", () => { const config = { rules: { "no-alert": 1 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + + assert.strictEqual(suppressedMessages.length, 2); + assert.strictEqual(suppressedMessages[0].line, 2); + assert.strictEqual(suppressedMessages[0].suppressions.length, 1); + assert.strictEqual(suppressedMessages[1].line, 3); + assert.strictEqual(suppressedMessages[1].suppressions.length, 1); }); it("should not report a violation", () => { @@ -1895,10 +2154,15 @@ describe("Linter", () => { const config = { rules: { "no-alert": 1 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 2); assert.strictEqual(messages[0].column, 21); assert.strictEqual(messages[1].column, 19); + + assert.strictEqual(suppressedMessages.length, 2); + assert.strictEqual(suppressedMessages[0].column, 1); + assert.strictEqual(suppressedMessages[1].column, 56); }); it("should report a violation", () => { @@ -1916,8 +2180,10 @@ describe("Linter", () => { const config = { rules: { "no-alert": 1 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); + assert.strictEqual(suppressedMessages.length, 2); }); @@ -1931,8 +2197,10 @@ describe("Linter", () => { const config = { rules: { "no-unused-vars": 1 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 1); }); it("should not report a violation", () => { @@ -1944,8 +2212,10 @@ describe("Linter", () => { const config = { rules: { "no-unused-vars": 1 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 1); }); }); @@ -1965,10 +2235,13 @@ describe("Linter", () => { }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); - assert.strictEqual(messages[0].ruleId, "no-console"); + + assert.strictEqual(suppressedMessages.length, 1); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); }); it("should report a violation", () => { @@ -1985,10 +2258,14 @@ describe("Linter", () => { }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); - assert.strictEqual(messages[0].ruleId, "no-alert"); + + assert.strictEqual(suppressedMessages.length, 2); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); + assert.strictEqual(suppressedMessages[1].ruleId, "no-console"); }); it("should report a violation if eslint-disable-line in a block comment is not on a single line", () => { @@ -2004,10 +2281,11 @@ describe("Linter", () => { }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 2); - assert.strictEqual(messages[1].ruleId, "no-console"); + assert.strictEqual(suppressedMessages.length, 0); }); it("should not disable rule and add an extra report if eslint-disable-line in a block comment is not on a single line", () => { @@ -2022,6 +2300,7 @@ describe("Linter", () => { }; const messages = linter.verify(code, config); + const suppressedMessages = linter.getSuppressedMessages(); assert.deepStrictEqual(messages, [ { @@ -2046,6 +2325,8 @@ describe("Linter", () => { nodeType: null } ]); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should not report a violation for eslint-disable-line in block comment", () => { @@ -2060,8 +2341,13 @@ describe("Linter", () => { }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + + assert.strictEqual(suppressedMessages.length, 2); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); + assert.strictEqual(suppressedMessages[1].ruleId, "no-alert"); }); it("should not report a violation", () => { @@ -2077,8 +2363,13 @@ describe("Linter", () => { }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + + assert.strictEqual(suppressedMessages.length, 2); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); + assert.strictEqual(suppressedMessages[1].ruleId, "no-console"); }); it("should not report a violation", () => { @@ -2096,8 +2387,10 @@ describe("Linter", () => { }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 5); }); it("should not report a violation", () => { @@ -2115,8 +2408,10 @@ describe("Linter", () => { }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 5); }); it("should ignore violations of multiple rules when specified in mixed comments", () => { @@ -2130,8 +2425,12 @@ describe("Linter", () => { } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + + assert.strictEqual(suppressedMessages.length, 2); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); }); }); @@ -2149,9 +2448,13 @@ describe("Linter", () => { } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].ruleId, "no-console"); + + assert.strictEqual(suppressedMessages.length, 1); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); }); it("should ignore violation of specified rule if eslint-disable-next-line is a block comment", () => { @@ -2167,9 +2470,13 @@ describe("Linter", () => { } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].ruleId, "no-console"); + + assert.strictEqual(suppressedMessages.length, 1); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); }); it("should ignore violation of specified rule if eslint-disable-next-line is a block comment", () => { const code = [ @@ -2182,11 +2489,15 @@ describe("Linter", () => { } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + + assert.strictEqual(suppressedMessages.length, 1); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); }); - it("should not ignore violation if block comment is not on a single line", () => { + it("should not ignore violation if code is not on next line", () => { const code = [ "/* eslint-disable-next-line", "no-alert */alert('test');" @@ -2197,9 +2508,32 @@ describe("Linter", () => { } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); - assert.strictEqual(messages.length, 2); - assert.strictEqual(messages[1].ruleId, "no-alert"); + assert.strictEqual(messages.length, 1); + assert.strictEqual(messages[0].ruleId, "no-alert"); + + assert.strictEqual(suppressedMessages.length, 0); + }); + + it("should ignore violation if block comment span multiple lines", () => { + const code = [ + "/* eslint-disable-next-line", + "no-alert */", + "alert('test');" + ].join("\n"); + const config = { + rules: { + "no-alert": 1 + } + }; + const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); + + assert.strictEqual(messages.length, 0); + + assert.strictEqual(suppressedMessages.length, 1); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); }); it("should ignore violations only of specified rule", () => { @@ -2215,10 +2549,13 @@ describe("Linter", () => { } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 2); assert.strictEqual(messages[0].ruleId, "no-alert"); assert.strictEqual(messages[1].ruleId, "no-console"); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should ignore violations of multiple rules when specified", () => { @@ -2235,6 +2572,33 @@ describe("Linter", () => { } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); + + assert.strictEqual(messages.length, 1); + assert.strictEqual(messages[0].ruleId, "no-console"); + + assert.strictEqual(suppressedMessages.length, 2); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); + assert.strictEqual(suppressedMessages[1].ruleId, "quotes"); + }); + + it("should ignore violations of multiple rules when specified in multiple lines", () => { + const code = [ + "/* eslint-disable-next-line", + "no-alert,", + "quotes", + "*/", + "alert(\"test\");", + "console.log('test');" + ].join("\n"); + const config = { + rules: { + "no-alert": 1, + quotes: [1, "single"], + "no-console": 1 + } + }; + const messages = linter.verify(code, config, filename); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].ruleId, "no-console"); @@ -2252,6 +2616,29 @@ describe("Linter", () => { } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); + + assert.strictEqual(messages.length, 0); + + assert.strictEqual(suppressedMessages.length, 2); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); + assert.strictEqual(suppressedMessages[1].ruleId, "quotes"); + }); + + it("should ignore violations of multiple rules when specified in mixed single line and multi line comments", () => { + const code = [ + "/* eslint-disable-next-line", + "no-alert", + "*/ // eslint-disable-next-line quotes", + "alert(\"test\");" + ].join("\n"); + const config = { + rules: { + "no-alert": 1, + quotes: [1, "single"] + } + }; + const messages = linter.verify(code, config, filename); assert.strictEqual(messages.length, 0); }); @@ -2270,10 +2657,14 @@ describe("Linter", () => { } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 2); assert.strictEqual(messages[0].ruleId, "no-alert"); assert.strictEqual(messages[1].ruleId, "no-console"); + + assert.strictEqual(suppressedMessages.length, 1); + assert.strictEqual(suppressedMessages[0].ruleId, "quotes"); }); it("should ignore violations of specified rule on next line only", () => { @@ -2290,10 +2681,14 @@ describe("Linter", () => { } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 2); assert.strictEqual(messages[0].ruleId, "no-alert"); assert.strictEqual(messages[1].ruleId, "no-console"); + + assert.strictEqual(suppressedMessages.length, 1); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); }); it("should ignore all rule violations on next line if none specified", () => { @@ -2311,9 +2706,15 @@ describe("Linter", () => { } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].ruleId, "no-console"); + + assert.strictEqual(suppressedMessages.length, 3); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); + assert.strictEqual(suppressedMessages[1].ruleId, "quotes"); + assert.strictEqual(suppressedMessages[2].ruleId, "semi"); }); it("should ignore violations if eslint-disable-next-line is a block comment", () => { @@ -2330,10 +2731,14 @@ describe("Linter", () => { } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 2); assert.strictEqual(messages[0].ruleId, "no-alert"); assert.strictEqual(messages[1].ruleId, "no-console"); + + assert.strictEqual(suppressedMessages.length, 1); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); }); it("should report a violation", () => { @@ -2351,10 +2756,12 @@ describe("Linter", () => { }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 2); - assert.strictEqual(messages[1].ruleId, "no-console"); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should not ignore violations if comment is of the type hashbang", () => { @@ -2370,10 +2777,13 @@ describe("Linter", () => { } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 2); assert.strictEqual(messages[0].ruleId, "no-alert"); assert.strictEqual(messages[1].ruleId, "no-console"); + + assert.strictEqual(suppressedMessages.length, 0); }); }); }); @@ -2389,10 +2799,13 @@ describe("Linter", () => { const config = { rules: { "no-alert": 1, "no-console": 1 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); - assert.strictEqual(messages[0].ruleId, "no-console"); + + assert.strictEqual(suppressedMessages.length, 1); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); }); it("should report no violation", () => { @@ -2405,8 +2818,15 @@ describe("Linter", () => { const config = { rules: { "no-unused-vars": 2 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + + assert.strictEqual(suppressedMessages.length, 2); + assert.strictEqual(suppressedMessages[0].ruleId, "no-unused-vars"); + assert.strictEqual(suppressedMessages[0].line, 2); + assert.strictEqual(suppressedMessages[1].ruleId, "no-unused-vars"); + assert.strictEqual(suppressedMessages[1].line, 3); }); it("should report no violation", () => { @@ -2420,8 +2840,10 @@ describe("Linter", () => { const config = { rules: { "no-unused-vars": 2 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 5); }); it("should report no violation", () => { @@ -2433,8 +2855,10 @@ describe("Linter", () => { const config = { rules: { quotes: 2 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); it("should report a violation", () => { @@ -2450,13 +2874,19 @@ describe("Linter", () => { const config = { rules: { "no-alert": 1, "no-console": 1 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 2); - assert.strictEqual(messages[0].ruleId, "no-alert"); assert.strictEqual(messages[0].line, 5); assert.strictEqual(messages[1].ruleId, "no-console"); assert.strictEqual(messages[1].line, 6); + + assert.strictEqual(suppressedMessages.length, 2); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); + assert.strictEqual(suppressedMessages[0].line, 2); + assert.strictEqual(suppressedMessages[1].ruleId, "no-console"); + assert.strictEqual(suppressedMessages[1].line, 3); }); it("should report a violation", () => { @@ -2471,10 +2901,16 @@ describe("Linter", () => { const config = { rules: { "no-alert": 1, "no-console": 1 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); - assert.strictEqual(messages[0].ruleId, "no-console"); + + assert.strictEqual(suppressedMessages.length, 2); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); + assert.strictEqual(suppressedMessages[0].line, 2); + assert.strictEqual(suppressedMessages[1].ruleId, "no-alert"); + assert.strictEqual(suppressedMessages[1].line, 5); }); @@ -2491,11 +2927,19 @@ describe("Linter", () => { const config = { rules: { "no-alert": 1, "no-console": 1 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); - assert.strictEqual(messages[0].ruleId, "no-alert"); assert.strictEqual(messages[0].line, 5); + + assert.strictEqual(suppressedMessages.length, 3); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); + assert.strictEqual(suppressedMessages[0].line, 2); + assert.strictEqual(suppressedMessages[1].ruleId, "no-console"); + assert.strictEqual(suppressedMessages[1].line, 3); + assert.strictEqual(suppressedMessages[2].ruleId, "no-console"); + assert.strictEqual(suppressedMessages[2].line, 6); }); @@ -2521,21 +2965,23 @@ describe("Linter", () => { const config = { rules: { "no-alert": 1, "no-console": 1 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 4); - assert.strictEqual(messages[0].ruleId, "no-alert"); assert.strictEqual(messages[0].line, 6); - assert.strictEqual(messages[1].ruleId, "no-console"); assert.strictEqual(messages[1].line, 7); - assert.strictEqual(messages[2].ruleId, "no-alert"); assert.strictEqual(messages[2].line, 9); - assert.strictEqual(messages[3].ruleId, "no-console"); assert.strictEqual(messages[3].line, 10); + assert.strictEqual(suppressedMessages.length, 2); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); + assert.strictEqual(suppressedMessages[0].line, 3); + assert.strictEqual(suppressedMessages[1].ruleId, "no-console"); + assert.strictEqual(suppressedMessages[1].line, 4); }); it("should report a violation", () => { @@ -2558,18 +3004,23 @@ describe("Linter", () => { const config = { rules: { "no-alert": 1, "no-console": 1 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 3); - assert.strictEqual(messages[0].ruleId, "no-alert"); assert.strictEqual(messages[0].line, 5); - assert.strictEqual(messages[1].ruleId, "no-alert"); assert.strictEqual(messages[1].line, 8); - assert.strictEqual(messages[2].ruleId, "no-console"); assert.strictEqual(messages[2].line, 9); + assert.strictEqual(suppressedMessages.length, 3); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); + assert.strictEqual(suppressedMessages[0].line, 2); + assert.strictEqual(suppressedMessages[1].ruleId, "no-console"); + assert.strictEqual(suppressedMessages[1].line, 3); + assert.strictEqual(suppressedMessages[2].ruleId, "no-console"); + assert.strictEqual(suppressedMessages[2].line, 6); }); it("should report a violation when severity is warn", () => { @@ -2592,18 +3043,23 @@ describe("Linter", () => { const config = { rules: { "no-alert": "warn", "no-console": "warn" } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 3); - assert.strictEqual(messages[0].ruleId, "no-alert"); assert.strictEqual(messages[0].line, 5); - assert.strictEqual(messages[1].ruleId, "no-alert"); assert.strictEqual(messages[1].line, 8); - assert.strictEqual(messages[2].ruleId, "no-console"); assert.strictEqual(messages[2].line, 9); + assert.strictEqual(suppressedMessages.length, 3); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); + assert.strictEqual(suppressedMessages[0].line, 2); + assert.strictEqual(suppressedMessages[1].ruleId, "no-console"); + assert.strictEqual(suppressedMessages[1].line, 3); + assert.strictEqual(suppressedMessages[2].ruleId, "no-console"); + assert.strictEqual(suppressedMessages[2].line, 6); }); }); @@ -2614,11 +3070,14 @@ describe("Linter", () => { const config = { rules: { "no-console": 1, "no-alert": 0 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].ruleId, "no-alert"); assert.strictEqual(messages[0].message, "Unexpected alert."); assert.include(messages[0].nodeType, "CallExpression"); + + assert.strictEqual(suppressedMessages.length, 0); }); }); @@ -2629,11 +3088,14 @@ describe("Linter", () => { const config = { rules: { quotes: [2, "single"] } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].ruleId, "quotes"); assert.strictEqual(messages[0].message, "Strings must use doublequote."); assert.include(messages[0].nodeType, "Literal"); + + assert.strictEqual(suppressedMessages.length, 0); }); }); @@ -2644,11 +3106,14 @@ describe("Linter", () => { const config = { rules: { quotes: [2, "single"] } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].ruleId, "quotes"); assert.strictEqual(messages[0].message, "Strings must use doublequote."); assert.include(messages[0].nodeType, "Literal"); + + assert.strictEqual(suppressedMessages.length, 0); }); }); @@ -2659,6 +3124,7 @@ describe("Linter", () => { const config = { rules: { "no-alert": 1 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 2); @@ -2676,6 +3142,8 @@ describe("Linter", () => { assert.strictEqual(messages[1].ruleId, "no-alert"); assert.strictEqual(messages[1].message, "Unexpected alert."); assert.include(messages[1].nodeType, "CallExpression"); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should report a violation", () => { @@ -2684,6 +3152,7 @@ describe("Linter", () => { const config = { rules: { "no-alert": 1 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 2); @@ -2701,6 +3170,8 @@ describe("Linter", () => { assert.strictEqual(messages[1].ruleId, "no-alert"); assert.strictEqual(messages[1].message, "Unexpected alert."); assert.include(messages[1].nodeType, "CallExpression"); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should report a violation", () => { @@ -2709,6 +3180,7 @@ describe("Linter", () => { const config = { rules: { "no-alert": 1 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 2); @@ -2726,6 +3198,8 @@ describe("Linter", () => { assert.strictEqual(messages[1].ruleId, "no-alert"); assert.strictEqual(messages[1].message, "Unexpected alert."); assert.include(messages[1].nodeType, "CallExpression"); + + assert.strictEqual(suppressedMessages.length, 0); }); }); @@ -2737,11 +3211,14 @@ alert('test'); it("should not parse errors, should report a violation", () => { const messages = linter.verify(code, {}, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].ruleId, "max-len"); assert.strictEqual(messages[0].message, "This line has a length of 129. Maximum allowed is 100."); assert.include(messages[0].nodeType, "Program"); + + assert.strictEqual(suppressedMessages.length, 0); }); }); @@ -2756,6 +3233,7 @@ var a = "test2"; it("should validate correctly", () => { const config = { rules: {} }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); const [message1, message2] = messages; assert.strictEqual(messages.length, 2); @@ -2769,6 +3247,8 @@ var a = "test2"; assert.strictEqual(message2.line, 5); assert.strictEqual(message2.column, 1); assert.include(message2.nodeType, "Program"); + + assert.strictEqual(suppressedMessages.length, 0); }); }); @@ -2778,11 +3258,14 @@ var a = "test2"; const code = "#!bin/program\n\nvar foo;;"; const config = { rules: { "no-extra-semi": 1 } }; const messages = linter.verify(code, config); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].ruleId, "no-extra-semi"); assert.strictEqual(messages[0].nodeType, "EmptyStatement"); assert.strictEqual(messages[0].line, 3); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should have a comment with the hashbang in it", () => { @@ -2824,6 +3307,7 @@ var a = "test2"; it("should report a violation with a useful parse error prefix", () => { const messages = linter.verify(code); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].severity, 2); @@ -2832,6 +3316,8 @@ var a = "test2"; assert.strictEqual(messages[0].column, 4); assert.isTrue(messages[0].fatal); assert.match(messages[0].message, /^Parsing error:/u); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should report source code where the issue is present", () => { @@ -2842,11 +3328,14 @@ var a = "test2"; "}" ]; const messages = linter.verify(inValidCode.join("\n")); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].severity, 2); assert.isTrue(messages[0].fatal); assert.match(messages[0].message, /^Parsing error:/u); + + assert.strictEqual(suppressedMessages.length, 0); }); }); @@ -2913,9 +3402,12 @@ var a = "test2"; it("should report the new rule", () => { const results = linter.verify(code, { rules: { "no-comma-dangle": 2 } }); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(results[0].ruleId, "no-comma-dangle"); assert.strictEqual(results[0].message, "Rule 'no-comma-dangle' was removed and replaced by: comma-dangle"); + + assert.strictEqual(suppressedMessages.length, 0); }); }); @@ -2959,8 +3451,10 @@ var a = "test2"; const config = { rules: { "no-undef": 1 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); + assert.strictEqual(suppressedMessages.length, 0); }); it("should report a violation when using Promise", () => { @@ -2969,8 +3463,10 @@ var a = "test2"; const config = { rules: { "no-undef": 1 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); + assert.strictEqual(suppressedMessages.length, 0); }); }); @@ -2981,11 +3477,14 @@ var a = "test2"; const config = { rules: { "no-undef": 1 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].ruleId, "no-undef"); assert.strictEqual(messages[0].nodeType, "Identifier"); assert.strictEqual(messages[0].line, 1); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should not report a violation", () => { @@ -2994,8 +3493,10 @@ var a = "test2"; const config = { rules: { "no-undef": 1 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); // https://github.com/eslint/eslint/issues/14652 @@ -3009,8 +3510,10 @@ var a = "test2"; for (const code of codes) { const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); } }); @@ -3021,8 +3524,10 @@ var a = "test2"; const config = { rules: { "no-undef": 1 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); it("should not report a violation", () => { @@ -3031,8 +3536,10 @@ var a = "test2"; const config = { rules: { "no-undef": 1 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); it("should not report a violation", () => { @@ -3041,8 +3548,10 @@ var a = "test2"; const config = { rules: { "no-undef": 1 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); it("should not report a violation", () => { @@ -3051,8 +3560,10 @@ var a = "test2"; const config = { rules: { "no-undef": 1 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); it("should not report a violation", () => { @@ -3061,8 +3572,10 @@ var a = "test2"; const config = { rules: { "no-undef": 1 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); it("should not report a violation", () => { @@ -3071,8 +3584,10 @@ var a = "test2"; const config = { rules: {} }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); it("should not report a violation", () => { @@ -3081,8 +3596,10 @@ var a = "test2"; const config = { rules: { "no-undef": 1 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); }); @@ -3101,9 +3618,12 @@ var a = "test2"; filename, allowInlineConfig: false }); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].ruleId, "no-alert"); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should report a violation for global variable declarations", () => { @@ -3156,9 +3676,12 @@ var a = "test2"; filename, allowInlineConfig: false }); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].ruleId, "no-alert"); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should not report a violation for rule changes", () => { @@ -3176,8 +3699,10 @@ var a = "test2"; filename, allowInlineConfig: false }); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); it("should report a violation for disable-line", () => { @@ -3194,9 +3719,12 @@ var a = "test2"; filename, allowInlineConfig: false }); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].ruleId, "no-alert"); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should report a violation for env changes", () => { @@ -3209,9 +3737,12 @@ var a = "test2"; } }; const messages = linter.verify(code, config, { allowInlineConfig: false }); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].ruleId, "no-undef"); + + assert.strictEqual(suppressedMessages.length, 0); }); }); @@ -3230,12 +3761,15 @@ var a = "test2"; // eslint-disable-next-line no-loop-func -- No closures it(`should warn '/* ${directive} */' if 'noInlineConfig' was given.`, () => { const messages = linter.verify(`/* ${directive} */`, { noInlineConfig: true }); + const suppressedMessages = linter.getSuppressedMessages(); assert.deepStrictEqual(messages.length, 1); assert.deepStrictEqual(messages[0].fatal, void 0); assert.deepStrictEqual(messages[0].ruleId, null); assert.deepStrictEqual(messages[0].severity, 1); assert.deepStrictEqual(messages[0].message, `'/*${directive.split(" ")[0]}*/' has no effect because you have 'noInlineConfig' setting in your config.`); + + assert.strictEqual(suppressedMessages.length, 0); }); } @@ -3246,19 +3780,24 @@ var a = "test2"; // eslint-disable-next-line no-loop-func -- No closures it(`should warn '// ${directive}' if 'noInlineConfig' was given.`, () => { const messages = linter.verify(`// ${directive}`, { noInlineConfig: true }); + const suppressedMessages = linter.getSuppressedMessages(); assert.deepStrictEqual(messages.length, 1); assert.deepStrictEqual(messages[0].fatal, void 0); assert.deepStrictEqual(messages[0].ruleId, null); assert.deepStrictEqual(messages[0].severity, 1); assert.deepStrictEqual(messages[0].message, `'//${directive.split(" ")[0]}' has no effect because you have 'noInlineConfig' setting in your config.`); + + assert.strictEqual(suppressedMessages.length, 0); }); } it("should not warn if 'noInlineConfig' and '--no-inline-config' were given.", () => { const messages = linter.verify("/* globals foo */", { noInlineConfig: true }, { allowInlineConfig: false }); + const suppressedMessages = linter.getSuppressedMessages(); assert.deepStrictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); }); @@ -3316,8 +3855,11 @@ var a = "test2"; describe("reportUnusedDisable option", () => { it("reports problems for unused eslint-disable comments", () => { + const messages = linter.verify("/* eslint-disable */", {}, { reportUnusedDisableDirectives: true }); + const suppressedMessages = linter.getSuppressedMessages(); + assert.deepStrictEqual( - linter.verify("/* eslint-disable */", {}, { reportUnusedDisableDirectives: true }), + messages, [ { ruleId: null, @@ -3333,11 +3875,75 @@ var a = "test2"; } ] ); + + assert.strictEqual(suppressedMessages.length, 0); + }); + + it("reports problems for multiple eslint-disable comments, including unused ones", () => { + const code = [ + "/* eslint-disable no-alert -- j1 */", + "alert(\"test\"); //eslint-disable-line no-alert -- j2" + ].join("\n"); + const config = { + rules: { + "no-alert": 2 + } + }; + const messages = linter.verify(code, config, { reportUnusedDisableDirectives: true }); + const suppressedMessages = linter.getSuppressedMessages(); + + assert.strictEqual(messages.length, 1); + assert.strictEqual(suppressedMessages.length, 1); + assert.strictEqual(suppressedMessages[0].suppressions.length, 2); + }); + + it("reports problems for eslint-disable-line and eslint-disable-next-line comments, including unused ones", () => { + const code = [ + "// eslint-disable-next-line no-alert -- j1 */", + "alert(\"test\"); //eslint-disable-line no-alert -- j2" + ].join("\n"); + const config = { + rules: { + "no-alert": 2 + } + }; + const messages = linter.verify(code, config, { reportUnusedDisableDirectives: true }); + const suppressedMessages = linter.getSuppressedMessages(); + + assert.strictEqual(messages.length, 1); + assert.strictEqual(suppressedMessages.length, 1); + assert.strictEqual(suppressedMessages[0].suppressions.length, 2); + }); + + it("reports problems for multiple unused eslint-disable comments with multiple ruleIds", () => { + const code = [ + "/* eslint no-undef: 2, no-void: 2 */", + "/* eslint-disable no-undef -- j1 */", + "void foo; //eslint-disable-line no-undef, no-void -- j2" + ].join("\n"); + const config = { + rules: { + "no-undef": 2, + "no-void": 2 + } + }; + const messages = linter.verify(code, config, { reportUnusedDisableDirectives: true }); + const suppressedMessages = linter.getSuppressedMessages(); + + assert.strictEqual(messages.length, 1); + assert.strictEqual(suppressedMessages.length, 2); + assert.strictEqual(suppressedMessages[0].ruleId, "no-void"); + assert.strictEqual(suppressedMessages[0].suppressions.length, 1); + assert.strictEqual(suppressedMessages[1].ruleId, "no-undef"); + assert.strictEqual(suppressedMessages[1].suppressions.length, 2); }); it("reports problems for unused eslint-disable comments (error)", () => { + const messages = linter.verify("/* eslint-disable */", {}, { reportUnusedDisableDirectives: "error" }); + const suppressedMessages = linter.getSuppressedMessages(); + assert.deepStrictEqual( - linter.verify("/* eslint-disable */", {}, { reportUnusedDisableDirectives: "error" }), + messages, [ { ruleId: null, @@ -3353,11 +3959,16 @@ var a = "test2"; } ] ); + + assert.strictEqual(suppressedMessages.length, 0); }); it("reports problems for unused eslint-disable comments (warn)", () => { + const messages = linter.verify("/* eslint-disable */", {}, { reportUnusedDisableDirectives: "warn" }); + const suppressedMessages = linter.getSuppressedMessages(); + assert.deepStrictEqual( - linter.verify("/* eslint-disable */", {}, { reportUnusedDisableDirectives: "warn" }), + messages, [ { ruleId: null, @@ -3373,11 +3984,16 @@ var a = "test2"; } ] ); + + assert.strictEqual(suppressedMessages.length, 0); }); it("reports problems for unused eslint-disable comments (in config)", () => { + const messages = linter.verify("/* eslint-disable */", { reportUnusedDisableDirectives: true }); + const suppressedMessages = linter.getSuppressedMessages(); + assert.deepStrictEqual( - linter.verify("/* eslint-disable */", { reportUnusedDisableDirectives: true }), + messages, [ { ruleId: null, @@ -3393,6 +4009,8 @@ var a = "test2"; } ] ); + + assert.strictEqual(suppressedMessages.length, 0); }); it("reports problems for partially unused eslint-disable comments (in config)", () => { @@ -3409,6 +4027,7 @@ var a = "test2"; filename, allowInlineConfig: true }); + const suppressedMessages = linter.getSuppressedMessages(); assert.deepStrictEqual( messages, @@ -3427,6 +4046,9 @@ var a = "test2"; } ] ); + + assert.strictEqual(suppressedMessages.length, 1); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); }); describe("autofix", () => { @@ -4003,8 +4625,12 @@ var a = "test2"; filename, allowInlineConfig: true }); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + + assert.strictEqual(suppressedMessages.length, 1); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); }); }); @@ -4114,6 +4740,7 @@ var a = "test2"; const config = { rules: { "no-mixed-spaces-and-tabs": 1, "eol-last": 1, semi: [1, "always"] } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 3); assert.strictEqual(messages[0].line, 1); @@ -4122,22 +4749,28 @@ var a = "test2"; assert.strictEqual(messages[1].column, 18); assert.strictEqual(messages[2].line, 2); assert.strictEqual(messages[2].column, 18); + + assert.strictEqual(suppressedMessages.length, 0); }); describe("ecmaVersion", () => { it("should not support ES6 when no ecmaVersion provided", () => { const messages = linter.verify("let x = 0;"); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); + assert.strictEqual(suppressedMessages.length, 0); }); it("supports ECMAScript version 'latest'", () => { const messages = linter.verify("let x = 5 ** 7;", { parserOptions: { ecmaVersion: "latest" } }); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); it("the 'latest' is equal to espree.latestEcmaVersion", () => { @@ -4258,8 +4891,10 @@ var a = "test2"; ecmaVersion: 6 } }); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); it("the ECMAScript version number is 2015", () => { @@ -4268,8 +4903,10 @@ var a = "test2"; ecmaVersion: 2015 } }); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); }); @@ -4279,8 +4916,10 @@ var a = "test2"; ecmaVersion: 2015 } }); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); + assert.strictEqual(suppressedMessages.length, 0); }); describe("should properly parse exponentiation operator when", () => { @@ -4290,8 +4929,10 @@ var a = "test2"; ecmaVersion: 7 } }); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); it("the ECMAScript version number is 2016", () => { @@ -4300,8 +4941,10 @@ var a = "test2"; ecmaVersion: 2016 } }); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); }); }); @@ -4313,8 +4956,10 @@ var a = "test2"; ecmaVersion: 2018 } }, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); it("should properly parse global return when passed ecmaFeatures", () => { @@ -4326,8 +4971,10 @@ var a = "test2"; } } }, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); it("should properly parse global return when in Node.js environment", () => { @@ -4337,8 +4984,10 @@ var a = "test2"; node: true } }, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); it("should not parse global return when in Node.js environment with globalReturn explicitly off", () => { @@ -4353,24 +5002,32 @@ var a = "test2"; } } }, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].message, "Parsing error: 'return' outside of function"); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should not parse global return when Node.js environment is false", () => { const messages = linter.verify("return;", {}, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].message, "Parsing error: 'return' outside of function"); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should properly parse sloppy-mode code when impliedStrict is false", () => { const messages = linter.verify("var private;", {}, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); it("should not parse sloppy-mode code when impliedStrict is true", () => { @@ -4382,9 +5039,12 @@ var a = "test2"; } } }, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].message, "Parsing error: The keyword 'private' is reserved"); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should properly parse valid code when impliedStrict is true", () => { @@ -4396,8 +5056,10 @@ var a = "test2"; } } }, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); it("should properly parse JSX when passed ecmaFeatures", () => { @@ -4409,69 +5071,89 @@ var a = "test2"; } } }, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); it("should report an error when JSX code is encountered and JSX is not enabled", () => { const code = "var myDivElement = <div className=\"foo\" />;"; const messages = linter.verify(code, {}, "filename"); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].line, 1); assert.strictEqual(messages[0].column, 20); assert.strictEqual(messages[0].message, "Parsing error: Unexpected token <"); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should not report an error when JSX code is encountered and JSX is enabled", () => { const code = "var myDivElement = <div className=\"foo\" />;"; const messages = linter.verify(code, { parserOptions: { ecmaFeatures: { jsx: true } } }, "filename"); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); it("should not report an error when JSX code contains a spread operator and JSX is enabled", () => { const code = "var myDivElement = <div {...this.props} />;"; const messages = linter.verify(code, { parserOptions: { ecmaVersion: 6, ecmaFeatures: { jsx: true } } }, "filename"); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); it("should not allow the use of reserved words as variable names in ES3", () => { const code = "var char;"; const messages = linter.verify(code, { parserOptions: { ecmaVersion: 3 } }, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].severity, 2); assert.isTrue(messages[0].fatal); assert.match(messages[0].message, /^Parsing error:.*'char'/u); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should not allow the use of reserved words as property names in member expressions in ES3", () => { const code = "obj.char;"; const messages = linter.verify(code, { parserOptions: { ecmaVersion: 3 } }, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].severity, 2); assert.isTrue(messages[0].fatal); assert.match(messages[0].message, /^Parsing error:.*'char'/u); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should not allow the use of reserved words as property names in object literals in ES3", () => { const code = "var obj = { char: 1 };"; const messages = linter.verify(code, { parserOptions: { ecmaVersion: 3 } }, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].severity, 2); assert.isTrue(messages[0].fatal); assert.match(messages[0].message, /^Parsing error:.*'char'/u); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should allow the use of reserved words as variable and property names in ES3 when allowReserved is true", () => { const code = "var char; obj.char; var obj = { char: 1 };"; const messages = linter.verify(code, { parserOptions: { ecmaVersion: 3, allowReserved: true } }, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); it("should not allow the use of reserved words as variable names in ES > 3", () => { @@ -4480,11 +5162,14 @@ var a = "test2"; ecmaVersions.forEach(ecmaVersion => { const code = "var enum;"; const messages = linter.verify(code, { parserOptions: { ecmaVersion } }, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].severity, 2); assert.isTrue(messages[0].fatal); assert.match(messages[0].message, /^Parsing error:.*'enum'/u); + + assert.strictEqual(suppressedMessages.length, 0); }); }); @@ -4494,8 +5179,10 @@ var a = "test2"; ecmaVersions.forEach(ecmaVersion => { const code = "obj.enum; obj.function; var obj = { enum: 1, function: 2 };"; const messages = linter.verify(code, { parserOptions: { ecmaVersion } }, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); }); @@ -4505,11 +5192,14 @@ var a = "test2"; ecmaVersions.forEach(ecmaVersion => { const code = ""; const messages = linter.verify(code, { parserOptions: { ecmaVersion, allowReserved: true } }, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].severity, 2); assert.isTrue(messages[0].fatal); assert.match(messages[0].message, /^Parsing error:.*allowReserved/u); + + assert.strictEqual(suppressedMessages.length, 0); }); }); @@ -4538,14 +5228,18 @@ var a = "test2"; ].join("\n"); const messages = linter.verify(code, null, "eslint-env es6"); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); it("should be able to return in global if there is a comment which enables the node environment with a comment", () => { const messages = linter.verify(`/* ${ESLINT_ENV} node */ return;`, null, "node environment"); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); it("should attach a \"/*global\" comment node to declared variables", () => { @@ -4589,6 +5283,7 @@ var a = "test2"; it("should report a linting error when a global is set to an invalid value", () => { const results = linter.verify("/* global foo: AAAAA, bar: readonly */\nfoo;\nbar;", { rules: { "no-undef": "error" } }); + const suppressedMessages = linter.getSuppressedMessages(); assert.deepStrictEqual(results, [ { @@ -4613,6 +5308,8 @@ var a = "test2"; nodeType: "Identifier" } ]); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should not crash when we reuse the SourceCode object", () => { @@ -4648,8 +5345,10 @@ var a = "test2"; "obj.await", { parserOptions: { ecmaVersion: 6, sourceType: "module" } } ); + const suppressedMessages = linter.getSuppressedMessages(); assert(result.length === 0); + assert.strictEqual(suppressedMessages.length, 0); }); @@ -4682,6 +5381,7 @@ var a = "test2"; /*eslint aaa:error -- bbb:error */ console.log("hello") `, {}); + const suppressedMessages = linter.getSuppressedMessages(); // Don't include syntax error of the comment. assert.deepStrictEqual(messages, []); @@ -4689,6 +5389,8 @@ var a = "test2"; // Use only `aaa`. assert.strictEqual(aaa.callCount, 1); assert.strictEqual(bbb.callCount, 0); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should ignore the part preceded by '--' in '/*eslint-env*/'.", () => { @@ -4697,6 +5399,7 @@ var a = "test2"; var Promise = {} var Atomics = {} `, { rules: { "no-redeclare": "error" } }); + const suppressedMessages = linter.getSuppressedMessages(); // Don't include `Atomics` assert.deepStrictEqual( @@ -4713,6 +5416,8 @@ var a = "test2"; severity: 2 }] ); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should ignore the part preceded by '--' in '/*global*/'.", () => { @@ -4721,6 +5426,7 @@ var a = "test2"; var aaa = {} var bbb = {} `, { rules: { "no-redeclare": "error" } }); + const suppressedMessages = linter.getSuppressedMessages(); // Don't include `bbb` assert.deepStrictEqual( @@ -4737,6 +5443,8 @@ var a = "test2"; severity: 2 }] ); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should ignore the part preceded by '--' in '/*globals*/'.", () => { @@ -4745,6 +5453,7 @@ var a = "test2"; var aaa = {} var bbb = {} `, { rules: { "no-redeclare": "error" } }); + const suppressedMessages = linter.getSuppressedMessages(); // Don't include `bbb` assert.deepStrictEqual( @@ -4761,6 +5470,8 @@ var a = "test2"; severity: 2 }] ); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should ignore the part preceded by '--' in '/*exported*/'.", () => { @@ -4769,6 +5480,7 @@ var a = "test2"; var aaa = {} var bbb = {} `, { rules: { "no-unused-vars": "error" } }); + const suppressedMessages = linter.getSuppressedMessages(); // Don't include `aaa` assert.deepStrictEqual( @@ -4785,6 +5497,8 @@ var a = "test2"; severity: 2 }] ); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should ignore the part preceded by '--' in '/*eslint-disable*/'.", () => { @@ -4793,6 +5507,7 @@ var a = "test2"; var aaa = {} var aaa = {} `, { rules: { "no-redeclare": "error", "no-unused-vars": "error" } }); + const suppressedMessages = linter.getSuppressedMessages(); // Do include `no-unused-vars` but not `no-redeclare` assert.deepStrictEqual( @@ -4809,6 +5524,22 @@ var a = "test2"; severity: 2 }] ); + + assert.deepStrictEqual( + suppressedMessages, + [{ + column: 25, + endLine: 4, + endColumn: 28, + line: 4, + message: "'aaa' is already defined.", + messageId: "redeclared", + nodeType: "Identifier", + ruleId: "no-redeclare", + severity: 2, + suppressions: [{ kind: "directive", justification: "no-unused-vars" }] + }] + ); }); it("should ignore the part preceded by '--' in '/*eslint-enable*/'.", () => { @@ -4818,6 +5549,7 @@ var a = "test2"; var aaa = {} var aaa = {} `, { rules: { "no-redeclare": "error", "no-unused-vars": "error" } }); + const suppressedMessages = linter.getSuppressedMessages(); // Do include `no-redeclare` but not `no-unused-vars` assert.deepStrictEqual( @@ -4834,6 +5566,22 @@ var a = "test2"; severity: 2 }] ); + + assert.deepStrictEqual( + suppressedMessages, + [{ + column: 25, + endLine: 5, + endColumn: 28, + line: 5, + message: "'aaa' is assigned a value but never used.", + messageId: "unusedVar", + nodeType: "Identifier", + ruleId: "no-unused-vars", + severity: 2, + suppressions: [{ kind: "directive", justification: "" }] + }] + ); }); it("should ignore the part preceded by '--' in '//eslint-disable-line'.", () => { @@ -4841,6 +5589,7 @@ var a = "test2"; var aaa = {} //eslint-disable-line no-redeclare -- no-unused-vars var aaa = {} //eslint-disable-line no-redeclare -- no-unused-vars `, { rules: { "no-redeclare": "error", "no-unused-vars": "error" } }); + const suppressedMessages = linter.getSuppressedMessages(); // Do include `no-unused-vars` but not `no-redeclare` assert.deepStrictEqual( @@ -4857,6 +5606,22 @@ var a = "test2"; severity: 2 }] ); + + assert.deepStrictEqual( + suppressedMessages, + [{ + column: 25, + endLine: 3, + endColumn: 28, + line: 3, + message: "'aaa' is already defined.", + messageId: "redeclared", + nodeType: "Identifier", + ruleId: "no-redeclare", + severity: 2, + suppressions: [{ kind: "directive", justification: "no-unused-vars" }] + }] + ); }); it("should ignore the part preceded by '--' in '/*eslint-disable-line*/'.", () => { @@ -4864,6 +5629,7 @@ var a = "test2"; var aaa = {} /*eslint-disable-line no-redeclare -- no-unused-vars */ var aaa = {} /*eslint-disable-line no-redeclare -- no-unused-vars */ `, { rules: { "no-redeclare": "error", "no-unused-vars": "error" } }); + const suppressedMessages = linter.getSuppressedMessages(); // Do include `no-unused-vars` but not `no-redeclare` assert.deepStrictEqual( @@ -4880,6 +5646,22 @@ var a = "test2"; severity: 2 }] ); + + assert.deepStrictEqual( + suppressedMessages, + [{ + column: 25, + endLine: 3, + endColumn: 28, + line: 3, + message: "'aaa' is already defined.", + messageId: "redeclared", + nodeType: "Identifier", + ruleId: "no-redeclare", + severity: 2, + suppressions: [{ kind: "directive", justification: "no-unused-vars" }] + }] + ); }); it("should ignore the part preceded by '--' in '//eslint-disable-next-line'.", () => { @@ -4889,6 +5671,7 @@ var a = "test2"; //eslint-disable-next-line no-redeclare -- no-unused-vars var aaa = {} `, { rules: { "no-redeclare": "error", "no-unused-vars": "error" } }); + const suppressedMessages = linter.getSuppressedMessages(); // Do include `no-unused-vars` but not `no-redeclare` assert.deepStrictEqual( @@ -4905,6 +5688,22 @@ var a = "test2"; severity: 2 }] ); + + assert.deepStrictEqual( + suppressedMessages, + [{ + column: 25, + endLine: 5, + endColumn: 28, + line: 5, + message: "'aaa' is already defined.", + messageId: "redeclared", + nodeType: "Identifier", + ruleId: "no-redeclare", + severity: 2, + suppressions: [{ kind: "directive", justification: "no-unused-vars" }] + }] + ); }); it("should ignore the part preceded by '--' in '/*eslint-disable-next-line*/'.", () => { @@ -4914,6 +5713,7 @@ var a = "test2"; /*eslint-disable-next-line no-redeclare -- no-unused-vars */ var aaa = {} `, { rules: { "no-redeclare": "error", "no-unused-vars": "error" } }); + const suppressedMessages = linter.getSuppressedMessages(); // Do include `no-unused-vars` but not `no-redeclare` assert.deepStrictEqual( @@ -4930,6 +5730,22 @@ var a = "test2"; severity: 2 }] ); + + assert.deepStrictEqual( + suppressedMessages, + [{ + column: 25, + endLine: 5, + endColumn: 28, + line: 5, + message: "'aaa' is already defined.", + messageId: "redeclared", + nodeType: "Identifier", + ruleId: "no-redeclare", + severity: 2, + suppressions: [{ kind: "directive", justification: "no-unused-vars" }] + }] + ); }); it("should not ignore the part preceded by '--' if the '--' is not surrounded by whitespaces.", () => { @@ -4940,12 +5756,15 @@ var a = "test2"; /*eslint a--rule:error */ console.log("hello") `, {}); + const suppressedMessages = linter.getSuppressedMessages(); // Don't include syntax error of the comment. assert.deepStrictEqual(messages, []); // Use `a--rule`. assert.strictEqual(rule.callCount, 1); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should ignore the part preceded by '--' even if the '--' is longer than 2.", () => { @@ -4958,6 +5777,7 @@ var a = "test2"; /*eslint aaa:error -------- bbb:error */ console.log("hello") `, {}); + const suppressedMessages = linter.getSuppressedMessages(); // Don't include syntax error of the comment. assert.deepStrictEqual(messages, []); @@ -4965,6 +5785,8 @@ var a = "test2"; // Use only `aaa`. assert.strictEqual(aaa.callCount, 1); assert.strictEqual(bbb.callCount, 0); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should ignore the part preceded by '--' with line breaks.", () => { @@ -4979,6 +5801,7 @@ var a = "test2"; bbb:error */ console.log("hello") `, {}); + const suppressedMessages = linter.getSuppressedMessages(); // Don't include syntax error of the comment. assert.deepStrictEqual(messages, []); @@ -4986,6 +5809,8 @@ var a = "test2"; // Use only `aaa`. assert.strictEqual(aaa.callCount, 1); assert.strictEqual(bbb.callCount, 0); + + assert.strictEqual(suppressedMessages.length, 0); }); }); }); @@ -5602,6 +6427,7 @@ var a = "test2"; }); const messages = linter.verify("var a = 1;", { rules: { "rule-with-suggestions": "error" } }); + const suppressedMessages = linter.getSuppressedMessages(); assert.deepStrictEqual(messages[0].suggestions, [{ desc: "Insert space at the beginning", @@ -5616,6 +6442,8 @@ var a = "test2"; text: " " } }]); + + assert.strictEqual(suppressedMessages.length, 0); }); it("supports messageIds for suggestions", () => { @@ -5645,6 +6473,7 @@ var a = "test2"; }); const messages = linter.verify("var a = 1;", { rules: { "rule-with-suggestions": "error" } }); + const suppressedMessages = linter.getSuppressedMessages(); assert.deepStrictEqual(messages[0].suggestions, [{ messageId: "suggestion1", @@ -5661,6 +6490,8 @@ var a = "test2"; text: " " } }]); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should throw an error if suggestion is passed but `meta.hasSuggestions` property is not enabled", () => { @@ -5829,6 +6660,31 @@ var a = "test2"; assert.strictEqual(preprocess.calledOnce, true); assert.deepStrictEqual(preprocess.args[0], [code, filename]); }); + + it("should catch preprocess error.", () => { + const code = "foo"; + const preprocess = sinon.spy(() => { + throw Object.assign(new SyntaxError("Invalid syntax"), { + lineNumber: 1, + column: 1 + }); + }); + + const messages = linter.verify(code, {}, { filename, preprocess }); + + assert.strictEqual(preprocess.calledOnce, true); + assert.deepStrictEqual(preprocess.args[0], [code, filename]); + assert.deepStrictEqual(messages, [ + { + ruleId: null, + fatal: true, + severity: 2, + message: "Preprocessing error: Invalid syntax", + line: 1, + column: 1 + } + ]); + }); }); describe("postprocessors", () => { @@ -6068,38 +6924,52 @@ var a = "test2"; it("should properly parse import statements when sourceType is module", () => { const code = "import foo from 'foo';"; const messages = linter.verify(code, { parserOptions: { ecmaVersion: 6, sourceType: "module" } }); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); it("should properly parse import all statements when sourceType is module", () => { const code = "import * as foo from 'foo';"; const messages = linter.verify(code, { parserOptions: { ecmaVersion: 6, sourceType: "module" } }); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); it("should properly parse default export statements when sourceType is module", () => { const code = "export default function initialize() {}"; const messages = linter.verify(code, { parserOptions: { ecmaVersion: 6, sourceType: "module" } }); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); // https://github.com/eslint/eslint/issues/9687 it("should report an error when invalid parserOptions found", () => { let messages = linter.verify("", { parserOptions: { ecmaVersion: 222 } }); + let suppressedMessages = linter.getSuppressedMessages(); assert.deepStrictEqual(messages.length, 1); assert.ok(messages[0].message.includes("Invalid ecmaVersion")); + assert.strictEqual(suppressedMessages.length, 0); messages = linter.verify("", { parserOptions: { sourceType: "foo" } }); + suppressedMessages = linter.getSuppressedMessages(); + assert.deepStrictEqual(messages.length, 1); assert.ok(messages[0].message.includes("Invalid sourceType")); + assert.strictEqual(suppressedMessages.length, 0); messages = linter.verify("", { parserOptions: { ecmaVersion: 5, sourceType: "module" } }); + suppressedMessages = linter.getSuppressedMessages(); + assert.deepStrictEqual(messages.length, 1); assert.ok(messages[0].message.includes("sourceType 'module' is not supported when ecmaVersion < 2015")); + assert.strictEqual(suppressedMessages.length, 0); }); it("should not crash when invalid parentheses syntax is encountered", () => { @@ -6116,9 +6986,12 @@ var a = "test2"; it("should report syntax error when a keyword exists in object property shorthand", () => { const messages = linter.verify("let a = {this}", { parserOptions: { ecmaVersion: 6 } }); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].fatal, true); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should not rewrite env setting in core (https://github.com/eslint/eslint/issues/4814)", () => { @@ -6152,6 +7025,22 @@ var a = "test2"; assert(ok); }); + + it("should throw when rule's create() function does not return an object", () => { + const config = { rules: { checker: "error" } }; + + linter.defineRule("checker", () => null); // returns null + + assert.throws(() => { + linter.verify("abc", config, filename); + }, "The create() function for rule 'checker' did not return an object."); + + linter.defineRule("checker", () => {}); // returns undefined + + assert.throws(() => { + linter.verify("abc", config, filename); + }, "The create() function for rule 'checker' did not return an object."); + }); }); describe("Custom parser", () => { @@ -6173,17 +7062,22 @@ var a = "test2"; linter.defineParser("esprima", esprima); const messages = linter.verify(code, { parser: "esprima", parserOptions: { jsx: true } }, "filename"); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); it("should return an error when the custom parser can't be found", () => { const code = "var myDivElement = <div {...this.props} />;"; const messages = linter.verify(code, { parser: "esprima-xyz" }, "filename"); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].severity, 2); assert.strictEqual(messages[0].message, "Configured parser 'esprima-xyz' was not found."); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should not throw or report errors when the custom parser returns unrecognized operators (https://github.com/eslint/eslint/issues/10475)", () => { @@ -6193,8 +7087,10 @@ var a = "test2"; // This shouldn't throw const messages = linter.verify(code, { parser: "unknown-logical-operator" }, filename, true); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); it("should not throw or report errors when the custom parser returns nested unrecognized operators (https://github.com/eslint/eslint/issues/10560)", () => { @@ -6204,8 +7100,10 @@ var a = "test2"; // This shouldn't throw const messages = linter.verify(code, { parser: "unknown-logical-operator-nested" }, filename, true); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); it("should not throw or return errors when the custom parser returns unknown AST nodes", () => { @@ -6227,27 +7125,36 @@ var a = "test2"; "collect-node-types": "error" } }, filename, true); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); assert.isTrue(nodes.length > 0); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should strip leading line: prefix from parser error", () => { linter.defineParser("line-error", testParsers.lineError); const messages = linter.verify(";", { parser: "line-error" }, "filename"); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].severity, 2); assert.strictEqual(messages[0].message, errorPrefix + testParsers.lineError.expectedError); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should not modify a parser error message without a leading line: prefix", () => { linter.defineParser("no-line-error", testParsers.noLineError); - const messages = linter.verify(";", { parser: "no-line-error" }, "filename"); + const messages = linter.verify(";", { parser: "no-line-error" }, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].severity, 2); assert.strictEqual(messages[0].message, errorPrefix + testParsers.noLineError.expectedError); + + assert.strictEqual(suppressedMessages.length, 0); }); describe("if a parser provides 'visitorKeys'", () => { @@ -6371,8 +7278,10 @@ var a = "test2"; it("should not pass any default parserOptions to the parser", () => { linter.defineParser("throws-with-options", testParsers.throwsWithOptions); const messages = linter.verify(";", { parser: "throws-with-options" }, "filename"); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); }); @@ -6391,9 +7300,11 @@ var a = "test2"; }; const messages = linter.verify(code, config); + const suppressedMessages = linter.getSuppressedMessages(); // no parsing errors assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); }); }); @@ -6441,9 +7352,12 @@ describe("Linter with FlatConfigArray", () => { "no-undef": "error" } }); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1, "There should be one linting error."); assert.strictEqual(messages[0].ruleId, "no-undef", "The linting error should be no-undef."); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should error when accessing a global that isn't available in ecmaVersion 3", () => { @@ -6456,9 +7370,12 @@ describe("Linter with FlatConfigArray", () => { "no-undef": "error" } }); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1, "There should be one linting error."); assert.strictEqual(messages[0].ruleId, "no-undef", "The linting error should be no-undef."); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should add globals for ES6 when ecmaVersion is 6", () => { @@ -6470,8 +7387,10 @@ describe("Linter with FlatConfigArray", () => { "no-undef": "error" } }); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0, "There should be no linting errors."); + assert.strictEqual(suppressedMessages.length, 0); }); it("should allow destructuring when ecmaVersion is 6", () => { @@ -6480,8 +7399,10 @@ describe("Linter with FlatConfigArray", () => { ecmaVersion: 6 } }); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0, "There should be no linting errors."); + assert.strictEqual(suppressedMessages.length, 0); }); it("ecmaVersion should be normalized to year name for ES 6", () => { @@ -6644,8 +7565,10 @@ describe("Linter with FlatConfigArray", () => { sourceType: "module" } }); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0, "There should no linting errors."); + assert.strictEqual(suppressedMessages.length, 0); }); it("should error when return is used at the top-level outside of commonjs", () => { @@ -6655,9 +7578,12 @@ describe("Linter with FlatConfigArray", () => { sourceType: "script" } }); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1, "There should be one parsing error."); assert.strictEqual(messages[0].message, "Parsing error: 'return' outside of function"); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should not error when top-level return is used in commonjs", () => { @@ -6667,8 +7593,10 @@ describe("Linter with FlatConfigArray", () => { sourceType: "commonjs" } }); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0, "There should no linting errors."); + assert.strictEqual(suppressedMessages.length, 0); }); it("should error when accessing a Node.js global outside of commonjs", () => { @@ -6680,9 +7608,12 @@ describe("Linter with FlatConfigArray", () => { "no-undef": "error" } }); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1, "There should be one linting error."); assert.strictEqual(messages[0].ruleId, "no-undef", "The linting error should be no-undef."); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should add globals for Node.js when sourceType is commonjs", () => { @@ -6695,8 +7626,10 @@ describe("Linter with FlatConfigArray", () => { "no-undef": "error" } }); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0, "There should be no linting errors."); + assert.strictEqual(suppressedMessages.length, 0); }); it("should allow 'await' as a property name in modules", () => { @@ -6709,8 +7642,10 @@ describe("Linter with FlatConfigArray", () => { } } ); + const suppressedMessages = linter.getSuppressedMessages(); assert(result.length === 0); + assert.strictEqual(suppressedMessages.length, 0); }); }); @@ -6748,8 +7683,10 @@ describe("Linter with FlatConfigArray", () => { const messages = linter.verify("0", config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); it("should pass parser as context.languageOptions.parser to all rules when provided on config", () => { @@ -6790,8 +7727,10 @@ describe("Linter with FlatConfigArray", () => { }; const messages = linter.verify("0", config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); it("should expose parser services when using parseForESLint() and services are specified", () => { @@ -6823,9 +7762,12 @@ describe("Linter with FlatConfigArray", () => { }; const messages = linter.verify("0", config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].message, "Hi!"); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should use the same parserServices if source code object is reused", () => { @@ -6857,14 +7799,18 @@ describe("Linter with FlatConfigArray", () => { }; const messages = linter.verify("0", config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].message, "Hi!"); + assert.strictEqual(suppressedMessages.length, 0); const messages2 = linter.verify(linter.getSourceCode(), config, filename); + const suppressedMessages2 = linter.getSuppressedMessages(); assert.strictEqual(messages2.length, 1); assert.strictEqual(messages2[0].message, "Hi!"); + assert.strictEqual(suppressedMessages2.length, 0); }); it("should pass parser as context.languageOptions.parser to all rules when default parser is used", () => { @@ -6930,8 +7876,10 @@ describe("Linter with FlatConfigArray", () => { }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); it("should not throw or report errors when the custom parser returns unrecognized operators (https://github.com/eslint/eslint/issues/10475)", () => { @@ -6944,8 +7892,10 @@ describe("Linter with FlatConfigArray", () => { // This shouldn't throw const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); it("should not throw or report errors when the custom parser returns nested unrecognized operators (https://github.com/eslint/eslint/issues/10560)", () => { @@ -6958,8 +7908,10 @@ describe("Linter with FlatConfigArray", () => { // This shouldn't throw const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); it("should not throw or return errors when the custom parser returns unknown AST nodes", () => { @@ -6986,9 +7938,11 @@ describe("Linter with FlatConfigArray", () => { }; const messages = linter.verify(code, config, filename, true); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); assert.isTrue(nodes.length > 0); + assert.strictEqual(suppressedMessages.length, 0); }); it("should strip leading line: prefix from parser error", () => { @@ -6996,11 +7950,14 @@ describe("Linter with FlatConfigArray", () => { languageOptions: { parser: testParsers.lineError } - }, "filename"); + }, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].severity, 2); assert.strictEqual(messages[0].message, errorPrefix + testParsers.lineError.expectedError); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should not modify a parser error message without a leading line: prefix", () => { @@ -7008,11 +7965,14 @@ describe("Linter with FlatConfigArray", () => { languageOptions: { parser: testParsers.noLineError } - }, "filename"); + }, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].severity, 2); assert.strictEqual(messages[0].message, errorPrefix + testParsers.noLineError.expectedError); + + assert.strictEqual(suppressedMessages.length, 0); }); describe("if a parser provides 'visitorKeys'", () => { @@ -7274,9 +8234,12 @@ describe("Linter with FlatConfigArray", () => { } } }, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].message, "Parsing error: The keyword 'private' is reserved"); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should properly parse valid code when impliedStrict is true", () => { @@ -7290,8 +8253,10 @@ describe("Linter with FlatConfigArray", () => { } } }, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); it("should properly parse JSX when passed ecmaFeatures", () => { @@ -7305,18 +8270,23 @@ describe("Linter with FlatConfigArray", () => { } } }, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); it("should report an error when JSX code is encountered and JSX is not enabled", () => { const code = "var myDivElement = <div className=\"foo\" />;"; - const messages = linter.verify(code, {}, "filename"); + const messages = linter.verify(code, {}, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].line, 1); assert.strictEqual(messages[0].column, 20); assert.strictEqual(messages[0].message, "Parsing error: Unexpected token <"); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should not report an error when JSX code is encountered and JSX is enabled", () => { @@ -7329,10 +8299,11 @@ describe("Linter with FlatConfigArray", () => { } } } - - }, "filename"); + }, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); it("should not report an error when JSX code contains a spread operator and JSX is enabled", () => { @@ -7347,13 +8318,130 @@ describe("Linter with FlatConfigArray", () => { } } - }, "filename"); + }, "filename.js"); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); - }); + it("should not allow the use of reserved words as variable names in ES3", () => { + const code = "var char;"; + const messages = linter.verify(code, { + languageOptions: { + ecmaVersion: 3, + sourceType: "script" + } + }, filename); + + assert.strictEqual(messages.length, 1); + assert.strictEqual(messages[0].severity, 2); + assert.isTrue(messages[0].fatal); + assert.match(messages[0].message, /^Parsing error:.*'char'/u); + }); + + it("should not allow the use of reserved words as property names in member expressions in ES3", () => { + const code = "obj.char;"; + const messages = linter.verify(code, { + languageOptions: { + ecmaVersion: 3, + sourceType: "script" + } + }, filename); + + assert.strictEqual(messages.length, 1); + assert.strictEqual(messages[0].severity, 2); + assert.isTrue(messages[0].fatal); + assert.match(messages[0].message, /^Parsing error:.*'char'/u); + }); + + it("should not allow the use of reserved words as property names in object literals in ES3", () => { + const code = "var obj = { char: 1 };"; + const messages = linter.verify(code, { + languageOptions: { + ecmaVersion: 3, + sourceType: "script" + } + }, filename); + + assert.strictEqual(messages.length, 1); + assert.strictEqual(messages[0].severity, 2); + assert.isTrue(messages[0].fatal); + assert.match(messages[0].message, /^Parsing error:.*'char'/u); + }); + + it("should allow the use of reserved words as variable and property names in ES3 when allowReserved is true", () => { + const code = "var char; obj.char; var obj = { char: 1 };"; + const messages = linter.verify(code, { + languageOptions: { + ecmaVersion: 3, + sourceType: "script", + parserOptions: { + allowReserved: true + } + } + }, filename); + + assert.strictEqual(messages.length, 0); + }); + + it("should not allow the use of reserved words as variable names in ES > 3", () => { + const ecmaVersions = [void 0, ...espree.supportedEcmaVersions.filter(ecmaVersion => ecmaVersion > 3)]; + + ecmaVersions.forEach(ecmaVersion => { + const code = "var enum;"; + const messages = linter.verify(code, { + languageOptions: { + ...ecmaVersion ? { ecmaVersion } : {}, + sourceType: "script" + } + }, filename); + + assert.strictEqual(messages.length, 1); + assert.strictEqual(messages[0].severity, 2); + assert.isTrue(messages[0].fatal); + assert.match(messages[0].message, /^Parsing error:.*'enum'/u); + }); + }); + + it("should allow the use of reserved words as property names in ES > 3", () => { + const ecmaVersions = [void 0, ...espree.supportedEcmaVersions.filter(ecmaVersion => ecmaVersion > 3)]; + + ecmaVersions.forEach(ecmaVersion => { + const code = "obj.enum; obj.function; var obj = { enum: 1, function: 2 };"; + const messages = linter.verify(code, { + languageOptions: { + ...ecmaVersion ? { ecmaVersion } : {}, + sourceType: "script" + } + }, filename); + assert.strictEqual(messages.length, 0); + }); + }); + + it("should not allow `allowReserved: true` in ES > 3", () => { + const ecmaVersions = [void 0, ...espree.supportedEcmaVersions.filter(ecmaVersion => ecmaVersion > 3)]; + + ecmaVersions.forEach(ecmaVersion => { + const code = ""; + const messages = linter.verify(code, { + languageOptions: { + ...ecmaVersion ? { ecmaVersion } : {}, + sourceType: "script", + parserOptions: { + allowReserved: true + } + } + }, filename); + + assert.strictEqual(messages.length, 1); + assert.strictEqual(messages[0].severity, 2); + assert.isTrue(messages[0].fatal); + assert.match(messages[0].message, /^Parsing error:.*allowReserved/u); + }); + }); + }); }); describe("settings", () => { @@ -7382,9 +8470,12 @@ describe("Linter with FlatConfigArray", () => { }; const messages = linter.verify("0", config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].message, "Hello"); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should not have any settings if they were not passed in", () => { @@ -7411,8 +8502,10 @@ describe("Linter with FlatConfigArray", () => { }; const messages = linter.verify("0", config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); }); @@ -7426,9 +8519,12 @@ describe("Linter with FlatConfigArray", () => { config.rules[rule] = 1; const messages = linter.verify(code, config, filename, true); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].ruleId, rule); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should be configurable by only setting the string value", () => { @@ -7438,10 +8534,13 @@ describe("Linter with FlatConfigArray", () => { config.rules[rule] = "warn"; const messages = linter.verify(code, config, filename, true); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].severity, 1); assert.strictEqual(messages[0].ruleId, rule); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should be configurable by passing in values as an array", () => { @@ -7451,9 +8550,12 @@ describe("Linter with FlatConfigArray", () => { config.rules[rule] = [1]; const messages = linter.verify(code, config, filename, true); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].ruleId, rule); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should be configurable by passing in string value as an array", () => { @@ -7463,10 +8565,13 @@ describe("Linter with FlatConfigArray", () => { config.rules[rule] = ["warn"]; const messages = linter.verify(code, config, filename, true); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].severity, 1); assert.strictEqual(messages[0].ruleId, rule); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should not be configurable by setting other value", () => { @@ -7483,8 +8588,10 @@ describe("Linter with FlatConfigArray", () => { it("should process empty config", () => { const config = {}; const messages = linter.verify(code, config, filename, true); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); }); @@ -7498,6 +8605,7 @@ describe("Linter with FlatConfigArray", () => { const config = { rules: { "no-mixed-spaces-and-tabs": 1, "eol-last": 1, semi: [1, "always"] } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 3); assert.strictEqual(messages[0].line, 1); @@ -7506,6 +8614,25 @@ describe("Linter with FlatConfigArray", () => { assert.strictEqual(messages[1].column, 18); assert.strictEqual(messages[2].line, 2); assert.strictEqual(messages[2].column, 18); + + assert.strictEqual(suppressedMessages.length, 0); + }); + + it("should report ignored file when filename isn't matched in the config array", () => { + + const code = "foo()\n alert('test')"; + const config = { rules: { "no-mixed-spaces-and-tabs": 1, "eol-last": 1, semi: [1, "always"] } }; + + const messages = linter.verify(code, config, "filename.ts"); + + assert.strictEqual(messages.length, 1); + assert.deepStrictEqual(messages[0], { + ruleId: null, + severity: 1, + message: "No matching configuration found for filename.ts.", + line: 0, + column: 0 + }); }); describe("Plugins", () => { @@ -7652,6 +8779,7 @@ describe("Linter with FlatConfigArray", () => { }; const messages = linter.verify(code, config, filename, true); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); sinon.assert.calledOnce(spyVariableDeclaration); @@ -7659,6 +8787,8 @@ describe("Linter with FlatConfigArray", () => { sinon.assert.calledOnce(spyIdentifier); sinon.assert.calledTwice(spyLiteral); sinon.assert.calledOnce(spyBinaryExpression); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should throw an error if a rule reports a problem without a message", () => { @@ -7715,8 +8845,10 @@ describe("Linter with FlatConfigArray", () => { }; const messages = linter.verify("0", config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages[0].message, filename); + assert.strictEqual(suppressedMessages.length, 0); }); it("defaults filename to '<input>'", () => { @@ -7740,8 +8872,10 @@ describe("Linter with FlatConfigArray", () => { const messages = linter.verify("0", config); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages[0].message, "<input>"); + assert.strictEqual(suppressedMessages.length, 0); }); }); @@ -7769,8 +8903,10 @@ describe("Linter with FlatConfigArray", () => { }; const messages = linter.verify("0", config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages[0].message, filename); + assert.strictEqual(suppressedMessages.length, 0); }); }); @@ -9537,9 +10673,12 @@ describe("Linter with FlatConfigArray", () => { configs.normalizeSync(); const messages = linter.verify("foo", configs, filename, true); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1, "Message length is wrong"); assert.strictEqual(messages[0].ruleId, ruleId); + + assert.strictEqual(suppressedMessages.length, 0); }); it("rule should run as warning when set to 1 with a plain array", () => { @@ -9552,9 +10691,12 @@ describe("Linter with FlatConfigArray", () => { }]; const messages = linter.verify("foo", configs, filename, true); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1, "Message length is wrong"); assert.strictEqual(messages[0].ruleId, ruleId); + + assert.strictEqual(suppressedMessages.length, 0); }); it("rule should run as warning when set to 1 with an object", () => { @@ -9567,9 +10709,12 @@ describe("Linter with FlatConfigArray", () => { }; const messages = linter.verify("foo", config, filename, true); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1, "Message length is wrong"); assert.strictEqual(messages[0].ruleId, ruleId); + + assert.strictEqual(suppressedMessages.length, 0); }); }); @@ -9579,11 +10724,14 @@ describe("Linter with FlatConfigArray", () => { it("should preserve line numbers", () => { const config = { rules: { "no-extra-semi": 1 } }; const messages = linter.verify(code, config); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].ruleId, "no-extra-semi"); assert.strictEqual(messages[0].nodeType, "EmptyStatement"); assert.strictEqual(messages[0].line, 3); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should have a comment with the hashbang in it", () => { @@ -9999,6 +11147,7 @@ describe("Linter with FlatConfigArray", () => { it("should report a linting error when a global is set to an invalid value", () => { const results = linter.verify("/* global foo: AAAAA, bar: readonly */\nfoo;\nbar;", { rules: { "no-undef": "error" } }); + const suppressedMessages = linter.getSuppressedMessages(); assert.deepStrictEqual(results, [ { @@ -10023,6 +11172,8 @@ describe("Linter with FlatConfigArray", () => { nodeType: "Identifier" } ]); + + assert.strictEqual(suppressedMessages.length, 0); }); }); @@ -10197,11 +11348,14 @@ describe("Linter with FlatConfigArray", () => { const config = { rules: {} }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].ruleId, "no-alert"); assert.strictEqual(messages[0].message, "Unexpected alert."); assert.include(messages[0].nodeType, "CallExpression"); + + assert.strictEqual(suppressedMessages.length, 0); }); it("rules should not change initial config", () => { @@ -10214,11 +11368,16 @@ describe("Linter with FlatConfigArray", () => { const codeA = "/*eslint strict: 0*/ function bar() { return 2; }"; const codeB = "function foo() { return 1; }"; let messages = linter.verify(codeA, config, filename, false); + let suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); messages = linter.verify(codeB, config, filename, false); + suppressedMessages = linter.getSuppressedMessages(); + assert.strictEqual(messages.length, 1); + assert.strictEqual(suppressedMessages.length, 0); }); it("rules should not change initial config", () => { @@ -10231,11 +11390,16 @@ describe("Linter with FlatConfigArray", () => { const codeA = "/*eslint quotes: 0*/ function bar() { return '2'; }"; const codeB = "function foo() { return '1'; }"; let messages = linter.verify(codeA, config, filename, false); + let suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); messages = linter.verify(codeB, config, filename, false); + suppressedMessages = linter.getSuppressedMessages(); + assert.strictEqual(messages.length, 1); + assert.strictEqual(suppressedMessages.length, 0); }); it("rules should not change initial config", () => { @@ -10243,11 +11407,16 @@ describe("Linter with FlatConfigArray", () => { const codeA = "/*eslint quotes: [0, \"single\"]*/ function bar() { return '2'; }"; const codeB = "function foo() { return '1'; }"; let messages = linter.verify(codeA, config, filename, false); + let suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); messages = linter.verify(codeB, config, filename, false); + suppressedMessages = linter.getSuppressedMessages(); + assert.strictEqual(messages.length, 1); + assert.strictEqual(suppressedMessages.length, 0); }); it("rules should not change initial config", () => { @@ -10260,18 +11429,26 @@ describe("Linter with FlatConfigArray", () => { const codeA = "/*eslint no-unused-vars: [0, {\"vars\": \"local\"}]*/ var a = 44;"; const codeB = "var b = 55;"; let messages = linter.verify(codeA, config, filename, false); + let suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); messages = linter.verify(codeB, config, filename, false); + suppressedMessages = linter.getSuppressedMessages(); + assert.strictEqual(messages.length, 1); + assert.strictEqual(suppressedMessages.length, 0); }); }); describe("when evaluating code with invalid comments to enable rules", () => { it("should report a violation when the config is not a valid rule configuration", () => { + const messages = linter.verify("/*eslint no-alert:true*/ alert('test');", {}); + const suppressedMessages = linter.getSuppressedMessages(); + assert.deepStrictEqual( - linter.verify("/*eslint no-alert:true*/ alert('test');", {}), + messages, [ { severity: 2, @@ -10285,11 +11462,16 @@ describe("Linter with FlatConfigArray", () => { } ] ); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should report a violation when the config violates a rule's schema", () => { + const messages = linter.verify("/* eslint no-alert: [error, {nonExistentPropertyName: true}]*/", {}); + const suppressedMessages = linter.getSuppressedMessages(); + assert.deepStrictEqual( - linter.verify("/* eslint no-alert: [error, {nonExistentPropertyName: true}]*/", {}), + messages, [ { severity: 2, @@ -10303,6 +11485,8 @@ describe("Linter with FlatConfigArray", () => { } ] ); + + assert.strictEqual(suppressedMessages.length, 0); }); }); @@ -10311,37 +11495,49 @@ describe("Linter with FlatConfigArray", () => { it("should not report a violation", () => { const config = { rules: { "no-alert": 1 } }; const messages = linter.verify("/*eslint no-alert:0*/ alert('test');", config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); it("should report an error when disabling a non-existent rule in inline comment", () => { let code = "/*eslint foo:0*/ ;"; let messages = linter.verify(code, {}, filename); + let suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1, "/*eslint*/ comment should report problem."); assert.strictEqual(messages[0].message, "Definition for rule 'foo' was not found."); + assert.strictEqual(suppressedMessages.length, 0); code = "/*eslint-disable foo*/ ;"; messages = linter.verify(code, {}, filename); + suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1, "/*eslint-disable*/ comment should report problem."); assert.strictEqual(messages[0].message, "Definition for rule 'foo' was not found."); + assert.strictEqual(suppressedMessages.length, 0); code = "/*eslint-disable-line foo*/ ;"; messages = linter.verify(code, {}, filename); + suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1, "/*eslint-disable-line*/ comment should report problem."); assert.strictEqual(messages[0].message, "Definition for rule 'foo' was not found."); + assert.strictEqual(suppressedMessages.length, 0); code = "/*eslint-disable-next-line foo*/ ;"; messages = linter.verify(code, {}, filename); + suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1, "/*eslint-disable-next-line*/ comment should report problem."); assert.strictEqual(messages[0].message, "Definition for rule 'foo' was not found."); + assert.strictEqual(suppressedMessages.length, 0); }); it("should not report an error, when disabling a non-existent rule in config", () => { const messages = linter.verify("", { rules: { foo: 0 } }, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); it("should throw an error when a non-existent rule in config", () => { @@ -10363,12 +11559,15 @@ describe("Linter with FlatConfigArray", () => { const config = { rules: {} }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 2); assert.strictEqual(messages[0].ruleId, "no-alert"); assert.strictEqual(messages[0].message, "Unexpected alert."); assert.include(messages[0].nodeType, "CallExpression"); assert.strictEqual(messages[1].ruleId, "no-console"); + + assert.strictEqual(suppressedMessages.length, 0); }); }); @@ -10379,11 +11578,14 @@ describe("Linter with FlatConfigArray", () => { const config = { rules: { "no-console": 1, "no-alert": 0 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].ruleId, "no-alert"); assert.strictEqual(messages[0].message, "Unexpected alert."); assert.include(messages[0].nodeType, "CallExpression"); + + assert.strictEqual(suppressedMessages.length, 0); }); }); @@ -10417,8 +11619,10 @@ describe("Linter with FlatConfigArray", () => { const code = "/*eslint test-plugin/test-rule: 2*/ var a = \"no violation\";"; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); it("should not report a violation when inline comment disables plugin rule", () => { @@ -10426,8 +11630,10 @@ describe("Linter with FlatConfigArray", () => { const config = { ...baseConfig, rules: { "test-plugin/test-rule": 1 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); it("should report a violation when the report is right before the comment", () => { @@ -10451,9 +11657,12 @@ describe("Linter with FlatConfigArray", () => { }; const problems = linter.verify(code, config); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(problems.length, 1); assert.strictEqual(problems[0].message, "foo"); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should not report a violation when the report is right at the start of the comment", () => { @@ -10477,8 +11686,13 @@ describe("Linter with FlatConfigArray", () => { }; const problems = linter.verify(code, config); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(problems.length, 0); + + assert.strictEqual(suppressedMessages.length, 1); + assert.strictEqual(suppressedMessages[0].message, "foo"); + assert.deepStrictEqual(suppressedMessages[0].suppressions, [{ kind: "directive", justification: "" }]); }); it("rules should not change initial config", () => { @@ -10486,11 +11700,16 @@ describe("Linter with FlatConfigArray", () => { const codeA = "/*eslint test-plugin/test-rule: 0*/ var a = \"trigger violation\";"; const codeB = "var a = \"trigger violation\";"; let messages = linter.verify(codeA, config, filename, false); + let suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); messages = linter.verify(codeB, config, filename, false); + suppressedMessages = linter.getSuppressedMessages(); + assert.strictEqual(messages.length, 1); + assert.strictEqual(suppressedMessages.length, 0); }); }); @@ -10506,12 +11725,17 @@ describe("Linter with FlatConfigArray", () => { const config = { rules: { "no-alert": 1 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].ruleId, "no-alert"); assert.strictEqual(messages[0].message, "Unexpected alert."); assert.include(messages[0].nodeType, "CallExpression"); assert.strictEqual(messages[0].line, 4); + + assert.strictEqual(suppressedMessages.length, 1); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); + assert.strictEqual(suppressedMessages[0].line, 2); }); it("should not report a violation", () => { @@ -10523,8 +11747,10 @@ describe("Linter with FlatConfigArray", () => { const config = { rules: { "no-alert": 1 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 2); }); it("should not report a violation", () => { @@ -10537,10 +11763,15 @@ describe("Linter with FlatConfigArray", () => { const config = { rules: { "no-alert": 1 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 2); assert.strictEqual(messages[0].column, 21); assert.strictEqual(messages[1].column, 19); + + assert.strictEqual(suppressedMessages.length, 2); + assert.strictEqual(suppressedMessages[0].column, 1); + assert.strictEqual(suppressedMessages[1].column, 56); }); it("should report a violation", () => { @@ -10558,8 +11789,10 @@ describe("Linter with FlatConfigArray", () => { const config = { rules: { "no-alert": 1 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); + assert.strictEqual(suppressedMessages.length, 2); }); @@ -10573,8 +11806,12 @@ describe("Linter with FlatConfigArray", () => { const config = { rules: { "no-unused-vars": 1 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + + assert.strictEqual(suppressedMessages.length, 1); + assert.strictEqual(suppressedMessages[0].ruleId, "no-unused-vars"); }); it("should not report a violation", () => { @@ -10586,8 +11823,12 @@ describe("Linter with FlatConfigArray", () => { const config = { rules: { "no-unused-vars": 1 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + + assert.strictEqual(suppressedMessages.length, 1); + assert.strictEqual(suppressedMessages[0].ruleId, "no-unused-vars"); }); }); @@ -10598,11 +11839,14 @@ describe("Linter with FlatConfigArray", () => { const config = { rules: { "no-console": 1, "no-alert": 0 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].ruleId, "no-alert"); assert.strictEqual(messages[0].message, "Unexpected alert."); assert.include(messages[0].nodeType, "CallExpression"); + + assert.strictEqual(suppressedMessages.length, 0); }); }); @@ -10613,11 +11857,14 @@ describe("Linter with FlatConfigArray", () => { const config = { rules: { quotes: [2, "single"] } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].ruleId, "quotes"); assert.strictEqual(messages[0].message, "Strings must use doublequote."); assert.include(messages[0].nodeType, "Literal"); + + assert.strictEqual(suppressedMessages.length, 0); }); }); @@ -10628,11 +11875,14 @@ describe("Linter with FlatConfigArray", () => { const config = { rules: { quotes: [2, "single"] } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].ruleId, "quotes"); assert.strictEqual(messages[0].message, "Strings must use doublequote."); assert.include(messages[0].nodeType, "Literal"); + + assert.strictEqual(suppressedMessages.length, 0); }); }); @@ -10643,6 +11893,7 @@ describe("Linter with FlatConfigArray", () => { const config = { rules: { "no-alert": 1 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 2); @@ -10660,6 +11911,8 @@ describe("Linter with FlatConfigArray", () => { assert.strictEqual(messages[1].ruleId, "no-alert"); assert.strictEqual(messages[1].message, "Unexpected alert."); assert.include(messages[1].nodeType, "CallExpression"); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should report a violation", () => { @@ -10668,6 +11921,7 @@ describe("Linter with FlatConfigArray", () => { const config = { rules: { "no-alert": 1 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 2); @@ -10685,6 +11939,8 @@ describe("Linter with FlatConfigArray", () => { assert.strictEqual(messages[1].ruleId, "no-alert"); assert.strictEqual(messages[1].message, "Unexpected alert."); assert.include(messages[1].nodeType, "CallExpression"); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should report a violation", () => { @@ -10693,6 +11949,7 @@ describe("Linter with FlatConfigArray", () => { const config = { rules: { "no-alert": 1 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 2); @@ -10710,6 +11967,8 @@ describe("Linter with FlatConfigArray", () => { assert.strictEqual(messages[1].ruleId, "no-alert"); assert.strictEqual(messages[1].message, "Unexpected alert."); assert.include(messages[1].nodeType, "CallExpression"); + + assert.strictEqual(suppressedMessages.length, 0); }); }); @@ -10721,11 +11980,14 @@ alert('test'); it("should not parse errors, should report a violation", () => { const messages = linter.verify(code, {}, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].ruleId, "max-len"); assert.strictEqual(messages[0].message, "This line has a length of 129. Maximum allowed is 100."); assert.include(messages[0].nodeType, "Program"); + + assert.strictEqual(suppressedMessages.length, 0); }); }); @@ -10741,6 +12003,7 @@ var a = "test2"; const config = { rules: {} }; const messages = linter.verify(code, config, filename); const [message1, message2] = messages; + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 2); assert.strictEqual(message1.ruleId, "max-len"); @@ -10753,6 +12016,8 @@ var a = "test2"; assert.strictEqual(message2.line, 5); assert.strictEqual(message2.column, 1); assert.include(message2.nodeType, "Program"); + + assert.strictEqual(suppressedMessages.length, 0); }); }); @@ -10768,10 +12033,13 @@ var a = "test2"; const config = { rules: { "no-alert": 1, "no-console": 1 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); - assert.strictEqual(messages[0].ruleId, "no-console"); + + assert.strictEqual(suppressedMessages.length, 1); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); }); it("should report no violation", () => { @@ -10783,8 +12051,10 @@ var a = "test2"; const config = { rules: { quotes: 2 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); it("should report a violation", () => { @@ -10800,31 +12070,42 @@ var a = "test2"; const config = { rules: { "no-alert": 1, "no-console": 1 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 2); - assert.strictEqual(messages[0].ruleId, "no-alert"); assert.strictEqual(messages[0].line, 5); assert.strictEqual(messages[1].ruleId, "no-console"); assert.strictEqual(messages[1].line, 6); + + assert.strictEqual(suppressedMessages.length, 2); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); + assert.strictEqual(suppressedMessages[0].line, 2); + assert.strictEqual(suppressedMessages[1].ruleId, "no-console"); + assert.strictEqual(suppressedMessages[1].line, 3); }); it("should report a violation", () => { const code = [ "/*eslint-disable no-alert */", "alert('test');", - "console.log('test');", + "console.log('test');", // here "/*eslint-enable no-console */", - - "alert('test');" // here + "alert('test');" ].join("\n"); const config = { rules: { "no-alert": 1, "no-console": 1 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); - assert.strictEqual(messages[0].ruleId, "no-console"); + + assert.strictEqual(suppressedMessages.length, 2); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); + assert.strictEqual(suppressedMessages[0].line, 2); + assert.strictEqual(suppressedMessages[1].ruleId, "no-alert"); + assert.strictEqual(suppressedMessages[1].line, 5); }); @@ -10841,11 +12122,19 @@ var a = "test2"; const config = { rules: { "no-alert": 1, "no-console": 1 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); - assert.strictEqual(messages[0].ruleId, "no-alert"); assert.strictEqual(messages[0].line, 5); + + assert.strictEqual(suppressedMessages.length, 3); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); + assert.strictEqual(suppressedMessages[0].line, 2); + assert.strictEqual(suppressedMessages[1].ruleId, "no-console"); + assert.strictEqual(suppressedMessages[1].line, 3); + assert.strictEqual(suppressedMessages[2].ruleId, "no-console"); + assert.strictEqual(suppressedMessages[2].line, 6); }); @@ -10871,21 +12160,23 @@ var a = "test2"; const config = { rules: { "no-alert": 1, "no-console": 1 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 4); - assert.strictEqual(messages[0].ruleId, "no-alert"); assert.strictEqual(messages[0].line, 6); - assert.strictEqual(messages[1].ruleId, "no-console"); assert.strictEqual(messages[1].line, 7); - assert.strictEqual(messages[2].ruleId, "no-alert"); assert.strictEqual(messages[2].line, 9); - assert.strictEqual(messages[3].ruleId, "no-console"); assert.strictEqual(messages[3].line, 10); + assert.strictEqual(suppressedMessages.length, 2); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); + assert.strictEqual(suppressedMessages[0].line, 3); + assert.strictEqual(suppressedMessages[1].ruleId, "no-console"); + assert.strictEqual(suppressedMessages[1].line, 4); }); it("should report a violation", () => { @@ -10908,18 +12199,23 @@ var a = "test2"; const config = { rules: { "no-alert": 1, "no-console": 1 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 3); - assert.strictEqual(messages[0].ruleId, "no-alert"); assert.strictEqual(messages[0].line, 5); - assert.strictEqual(messages[1].ruleId, "no-alert"); assert.strictEqual(messages[1].line, 8); - assert.strictEqual(messages[2].ruleId, "no-console"); assert.strictEqual(messages[2].line, 9); + assert.strictEqual(suppressedMessages.length, 3); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); + assert.strictEqual(suppressedMessages[0].line, 2); + assert.strictEqual(suppressedMessages[1].ruleId, "no-console"); + assert.strictEqual(suppressedMessages[1].line, 3); + assert.strictEqual(suppressedMessages[2].ruleId, "no-console"); + assert.strictEqual(suppressedMessages[2].line, 6); }); it("should report a violation when severity is warn", () => { @@ -10942,18 +12238,23 @@ var a = "test2"; const config = { rules: { "no-alert": "warn", "no-console": "warn" } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 3); - assert.strictEqual(messages[0].ruleId, "no-alert"); assert.strictEqual(messages[0].line, 5); - assert.strictEqual(messages[1].ruleId, "no-alert"); assert.strictEqual(messages[1].line, 8); - assert.strictEqual(messages[2].ruleId, "no-console"); assert.strictEqual(messages[2].line, 9); + assert.strictEqual(suppressedMessages.length, 3); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); + assert.strictEqual(suppressedMessages[0].line, 2); + assert.strictEqual(suppressedMessages[1].ruleId, "no-console"); + assert.strictEqual(suppressedMessages[1].line, 3); + assert.strictEqual(suppressedMessages[2].ruleId, "no-console"); + assert.strictEqual(suppressedMessages[2].line, 6); }); it("should report no violation", () => { @@ -10966,8 +12267,15 @@ var a = "test2"; const config = { rules: { "no-unused-vars": 2 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + + assert.strictEqual(suppressedMessages.length, 2); + assert.strictEqual(suppressedMessages[0].ruleId, "no-unused-vars"); + assert.strictEqual(suppressedMessages[0].line, 2); + assert.strictEqual(suppressedMessages[1].ruleId, "no-unused-vars"); + assert.strictEqual(suppressedMessages[1].line, 3); }); }); @@ -10987,10 +12295,15 @@ var a = "test2"; }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); - assert.strictEqual(messages[0].ruleId, "no-console"); + assert.strictEqual(messages[0].line, 2); + + assert.strictEqual(suppressedMessages.length, 1); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); + assert.strictEqual(suppressedMessages[0].line, 1); }); it("should report a violation", () => { @@ -11007,10 +12320,17 @@ var a = "test2"; }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); - assert.strictEqual(messages[0].ruleId, "no-alert"); + assert.strictEqual(messages[0].line, 3); + + assert.strictEqual(suppressedMessages.length, 2); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); + assert.strictEqual(suppressedMessages[0].line, 1); + assert.strictEqual(suppressedMessages[1].ruleId, "no-console"); + assert.strictEqual(suppressedMessages[1].line, 2); }); it("should report a violation if eslint-disable-line in a block comment is not on a single line", () => { @@ -11026,10 +12346,12 @@ var a = "test2"; }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 2); - assert.strictEqual(messages[1].ruleId, "no-console"); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should not disable rule and add an extra report if eslint-disable-line in a block comment is not on a single line", () => { @@ -11044,6 +12366,7 @@ var a = "test2"; }; const messages = linter.verify(code, config); + const suppressedMessages = linter.getSuppressedMessages(); assert.deepStrictEqual(messages, [ { @@ -11068,6 +12391,8 @@ var a = "test2"; nodeType: null } ]); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should not report a violation for eslint-disable-line in block comment", () => { @@ -11082,8 +12407,10 @@ var a = "test2"; }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 2); }); it("should not report a violation", () => { @@ -11099,8 +12426,10 @@ var a = "test2"; }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 2); }); it("should not report a violation", () => { @@ -11118,8 +12447,10 @@ var a = "test2"; }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 5); }); it("should not report a violation", () => { @@ -11137,8 +12468,10 @@ var a = "test2"; }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 5); }); it("should ignore violations of multiple rules when specified in mixed comments", () => { @@ -11152,8 +12485,13 @@ var a = "test2"; } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + + assert.strictEqual(suppressedMessages.length, 2); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); + assert.strictEqual(suppressedMessages[1].ruleId, "quotes"); }); it("should report no violation", () => { @@ -11167,8 +12505,10 @@ var a = "test2"; const config = { rules: { "no-unused-vars": 2 } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 5); }); }); @@ -11187,9 +12527,13 @@ var a = "test2"; } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].ruleId, "no-console"); + + assert.strictEqual(suppressedMessages.length, 1); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); }); it("should ignore violation of specified rule if eslint-disable-next-line is a block comment", () => { @@ -11205,9 +12549,13 @@ var a = "test2"; } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].ruleId, "no-console"); + + assert.strictEqual(suppressedMessages.length, 1); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); }); it("should ignore violation of specified rule if eslint-disable-next-line is a block comment", () => { const code = [ @@ -11220,11 +12568,15 @@ var a = "test2"; } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + + assert.strictEqual(suppressedMessages.length, 1); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); }); - it("should not ignore violation if block comment is not on a single line", () => { + it("should not ignore violation if code is not on next line", () => { const code = [ "/* eslint-disable-next-line", "no-alert */alert('test');" @@ -11235,9 +12587,55 @@ var a = "test2"; } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); - assert.strictEqual(messages.length, 2); - assert.strictEqual(messages[1].ruleId, "no-alert"); + assert.strictEqual(messages.length, 1); + assert.strictEqual(messages[0].ruleId, "no-alert"); + + assert.strictEqual(suppressedMessages.length, 0); + }); + + it("should ignore violation if block comment span multiple lines", () => { + const code = [ + "/* eslint-disable-next-line", + "no-alert */", + "alert('test');" + ].join("\n"); + const config = { + rules: { + "no-alert": 1 + } + }; + const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); + + assert.strictEqual(messages.length, 0); + + assert.strictEqual(suppressedMessages.length, 1); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); + }); + + // For https://github.com/eslint/eslint/issues/14284 + it("should ignore violation if block comment span multiple lines with description", () => { + const code = ` + /* eslint-disable-next-line no-alert -- + description on why this exception is seen as appropriate but past a + comfortable reading line length + */ + alert("buzz"); + `; + const config = { + rules: { + "no-alert": 1 + } + }; + const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); + + assert.strictEqual(messages.length, 0); + + assert.strictEqual(suppressedMessages.length, 1); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); }); it("should ignore violations only of specified rule", () => { @@ -11253,6 +12651,29 @@ var a = "test2"; } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); + + assert.strictEqual(messages.length, 2); + assert.strictEqual(messages[0].ruleId, "no-alert"); + assert.strictEqual(messages[1].ruleId, "no-console"); + + assert.strictEqual(suppressedMessages.length, 0); + }); + + it("should ignore violations only of specified rule when block comment span multiple lines", () => { + const code = [ + "/* eslint-disable-next-line", + "no-console */", + "alert('test');", + "console.log('test');" + ].join("\n"); + const config = { + rules: { + "no-alert": 1, + "no-console": 1 + } + }; + const messages = linter.verify(code, config, filename); assert.strictEqual(messages.length, 2); assert.strictEqual(messages[0].ruleId, "no-alert"); @@ -11273,6 +12694,33 @@ var a = "test2"; } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); + + assert.strictEqual(messages.length, 1); + assert.strictEqual(messages[0].ruleId, "no-console"); + + assert.strictEqual(suppressedMessages.length, 2); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); + assert.strictEqual(suppressedMessages[1].ruleId, "quotes"); + }); + + it("should ignore violations of multiple rules when specified in multiple lines", () => { + const code = [ + "/* eslint-disable-next-line", + "no-alert,", + "quotes", + "*/", + "alert(\"test\");", + "console.log('test');" + ].join("\n"); + const config = { + rules: { + "no-alert": 1, + quotes: [1, "single"], + "no-console": 1 + } + }; + const messages = linter.verify(code, config, filename); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].ruleId, "no-console"); @@ -11290,6 +12738,29 @@ var a = "test2"; } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); + + assert.strictEqual(messages.length, 0); + + assert.strictEqual(suppressedMessages.length, 2); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); + assert.strictEqual(suppressedMessages[1].ruleId, "quotes"); + }); + + it("should ignore violations of multiple rules when specified in mixed single line and multi line comments", () => { + const code = [ + "/* eslint-disable-next-line", + "no-alert", + "*/ // eslint-disable-next-line quotes", + "alert(\"test\");" + ].join("\n"); + const config = { + rules: { + "no-alert": 1, + quotes: [1, "single"] + } + }; + const messages = linter.verify(code, config, filename); assert.strictEqual(messages.length, 0); }); @@ -11308,10 +12779,14 @@ var a = "test2"; } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 2); assert.strictEqual(messages[0].ruleId, "no-alert"); assert.strictEqual(messages[1].ruleId, "no-console"); + + assert.strictEqual(suppressedMessages.length, 1); + assert.strictEqual(suppressedMessages[0].ruleId, "quotes"); }); it("should ignore violations of specified rule on next line only", () => { @@ -11328,10 +12803,14 @@ var a = "test2"; } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 2); assert.strictEqual(messages[0].ruleId, "no-alert"); assert.strictEqual(messages[1].ruleId, "no-console"); + + assert.strictEqual(suppressedMessages.length, 1); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); }); it("should ignore all rule violations on next line if none specified", () => { @@ -11349,9 +12828,15 @@ var a = "test2"; } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].ruleId, "no-console"); + + assert.strictEqual(suppressedMessages.length, 3); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); + assert.strictEqual(suppressedMessages[1].ruleId, "quotes"); + assert.strictEqual(suppressedMessages[2].ruleId, "semi"); }); it("should ignore violations if eslint-disable-next-line is a block comment", () => { @@ -11368,10 +12853,14 @@ var a = "test2"; } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 2); assert.strictEqual(messages[0].ruleId, "no-alert"); assert.strictEqual(messages[1].ruleId, "no-console"); + + assert.strictEqual(suppressedMessages.length, 1); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); }); it("should report a violation", () => { @@ -11389,10 +12878,12 @@ var a = "test2"; }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 2); - assert.strictEqual(messages[1].ruleId, "no-console"); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should not ignore violations if comment is of the type hashbang", () => { @@ -11408,10 +12899,13 @@ var a = "test2"; } }; const messages = linter.verify(code, config, filename); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 2); assert.strictEqual(messages[0].ruleId, "no-alert"); assert.strictEqual(messages[1].ruleId, "no-console"); + + assert.strictEqual(suppressedMessages.length, 0); }); }); @@ -11434,6 +12928,7 @@ var a = "test2"; /*eslint test/aaa:error -- test/bbb:error */ console.log("hello") `, config); + const suppressedMessages = linter.getSuppressedMessages(); // Don't include syntax error of the comment. assert.deepStrictEqual(messages, []); @@ -11441,6 +12936,8 @@ var a = "test2"; // Use only `aaa`. assert.strictEqual(aaa.callCount, 1); assert.strictEqual(bbb.callCount, 0); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should ignore the part preceded by '--' in '/*globals*/'.", () => { @@ -11454,6 +12951,7 @@ var a = "test2"; }, rules: { "no-redeclare": "error" } }); + const suppressedMessages = linter.getSuppressedMessages(); // Don't include `bbb` assert.deepStrictEqual( @@ -11470,6 +12968,8 @@ var a = "test2"; severity: 2 }] ); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should ignore the part preceded by '--' in '/*exported*/'.", () => { @@ -11483,6 +12983,7 @@ var a = "test2"; }, rules: { "no-unused-vars": "error" } }); + const suppressedMessages = linter.getSuppressedMessages(); // Don't include `aaa` assert.deepStrictEqual( @@ -11499,6 +13000,8 @@ var a = "test2"; severity: 2 }] ); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should ignore the part preceded by '--' in '/*eslint-disable*/'.", () => { @@ -11507,6 +13010,7 @@ var a = "test2"; var aaa = {} var aaa = {} `, { rules: { "no-redeclare": "error", "no-unused-vars": "error" } }); + const suppressedMessages = linter.getSuppressedMessages(); // Do include `no-unused-vars` but not `no-redeclare` assert.deepStrictEqual( @@ -11523,6 +13027,22 @@ var a = "test2"; severity: 2 }] ); + + assert.deepStrictEqual( + suppressedMessages, + [{ + column: 25, + endColumn: 28, + endLine: 4, + line: 4, + message: "'aaa' is already defined.", + messageId: "redeclared", + nodeType: "Identifier", + ruleId: "no-redeclare", + severity: 2, + suppressions: [{ kind: "directive", justification: "no-unused-vars" }] + }] + ); }); it("should ignore the part preceded by '--' in '/*eslint-enable*/'.", () => { @@ -11532,6 +13052,7 @@ var a = "test2"; var aaa = {} var aaa = {} `, { rules: { "no-redeclare": "error", "no-unused-vars": "error" } }); + const suppressedMessages = linter.getSuppressedMessages(); // Do include `no-redeclare` but not `no-unused-vars` assert.deepStrictEqual( @@ -11548,6 +13069,22 @@ var a = "test2"; severity: 2 }] ); + + assert.deepStrictEqual( + suppressedMessages, + [{ + column: 25, + endLine: 5, + endColumn: 28, + line: 5, + message: "'aaa' is assigned a value but never used.", + messageId: "unusedVar", + nodeType: "Identifier", + ruleId: "no-unused-vars", + severity: 2, + suppressions: [{ kind: "directive", justification: "" }] + }] + ); }); it("should ignore the part preceded by '--' in '//eslint-disable-line'.", () => { @@ -11555,6 +13092,7 @@ var a = "test2"; var aaa = {} //eslint-disable-line no-redeclare -- no-unused-vars var aaa = {} //eslint-disable-line no-redeclare -- no-unused-vars `, { rules: { "no-redeclare": "error", "no-unused-vars": "error" } }); + const suppressedMessages = linter.getSuppressedMessages(); // Do include `no-unused-vars` but not `no-redeclare` assert.deepStrictEqual( @@ -11571,6 +13109,22 @@ var a = "test2"; severity: 2 }] ); + + assert.deepStrictEqual( + suppressedMessages, + [{ + column: 25, + endLine: 3, + endColumn: 28, + line: 3, + message: "'aaa' is already defined.", + messageId: "redeclared", + nodeType: "Identifier", + ruleId: "no-redeclare", + severity: 2, + suppressions: [{ kind: "directive", justification: "no-unused-vars" }] + }] + ); }); it("should ignore the part preceded by '--' in '/*eslint-disable-line*/'.", () => { @@ -11578,6 +13132,7 @@ var a = "test2"; var aaa = {} /*eslint-disable-line no-redeclare -- no-unused-vars */ var aaa = {} /*eslint-disable-line no-redeclare -- no-unused-vars */ `, { rules: { "no-redeclare": "error", "no-unused-vars": "error" } }); + const suppressedMessages = linter.getSuppressedMessages(); // Do include `no-unused-vars` but not `no-redeclare` assert.deepStrictEqual( @@ -11594,6 +13149,22 @@ var a = "test2"; severity: 2 }] ); + + assert.deepStrictEqual( + suppressedMessages, + [{ + column: 25, + endLine: 3, + endColumn: 28, + line: 3, + message: "'aaa' is already defined.", + messageId: "redeclared", + nodeType: "Identifier", + ruleId: "no-redeclare", + severity: 2, + suppressions: [{ kind: "directive", justification: "no-unused-vars" }] + }] + ); }); it("should ignore the part preceded by '--' in '//eslint-disable-next-line'.", () => { @@ -11603,6 +13174,7 @@ var a = "test2"; //eslint-disable-next-line no-redeclare -- no-unused-vars var aaa = {} `, { rules: { "no-redeclare": "error", "no-unused-vars": "error" } }); + const suppressedMessages = linter.getSuppressedMessages(); // Do include `no-unused-vars` but not `no-redeclare` assert.deepStrictEqual( @@ -11619,6 +13191,22 @@ var a = "test2"; severity: 2 }] ); + + assert.deepStrictEqual( + suppressedMessages, + [{ + column: 25, + endLine: 5, + endColumn: 28, + line: 5, + message: "'aaa' is already defined.", + messageId: "redeclared", + nodeType: "Identifier", + ruleId: "no-redeclare", + severity: 2, + suppressions: [{ kind: "directive", justification: "no-unused-vars" }] + }] + ); }); it("should ignore the part preceded by '--' in '/*eslint-disable-next-line*/'.", () => { @@ -11628,6 +13216,7 @@ var a = "test2"; /*eslint-disable-next-line no-redeclare -- no-unused-vars */ var aaa = {} `, { rules: { "no-redeclare": "error", "no-unused-vars": "error" } }); + const suppressedMessages = linter.getSuppressedMessages(); // Do include `no-unused-vars` but not `no-redeclare` assert.deepStrictEqual( @@ -11644,6 +13233,22 @@ var a = "test2"; severity: 2 }] ); + + assert.deepStrictEqual( + suppressedMessages, + [{ + column: 25, + endLine: 5, + endColumn: 28, + line: 5, + message: "'aaa' is already defined.", + messageId: "redeclared", + nodeType: "Identifier", + ruleId: "no-redeclare", + severity: 2, + suppressions: [{ kind: "directive", justification: "no-unused-vars" }] + }] + ); }); it("should not ignore the part preceded by '--' if the '--' is not surrounded by whitespaces.", () => { @@ -11662,12 +13267,15 @@ var a = "test2"; /*eslint test/a--rule:error */ console.log("hello") `, config); + const suppressedMessages = linter.getSuppressedMessages(); // Don't include syntax error of the comment. assert.deepStrictEqual(messages, []); // Use `a--rule`. assert.strictEqual(rule.callCount, 1); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should ignore the part preceded by '--' even if the '--' is longer than 2.", () => { @@ -11688,6 +13296,7 @@ var a = "test2"; /*eslint test/aaa:error -------- test/bbb:error */ console.log("hello") `, config); + const suppressedMessages = linter.getSuppressedMessages(); // Don't include syntax error of the comment. assert.deepStrictEqual(messages, []); @@ -11695,6 +13304,8 @@ var a = "test2"; // Use only `aaa`. assert.strictEqual(aaa.callCount, 1); assert.strictEqual(bbb.callCount, 0); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should ignore the part preceded by '--' with line breaks.", () => { @@ -11717,6 +13328,7 @@ var a = "test2"; test/bbb:error */ console.log("hello") `, config); + const suppressedMessages = linter.getSuppressedMessages(); // Don't include syntax error of the comment. assert.deepStrictEqual(messages, []); @@ -11724,6 +13336,8 @@ var a = "test2"; // Use only `aaa`. assert.strictEqual(aaa.callCount, 1); assert.strictEqual(bbb.callCount, 0); + + assert.strictEqual(suppressedMessages.length, 0); }); }); @@ -11743,9 +13357,12 @@ var a = "test2"; filename, allowInlineConfig: false }); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].ruleId, "no-alert"); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should report a violation for global variable declarations", () => { @@ -11801,9 +13418,12 @@ var a = "test2"; filename, allowInlineConfig: false }); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].ruleId, "no-alert"); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should not report a violation for rule changes", () => { @@ -11821,8 +13441,10 @@ var a = "test2"; filename, allowInlineConfig: false }); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); it("should report a violation for disable-line", () => { @@ -11839,9 +13461,12 @@ var a = "test2"; filename, allowInlineConfig: false }); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].ruleId, "no-alert"); + + assert.strictEqual(suppressedMessages.length, 0); }); }); @@ -11864,12 +13489,15 @@ var a = "test2"; noInlineConfig: true } }); + const suppressedMessages = linter.getSuppressedMessages(); assert.deepStrictEqual(messages.length, 1); assert.deepStrictEqual(messages[0].fatal, void 0); assert.deepStrictEqual(messages[0].ruleId, null); assert.deepStrictEqual(messages[0].severity, 1); assert.deepStrictEqual(messages[0].message, `'/*${directive.split(" ")[0]}*/' has no effect because you have 'noInlineConfig' setting in your config.`); + + assert.strictEqual(suppressedMessages.length, 0); }); } @@ -11884,12 +13512,15 @@ var a = "test2"; noInlineConfig: true } }); + const suppressedMessages = linter.getSuppressedMessages(); assert.deepStrictEqual(messages.length, 1); assert.deepStrictEqual(messages[0].fatal, void 0); assert.deepStrictEqual(messages[0].ruleId, null); assert.deepStrictEqual(messages[0].severity, 1); assert.deepStrictEqual(messages[0].message, `'//${directive.split(" ")[0]}' has no effect because you have 'noInlineConfig' setting in your config.`); + + assert.strictEqual(suppressedMessages.length, 0); }); } @@ -11899,8 +13530,10 @@ var a = "test2"; noInlineConfig: true } }, { allowInlineConfig: false }); + const suppressedMessages = linter.getSuppressedMessages(); assert.deepStrictEqual(messages.length, 0); + assert.strictEqual(suppressedMessages.length, 0); }); }); @@ -11919,8 +13552,12 @@ var a = "test2"; filename, allowInlineConfig: true }); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0); + + assert.strictEqual(suppressedMessages.length, 1); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); }); }); @@ -11928,8 +13565,11 @@ var a = "test2"; describe("reportUnusedDisableDirectives option", () => { it("reports problems for unused eslint-disable comments", () => { + const messages = linter.verify("/* eslint-disable */", {}, { reportUnusedDisableDirectives: true }); + const suppressedMessages = linter.getSuppressedMessages(); + assert.deepStrictEqual( - linter.verify("/* eslint-disable */", {}, { reportUnusedDisableDirectives: true }), + messages, [ { ruleId: null, @@ -11945,11 +13585,16 @@ var a = "test2"; } ] ); + + assert.strictEqual(suppressedMessages.length, 0); }); it("reports problems for unused eslint-disable comments (error)", () => { + const messages = linter.verify("/* eslint-disable */", {}, { reportUnusedDisableDirectives: "error" }); + const suppressedMessages = linter.getSuppressedMessages(); + assert.deepStrictEqual( - linter.verify("/* eslint-disable */", {}, { reportUnusedDisableDirectives: "error" }), + messages, [ { ruleId: null, @@ -11965,11 +13610,16 @@ var a = "test2"; } ] ); + + assert.strictEqual(suppressedMessages.length, 0); }); it("reports problems for unused eslint-disable comments (warn)", () => { + const messages = linter.verify("/* eslint-disable */", {}, { reportUnusedDisableDirectives: "warn" }); + const suppressedMessages = linter.getSuppressedMessages(); + assert.deepStrictEqual( - linter.verify("/* eslint-disable */", {}, { reportUnusedDisableDirectives: "warn" }), + messages, [ { ruleId: null, @@ -11985,15 +13635,20 @@ var a = "test2"; } ] ); + + assert.strictEqual(suppressedMessages.length, 0); }); it("reports problems for unused eslint-disable comments (in config)", () => { + const messages = linter.verify("/* eslint-disable */", { + linterOptions: { + reportUnusedDisableDirectives: true + } + }); + const suppressedMessages = linter.getSuppressedMessages(); + assert.deepStrictEqual( - linter.verify("/* eslint-disable */", { - linterOptions: { - reportUnusedDisableDirectives: true - } - }), + messages, [ { ruleId: null, @@ -12009,6 +13664,8 @@ var a = "test2"; } ] ); + + assert.strictEqual(suppressedMessages.length, 0); }); it("reports problems for partially unused eslint-disable comments (in config)", () => { @@ -12027,6 +13684,7 @@ var a = "test2"; filename, allowInlineConfig: true }); + const suppressedMessages = linter.getSuppressedMessages(); assert.deepStrictEqual( messages, @@ -12045,6 +13703,135 @@ var a = "test2"; } ] ); + + assert.strictEqual(suppressedMessages.length, 1); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); + }); + + it("reports problems for unused eslint-disable-next-line comments (in config)", () => { + assert.deepStrictEqual( + linter.verify("// eslint-disable-next-line", { + linterOptions: { + reportUnusedDisableDirectives: true + } + }), + [ + { + ruleId: null, + message: "Unused eslint-disable directive (no problems were reported).", + line: 1, + column: 1, + fix: { + range: [0, 27], + text: " " + }, + severity: 1, + nodeType: null + } + ] + ); + }); + + it("reports problems for unused multiline eslint-disable-next-line comments (in config)", () => { + assert.deepStrictEqual( + linter.verify("/* \neslint-disable-next-line\n */", { + linterOptions: { + reportUnusedDisableDirectives: true + } + }), + [ + { + ruleId: null, + message: "Unused eslint-disable directive (no problems were reported).", + line: 1, + column: 1, + fix: { + range: [0, 32], + text: " " + }, + severity: 1, + nodeType: null + } + ] + ); + }); + + it("reports problems for partially unused eslint-disable-next-line comments (in config)", () => { + const code = "// eslint-disable-next-line no-alert, no-redeclare \nalert('test');"; + const config = { + linterOptions: { + reportUnusedDisableDirectives: true + }, + rules: { + "no-alert": 1, + "no-redeclare": 1 + } + }; + + const messages = linter.verify(code, config, { + filename, + allowInlineConfig: true + }); + + assert.deepStrictEqual( + messages, + [ + { + ruleId: null, + message: "Unused eslint-disable directive (no problems were reported from 'no-redeclare').", + line: 1, + column: 1, + fix: { + range: [36, 50], + text: "" + }, + severity: 1, + nodeType: null + } + ] + ); + }); + + it("reports problems for partially unused multiline eslint-disable-next-line comments (in config)", () => { + const code = ` + /* eslint-disable-next-line no-alert, no-redeclare -- + * Here's a very long description about why this configuration is necessary + * along with some additional information + **/ + alert('test'); + `; + const config = { + linterOptions: { + reportUnusedDisableDirectives: true + }, + rules: { + "no-alert": 1, + "no-redeclare": 1 + } + }; + + const messages = linter.verify(code, config, { + filename, + allowInlineConfig: true + }); + + assert.deepStrictEqual( + messages, + [ + { + ruleId: null, + message: "Unused eslint-disable directive (no problems were reported from 'no-redeclare').", + line: 2, + column: 21, + fix: { + range: [57, 71], + text: "" + }, + severity: 1, + nodeType: null + } + ] + ); }); describe("autofix", () => { @@ -12721,6 +14508,7 @@ var a = "test2"; }; const messages = linter.verify("var a = 1;", config); + const suppressedMessages = linter.getSuppressedMessages(); assert.deepStrictEqual(messages[0].suggestions, [{ desc: "Insert space at the beginning", @@ -12735,6 +14523,8 @@ var a = "test2"; text: " " } }]); + + assert.strictEqual(suppressedMessages.length, 0); }); it("supports messageIds for suggestions", () => { @@ -12776,6 +14566,7 @@ var a = "test2"; }; const messages = linter.verify("var a = 1;", config); + const suppressedMessages = linter.getSuppressedMessages(); assert.deepStrictEqual(messages[0].suggestions, [{ messageId: "suggestion1", @@ -12792,6 +14583,8 @@ var a = "test2"; text: " " } }]); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should throw an error if suggestion is passed but `meta.hasSuggestions` property is not enabled", () => { @@ -12864,6 +14657,7 @@ var a = "test2"; it("should report a violation with a useful parse error prefix", () => { const messages = linter.verify(code); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].severity, 2); @@ -12872,6 +14666,8 @@ var a = "test2"; assert.strictEqual(messages[0].column, 4); assert.isTrue(messages[0].fatal); assert.match(messages[0].message, /^Parsing error:/u); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should report source code where the issue is present", () => { @@ -12882,11 +14678,14 @@ var a = "test2"; "}" ]; const messages = linter.verify(inValidCode.join("\n")); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].severity, 2); assert.isTrue(messages[0].fatal); assert.match(messages[0].message, /^Parsing error:/u); + + assert.strictEqual(suppressedMessages.length, 0); }); }); @@ -12930,6 +14729,55 @@ var a = "test2"; }); + describe("getSuppressedMessages()", () => { + it("should have no suppressed messages", () => { + const suppressedMessages = linter.getSuppressedMessages(); + + assert.strictEqual(suppressedMessages.length, 0); + }); + + it("should have a suppressed message", () => { + const code = "/* eslint-disable no-alert -- justification */\nalert(\"test\");"; + const config = { + rules: { "no-alert": 1 } + }; + const messages = linter.verify(code, config); + const suppressedMessages = linter.getSuppressedMessages(); + + assert.strictEqual(messages.length, 0); + + assert.strictEqual(suppressedMessages.length, 1); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); + assert.deepStrictEqual( + suppressedMessages[0].suppressions, + [{ kind: "directive", justification: "justification" }] + ); + }); + + it("should have a suppressed message", () => { + const code = [ + "/* eslint-disable no-alert -- j1", + " * j2", + " */", + "alert(\"test\");" + ].join("\n"); + const config = { + rules: { "no-alert": 1 } + }; + const messages = linter.verify(code, config); + const suppressedMessages = linter.getSuppressedMessages(); + + assert.strictEqual(messages.length, 0); + + assert.strictEqual(suppressedMessages.length, 1); + assert.strictEqual(suppressedMessages[0].ruleId, "no-alert"); + assert.deepStrictEqual( + suppressedMessages[0].suppressions, + [{ kind: "directive", justification: "j1\n * j2" }] + ); + }); + }); + describe("defineRule()", () => { it("should throw an error when called in flat config mode", () => { assert.throws(() => { @@ -12978,9 +14826,12 @@ var a = "test2"; semi: 2 } }, { filename: "test.js" }); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.output, "var a;", "Fixes were applied correctly"); assert.isTrue(messages.fixed); + + assert.strictEqual(suppressedMessages.length, 0); }); it("does not require a third argument", () => { @@ -12989,12 +14840,15 @@ var a = "test2"; semi: 2 } }); + const suppressedMessages = linter.getSuppressedMessages(); assert.deepStrictEqual(fixResult, { fixed: true, messages: [], output: "var a;" }); + + assert.strictEqual(suppressedMessages.length, 0); }); it("does not include suggestions in autofix results", () => { @@ -13004,10 +14858,13 @@ var a = "test2"; "no-useless-escape": 2 } }); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(fixResult.output, "var foo = /\\#/;"); assert.strictEqual(fixResult.fixed, true); assert.strictEqual(fixResult.messages[0].suggestions.length > 0, true); + + assert.strictEqual(suppressedMessages.length, 0); }); it("does not apply autofixes when fix argument is `false`", () => { @@ -13016,8 +14873,10 @@ var a = "test2"; semi: 2 } }, { fix: false }); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(fixResult.fixed, false); + assert.strictEqual(suppressedMessages.length, 0); }); it("stops fixing after 10 passes", () => { @@ -13051,10 +14910,13 @@ var a = "test2"; }; const fixResult = linter.verifyAndFix("a", config); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(fixResult.fixed, true); assert.strictEqual(fixResult.output, `${" ".repeat(10)}a`); assert.strictEqual(fixResult.messages.length, 1); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should throw an error if fix is passed but meta has no `fixable` property", () => { @@ -13253,9 +15115,12 @@ var a = "test2"; } } ); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(problems.length, 3); assert.deepStrictEqual(problems.map(problem => problem.message), ["foo", "bar", "baz"]); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should apply a preprocessor to the code even if the preprocessor returned code block objects.", () => { @@ -13282,10 +15147,13 @@ var a = "test2"; } } ); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(problems.length, 3); assert.deepStrictEqual(problems.map(problem => problem.message), ["foo", "bar", "baz"]); + assert.strictEqual(suppressedMessages.length, 0); + // filename assert.strictEqual(receivedFilenames.length, 3); assert(/^filename\.js[/\\]0_block\.js/u.test(receivedFilenames[0])); @@ -13332,6 +15200,37 @@ var a = "test2"; assert.strictEqual(preprocess.calledOnce, true); assert.deepStrictEqual(preprocess.args[0], [code, filename]); }); + + it("should catch preprocess error.", () => { + const code = "foo"; + const preprocess = sinon.spy(() => { + throw Object.assign(new SyntaxError("Invalid syntax"), { + lineNumber: 1, + column: 1 + }); + }); + + const configs = createFlatConfigArray([ + extraConfig + ]); + + configs.normalizeSync(); + + const messages = linter.verify(code, configs, { filename, preprocess }); + + assert.strictEqual(preprocess.calledOnce, true); + assert.deepStrictEqual(preprocess.args[0], [code, filename]); + assert.deepStrictEqual(messages, [ + { + ruleId: null, + fatal: true, + severity: 2, + message: "Preprocessing error: Invalid syntax", + line: 1, + column: 1 + } + ]); + }); }); describe("postprocessors", () => { @@ -13392,10 +15291,13 @@ var a = "test2"; } } ); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(problems.length, 3); assert.deepStrictEqual(problems.map(problem => problem.message), ["FOO", "BAR", "BAZ"]); assert.deepStrictEqual(problems.map(problem => problem.column), [1, 5, 9]); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should use postprocessed problem ranges when applying autofixes", () => { @@ -13462,10 +15364,13 @@ var a = "test2"; } } ); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(fixResult.fixed, true); assert.strictEqual(fixResult.messages.length, 0); assert.strictEqual(fixResult.output, "FOO BAR BAZ"); + + assert.strictEqual(suppressedMessages.length, 0); }); }); }); @@ -13483,22 +15388,28 @@ var a = "test2"; it("should properly parse import statements when sourceType is module", () => { const code = "import foo from 'foo';"; const messages = linter.verify(code, moduleConfig); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0, "Unexpected linting error."); + assert.strictEqual(suppressedMessages.length, 0); }); it("should properly parse import all statements when sourceType is module", () => { const code = "import * as foo from 'foo';"; const messages = linter.verify(code, moduleConfig); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0, "Unexpected linting error."); + assert.strictEqual(suppressedMessages.length, 0); }); it("should properly parse default export statements when sourceType is module", () => { const code = "export default function initialize() {}"; const messages = linter.verify(code, moduleConfig); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 0, "Unexpected linting error."); + assert.strictEqual(suppressedMessages.length, 0); }); }); @@ -13517,9 +15428,12 @@ var a = "test2"; messages = linter.verify("", { languageOptions: { ecmaVersion: 5, sourceType: "module" } }); + const suppressedMessages = linter.getSuppressedMessages(); assert.deepStrictEqual(messages.length, 1); assert.ok(messages[0].message.includes("sourceType 'module' is not supported when ecmaVersion < 2015")); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should not crash when invalid parentheses syntax is encountered", () => { @@ -13536,9 +15450,12 @@ var a = "test2"; it("should report syntax error when a keyword exists in object property shorthand", () => { const messages = linter.verify("let a = {this}", { languageOptions: { ecmaVersion: 6 } }); + const suppressedMessages = linter.getSuppressedMessages(); assert.strictEqual(messages.length, 1); assert.strictEqual(messages[0].fatal, true); + + assert.strictEqual(suppressedMessages.length, 0); }); it("should not crash when we reuse the SourceCode object", () => { diff --git a/eslint/tests/lib/linter/node-event-generator.js b/eslint/tests/lib/linter/node-event-generator.js index 44f8e51..2719bf3 100644 --- a/eslint/tests/lib/linter/node-event-generator.js +++ b/eslint/tests/lib/linter/node-event-generator.js @@ -60,7 +60,7 @@ describe("NodeEventGenerator", () => { assert(emitter.emit.calledWith("Foo", dummyNode)); }); - it("should generate events for exitting AST node.", () => { + it("should generate events for exiting AST node.", () => { const dummyNode = { type: "Foo", value: 1 }; generator.leaveNode(dummyNode); @@ -126,7 +126,7 @@ describe("NodeEventGenerator", () => { it(possibleQueries.join("; "), () => { const ast = espree.parse(sourceText, ESPREE_CONFIG); const emissions = getEmissions(ast, possibleQueries) - .filter(emission => possibleQueries.indexOf(emission[0]) !== -1); + .filter(emission => possibleQueries.includes(emission[0])); assert.deepStrictEqual(emissions, expectedEmissions(ast)); }); @@ -388,7 +388,7 @@ describe("NodeEventGenerator", () => { function assertEmissions(ast, visitorKeys, possibleQueries, expectedEmissions) { it(possibleQueries.join("; "), () => { const emissions = getEmissions(ast, visitorKeys, possibleQueries) - .filter(emission => possibleQueries.indexOf(emission[0]) !== -1); + .filter(emission => possibleQueries.includes(emission[0])); assert.deepStrictEqual(emissions, expectedEmissions(ast)); }); diff --git a/eslint/tests/lib/options.js b/eslint/tests/lib/options.js index c84e46d..4d3507a 100644 --- a/eslint/tests/lib/options.js +++ b/eslint/tests/lib/options.js @@ -10,7 +10,14 @@ //------------------------------------------------------------------------------ const assert = require("chai").assert, - options = require("../../lib/options"); + createOptions = require("../../lib/options"); + +//----------------------------------------------------------------------------- +// Data +//----------------------------------------------------------------------------- + +const eslintrcOptions = createOptions(false); +const flatOptions = createOptions(true); //------------------------------------------------------------------------------ // Tests @@ -21,243 +28,360 @@ const assert = require("chai").assert, */ describe("options", () => { - describe("--help", () => { - it("should return true for .help when passed", () => { - const currentOptions = options.parse("--help"); - assert.isTrue(currentOptions.help); - }); - }); + describe("Common options", () => { - describe("-h", () => { - it("should return true for .help when passed", () => { - const currentOptions = options.parse("-h"); + [eslintrcOptions, flatOptions].forEach(options => { - assert.isTrue(currentOptions.help); - }); - }); + describe("--help", () => { + it("should return true for .help when passed", () => { + const currentOptions = options.parse("--help"); - describe("--config", () => { - it("should return a string for .config when passed a string", () => { - const currentOptions = options.parse("--config file"); + assert.isTrue(currentOptions.help); + }); + }); - assert.isString(currentOptions.config); - assert.strictEqual(currentOptions.config, "file"); - }); - }); + describe("-h", () => { + it("should return true for .help when passed", () => { + const currentOptions = options.parse("-h"); - describe("-c", () => { - it("should return a string for .config when passed a string", () => { - const currentOptions = options.parse("-c file"); + assert.isTrue(currentOptions.help); + }); + }); - assert.isString(currentOptions.config); - assert.strictEqual(currentOptions.config, "file"); - }); - }); + describe("--config", () => { + it("should return a string for .config when passed a string", () => { + const currentOptions = options.parse("--config file"); - describe("--ext", () => { - it("should return an array with one item when passed .jsx", () => { - const currentOptions = options.parse("--ext .jsx"); + assert.isString(currentOptions.config); + assert.strictEqual(currentOptions.config, "file"); + }); + }); - assert.isArray(currentOptions.ext); - assert.strictEqual(currentOptions.ext[0], ".jsx"); - }); + describe("-c", () => { + it("should return a string for .config when passed a string", () => { + const currentOptions = options.parse("-c file"); - it("should return an array with two items when passed .js and .jsx", () => { - const currentOptions = options.parse("--ext .jsx --ext .js"); + assert.isString(currentOptions.config); + assert.strictEqual(currentOptions.config, "file"); + }); + }); - assert.isArray(currentOptions.ext); - assert.strictEqual(currentOptions.ext[0], ".jsx"); - assert.strictEqual(currentOptions.ext[1], ".js"); - }); + describe("--format", () => { + it("should return a string for .format when passed a string", () => { + const currentOptions = options.parse("--format compact"); - it("should return an array with two items when passed .jsx,.js", () => { - const currentOptions = options.parse("--ext .jsx,.js"); + assert.isString(currentOptions.format); + assert.strictEqual(currentOptions.format, "compact"); + }); - assert.isArray(currentOptions.ext); - assert.strictEqual(currentOptions.ext[0], ".jsx"); - assert.strictEqual(currentOptions.ext[1], ".js"); - }); + it("should return stylish for .format when not passed", () => { + const currentOptions = options.parse(""); - it("should not exist when not passed", () => { - const currentOptions = options.parse(""); + assert.isString(currentOptions.format); + assert.strictEqual(currentOptions.format, "stylish"); + }); + }); - assert.notProperty(currentOptions, "ext"); - }); - }); + describe("-f", () => { + it("should return a string for .format when passed a string", () => { + const currentOptions = options.parse("-f compact"); - describe("--rulesdir", () => { - it("should return a string for .rulesdir when passed a string", () => { - const currentOptions = options.parse("--rulesdir /morerules"); + assert.isString(currentOptions.format); + assert.strictEqual(currentOptions.format, "compact"); + }); + }); - assert.isArray(currentOptions.rulesdir); - assert.deepStrictEqual(currentOptions.rulesdir, ["/morerules"]); - }); - }); + describe("--version", () => { + it("should return true for .version when passed", () => { + const currentOptions = options.parse("--version"); - describe("--format", () => { - it("should return a string for .format when passed a string", () => { - const currentOptions = options.parse("--format compact"); + assert.isTrue(currentOptions.version); + }); + }); - assert.isString(currentOptions.format); - assert.strictEqual(currentOptions.format, "compact"); - }); + describe("-v", () => { + it("should return true for .version when passed", () => { + const currentOptions = options.parse("-v"); - it("should return stylish for .format when not passed", () => { - const currentOptions = options.parse(""); + assert.isTrue(currentOptions.version); + }); + }); - assert.isString(currentOptions.format); - assert.strictEqual(currentOptions.format, "stylish"); - }); - }); + describe("when asking for help", () => { + it("should return string of help text when called", () => { + const helpText = options.generateHelp(); - describe("-f", () => { - it("should return a string for .format when passed a string", () => { - const currentOptions = options.parse("-f compact"); + assert.isString(helpText); + }); + }); + + describe("--no-ignore", () => { + it("should return false for .ignore when passed", () => { + const currentOptions = options.parse("--no-ignore"); - assert.isString(currentOptions.format); - assert.strictEqual(currentOptions.format, "compact"); - }); - }); + assert.isFalse(currentOptions.ignore); + }); + }); + + describe("--ignore-path", () => { + it("should return a string for .ignorePath when passed", () => { + const currentOptions = options.parse("--ignore-path .gitignore"); - describe("--version", () => { - it("should return true for .version when passed", () => { - const currentOptions = options.parse("--version"); + assert.strictEqual(currentOptions.ignorePath, ".gitignore"); + }); + }); + + describe("--ignore-pattern", () => { + it("should return a string array for .ignorePattern when passed", () => { + const currentOptions = options.parse("--ignore-pattern *.js"); + + assert.ok(currentOptions.ignorePattern); + assert.strictEqual(currentOptions.ignorePattern.length, 1); + assert.strictEqual(currentOptions.ignorePattern[0], "*.js"); + }); + + it("should return a string array for multiple values", () => { + const currentOptions = options.parse("--ignore-pattern *.js --ignore-pattern *.ts"); + + assert.ok(currentOptions.ignorePattern); + assert.strictEqual(currentOptions.ignorePattern.length, 2); + assert.strictEqual(currentOptions.ignorePattern[0], "*.js"); + assert.strictEqual(currentOptions.ignorePattern[1], "*.ts"); + }); + + it("should return a string array of properly parsed values, when those values include commas", () => { + const currentOptions = options.parse("--ignore-pattern *.js --ignore-pattern foo-{bar,baz}.js"); + + assert.ok(currentOptions.ignorePattern); + assert.strictEqual(currentOptions.ignorePattern.length, 2); + assert.strictEqual(currentOptions.ignorePattern[0], "*.js"); + assert.strictEqual(currentOptions.ignorePattern[1], "foo-{bar,baz}.js"); + }); + }); + + describe("--color", () => { + it("should return true for .color when passed --color", () => { + const currentOptions = options.parse("--color"); + + assert.isTrue(currentOptions.color); + }); + + it("should return false for .color when passed --no-color", () => { + const currentOptions = options.parse("--no-color"); + + assert.isFalse(currentOptions.color); + }); + }); + + describe("--stdin", () => { + it("should return true for .stdin when passed", () => { + const currentOptions = options.parse("--stdin"); + + assert.isTrue(currentOptions.stdin); + }); + }); + + describe("--stdin-filename", () => { + it("should return a string for .stdinFilename when passed", () => { + const currentOptions = options.parse("--stdin-filename test.js"); + + assert.strictEqual(currentOptions.stdinFilename, "test.js"); + }); + }); + + describe("--global", () => { + it("should return an array for a single occurrence", () => { + const currentOptions = options.parse("--global foo"); + + assert.isArray(currentOptions.global); + assert.strictEqual(currentOptions.global.length, 1); + assert.strictEqual(currentOptions.global[0], "foo"); + }); + + it("should split variable names using commas", () => { + const currentOptions = options.parse("--global foo,bar"); + + assert.isArray(currentOptions.global); + assert.strictEqual(currentOptions.global.length, 2); + assert.strictEqual(currentOptions.global[0], "foo"); + assert.strictEqual(currentOptions.global[1], "bar"); + }); + + it("should not split on colons", () => { + const currentOptions = options.parse("--global foo:false,bar:true"); + + assert.isArray(currentOptions.global); + assert.strictEqual(currentOptions.global.length, 2); + assert.strictEqual(currentOptions.global[0], "foo:false"); + assert.strictEqual(currentOptions.global[1], "bar:true"); + }); + + it("should concatenate successive occurrences", () => { + const currentOptions = options.parse("--global foo:true --global bar:false"); - assert.isTrue(currentOptions.version); - }); - }); + assert.isArray(currentOptions.global); + assert.strictEqual(currentOptions.global.length, 2); + assert.strictEqual(currentOptions.global[0], "foo:true"); + assert.strictEqual(currentOptions.global[1], "bar:false"); + }); + }); - describe("-v", () => { - it("should return true for .version when passed", () => { - const currentOptions = options.parse("-v"); - assert.isTrue(currentOptions.version); - }); - }); + describe("--quiet", () => { + it("should return true for .quiet when passed", () => { + const currentOptions = options.parse("--quiet"); - describe("when asking for help", () => { - it("should return string of help text when called", () => { - const helpText = options.generateHelp(); + assert.isTrue(currentOptions.quiet); + }); + }); - assert.isString(helpText); - }); - }); + describe("--max-warnings", () => { + it("should return correct value for .maxWarnings when passed", () => { + const currentOptions = options.parse("--max-warnings 10"); - describe("--no-ignore", () => { - it("should return false for .ignore when passed", () => { - const currentOptions = options.parse("--no-ignore"); + assert.strictEqual(currentOptions.maxWarnings, 10); + }); - assert.isFalse(currentOptions.ignore); - }); - }); + it("should return -1 for .maxWarnings when not passed", () => { + const currentOptions = options.parse(""); - describe("--ignore-path", () => { - it("should return a string for .ignorePath when passed", () => { - const currentOptions = options.parse("--ignore-path .gitignore"); + assert.strictEqual(currentOptions.maxWarnings, -1); + }); - assert.strictEqual(currentOptions.ignorePath, ".gitignore"); - }); - }); + it("should throw an error when supplied with a non-integer", () => { + assert.throws(() => { + options.parse("--max-warnings 10.2"); + }, /Invalid value for option 'max-warnings' - expected type Int/u); + }); + }); - describe("--ignore-pattern", () => { - it("should return a string array for .ignorePattern when passed", () => { - const currentOptions = options.parse("--ignore-pattern *.js"); + describe("--init", () => { + it("should return true for --init when passed", () => { + const currentOptions = options.parse("--init"); - assert.ok(currentOptions.ignorePattern); - assert.strictEqual(currentOptions.ignorePattern.length, 1); - assert.strictEqual(currentOptions.ignorePattern[0], "*.js"); - }); + assert.isTrue(currentOptions.init); + }); + }); - it("should return a string array for multiple values", () => { - const currentOptions = options.parse("--ignore-pattern *.js --ignore-pattern *.ts"); + describe("--fix", () => { + it("should return true for --fix when passed", () => { + const currentOptions = options.parse("--fix"); - assert.ok(currentOptions.ignorePattern); - assert.strictEqual(currentOptions.ignorePattern.length, 2); - assert.strictEqual(currentOptions.ignorePattern[0], "*.js"); - assert.strictEqual(currentOptions.ignorePattern[1], "*.ts"); - }); + assert.isTrue(currentOptions.fix); + }); + }); - it("should return a string array of properly parsed values, when those values include commas", () => { - const currentOptions = options.parse("--ignore-pattern *.js --ignore-pattern foo-{bar,baz}.js"); + describe("--fix-type", () => { + it("should return one value with --fix-type is passed", () => { + const currentOptions = options.parse("--fix-type problem"); - assert.ok(currentOptions.ignorePattern); - assert.strictEqual(currentOptions.ignorePattern.length, 2); - assert.strictEqual(currentOptions.ignorePattern[0], "*.js"); - assert.strictEqual(currentOptions.ignorePattern[1], "foo-{bar,baz}.js"); - }); - }); + assert.strictEqual(currentOptions.fixType.length, 1); + assert.strictEqual(currentOptions.fixType[0], "problem"); + }); - describe("--color", () => { - it("should return true for .color when passed --color", () => { - const currentOptions = options.parse("--color"); + it("should return two values when --fix-type is passed twice", () => { + const currentOptions = options.parse("--fix-type problem --fix-type suggestion"); - assert.isTrue(currentOptions.color); - }); + assert.strictEqual(currentOptions.fixType.length, 2); + assert.strictEqual(currentOptions.fixType[0], "problem"); + assert.strictEqual(currentOptions.fixType[1], "suggestion"); + }); + + it("should return two values when --fix-type is passed a comma-separated value", () => { + const currentOptions = options.parse("--fix-type problem,suggestion"); + + assert.strictEqual(currentOptions.fixType.length, 2); + assert.strictEqual(currentOptions.fixType[0], "problem"); + assert.strictEqual(currentOptions.fixType[1], "suggestion"); + }); + }); + + describe("--debug", () => { + it("should return true for --debug when passed", () => { + const currentOptions = options.parse("--debug"); + + assert.isTrue(currentOptions.debug); + }); + }); + + describe("--inline-config", () => { + it("should return false when passed --no-inline-config", () => { + const currentOptions = options.parse("--no-inline-config"); + + assert.isFalse(currentOptions.inlineConfig); + }); + + it("should return true for --inline-config when empty", () => { + const currentOptions = options.parse(""); - it("should return false for .color when passed --no-color", () => { - const currentOptions = options.parse("--no-color"); + assert.isTrue(currentOptions.inlineConfig); + }); + }); - assert.isFalse(currentOptions.color); + describe("--print-config", () => { + it("should return file path when passed --print-config", () => { + const currentOptions = options.parse("--print-config file.js"); + + assert.strictEqual(currentOptions.printConfig, "file.js"); + }); + }); }); + }); - describe("--stdin", () => { - it("should return true for .stdin when passed", () => { - const currentOptions = options.parse("--stdin"); - assert.isTrue(currentOptions.stdin); + describe("--ext", () => { + it("should return an array with one item when passed .jsx", () => { + const currentOptions = eslintrcOptions.parse("--ext .jsx"); + + assert.isArray(currentOptions.ext); + assert.strictEqual(currentOptions.ext[0], ".jsx"); }); - }); - describe("--stdin-filename", () => { - it("should return a string for .stdinFilename when passed", () => { - const currentOptions = options.parse("--stdin-filename test.js"); + it("should return an array with two items when passed .js and .jsx", () => { + const currentOptions = eslintrcOptions.parse("--ext .jsx --ext .js"); - assert.strictEqual(currentOptions.stdinFilename, "test.js"); + assert.isArray(currentOptions.ext); + assert.strictEqual(currentOptions.ext[0], ".jsx"); + assert.strictEqual(currentOptions.ext[1], ".js"); }); - }); - describe("--global", () => { - it("should return an array for a single occurrence", () => { - const currentOptions = options.parse("--global foo"); + it("should return an array with two items when passed .jsx,.js", () => { + const currentOptions = eslintrcOptions.parse("--ext .jsx,.js"); - assert.isArray(currentOptions.global); - assert.strictEqual(currentOptions.global.length, 1); - assert.strictEqual(currentOptions.global[0], "foo"); + assert.isArray(currentOptions.ext); + assert.strictEqual(currentOptions.ext[0], ".jsx"); + assert.strictEqual(currentOptions.ext[1], ".js"); }); - it("should split variable names using commas", () => { - const currentOptions = options.parse("--global foo,bar"); + it("should not exist when not passed", () => { + const currentOptions = eslintrcOptions.parse(""); - assert.isArray(currentOptions.global); - assert.strictEqual(currentOptions.global.length, 2); - assert.strictEqual(currentOptions.global[0], "foo"); - assert.strictEqual(currentOptions.global[1], "bar"); + assert.notProperty(currentOptions, "ext"); }); + }); - it("should not split on colons", () => { - const currentOptions = options.parse("--global foo:false,bar:true"); + describe("--rulesdir", () => { + it("should return a string for .rulesdir when passed a string", () => { + const currentOptions = eslintrcOptions.parse("--rulesdir /morerules"); - assert.isArray(currentOptions.global); - assert.strictEqual(currentOptions.global.length, 2); - assert.strictEqual(currentOptions.global[0], "foo:false"); - assert.strictEqual(currentOptions.global[1], "bar:true"); + assert.isArray(currentOptions.rulesdir); + assert.deepStrictEqual(currentOptions.rulesdir, ["/morerules"]); }); + }); - it("should concatenate successive occurrences", () => { - const currentOptions = options.parse("--global foo:true --global bar:false"); + describe("--parser", () => { + it("should return a string for --parser when passed", () => { + const currentOptions = eslintrcOptions.parse("--parser test"); - assert.isArray(currentOptions.global); - assert.strictEqual(currentOptions.global.length, 2); - assert.strictEqual(currentOptions.global[0], "foo:true"); - assert.strictEqual(currentOptions.global[1], "bar:false"); + assert.strictEqual(currentOptions.parser, "test"); }); }); describe("--plugin", () => { it("should return an array when passed a single occurrence", () => { - const currentOptions = options.parse("--plugin single"); + const currentOptions = eslintrcOptions.parse("--plugin single"); assert.isArray(currentOptions.plugin); assert.strictEqual(currentOptions.plugin.length, 1); @@ -265,7 +389,7 @@ describe("options", () => { }); it("should return an array when passed a comma-delimited string", () => { - const currentOptions = options.parse("--plugin foo,bar"); + const currentOptions = eslintrcOptions.parse("--plugin foo,bar"); assert.isArray(currentOptions.plugin); assert.strictEqual(currentOptions.plugin.length, 2); @@ -274,7 +398,7 @@ describe("options", () => { }); it("should return an array when passed multiple times", () => { - const currentOptions = options.parse("--plugin foo --plugin bar"); + const currentOptions = eslintrcOptions.parse("--plugin foo --plugin bar"); assert.isArray(currentOptions.plugin); assert.strictEqual(currentOptions.plugin.length, 2); @@ -283,110 +407,12 @@ describe("options", () => { }); }); - describe("--quiet", () => { - it("should return true for .quiet when passed", () => { - const currentOptions = options.parse("--quiet"); - - assert.isTrue(currentOptions.quiet); - }); - }); - - describe("--max-warnings", () => { - it("should return correct value for .maxWarnings when passed", () => { - const currentOptions = options.parse("--max-warnings 10"); - - assert.strictEqual(currentOptions.maxWarnings, 10); - }); - - it("should return -1 for .maxWarnings when not passed", () => { - const currentOptions = options.parse(""); - - assert.strictEqual(currentOptions.maxWarnings, -1); - }); - - it("should throw an error when supplied with a non-integer", () => { - assert.throws(() => { - options.parse("--max-warnings 10.2"); - }, /Invalid value for option 'max-warnings' - expected type Int/u); - }); - }); - - describe("--init", () => { - it("should return true for --init when passed", () => { - const currentOptions = options.parse("--init"); - - assert.isTrue(currentOptions.init); - }); - }); - - describe("--fix", () => { - it("should return true for --fix when passed", () => { - const currentOptions = options.parse("--fix"); - - assert.isTrue(currentOptions.fix); - }); - }); - - describe("--fix-type", () => { - it("should return one value with --fix-type is passed", () => { - const currentOptions = options.parse("--fix-type problem"); - - assert.strictEqual(currentOptions.fixType.length, 1); - assert.strictEqual(currentOptions.fixType[0], "problem"); - }); - - it("should return two values when --fix-type is passed twice", () => { - const currentOptions = options.parse("--fix-type problem --fix-type suggestion"); - - assert.strictEqual(currentOptions.fixType.length, 2); - assert.strictEqual(currentOptions.fixType[0], "problem"); - assert.strictEqual(currentOptions.fixType[1], "suggestion"); - }); - - it("should return two values when --fix-type is passed a comma-separated value", () => { - const currentOptions = options.parse("--fix-type problem,suggestion"); - - assert.strictEqual(currentOptions.fixType.length, 2); - assert.strictEqual(currentOptions.fixType[0], "problem"); - assert.strictEqual(currentOptions.fixType[1], "suggestion"); - }); - }); - - describe("--debug", () => { - it("should return true for --debug when passed", () => { - const currentOptions = options.parse("--debug"); - - assert.isTrue(currentOptions.debug); - }); - }); - - describe("--inline-config", () => { - it("should return false when passed --no-inline-config", () => { - const currentOptions = options.parse("--no-inline-config"); - - assert.isFalse(currentOptions.inlineConfig); - }); - - it("should return true for --inline-config when empty", () => { - const currentOptions = options.parse(""); - - assert.isTrue(currentOptions.inlineConfig); - }); - }); - - describe("--parser", () => { - it("should return a string for --parser when passed", () => { - const currentOptions = options.parse("--parser test"); + describe("--no-config-lookup", () => { + it("should return a string for .rulesdir when passed a string", () => { + const currentOptions = flatOptions.parse("--no-config-lookup foo.js"); - assert.strictEqual(currentOptions.parser, "test"); + assert.isFalse(currentOptions.configLookup); }); }); - describe("--print-config", () => { - it("should return file path when passed --print-config", () => { - const currentOptions = options.parse("--print-config file.js"); - - assert.strictEqual(currentOptions.printConfig, "file.js"); - }); - }); }); diff --git a/eslint/tests/lib/rule-tester/flat-rule-tester.js b/eslint/tests/lib/rule-tester/flat-rule-tester.js new file mode 100644 index 0000000..bdc196e --- /dev/null +++ b/eslint/tests/lib/rule-tester/flat-rule-tester.js @@ -0,0 +1,2625 @@ +/** + * @fileoverview Tests for ESLint Tester + * @author Nicholas C. Zakas + */ +"use strict"; + +//------------------------------------------------------------------------------ +// Requirements +//------------------------------------------------------------------------------ +const sinon = require("sinon"), + EventEmitter = require("events"), + FlatRuleTester = require("../../../lib/rule-tester/flat-rule-tester"), + assert = require("chai").assert, + nodeAssert = require("assert"); + +//----------------------------------------------------------------------------- +// Helpers +//----------------------------------------------------------------------------- + +const NODE_ASSERT_STRICT_EQUAL_OPERATOR = (() => { + try { + nodeAssert.strictEqual(1, 2); + } catch (err) { + return err.operator; + } + throw new Error("unexpected successful assertion"); +})(); + +/** + * A helper function to verify Node.js core error messages. + * @param {string} actual The actual input + * @param {string} expected The expected input + * @returns {Function} Error callback to verify that the message is correct + * for the actual and expected input. + */ +function assertErrorMatches(actual, expected) { + const err = new nodeAssert.AssertionError({ + actual, + expected, + operator: NODE_ASSERT_STRICT_EQUAL_OPERATOR + }); + + return err.message; +} + +/** + * Do nothing. + * @returns {void} + */ +function noop() { + + // do nothing. +} + +//------------------------------------------------------------------------------ +// Rewire Things +//------------------------------------------------------------------------------ + +/* + * So here's the situation. Because RuleTester uses it() and describe() from + * Mocha, any failures would show up in the output of this test file. That means + * when we tested that a failure is thrown, that would also count as a failure + * in the testing for RuleTester. In order to remove those results from the + * results of this file, we need to overwrite it() and describe() just in + * RuleTester to do nothing but run code. Effectively, it() and describe() + * just become regular functions inside of index.js, not at all related to Mocha. + * That allows the results of this file to be untainted and therefore accurate. + * + * To assert that the right arguments are passed to RuleTester.describe/it, an + * event emitter is used which emits the arguments. + */ + +const ruleTesterTestEmitter = new EventEmitter(); + +//------------------------------------------------------------------------------ +// Tests +//------------------------------------------------------------------------------ + +describe("FlatRuleTester", () => { + + let ruleTester; + + // Stub `describe()` and `it()` while this test suite. + before(() => { + FlatRuleTester.describe = function(text, method) { + ruleTesterTestEmitter.emit("describe", text, method); + return method.call(this); + }; + FlatRuleTester.it = function(text, method) { + ruleTesterTestEmitter.emit("it", text, method); + return method.call(this); + }; + }); + + after(() => { + FlatRuleTester.describe = null; + FlatRuleTester.it = null; + }); + + beforeEach(() => { + ruleTester = new FlatRuleTester(); + }); + + describe("Default Config", () => { + + afterEach(() => { + FlatRuleTester.resetDefaultConfig(); + }); + + it("should correctly set the globals configuration", () => { + const config = { languageOptions: { globals: { test: true } } }; + + FlatRuleTester.setDefaultConfig(config); + assert( + FlatRuleTester.getDefaultConfig().languageOptions.globals.test, + "The default config object is incorrect" + ); + }); + + it("should correctly reset the global configuration", () => { + const config = { languageOptions: { globals: { test: true } } }; + + FlatRuleTester.setDefaultConfig(config); + FlatRuleTester.resetDefaultConfig(); + assert.deepStrictEqual( + FlatRuleTester.getDefaultConfig(), + { rules: {} }, + "The default configuration has not reset correctly" + ); + }); + + it("should enforce the global configuration to be an object", () => { + + /** + * Set the default config for the rules tester + * @param {Object} config configuration object + * @returns {Function} Function to be executed + * @private + */ + function setConfig(config) { + return function() { + FlatRuleTester.setDefaultConfig(config); + }; + } + assert.throw(setConfig()); + assert.throw(setConfig(1)); + assert.throw(setConfig(3.14)); + assert.throw(setConfig("foo")); + assert.throw(setConfig(null)); + assert.throw(setConfig(true)); + }); + + it("should pass-through the globals config to the tester then to the to rule", () => { + const config = { languageOptions: { sourceType: "script", globals: { test: true } } }; + + FlatRuleTester.setDefaultConfig(config); + ruleTester = new FlatRuleTester(); + + ruleTester.run("no-test-global", require("../../fixtures/testers/rule-tester/no-test-global"), { + valid: [ + "var test = 'foo'", + "var test2 = test" + ], + invalid: [{ code: "bar", errors: 1, languageOptions: { globals: { foo: true } } }] + }); + }); + + it("should throw an error if node.start is accessed with parser in default config", () => { + const enhancedParser = require("../../fixtures/parsers/enhanced-parser"); + + FlatRuleTester.setDefaultConfig({ + languageOptions: { + parser: enhancedParser + } + }); + ruleTester = new FlatRuleTester(); + + /* + * Note: More robust test for start/end found later in file. + * This one is just for checking the default config has a + * parser that is wrapped. + */ + const usesStartEndRule = { + create() { + + return { + CallExpression(node) { + noop(node.arguments[1].start); + } + }; + } + }; + + assert.throws(() => { + ruleTester.run("uses-start-end", usesStartEndRule, { + valid: ["foo(a, b)"], + invalid: [] + }); + }, "Use node.range[0] instead of node.start"); + }); + + }); + + describe("only", () => { + describe("`itOnly` accessor", () => { + describe("when `itOnly` is set", () => { + before(() => { + FlatRuleTester.itOnly = sinon.spy(); + }); + after(() => { + FlatRuleTester.itOnly = void 0; + }); + beforeEach(() => { + FlatRuleTester.itOnly.resetHistory(); + ruleTester = new FlatRuleTester(); + }); + + it("is called by exclusive tests", () => { + ruleTester.run("no-var", require("../../fixtures/testers/rule-tester/no-var"), { + valid: [{ + code: "const notVar = 42;", + only: true + }], + invalid: [] + }); + + sinon.assert.calledWith(FlatRuleTester.itOnly, "const notVar = 42;"); + }); + }); + + describe("when `it` is set and has an `only()` method", () => { + before(() => { + FlatRuleTester.it.only = () => {}; + sinon.spy(FlatRuleTester.it, "only"); + }); + after(() => { + FlatRuleTester.it.only = void 0; + }); + beforeEach(() => { + FlatRuleTester.it.only.resetHistory(); + ruleTester = new FlatRuleTester(); + }); + + it("is called by tests with `only` set", () => { + ruleTester.run("no-var", require("../../fixtures/testers/rule-tester/no-var"), { + valid: [{ + code: "const notVar = 42;", + only: true + }], + invalid: [] + }); + + sinon.assert.calledWith(FlatRuleTester.it.only, "const notVar = 42;"); + }); + }); + + describe("when global `it` is a function that has an `only()` method", () => { + let originalGlobalItOnly; + + before(() => { + + /* + * We run tests with `--forbid-only`, so we have to override + * `it.only` to prevent the real one from being called. + */ + originalGlobalItOnly = it.only; + it.only = () => {}; + sinon.spy(it, "only"); + }); + after(() => { + it.only = originalGlobalItOnly; + }); + beforeEach(() => { + it.only.resetHistory(); + ruleTester = new FlatRuleTester(); + }); + + it("is called by tests with `only` set", () => { + ruleTester.run("no-var", require("../../fixtures/testers/rule-tester/no-var"), { + valid: [{ + code: "const notVar = 42;", + only: true + }], + invalid: [] + }); + + sinon.assert.calledWith(it.only, "const notVar = 42;"); + }); + }); + + describe("when `describe` and `it` are overridden without `itOnly`", () => { + let originalGlobalItOnly; + + before(() => { + + /* + * These tests override `describe` and `it` already, so we + * don't need to override them here. We do, however, need to + * remove `only` from the global `it` to prevent it from + * being used instead. + */ + originalGlobalItOnly = it.only; + it.only = void 0; + }); + after(() => { + it.only = originalGlobalItOnly; + }); + beforeEach(() => { + ruleTester = new FlatRuleTester(); + }); + + it("throws an error recommending overriding `itOnly`", () => { + assert.throws(() => { + ruleTester.run("no-var", require("../../fixtures/testers/rule-tester/no-var"), { + valid: [{ + code: "const notVar = 42;", + only: true + }], + invalid: [] + }); + }, "Set `RuleTester.itOnly` to use `only` with a custom test framework."); + }); + }); + + describe("when global `it` is a function that does not have an `only()` method", () => { + let originalGlobalIt; + let originalRuleTesterDescribe; + let originalRuleTesterIt; + + before(() => { + originalGlobalIt = global.it; + + // eslint-disable-next-line no-global-assign -- Temporarily override Mocha global + it = () => {}; + + /* + * These tests override `describe` and `it`, so we need to + * un-override them here so they won't interfere. + */ + originalRuleTesterDescribe = FlatRuleTester.describe; + FlatRuleTester.describe = void 0; + originalRuleTesterIt = FlatRuleTester.it; + FlatRuleTester.it = void 0; + }); + after(() => { + + // eslint-disable-next-line no-global-assign -- Restore Mocha global + it = originalGlobalIt; + FlatRuleTester.describe = originalRuleTesterDescribe; + FlatRuleTester.it = originalRuleTesterIt; + }); + beforeEach(() => { + ruleTester = new FlatRuleTester(); + }); + + it("throws an error explaining that the current test framework does not support `only`", () => { + assert.throws(() => { + ruleTester.run("no-var", require("../../fixtures/testers/rule-tester/no-var"), { + valid: [{ + code: "const notVar = 42;", + only: true + }], + invalid: [] + }); + }, "The current test framework does not support exclusive tests with `only`."); + }); + }); + }); + + describe("test cases", () => { + const ruleName = "no-var"; + const rule = require("../../fixtures/testers/rule-tester/no-var"); + + let originalRuleTesterIt; + let spyRuleTesterIt; + let originalRuleTesterItOnly; + let spyRuleTesterItOnly; + + before(() => { + originalRuleTesterIt = FlatRuleTester.it; + spyRuleTesterIt = sinon.spy(); + FlatRuleTester.it = spyRuleTesterIt; + originalRuleTesterItOnly = FlatRuleTester.itOnly; + spyRuleTesterItOnly = sinon.spy(); + FlatRuleTester.itOnly = spyRuleTesterItOnly; + }); + after(() => { + FlatRuleTester.it = originalRuleTesterIt; + FlatRuleTester.itOnly = originalRuleTesterItOnly; + }); + beforeEach(() => { + spyRuleTesterIt.resetHistory(); + spyRuleTesterItOnly.resetHistory(); + ruleTester = new FlatRuleTester(); + }); + + it("isn't called for normal tests", () => { + ruleTester.run(ruleName, rule, { + valid: ["const notVar = 42;"], + invalid: [] + }); + sinon.assert.calledWith(spyRuleTesterIt, "const notVar = 42;"); + sinon.assert.notCalled(spyRuleTesterItOnly); + }); + + it("calls it or itOnly for every test case", () => { + + /* + * `RuleTester` doesn't implement test case exclusivity itself. + * Setting `only: true` just causes `RuleTester` to call + * whatever `only()` function is provided by the test framework + * instead of the regular `it()` function. + */ + + ruleTester.run(ruleName, rule, { + valid: [ + "const valid = 42;", + { + code: "const onlyValid = 42;", + only: true + } + ], + invalid: [ + { + code: "var invalid = 42;", + errors: [/^Bad var/u] + }, + { + code: "var onlyInvalid = 42;", + errors: [/^Bad var/u], + only: true + } + ] + }); + + sinon.assert.calledWith(spyRuleTesterIt, "const valid = 42;"); + sinon.assert.calledWith(spyRuleTesterItOnly, "const onlyValid = 42;"); + sinon.assert.calledWith(spyRuleTesterIt, "var invalid = 42;"); + sinon.assert.calledWith(spyRuleTesterItOnly, "var onlyInvalid = 42;"); + }); + }); + + describe("static helper wrapper", () => { + it("adds `only` to string test cases", () => { + const test = FlatRuleTester.only("const valid = 42;"); + + assert.deepStrictEqual(test, { + code: "const valid = 42;", + only: true + }); + }); + + it("adds `only` to object test cases", () => { + const test = FlatRuleTester.only({ code: "const valid = 42;" }); + + assert.deepStrictEqual(test, { + code: "const valid = 42;", + only: true + }); + }); + }); + }); + + it("should not throw an error when everything passes", () => { + ruleTester.run("no-eval", require("../../fixtures/testers/rule-tester/no-eval"), { + valid: [ + "Eval(foo)" + ], + invalid: [ + { code: "eval(foo)", errors: [{ message: "eval sucks.", type: "CallExpression" }] } + ] + }); + }); + + it("should throw correct error when valid code is invalid and enables other core rule", () => { + + assert.throws(() => { + ruleTester.run("no-eval", require("../../fixtures/testers/rule-tester/no-eval"), { + valid: [ + "/*eslint semi: 2*/ eval(foo);" + ], + invalid: [ + { code: "eval(foo)", errors: [{ message: "eval sucks.", type: "CallExpression" }] } + ] + }); + }, /Should have no errors but had 1/u); + }); + + it("should throw an error when valid code is invalid", () => { + + assert.throws(() => { + ruleTester.run("no-eval", require("../../fixtures/testers/rule-tester/no-eval"), { + valid: [ + "eval(foo)" + ], + invalid: [ + { code: "eval(foo)", errors: [{ message: "eval sucks.", type: "CallExpression" }] } + ] + }); + }, /Should have no errors but had 1/u); + }); + + it("should throw an error when valid code is invalid", () => { + + assert.throws(() => { + ruleTester.run("no-eval", require("../../fixtures/testers/rule-tester/no-eval"), { + valid: [ + { code: "eval(foo)" } + ], + invalid: [ + { code: "eval(foo)", errors: [{ message: "eval sucks.", type: "CallExpression" }] } + ] + }); + }, /Should have no errors but had 1/u); + }); + + it("should throw an error if invalid code is valid", () => { + + assert.throws(() => { + ruleTester.run("no-eval", require("../../fixtures/testers/rule-tester/no-eval"), { + valid: [ + "Eval(foo)" + ], + invalid: [ + { code: "Eval(foo)", errors: [{ message: "eval sucks.", type: "CallExpression" }] } + ] + }); + }, /Should have 1 error but had 0/u); + }); + + it("should throw an error when the error message is wrong", () => { + assert.throws(() => { + ruleTester.run("no-var", require("../../fixtures/testers/rule-tester/no-var"), { + + // Only the invalid test matters here + valid: [ + "bar = baz;" + ], + invalid: [ + { code: "var foo = bar;", errors: [{ message: "Bad error message." }] } + ] + }); + }, assertErrorMatches("Bad var.", "Bad error message.")); + }); + + it("should throw an error when the error message regex does not match", () => { + assert.throws(() => { + ruleTester.run("no-var", require("../../fixtures/testers/rule-tester/no-var"), { + valid: [], + invalid: [ + { code: "var foo = bar;", errors: [{ message: /Bad error message/u }] } + ] + }); + }, /Expected 'Bad var.' to match \/Bad error message\//u); + }); + + it("should throw an error when the error is not a supported type", () => { + assert.throws(() => { + ruleTester.run("no-var", require("../../fixtures/testers/rule-tester/no-var"), { + + // Only the invalid test matters here + valid: [ + "bar = baz;" + ], + invalid: [ + { code: "var foo = bar;", errors: [42] } + ] + }); + }, /Error should be a string, object, or RegExp/u); + }); + + it("should throw an error when any of the errors is not a supported type", () => { + assert.throws(() => { + ruleTester.run("no-var", require("../../fixtures/testers/rule-tester/no-var"), { + + // Only the invalid test matters here + valid: [ + "bar = baz;" + ], + invalid: [ + { code: "var foo = bar; var baz = quux", errors: [{ type: "VariableDeclaration" }, null] } + ] + }); + }, /Error should be a string, object, or RegExp/u); + }); + + it("should throw an error when the error is a string and it does not match error message", () => { + assert.throws(() => { + ruleTester.run("no-var", require("../../fixtures/testers/rule-tester/no-var"), { + + // Only the invalid test matters here + valid: [ + "bar = baz;" + ], + invalid: [ + { code: "var foo = bar;", errors: ["Bad error message."] } + ] + }); + }, assertErrorMatches("Bad var.", "Bad error message.")); + }); + + it("should throw an error when the error is a string and it does not match error message", () => { + assert.throws(() => { + ruleTester.run("no-var", require("../../fixtures/testers/rule-tester/no-var"), { + + valid: [ + ], + invalid: [ + { code: "var foo = bar;", errors: [/Bad error message/u] } + ] + }); + }, /Expected 'Bad var.' to match \/Bad error message\//u); + }); + + it("should not throw an error when the error is a string and it matches error message", () => { + ruleTester.run("no-var", require("../../fixtures/testers/rule-tester/no-var"), { + + // Only the invalid test matters here + valid: [ + "bar = baz;" + ], + invalid: [ + { code: "var foo = bar;", output: " foo = bar;", errors: ["Bad var."] } + ] + }); + }); + + it("should not throw an error when the error is a regex and it matches error message", () => { + ruleTester.run("no-var", require("../../fixtures/testers/rule-tester/no-var"), { + valid: [], + invalid: [ + { code: "var foo = bar;", output: " foo = bar;", errors: [/^Bad var/u] } + ] + }); + }); + + it("should throw an error when the error is an object with an unknown property name", () => { + assert.throws(() => { + ruleTester.run("no-var", require("../../fixtures/testers/rule-tester/no-var"), { + valid: [ + "bar = baz;" + ], + invalid: [ + { code: "var foo = bar;", errors: [{ Message: "Bad var." }] } + ] + }); + }, /Invalid error property name 'Message'/u); + }); + + it("should throw an error when any of the errors is an object with an unknown property name", () => { + assert.throws(() => { + ruleTester.run("no-var", require("../../fixtures/testers/rule-tester/no-var"), { + valid: [ + "bar = baz;" + ], + invalid: [ + { + code: "var foo = bar; var baz = quux", + errors: [ + { message: "Bad var.", type: "VariableDeclaration" }, + { message: "Bad var.", typo: "VariableDeclaration" } + ] + } + ] + }); + }, /Invalid error property name 'typo'/u); + }); + + it("should not throw an error when the error is a regex in an object and it matches error message", () => { + ruleTester.run("no-var", require("../../fixtures/testers/rule-tester/no-var"), { + valid: [], + invalid: [ + { code: "var foo = bar;", output: " foo = bar;", errors: [{ message: /^Bad var/u }] } + ] + }); + }); + + it("should throw an error when the expected output doesn't match", () => { + assert.throws(() => { + ruleTester.run("no-var", require("../../fixtures/testers/rule-tester/no-var"), { + valid: [ + "bar = baz;" + ], + invalid: [ + { code: "var foo = bar;", output: "foo = bar", errors: [{ message: "Bad var.", type: "VariableDeclaration" }] } + ] + }); + }, /Output is incorrect/u); + }); + + it("should use strict equality to compare output", () => { + const replaceProgramWith5Rule = { + meta: { + fixable: "code" + }, + + create: context => ({ + Program(node) { + context.report({ node, message: "bad", fix: fixer => fixer.replaceText(node, "5") }); + } + }) + }; + + // Should not throw. + ruleTester.run("foo", replaceProgramWith5Rule, { + valid: [], + invalid: [ + { code: "var foo = bar;", output: "5", errors: 1 } + ] + }); + + assert.throws(() => { + ruleTester.run("foo", replaceProgramWith5Rule, { + valid: [], + invalid: [ + { code: "var foo = bar;", output: 5, errors: 1 } + ] + }); + }, /Output is incorrect/u); + }); + + it("should throw an error when the expected output doesn't match and errors is just a number", () => { + assert.throws(() => { + ruleTester.run("no-var", require("../../fixtures/testers/rule-tester/no-var"), { + valid: [ + "bar = baz;" + ], + invalid: [ + { code: "var foo = bar;", output: "foo = bar", errors: 1 } + ] + }); + }, /Output is incorrect/u); + }); + + it("should not throw an error when the expected output is null and no errors produce output", () => { + ruleTester.run("no-eval", require("../../fixtures/testers/rule-tester/no-eval"), { + valid: [ + "bar = baz;" + ], + invalid: [ + { code: "eval(x)", errors: 1, output: null }, + { code: "eval(x); eval(y);", errors: 2, output: null } + ] + }); + }); + + it("should throw an error when the expected output is null and problems produce output", () => { + assert.throws(() => { + ruleTester.run("no-var", require("../../fixtures/testers/rule-tester/no-var"), { + valid: [ + "bar = baz;" + ], + invalid: [ + { code: "var foo = bar;", output: null, errors: 1 } + ] + }); + }, /Expected no autofixes to be suggested/u); + + assert.throws(() => { + ruleTester.run("no-var", require("../../fixtures/testers/rule-tester/no-var"), { + valid: [ + "bar = baz;" + ], + invalid: [ + { + code: "var foo = bar; var qux = boop;", + output: null, + errors: 2 + } + ] + }); + }, /Expected no autofixes to be suggested/u); + }); + + it("should throw an error when the expected output is null and only some problems produce output", () => { + assert.throws(() => { + ruleTester.run("fixes-one-problem", require("../../fixtures/testers/rule-tester/fixes-one-problem"), { + valid: [], + invalid: [ + { code: "foo", output: null, errors: 2 } + ] + }); + }, /Expected no autofixes to be suggested/u); + }); + + it("should throw an error when the expected output isn't specified and problems produce output", () => { + assert.throws(() => { + ruleTester.run("no-var", require("../../fixtures/testers/rule-tester/no-var"), { + valid: [ + "bar = baz;" + ], + invalid: [ + { code: "var foo = bar;", errors: 1 } + ] + }); + }, "The rule fixed the code. Please add 'output' property."); + }); + + it("should throw an error if invalid code specifies wrong type", () => { + assert.throws(() => { + ruleTester.run("no-eval", require("../../fixtures/testers/rule-tester/no-eval"), { + valid: [ + "Eval(foo)" + ], + invalid: [ + { code: "eval(foo)", errors: [{ message: "eval sucks.", type: "CallExpression2" }] } + ] + }); + }, /Error type should be CallExpression2, found CallExpression/u); + }); + + it("should throw an error if invalid code specifies wrong line", () => { + assert.throws(() => { + ruleTester.run("no-eval", require("../../fixtures/testers/rule-tester/no-eval"), { + valid: [ + "Eval(foo)" + ], + invalid: [ + { code: "eval(foo)", errors: [{ message: "eval sucks.", type: "CallExpression", line: 5 }] } + ] + }); + }, /Error line should be 5/u); + }); + + it("should not skip line assertion if line is a falsy value", () => { + assert.throws(() => { + ruleTester.run("no-eval", require("../../fixtures/testers/rule-tester/no-eval"), { + valid: [ + "Eval(foo)" + ], + invalid: [ + { code: "\neval(foo)", errors: [{ message: "eval sucks.", type: "CallExpression", line: 0 }] } + ] + }); + }, /Error line should be 0/u); + }); + + it("should throw an error if invalid code specifies wrong column", () => { + const wrongColumn = 10, + expectedErrorMessage = "Error column should be 1"; + + assert.throws(() => { + ruleTester.run("no-eval", require("../../fixtures/testers/rule-tester/no-eval"), { + valid: ["Eval(foo)"], + invalid: [{ + code: "eval(foo)", + errors: [{ + message: "eval sucks.", + column: wrongColumn + }] + }] + }); + }, expectedErrorMessage); + }); + + it("should throw error for empty error array", () => { + assert.throws(() => { + ruleTester.run("suggestions-messageIds", require("../../fixtures/testers/rule-tester/suggestions").withMessageIds, { + valid: [], + invalid: [{ + code: "var foo;", + errors: [] + }] + }); + }, /Invalid cases must have at least one error/u); + }); + + it("should throw error for errors : 0", () => { + assert.throws(() => { + ruleTester.run( + "suggestions-messageIds", + require("../../fixtures/testers/rule-tester/suggestions") + .withMessageIds, + { + valid: [], + invalid: [ + { + code: "var foo;", + errors: 0 + } + ] + } + ); + }, /Invalid cases must have 'error' value greater than 0/u); + }); + + it("should not skip column assertion if column is a falsy value", () => { + assert.throws(() => { + ruleTester.run("no-eval", require("../../fixtures/testers/rule-tester/no-eval"), { + valid: ["Eval(foo)"], + invalid: [{ + code: "var foo; eval(foo)", + errors: [{ message: "eval sucks.", column: 0 }] + }] + }); + }, /Error column should be 0/u); + }); + + it("should throw an error if invalid code specifies wrong endLine", () => { + assert.throws(() => { + ruleTester.run("no-var", require("../../fixtures/testers/rule-tester/no-var"), { + valid: [ + "bar = baz;" + ], + invalid: [ + { code: "var foo = bar;", output: "foo = bar", errors: [{ message: "Bad var.", type: "VariableDeclaration", endLine: 10 }] } + ] + }); + }, "Error endLine should be 10"); + }); + + it("should throw an error if invalid code specifies wrong endColumn", () => { + assert.throws(() => { + ruleTester.run("no-var", require("../../fixtures/testers/rule-tester/no-var"), { + valid: [ + "bar = baz;" + ], + invalid: [ + { code: "var foo = bar;", output: "foo = bar", errors: [{ message: "Bad var.", type: "VariableDeclaration", endColumn: 10 }] } + ] + }); + }, "Error endColumn should be 10"); + }); + + it("should throw an error if invalid code has the wrong number of errors", () => { + assert.throws(() => { + ruleTester.run("no-eval", require("../../fixtures/testers/rule-tester/no-eval"), { + valid: [ + "Eval(foo)" + ], + invalid: [ + { + code: "eval(foo)", + errors: [ + { message: "eval sucks.", type: "CallExpression" }, + { message: "eval sucks.", type: "CallExpression" } + ] + } + ] + }); + }, /Should have 2 errors but had 1/u); + }); + + it("should throw an error if invalid code does not have errors", () => { + assert.throws(() => { + ruleTester.run("no-eval", require("../../fixtures/testers/rule-tester/no-eval"), { + valid: [ + "Eval(foo)" + ], + invalid: [ + { code: "eval(foo)" } + ] + }); + }, /Did not specify errors for an invalid test of no-eval/u); + }); + + it("should throw an error if invalid code has the wrong explicit number of errors", () => { + assert.throws(() => { + ruleTester.run("no-eval", require("../../fixtures/testers/rule-tester/no-eval"), { + valid: [ + "Eval(foo)" + ], + invalid: [ + { code: "eval(foo)", errors: 2 } + ] + }); + }, /Should have 2 errors but had 1/u); + }); + + it("should throw an error if there's a parsing error in a valid test", () => { + assert.throws(() => { + ruleTester.run("no-eval", require("../../fixtures/testers/rule-tester/no-eval"), { + valid: [ + "1eval('foo')" + ], + invalid: [ + { code: "eval('foo')", errors: [{}] } + ] + }); + }, /fatal parsing error/iu); + }); + + it("should throw an error if there's a parsing error in an invalid test", () => { + assert.throws(() => { + ruleTester.run("no-eval", require("../../fixtures/testers/rule-tester/no-eval"), { + valid: [ + "noeval('foo')" + ], + invalid: [ + { code: "1eval('foo')", errors: [{}] } + ] + }); + }, /fatal parsing error/iu); + }); + + it("should throw an error if there's a parsing error in an invalid test and errors is just a number", () => { + assert.throws(() => { + ruleTester.run("no-eval", require("../../fixtures/testers/rule-tester/no-eval"), { + valid: [ + "noeval('foo')" + ], + invalid: [ + { code: "1eval('foo')", errors: 1 } + ] + }); + }, /fatal parsing error/iu); + }); + + // https://github.com/eslint/eslint/issues/4779 + it("should throw an error if there's a parsing error and output doesn't match", () => { + assert.throws(() => { + ruleTester.run("no-eval", require("../../fixtures/testers/rule-tester/no-eval"), { + valid: [], + invalid: [ + { code: "eval(`foo`", output: "eval(`foo`);", errors: [{}] } + ] + }); + }, /fatal parsing error/iu); + }); + + it("should not throw an error if invalid code has at least an expected empty error object", () => { + ruleTester.run("no-eval", require("../../fixtures/testers/rule-tester/no-eval"), { + valid: ["Eval(foo)"], + invalid: [{ + code: "eval(foo)", + errors: [{}] + }] + }); + }); + + it("should pass-through the globals config of valid tests to the to rule", () => { + ruleTester.run("no-test-global", require("../../fixtures/testers/rule-tester/no-test-global"), { + valid: [ + { + code: "var test = 'foo'", + languageOptions: { + sourceType: "script" + } + }, + { + code: "var test2 = 'bar'", + languageOptions: { + globals: { test: true } + } + } + ], + invalid: [{ code: "bar", errors: 1 }] + }); + }); + + it("should pass-through the globals config of invalid tests to the rule", () => { + ruleTester.run("no-test-global", require("../../fixtures/testers/rule-tester/no-test-global"), { + valid: [ + { + code: "var test = 'foo'", + languageOptions: { + sourceType: "script" + } + } + ], + invalid: [ + { + code: "var test = 'foo'; var foo = 'bar'", + languageOptions: { + sourceType: "script" + }, + errors: 1 + }, + { + code: "var test = 'foo'", + languageOptions: { + sourceType: "script", + globals: { foo: true } + }, + errors: [{ message: "Global variable foo should not be used." }] + } + ] + }); + }); + + it("should pass-through the settings config to rules", () => { + ruleTester.run("no-test-settings", require("../../fixtures/testers/rule-tester/no-test-settings"), { + valid: [ + { + code: "var test = 'bar'", settings: { test: 1 } + } + ], + invalid: [ + { + code: "var test = 'bar'", settings: { "no-test": 22 }, errors: 1 + } + ] + }); + }); + + it("should pass-through the filename to the rule", () => { + (function() { + ruleTester.run("", require("../../fixtures/testers/rule-tester/no-test-filename"), { + valid: [ + { + code: "var foo = 'bar'", + filename: "somefile.js" + } + ], + invalid: [ + { + code: "var foo = 'bar'", + errors: [ + { message: "Filename test was not defined." } + ] + } + ] + }); + }()); + }); + + it("should pass-through the options to the rule", () => { + ruleTester.run("no-invalid-args", require("../../fixtures/testers/rule-tester/no-invalid-args"), { + valid: [ + { + code: "var foo = 'bar'", + options: [false] + } + ], + invalid: [ + { + code: "var foo = 'bar'", + options: [true], + errors: [{ message: "Invalid args" }] + } + ] + }); + }); + + it("should throw an error if the options are an object", () => { + assert.throws(() => { + ruleTester.run("no-invalid-args", require("../../fixtures/testers/rule-tester/no-invalid-args"), { + valid: [ + { + code: "foo", + options: { ok: true } + } + ], + invalid: [] + }); + }, /options must be an array/u); + }); + + it("should throw an error if the options are a number", () => { + assert.throws(() => { + ruleTester.run("no-invalid-args", require("../../fixtures/testers/rule-tester/no-invalid-args"), { + valid: [ + { + code: "foo", + options: 0 + } + ], + invalid: [] + }); + }, /options must be an array/u); + }); + + describe("Parsers", () => { + + it("should pass-through the parser to the rule", () => { + const spy = sinon.spy(ruleTester.linter, "verify"); + const esprima = require("esprima"); + + ruleTester.run("no-eval", require("../../fixtures/testers/rule-tester/no-eval"), { + valid: [ + { + code: "Eval(foo)" + } + ], + invalid: [ + { + code: "eval(foo)", + languageOptions: { + parser: esprima + }, + errors: [{ line: 1 }] + } + ] + }); + + const configs = spy.args[1][1]; + const config = configs.getConfig("test.js"); + + assert.strictEqual( + config.languageOptions.parser[Symbol.for("eslint.RuleTester.parser")], + esprima + ); + }); + + it("should pass-through services from parseForESLint to the rule", () => { + const enhancedParser = require("../../fixtures/parsers/enhanced-parser"); + const disallowHiRule = { + create: context => ({ + Literal(node) { + const disallowed = context.parserServices.test.getMessage(); // returns "Hi!" + + if (node.value === disallowed) { + context.report({ node, message: `Don't use '${disallowed}'` }); + } + } + }) + }; + + ruleTester.run("no-hi", disallowHiRule, { + valid: [ + { + code: "'Hello!'", + languageOptions: { + parser: enhancedParser + } + } + ], + invalid: [ + { + code: "'Hi!'", + languageOptions: { + parser: enhancedParser + }, + errors: [{ message: "Don't use 'Hi!'" }] + } + ] + }); + }); + + it("should throw an error when the parser is not an object", () => { + assert.throws(() => { + ruleTester.run("no-eval", require("../../fixtures/testers/rule-tester/no-eval"), { + valid: [], + invalid: [{ + code: "var foo;", + languageOptions: { + parser: "esprima" + }, + errors: 1 + }] + }); + }, /Parser must be an object with a parse\(\) or parseForESLint\(\) method/u); + + }); + + }); + + + it("should prevent invalid options schemas", () => { + assert.throws(() => { + ruleTester.run("no-invalid-schema", require("../../fixtures/testers/rule-tester/no-invalid-schema"), { + valid: [ + "var answer = 6 * 7;", + { code: "var answer = 6 * 7;", options: [] } + ], + invalid: [ + { code: "var answer = 6 * 7;", options: ["bar"], errors: [{ message: "Expected nothing." }] } + ] + }); + }, "Schema for rule no-invalid-schema is invalid:,\titems: should be object\n\titems[0].enum: should NOT have fewer than 1 items\n\titems: should match some schema in anyOf"); + + }); + + it("should prevent schema violations in options", () => { + assert.throws(() => { + ruleTester.run("no-schema-violation", require("../../fixtures/testers/rule-tester/no-schema-violation"), { + valid: [ + "var answer = 6 * 7;", + { code: "var answer = 6 * 7;", options: ["foo"] } + ], + invalid: [ + { code: "var answer = 6 * 7;", options: ["bar"], errors: [{ message: "Expected foo." }] } + ] + }); + }, /Value "bar" should be equal to one of the allowed values./u); + + }); + + it("should disallow invalid defaults in rules", () => { + const ruleWithInvalidDefaults = { + meta: { + schema: [ + { + oneOf: [ + { enum: ["foo"] }, + { + type: "object", + properties: { + foo: { + enum: ["foo", "bar"], + default: "foo" + } + }, + additionalProperties: false + } + ] + } + ] + }, + create: () => ({}) + }; + + assert.throws(() => { + ruleTester.run("invalid-defaults", ruleWithInvalidDefaults, { + valid: [ + { + code: "foo", + options: [{}] + } + ], + invalid: [] + }); + }, /Schema for rule invalid-defaults is invalid: default is ignored for: data1\.foo/u); + }); + + it("throw an error when an unknown config option is included", () => { + assert.throws(() => { + ruleTester.run("no-eval", require("../../fixtures/testers/rule-tester/no-eval"), { + valid: [ + { code: "Eval(foo)", foo: "bar" } + ], + invalid: [] + }); + }, /ESLint configuration in rule-tester is invalid./u); + }); + + it("throw an error when env is included in config", () => { + assert.throws(() => { + ruleTester.run("no-eval", require("../../fixtures/testers/rule-tester/no-eval"), { + valid: [ + { code: "Eval(foo)", env: ["es6"] } + ], + invalid: [] + }); + }, /Unexpected key "env" found./u); + }); + + it("should pass-through the tester config to the rule", () => { + ruleTester = new FlatRuleTester({ + languageOptions: { + globals: { test: true } + } + }); + + ruleTester.run("no-test-global", require("../../fixtures/testers/rule-tester/no-test-global"), { + valid: [ + "var test = 'foo'", + "var test2 = test" + ], + invalid: [{ code: "bar", errors: 1, languageOptions: { globals: { foo: true } } }] + }); + }); + + it("should throw an error if AST was modified", () => { + assert.throws(() => { + ruleTester.run("foo", require("../../fixtures/testers/rule-tester/modify-ast"), { + valid: [ + "var foo = 0;" + ], + invalid: [] + }); + }, "Rule should not modify AST."); + assert.throws(() => { + ruleTester.run("foo", require("../../fixtures/testers/rule-tester/modify-ast"), { + valid: [], + invalid: [ + { code: "var bar = 0;", errors: ["error"] } + ] + }); + }, "Rule should not modify AST."); + }); + + it("should throw an error node.start is accessed with custom parser", () => { + const enhancedParser = require("../../fixtures/parsers/enhanced-parser"); + + ruleTester = new FlatRuleTester({ + languageOptions: { + parser: enhancedParser + } + }); + + /* + * Note: More robust test for start/end found later in file. + * This one is just for checking the custom config has a + * parser that is wrapped. + */ + const usesStartEndRule = { + create() { + + return { + CallExpression(node) { + noop(node.arguments[1].start); + } + }; + } + }; + + assert.throws(() => { + ruleTester.run("uses-start-end", usesStartEndRule, { + valid: ["foo(a, b)"], + invalid: [] + }); + }, "Use node.range[0] instead of node.start"); + }); + + it("should throw an error if AST was modified (at Program)", () => { + assert.throws(() => { + ruleTester.run("foo", require("../../fixtures/testers/rule-tester/modify-ast-at-first"), { + valid: [ + "var foo = 0;" + ], + invalid: [] + }); + }, "Rule should not modify AST."); + assert.throws(() => { + ruleTester.run("foo", require("../../fixtures/testers/rule-tester/modify-ast-at-first"), { + valid: [], + invalid: [ + { code: "var bar = 0;", errors: ["error"] } + ] + }); + }, "Rule should not modify AST."); + }); + + it("should throw an error if AST was modified (at Program:exit)", () => { + assert.throws(() => { + ruleTester.run("foo", require("../../fixtures/testers/rule-tester/modify-ast-at-last"), { + valid: [ + "var foo = 0;" + ], + invalid: [] + }); + }, "Rule should not modify AST."); + assert.throws(() => { + ruleTester.run("foo", require("../../fixtures/testers/rule-tester/modify-ast-at-last"), { + valid: [], + invalid: [ + { code: "var bar = 0;", errors: ["error"] } + ] + }); + }, "Rule should not modify AST."); + }); + + it("should throw an error if rule uses start and end properties on nodes, tokens or comments", () => { + const usesStartEndRule = { + create(context) { + + const sourceCode = context.getSourceCode(); + + return { + CallExpression(node) { + noop(node.arguments[1].start); + }, + "BinaryExpression[operator='+']"(node) { + noop(node.end); + }, + "UnaryExpression[operator='-']"(node) { + noop(sourceCode.getFirstToken(node).start); + }, + ConditionalExpression(node) { + noop(sourceCode.getFirstToken(node).end); + }, + BlockStatement(node) { + noop(sourceCode.getCommentsInside(node)[0].start); + }, + ObjectExpression(node) { + noop(sourceCode.getCommentsInside(node)[0].end); + }, + Decorator(node) { + noop(node.start); + } + }; + } + }; + + assert.throws(() => { + ruleTester.run("uses-start-end", usesStartEndRule, { + valid: ["foo(a, b)"], + invalid: [] + }); + }, "Use node.range[0] instead of node.start"); + assert.throws(() => { + ruleTester.run("uses-start-end", usesStartEndRule, { + valid: [], + invalid: [{ code: "var a = b * (c + d) / e;", errors: 1 }] + }); + }, "Use node.range[1] instead of node.end"); + assert.throws(() => { + ruleTester.run("uses-start-end", usesStartEndRule, { + valid: [], + invalid: [{ code: "var a = -b * c;", errors: 1 }] + }); + }, "Use token.range[0] instead of token.start"); + assert.throws(() => { + ruleTester.run("uses-start-end", usesStartEndRule, { + valid: ["var a = b ? c : d;"], + invalid: [] + }); + }, "Use token.range[1] instead of token.end"); + assert.throws(() => { + ruleTester.run("uses-start-end", usesStartEndRule, { + valid: ["function f() { /* comment */ }"], + invalid: [] + }); + }, "Use token.range[0] instead of token.start"); + assert.throws(() => { + ruleTester.run("uses-start-end", usesStartEndRule, { + valid: [], + invalid: [{ code: "var x = //\n {\n //comment\n //\n}", errors: 1 }] + }); + }, "Use token.range[1] instead of token.end"); + + const enhancedParser = require("../../fixtures/parsers/enhanced-parser"); + + assert.throws(() => { + ruleTester.run("uses-start-end", usesStartEndRule, { + valid: [{ code: "foo(a, b)", languageOptions: { parser: enhancedParser } }], + invalid: [] + }); + }, "Use node.range[0] instead of node.start"); + assert.throws(() => { + ruleTester.run("uses-start-end", usesStartEndRule, { + valid: [], + invalid: [{ code: "var a = b * (c + d) / e;", languageOptions: { parser: enhancedParser }, errors: 1 }] + }); + }, "Use node.range[1] instead of node.end"); + assert.throws(() => { + ruleTester.run("uses-start-end", usesStartEndRule, { + valid: [], + invalid: [{ code: "var a = -b * c;", languageOptions: { parser: enhancedParser }, errors: 1 }] + }); + }, "Use token.range[0] instead of token.start"); + assert.throws(() => { + ruleTester.run("uses-start-end", usesStartEndRule, { + valid: [{ code: "var a = b ? c : d;", languageOptions: { parser: enhancedParser } }], + invalid: [] + }); + }, "Use token.range[1] instead of token.end"); + assert.throws(() => { + ruleTester.run("uses-start-end", usesStartEndRule, { + valid: [{ code: "function f() { /* comment */ }", languageOptions: { parser: enhancedParser } }], + invalid: [] + }); + }, "Use token.range[0] instead of token.start"); + assert.throws(() => { + ruleTester.run("uses-start-end", usesStartEndRule, { + valid: [], + invalid: [{ code: "var x = //\n {\n //comment\n //\n}", languageOptions: { parser: enhancedParser }, errors: 1 }] + }); + }, "Use token.range[1] instead of token.end"); + + assert.throws(() => { + ruleTester.run("uses-start-end", usesStartEndRule, { + valid: [{ code: "@foo class A {}", languageOptions: { parser: require("../../fixtures/parsers/enhanced-parser2") } }], + invalid: [] + }); + }, "Use node.range[0] instead of node.start"); + }); + + it("should throw an error if no test scenarios given", () => { + assert.throws(() => { + ruleTester.run("foo", require("../../fixtures/testers/rule-tester/modify-ast-at-last")); + }, "Test Scenarios for rule foo : Could not find test scenario object"); + }); + + it("should throw an error if no acceptable test scenario object is given", () => { + assert.throws(() => { + ruleTester.run("foo", require("../../fixtures/testers/rule-tester/modify-ast-at-last"), []); + }, "Test Scenarios for rule foo is invalid:\nCould not find any valid test scenarios\nCould not find any invalid test scenarios"); + assert.throws(() => { + ruleTester.run("foo", require("../../fixtures/testers/rule-tester/modify-ast-at-last"), ""); + }, "Test Scenarios for rule foo : Could not find test scenario object"); + assert.throws(() => { + ruleTester.run("foo", require("../../fixtures/testers/rule-tester/modify-ast-at-last"), 2); + }, "Test Scenarios for rule foo : Could not find test scenario object"); + assert.throws(() => { + ruleTester.run("foo", require("../../fixtures/testers/rule-tester/modify-ast-at-last"), {}); + }, "Test Scenarios for rule foo is invalid:\nCould not find any valid test scenarios\nCould not find any invalid test scenarios"); + assert.throws(() => { + ruleTester.run("foo", require("../../fixtures/testers/rule-tester/modify-ast-at-last"), { + valid: [] + }); + }, "Test Scenarios for rule foo is invalid:\nCould not find any invalid test scenarios"); + assert.throws(() => { + ruleTester.run("foo", require("../../fixtures/testers/rule-tester/modify-ast-at-last"), { + invalid: [] + }); + }, "Test Scenarios for rule foo is invalid:\nCould not find any valid test scenarios"); + }); + + // Nominal message/messageId use cases + it("should assert match if message provided in both test and result.", () => { + assert.throws(() => { + ruleTester.run("foo", require("../../fixtures/testers/rule-tester/messageId").withMessageOnly, { + valid: [], + invalid: [{ code: "foo", errors: [{ message: "something" }] }] + }); + }, /Avoid using variables named/u); + + ruleTester.run("foo", require("../../fixtures/testers/rule-tester/messageId").withMessageOnly, { + valid: [], + invalid: [{ code: "foo", errors: [{ message: "Avoid using variables named 'foo'." }] }] + }); + }); + + it("should assert match between messageId if provided in both test and result.", () => { + assert.throws(() => { + ruleTester.run("foo", require("../../fixtures/testers/rule-tester/messageId").withMetaWithData, { + valid: [], + invalid: [{ code: "foo", errors: [{ messageId: "unused" }] }] + }); + }, "messageId 'avoidFoo' does not match expected messageId 'unused'."); + + ruleTester.run("foo", require("../../fixtures/testers/rule-tester/messageId").withMetaWithData, { + valid: [], + invalid: [{ code: "foo", errors: [{ messageId: "avoidFoo" }] }] + }); + }); + it("should assert match between resulting message output if messageId and data provided in both test and result", () => { + assert.throws(() => { + ruleTester.run("foo", require("../../fixtures/testers/rule-tester/messageId").withMetaWithData, { + valid: [], + invalid: [{ code: "foo", errors: [{ messageId: "avoidFoo", data: { name: "notFoo" } }] }] + }); + }, "Hydrated message \"Avoid using variables named 'notFoo'.\" does not match \"Avoid using variables named 'foo'.\""); + }); + + // messageId/message misconfiguration cases + it("should throw if user tests for both message and messageId", () => { + assert.throws(() => { + ruleTester.run("foo", require("../../fixtures/testers/rule-tester/messageId").withMetaWithData, { + valid: [], + invalid: [{ code: "foo", errors: [{ message: "something", messageId: "avoidFoo" }] }] + }); + }, "Error should not specify both 'message' and a 'messageId'."); + }); + it("should throw if user tests for messageId but the rule doesn't use the messageId meta syntax.", () => { + assert.throws(() => { + ruleTester.run("foo", require("../../fixtures/testers/rule-tester/messageId").withMessageOnly, { + valid: [], + invalid: [{ code: "foo", errors: [{ messageId: "avoidFoo" }] }] + }); + }, "Error can not use 'messageId' if rule under test doesn't define 'meta.messages'"); + }); + it("should throw if user tests for messageId not listed in the rule's meta syntax.", () => { + assert.throws(() => { + ruleTester.run("foo", require("../../fixtures/testers/rule-tester/messageId").withMetaWithData, { + valid: [], + invalid: [{ code: "foo", errors: [{ messageId: "useFoo" }] }] + }); + }, /Invalid messageId 'useFoo'/u); + }); + it("should throw if data provided without messageId.", () => { + assert.throws(() => { + ruleTester.run("foo", require("../../fixtures/testers/rule-tester/messageId").withMetaWithData, { + valid: [], + invalid: [{ code: "foo", errors: [{ data: "something" }] }] + }); + }, "Error must specify 'messageId' if 'data' is used."); + }); + + // fixable rules with or without `meta` property + it("should not throw an error if a rule that has `meta.fixable` produces fixes", () => { + const replaceProgramWith5Rule = { + meta: { + fixable: "code" + }, + create(context) { + return { + Program(node) { + context.report({ node, message: "bad", fix: fixer => fixer.replaceText(node, "5") }); + } + }; + } + }; + + ruleTester.run("replaceProgramWith5", replaceProgramWith5Rule, { + valid: [], + invalid: [ + { code: "var foo = bar;", output: "5", errors: 1 } + ] + }); + }); + it("should throw an error if a new-format rule that doesn't have `meta` produces fixes", () => { + const replaceProgramWith5Rule = { + create(context) { + return { + Program(node) { + context.report({ node, message: "bad", fix: fixer => fixer.replaceText(node, "5") }); + } + }; + } + }; + + assert.throws(() => { + ruleTester.run("replaceProgramWith5", replaceProgramWith5Rule, { + valid: [], + invalid: [ + { code: "var foo = bar;", output: "5", errors: 1 } + ] + }); + }, /Fixable rules must set the `meta\.fixable` property/u); + }); + it("should throw an error if a legacy-format rule produces fixes", () => { + + /** + * Legacy-format rule (a function instead of an object with `create` method). + * @param {RuleContext} context The ESLint rule context object. + * @returns {Object} Listeners. + */ + function replaceProgramWith5Rule(context) { + return { + Program(node) { + context.report({ node, message: "bad", fix: fixer => fixer.replaceText(node, "5") }); + } + }; + } + + assert.throws(() => { + ruleTester.run("replaceProgramWith5", replaceProgramWith5Rule, { + valid: [], + invalid: [ + { code: "var foo = bar;", output: "5", errors: 1 } + ] + }); + }, /Fixable rules must set the `meta\.fixable` property/u); + }); + + describe("suggestions", () => { + it("should pass with valid suggestions (tested using desc)", () => { + ruleTester.run("suggestions-basic", require("../../fixtures/testers/rule-tester/suggestions").basic, { + valid: [ + "var boo;" + ], + invalid: [{ + code: "var foo;", + errors: [{ + suggestions: [{ + desc: "Rename identifier 'foo' to 'bar'", + output: "var bar;" + }] + }] + }] + }); + }); + + it("should pass with suggestions on multiple lines", () => { + ruleTester.run("suggestions-basic", require("../../fixtures/testers/rule-tester/suggestions").basic, { + valid: [], + invalid: [ + { + code: "function foo() {\n var foo = 1;\n}", + errors: [{ + suggestions: [{ + desc: "Rename identifier 'foo' to 'bar'", + output: "function bar() {\n var foo = 1;\n}" + }] + }, { + suggestions: [{ + desc: "Rename identifier 'foo' to 'bar'", + output: "function foo() {\n var bar = 1;\n}" + }] + }] + } + ] + }); + }); + + it("should pass with valid suggestions (tested using messageIds)", () => { + ruleTester.run("suggestions-messageIds", require("../../fixtures/testers/rule-tester/suggestions").withMessageIds, { + valid: [], + invalid: [{ + code: "var foo;", + errors: [{ + suggestions: [{ + messageId: "renameFoo", + output: "var bar;" + }, { + messageId: "renameFoo", + output: "var baz;" + }] + }] + }] + }); + }); + + it("should pass with valid suggestions (one tested using messageIds, the other using desc)", () => { + ruleTester.run("suggestions-messageIds", require("../../fixtures/testers/rule-tester/suggestions").withMessageIds, { + valid: [], + invalid: [{ + code: "var foo;", + errors: [{ + suggestions: [{ + messageId: "renameFoo", + output: "var bar;" + }, { + desc: "Rename identifier 'foo' to 'baz'", + output: "var baz;" + }] + }] + }] + }); + }); + + it("should pass with valid suggestions (tested using both desc and messageIds for the same suggestion)", () => { + ruleTester.run("suggestions-messageIds", require("../../fixtures/testers/rule-tester/suggestions").withMessageIds, { + valid: [], + invalid: [{ + code: "var foo;", + errors: [{ + suggestions: [{ + desc: "Rename identifier 'foo' to 'bar'", + messageId: "renameFoo", + output: "var bar;" + }, { + desc: "Rename identifier 'foo' to 'baz'", + messageId: "renameFoo", + output: "var baz;" + }] + }] + }] + }); + }); + + it("should pass with valid suggestions (tested using only desc on a rule that utilizes meta.messages)", () => { + ruleTester.run("suggestions-messageIds", require("../../fixtures/testers/rule-tester/suggestions").withMessageIds, { + valid: [], + invalid: [{ + code: "var foo;", + errors: [{ + suggestions: [{ + desc: "Rename identifier 'foo' to 'bar'", + output: "var bar;" + }, { + desc: "Rename identifier 'foo' to 'baz'", + output: "var baz;" + }] + }] + }] + }); + }); + + it("should pass with valid suggestions (tested using messageIds and data)", () => { + ruleTester.run("suggestions-messageIds", require("../../fixtures/testers/rule-tester/suggestions").withMessageIds, { + valid: [], + invalid: [{ + code: "var foo;", + errors: [{ + suggestions: [{ + messageId: "renameFoo", + data: { newName: "bar" }, + output: "var bar;" + }, { + messageId: "renameFoo", + data: { newName: "baz" }, + output: "var baz;" + }] + }] + }] + }); + }); + + + it("should pass when tested using empty suggestion test objects if the array length is correct", () => { + ruleTester.run("suggestions-messageIds", require("../../fixtures/testers/rule-tester/suggestions").withMessageIds, { + valid: [], + invalid: [{ + code: "var foo;", + errors: [{ + suggestions: [{}, {}] + }] + }] + }); + }); + + it("should support explicitly expecting no suggestions", () => { + [void 0, null, false, []].forEach(suggestions => { + ruleTester.run("suggestions-basic", require("../../fixtures/testers/rule-tester/no-eval"), { + valid: [], + invalid: [{ + code: "eval('var foo');", + errors: [{ + suggestions + }] + }] + }); + }); + }); + + it("should fail when expecting no suggestions and there are suggestions", () => { + [void 0, null, false, []].forEach(suggestions => { + assert.throws(() => { + ruleTester.run("suggestions-basic", require("../../fixtures/testers/rule-tester/suggestions").basic, { + valid: [], + invalid: [{ + code: "var foo;", + errors: [{ + suggestions + }] + }] + }); + }, "Error should have no suggestions on error with message: \"Avoid using identifiers named 'foo'.\""); + }); + }); + + it("should fail when testing for suggestions that don't exist", () => { + assert.throws(() => { + ruleTester.run("no-var", require("../../fixtures/testers/rule-tester/no-var"), { + valid: [], + invalid: [{ + code: "var foo;", + errors: [{ + suggestions: [{ + messageId: "this-does-not-exist" + }] + }] + }] + }); + }, "Error should have an array of suggestions. Instead received \"undefined\" on error with message: \"Bad var.\""); + }); + + it("should fail when there are a different number of suggestions", () => { + assert.throws(() => { + ruleTester.run("suggestions-basic", require("../../fixtures/testers/rule-tester/suggestions").basic, { + valid: [], + invalid: [{ + code: "var foo;", + errors: [{ + suggestions: [{ + desc: "Rename identifier 'foo' to 'bar'", + output: "var bar;" + }, { + desc: "Rename identifier 'foo' to 'baz'", + output: "var baz;" + }] + }] + }] + }); + }, "Error should have 2 suggestions. Instead found 1 suggestions"); + }); + + it("should throw if the suggestion description doesn't match", () => { + assert.throws(() => { + ruleTester.run("suggestions-basic", require("../../fixtures/testers/rule-tester/suggestions").basic, { + valid: [], + invalid: [{ + code: "var foo;", + errors: [{ + suggestions: [{ + desc: "not right", + output: "var baz;" + }] + }] + }] + }); + }, "Error Suggestion at index 0 : desc should be \"not right\" but got \"Rename identifier 'foo' to 'bar'\" instead."); + }); + + it("should throw if the suggestion description doesn't match (although messageIds match)", () => { + assert.throws(() => { + ruleTester.run("suggestions-messageIds", require("../../fixtures/testers/rule-tester/suggestions").withMessageIds, { + valid: [], + invalid: [{ + code: "var foo;", + errors: [{ + suggestions: [{ + desc: "Rename identifier 'foo' to 'bar'", + messageId: "renameFoo", + output: "var bar;" + }, { + desc: "Rename id 'foo' to 'baz'", + messageId: "renameFoo", + output: "var baz;" + }] + }] + }] + }); + }, "Error Suggestion at index 1 : desc should be \"Rename id 'foo' to 'baz'\" but got \"Rename identifier 'foo' to 'baz'\" instead."); + }); + + it("should throw if the suggestion messageId doesn't match", () => { + assert.throws(() => { + ruleTester.run("suggestions-messageIds", require("../../fixtures/testers/rule-tester/suggestions").withMessageIds, { + valid: [], + invalid: [{ + code: "var foo;", + errors: [{ + suggestions: [{ + messageId: "unused", + output: "var bar;" + }, { + messageId: "renameFoo", + output: "var baz;" + }] + }] + }] + }); + }, "Error Suggestion at index 0 : messageId should be 'unused' but got 'renameFoo' instead."); + }); + + it("should throw if the suggestion messageId doesn't match (although descriptions match)", () => { + assert.throws(() => { + ruleTester.run("suggestions-messageIds", require("../../fixtures/testers/rule-tester/suggestions").withMessageIds, { + valid: [], + invalid: [{ + code: "var foo;", + errors: [{ + suggestions: [{ + desc: "Rename identifier 'foo' to 'bar'", + messageId: "renameFoo", + output: "var bar;" + }, { + desc: "Rename identifier 'foo' to 'baz'", + messageId: "avoidFoo", + output: "var baz;" + }] + }] + }] + }); + }, "Error Suggestion at index 1 : messageId should be 'avoidFoo' but got 'renameFoo' instead."); + }); + + it("should throw if test specifies messageId for a rule that doesn't have meta.messages", () => { + assert.throws(() => { + ruleTester.run("suggestions-basic", require("../../fixtures/testers/rule-tester/suggestions").basic, { + valid: [], + invalid: [{ + code: "var foo;", + errors: [{ + suggestions: [{ + messageId: "renameFoo", + output: "var bar;" + }] + }] + }] + }); + }, "Error Suggestion at index 0 : Test can not use 'messageId' if rule under test doesn't define 'meta.messages'."); + }); + + it("should throw if test specifies messageId that doesn't exist in the rule's meta.messages", () => { + assert.throws(() => { + ruleTester.run("suggestions-messageIds", require("../../fixtures/testers/rule-tester/suggestions").withMessageIds, { + valid: [], + invalid: [{ + code: "var foo;", + errors: [{ + suggestions: [{ + messageId: "renameFoo", + output: "var bar;" + }, { + messageId: "removeFoo", + output: "var baz;" + }] + }] + }] + }); + }, "Error Suggestion at index 1 : Test has invalid messageId 'removeFoo', the rule under test allows only one of ['avoidFoo', 'unused', 'renameFoo']."); + }); + + it("should throw if hydrated desc doesn't match (wrong data value)", () => { + assert.throws(() => { + ruleTester.run("suggestions-messageIds", require("../../fixtures/testers/rule-tester/suggestions").withMessageIds, { + valid: [], + invalid: [{ + code: "var foo;", + errors: [{ + suggestions: [{ + messageId: "renameFoo", + data: { newName: "car" }, + output: "var bar;" + }, { + messageId: "renameFoo", + data: { newName: "baz" }, + output: "var baz;" + }] + }] + }] + }); + }, "Error Suggestion at index 0 : Hydrated test desc \"Rename identifier 'foo' to 'car'\" does not match received desc \"Rename identifier 'foo' to 'bar'\"."); + }); + + it("should throw if hydrated desc doesn't match (wrong data key)", () => { + assert.throws(() => { + ruleTester.run("suggestions-messageIds", require("../../fixtures/testers/rule-tester/suggestions").withMessageIds, { + valid: [], + invalid: [{ + code: "var foo;", + errors: [{ + suggestions: [{ + messageId: "renameFoo", + data: { newName: "bar" }, + output: "var bar;" + }, { + messageId: "renameFoo", + data: { name: "baz" }, + output: "var baz;" + }] + }] + }] + }); + }, "Error Suggestion at index 1 : Hydrated test desc \"Rename identifier 'foo' to '{{ newName }}'\" does not match received desc \"Rename identifier 'foo' to 'baz'\"."); + }); + + it("should throw if test specifies both desc and data", () => { + assert.throws(() => { + ruleTester.run("suggestions-messageIds", require("../../fixtures/testers/rule-tester/suggestions").withMessageIds, { + valid: [], + invalid: [{ + code: "var foo;", + errors: [{ + suggestions: [{ + desc: "Rename identifier 'foo' to 'bar'", + messageId: "renameFoo", + data: { newName: "bar" }, + output: "var bar;" + }, { + messageId: "renameFoo", + data: { newName: "baz" }, + output: "var baz;" + }] + }] + }] + }); + }, "Error Suggestion at index 0 : Test should not specify both 'desc' and 'data'."); + }); + + it("should throw if test uses data but doesn't specify messageId", () => { + assert.throws(() => { + ruleTester.run("suggestions-messageIds", require("../../fixtures/testers/rule-tester/suggestions").withMessageIds, { + valid: [], + invalid: [{ + code: "var foo;", + errors: [{ + suggestions: [{ + messageId: "renameFoo", + data: { newName: "bar" }, + output: "var bar;" + }, { + data: { newName: "baz" }, + output: "var baz;" + }] + }] + }] + }); + }, "Error Suggestion at index 1 : Test must specify 'messageId' if 'data' is used."); + }); + + it("should throw if the resulting suggestion output doesn't match", () => { + assert.throws(() => { + ruleTester.run("suggestions-basic", require("../../fixtures/testers/rule-tester/suggestions").basic, { + valid: [], + invalid: [{ + code: "var foo;", + errors: [{ + suggestions: [{ + desc: "Rename identifier 'foo' to 'bar'", + output: "var baz;" + }] + }] + }] + }); + }, "Expected the applied suggestion fix to match the test suggestion output"); + }); + + it("should fail when specified suggestion isn't an object", () => { + assert.throws(() => { + ruleTester.run("suggestions-basic", require("../../fixtures/testers/rule-tester/suggestions").basic, { + valid: [], + invalid: [{ + code: "var foo;", + errors: [{ + suggestions: [null] + }] + }] + }); + }, "Test suggestion in 'suggestions' array must be an object."); + + assert.throws(() => { + ruleTester.run("suggestions-messageIds", require("../../fixtures/testers/rule-tester/suggestions").withMessageIds, { + valid: [], + invalid: [{ + code: "var foo;", + errors: [{ + suggestions: [ + { + messageId: "renameFoo", + output: "var bar;" + }, + "Rename identifier 'foo' to 'baz'" + ] + }] + }] + }); + }, "Test suggestion in 'suggestions' array must be an object."); + }); + + it("should fail when the suggestion is an object with an unknown property name", () => { + assert.throws(() => { + ruleTester.run("suggestions-basic", require("../../fixtures/testers/rule-tester/suggestions").basic, { + valid: [ + "var boo;" + ], + invalid: [{ + code: "var foo;", + errors: [{ + suggestions: [{ + message: "Rename identifier 'foo' to 'bar'" + }] + }] + }] + }); + }, /Invalid suggestion property name 'message'/u); + }); + + it("should fail when any of the suggestions is an object with an unknown property name", () => { + assert.throws(() => { + ruleTester.run("suggestions-messageIds", require("../../fixtures/testers/rule-tester/suggestions").withMessageIds, { + valid: [], + invalid: [{ + code: "var foo;", + errors: [{ + suggestions: [{ + messageId: "renameFoo", + output: "var bar;" + }, { + messageId: "renameFoo", + outpt: "var baz;" + }] + }] + }] + }); + }, /Invalid suggestion property name 'outpt'/u); + }); + + it("should throw an error if a rule that doesn't have `meta.hasSuggestions` enabled produces suggestions", () => { + assert.throws(() => { + ruleTester.run("suggestions-missing-hasSuggestions-property", require("../../fixtures/testers/rule-tester/suggestions").withoutHasSuggestionsProperty, { + valid: [], + invalid: [ + { code: "var foo = bar;", output: "5", errors: 1 } + ] + }); + }, "Rules with suggestions must set the `meta.hasSuggestions` property to `true`."); + }); + }); + + /** + * Asserts that a particular value will be emitted from an EventEmitter. + * @param {EventEmitter} emitter The emitter that should emit a value + * @param {string} emitType The type of emission to listen for + * @param {any} expectedValue The value that should be emitted + * @returns {Promise<void>} A Promise that fulfills if the value is emitted, and rejects if something else is emitted. + * The Promise will be indefinitely pending if no value is emitted. + */ + function assertEmitted(emitter, emitType, expectedValue) { + return new Promise((resolve, reject) => { + emitter.once(emitType, emittedValue => { + if (emittedValue === expectedValue) { + resolve(); + } else { + reject(new Error(`Expected ${expectedValue} to be emitted but ${emittedValue} was emitted instead.`)); + } + }); + }); + } + + describe("naming test cases", () => { + + it("should use the first argument as the name of the test suite", () => { + const assertion = assertEmitted(ruleTesterTestEmitter, "describe", "this-is-a-rule-name"); + + ruleTester.run("this-is-a-rule-name", require("../../fixtures/testers/rule-tester/no-var"), { + valid: [], + invalid: [] + }); + + return assertion; + }); + + it("should use the test code as the name of the tests for valid code (string form)", () => { + const assertion = assertEmitted(ruleTesterTestEmitter, "it", "valid(code);"); + + ruleTester.run("foo", require("../../fixtures/testers/rule-tester/no-var"), { + valid: [ + "valid(code);" + ], + invalid: [] + }); + + return assertion; + }); + + it("should use the test code as the name of the tests for valid code (object form)", () => { + const assertion = assertEmitted(ruleTesterTestEmitter, "it", "valid(code);"); + + ruleTester.run("foo", require("../../fixtures/testers/rule-tester/no-var"), { + valid: [ + { + code: "valid(code);" + } + ], + invalid: [] + }); + + return assertion; + }); + + it("should use the test code as the name of the tests for invalid code", () => { + const assertion = assertEmitted(ruleTesterTestEmitter, "it", "var x = invalid(code);"); + + ruleTester.run("foo", require("../../fixtures/testers/rule-tester/no-var"), { + valid: [], + invalid: [ + { + code: "var x = invalid(code);", + output: " x = invalid(code);", + errors: 1 + } + ] + }); + + return assertion; + }); + + // https://github.com/eslint/eslint/issues/8142 + it("should use the empty string as the name of the test if the test case is an empty string", () => { + const assertion = assertEmitted(ruleTesterTestEmitter, "it", ""); + + ruleTester.run("foo", require("../../fixtures/testers/rule-tester/no-var"), { + valid: [ + { + code: "" + } + ], + invalid: [] + }); + + return assertion; + }); + + it('should use the "name" property if set to a non-empty string', () => { + const assertion = assertEmitted(ruleTesterTestEmitter, "it", "my test"); + + ruleTester.run("foo", require("../../fixtures/testers/rule-tester/no-var"), { + valid: [], + invalid: [ + { + name: "my test", + code: "var x = invalid(code);", + output: " x = invalid(code);", + errors: 1 + } + ] + }); + + return assertion; + }); + + it('should use the "name" property if set to a non-empty string for valid cases too', () => { + const assertion = assertEmitted(ruleTesterTestEmitter, "it", "my test"); + + ruleTester.run("foo", require("../../fixtures/testers/rule-tester/no-var"), { + valid: [ + { + name: "my test", + code: "valid(code);" + } + ], + invalid: [] + }); + + return assertion; + }); + + + it('should use the test code as the name if the "name" property is set to an empty string', () => { + const assertion = assertEmitted(ruleTesterTestEmitter, "it", "var x = invalid(code);"); + + ruleTester.run("foo", require("../../fixtures/testers/rule-tester/no-var"), { + valid: [], + invalid: [ + { + name: "", + code: "var x = invalid(code);", + output: " x = invalid(code);", + errors: 1 + } + ] + }); + + return assertion; + }); + + it('should throw if "name" property is not a string', () => { + assert.throws(() => { + ruleTester.run("foo", require("../../fixtures/testers/rule-tester/no-var"), { + valid: [{ code: "foo", name: 123 }], + invalid: [{ code: "foo" }] + + }); + }, /Optional test case property 'name' must be a string/u); + + assert.throws(() => { + ruleTester.run("foo", require("../../fixtures/testers/rule-tester/no-var"), { + valid: ["foo"], + invalid: [{ code: "foo", name: 123 }] + }); + }, /Optional test case property 'name' must be a string/u); + }); + + it('should throw if "code" property is not a string', () => { + assert.throws(() => { + ruleTester.run("foo", require("../../fixtures/testers/rule-tester/no-var"), { + valid: [{ code: 123 }], + invalid: [{ code: "foo" }] + + }); + }, /Test case must specify a string value for 'code'/u); + + assert.throws(() => { + ruleTester.run("foo", require("../../fixtures/testers/rule-tester/no-var"), { + valid: [123], + invalid: [{ code: "foo" }] + + }); + }, /Test case must specify a string value for 'code'/u); + + assert.throws(() => { + ruleTester.run("foo", require("../../fixtures/testers/rule-tester/no-var"), { + valid: ["foo"], + invalid: [{ code: 123 }] + }); + }, /Test case must specify a string value for 'code'/u); + }); + + it('should throw if "code" property is missing', () => { + assert.throws(() => { + ruleTester.run("foo", require("../../fixtures/testers/rule-tester/no-var"), { + valid: [{ }], + invalid: [{ code: "foo" }] + + }); + }, /Test case must specify a string value for 'code'/u); + + assert.throws(() => { + ruleTester.run("foo", require("../../fixtures/testers/rule-tester/no-var"), { + valid: ["foo"], + invalid: [{ }] + }); + }, /Test case must specify a string value for 'code'/u); + }); + }); + + // https://github.com/eslint/eslint/issues/11615 + it("should fail the case if autofix made a syntax error.", () => { + assert.throw(() => { + ruleTester.run( + "foo", + { + meta: { + fixable: "code" + }, + create(context) { + return { + Identifier(node) { + context.report({ + node, + message: "make a syntax error", + fix(fixer) { + return fixer.replaceText(node, "one two"); + } + }); + } + }; + } + }, + { + valid: ["one()"], + invalid: [] + } + ); + }, /A fatal parsing error occurred in autofix.\nError: .+\nAutofix output:\n.+/u); + }); + + describe("sanitize test cases", () => { + let originalRuleTesterIt; + let spyRuleTesterIt; + + before(() => { + originalRuleTesterIt = FlatRuleTester.it; + spyRuleTesterIt = sinon.spy(); + FlatRuleTester.it = spyRuleTesterIt; + }); + after(() => { + FlatRuleTester.it = originalRuleTesterIt; + }); + beforeEach(() => { + spyRuleTesterIt.resetHistory(); + ruleTester = new FlatRuleTester(); + }); + it("should present newline when using back-tick as new line", () => { + const code = ` + var foo = bar;`; + + ruleTester.run("no-var", require("../../fixtures/testers/rule-tester/no-var"), { + valid: [], + invalid: [ + { + code, + errors: [/^Bad var/u] + } + ] + }); + sinon.assert.calledWith(spyRuleTesterIt, code); + }); + it("should present \\u0000 as a string", () => { + const code = "\u0000"; + + ruleTester.run("no-var", require("../../fixtures/testers/rule-tester/no-var"), { + valid: [], + invalid: [ + { + code, + errors: [/^Bad var/u] + } + ] + }); + sinon.assert.calledWith(spyRuleTesterIt, "\\u0000"); + }); + it("should present the pipe character correctly", () => { + const code = "var foo = bar || baz;"; + + ruleTester.run("no-var", require("../../fixtures/testers/rule-tester/no-var"), { + valid: [], + invalid: [ + { + code, + errors: [/^Bad var/u] + } + ] + }); + sinon.assert.calledWith(spyRuleTesterIt, code); + }); + + }); + + describe("SourceCode#getComments()", () => { + const useGetCommentsRule = { + create: context => ({ + Program(node) { + const sourceCode = context.getSourceCode(); + + sourceCode.getComments(node); + } + }) + }; + + it("should throw if called from a valid test case", () => { + assert.throws(() => { + ruleTester.run("use-get-comments", useGetCommentsRule, { + valid: [""], + invalid: [] + }); + }, /`SourceCode#getComments\(\)` is deprecated/u); + }); + + it("should throw if called from an invalid test case", () => { + assert.throws(() => { + ruleTester.run("use-get-comments", useGetCommentsRule, { + valid: [], + invalid: [{ + code: "", + errors: [{}] + }] + }); + }, /`SourceCode#getComments\(\)` is deprecated/u); + }); + }); + + describe("Subclassing", () => { + it("should allow subclasses to set the describe/it/itOnly statics and should correctly use those values", () => { + const assertionDescribe = assertEmitted(ruleTesterTestEmitter, "custom describe", "this-is-a-rule-name"); + const assertionIt = assertEmitted(ruleTesterTestEmitter, "custom it", "valid(code);"); + const assertionItOnly = assertEmitted(ruleTesterTestEmitter, "custom itOnly", "validOnly(code);"); + + /** + * Subclass for testing + */ + class RuleTesterSubclass extends FlatRuleTester { } + RuleTesterSubclass.describe = function(text, method) { + ruleTesterTestEmitter.emit("custom describe", text, method); + return method.call(this); + }; + RuleTesterSubclass.it = function(text, method) { + ruleTesterTestEmitter.emit("custom it", text, method); + return method.call(this); + }; + RuleTesterSubclass.itOnly = function(text, method) { + ruleTesterTestEmitter.emit("custom itOnly", text, method); + return method.call(this); + }; + + const ruleTesterSubclass = new RuleTesterSubclass(); + + ruleTesterSubclass.run("this-is-a-rule-name", require("../../fixtures/testers/rule-tester/no-var"), { + valid: [ + "valid(code);", + { + code: "validOnly(code);", + only: true + } + ], + invalid: [] + }); + + return Promise.all([ + assertionDescribe, + assertionIt, + assertionItOnly + ]); + }); + + }); + +}); diff --git a/eslint/tests/lib/rule-tester/rule-tester.js b/eslint/tests/lib/rule-tester/rule-tester.js index 5018a03..0e35258 100644 --- a/eslint/tests/lib/rule-tester/rule-tester.js +++ b/eslint/tests/lib/rule-tester/rule-tester.js @@ -1220,8 +1220,8 @@ describe("RuleTester", () => { }, { code: "", - errors: [{ messageId: "ecmaVersionMessage", data: { type: "number", ecmaVersion: "6" } }], - parserOptions: {} + parserOptions: {}, + errors: [{ messageId: "ecmaVersionMessage", data: { type: "number", ecmaVersion: "6" } }] } ] }); @@ -1236,8 +1236,8 @@ describe("RuleTester", () => { }, { code: "", - errors: [{ messageId: "ecmaVersionMessage", data: { type: "string", ecmaVersion: "latest" } }], - parserOptions: { ecmaVersion: "latest" } + parserOptions: { ecmaVersion: "latest" }, + errors: [{ messageId: "ecmaVersionMessage", data: { type: "string", ecmaVersion: "latest" } }] } ] }); @@ -1710,73 +1710,6 @@ describe("RuleTester", () => { }, "Error must specify 'messageId' if 'data' is used."); }); - // fixable rules with or without `meta` property - it("should not throw an error if a rule that has `meta.fixable` produces fixes", () => { - const replaceProgramWith5Rule = { - meta: { - fixable: "code" - }, - create(context) { - return { - Program(node) { - context.report({ node, message: "bad", fix: fixer => fixer.replaceText(node, "5") }); - } - }; - } - }; - - ruleTester.run("replaceProgramWith5", replaceProgramWith5Rule, { - valid: [], - invalid: [ - { code: "var foo = bar;", output: "5", errors: 1 } - ] - }); - }); - it("should throw an error if a new-format rule that doesn't have `meta` produces fixes", () => { - const replaceProgramWith5Rule = { - create(context) { - return { - Program(node) { - context.report({ node, message: "bad", fix: fixer => fixer.replaceText(node, "5") }); - } - }; - } - }; - - assert.throws(() => { - ruleTester.run("replaceProgramWith5", replaceProgramWith5Rule, { - valid: [], - invalid: [ - { code: "var foo = bar;", output: "5", errors: 1 } - ] - }); - }, /Fixable rules must set the `meta\.fixable` property/u); - }); - it("should throw an error if a legacy-format rule produces fixes", () => { - - /** - * Legacy-format rule (a function instead of an object with `create` method). - * @param {RuleContext} context The ESLint rule context object. - * @returns {Object} Listeners. - */ - function replaceProgramWith5Rule(context) { - return { - Program(node) { - context.report({ node, message: "bad", fix: fixer => fixer.replaceText(node, "5") }); - } - }; - } - - assert.throws(() => { - ruleTester.run("replaceProgramWith5", replaceProgramWith5Rule, { - valid: [], - invalid: [ - { code: "var foo = bar;", output: "5", errors: 1 } - ] - }); - }, /Fixable rules must set the `meta\.fixable` property/u); - }); - describe("suggestions", () => { it("should pass with valid suggestions (tested using desc)", () => { ruleTester.run("suggestions-basic", require("../../fixtures/testers/rule-tester/suggestions").basic, { @@ -2295,27 +2228,286 @@ describe("RuleTester", () => { }); }); - describe("naming test cases", () => { + describe("deprecations", () => { + let processStub; + const ruleWithNoSchema = { + meta: { + type: "suggestion" + }, + create(context) { + return { + Program(node) { + context.report({ node, message: "bad" }); + } + }; + } + }; + const ruleWithNoMeta = { + create(context) { + return { + Program(node) { + context.report({ node, message: "bad" }); + } + }; + } + }; - /** - * Asserts that a particular value will be emitted from an EventEmitter. - * @param {EventEmitter} emitter The emitter that should emit a value - * @param {string} emitType The type of emission to listen for - * @param {any} expectedValue The value that should be emitted - * @returns {Promise<void>} A Promise that fulfills if the value is emitted, and rejects if something else is emitted. - * The Promise will be indefinitely pending if no value is emitted. - */ - function assertEmitted(emitter, emitType, expectedValue) { - return new Promise((resolve, reject) => { - emitter.once(emitType, emittedValue => { - if (emittedValue === expectedValue) { - resolve(); - } else { - reject(new Error(`Expected ${expectedValue} to be emitted but ${emittedValue} was emitted instead.`)); + beforeEach(() => { + processStub = sinon.stub(process, "emitWarning"); + }); + + afterEach(() => { + processStub.restore(); + }); + + it("should log a deprecation warning when using the legacy function-style API for rule", () => { + + /** + * Legacy-format rule (a function instead of an object with `create` method). + * @param {RuleContext} context The ESLint rule context object. + * @returns {Object} Listeners. + */ + function functionStyleRule(context) { + return { + Program(node) { + context.report({ node, message: "bad" }); } - }); + }; + } + + ruleTester.run("function-style-rule", functionStyleRule, { + valid: [], + invalid: [ + { code: "var foo = bar;", errors: 1 } + ] }); - } + + assert.strictEqual(processStub.callCount, 1, "calls `process.emitWarning()` once"); + assert.deepStrictEqual( + processStub.getCall(0).args, + [ + "\"function-style-rule\" rule is using the deprecated function-style format and will stop working in ESLint v9. Please use object-style format: https://eslint.org/docs/developer-guide/working-with-rules", + "DeprecationWarning" + ] + ); + }); + + it("should log a deprecation warning when meta is not defined for the rule", () => { + ruleTester.run("rule-with-no-meta-1", ruleWithNoMeta, { + valid: [], + invalid: [ + { code: "var foo = bar;", options: [{ foo: true }], errors: 1 } + ] + }); + + assert.strictEqual(processStub.callCount, 1, "calls `process.emitWarning()` once"); + assert.deepStrictEqual( + processStub.getCall(0).args, + [ + "\"rule-with-no-meta-1\" rule has options but is missing the \"meta.schema\" property and will stop working in ESLint v9. Please add a schema: https://eslint.org/docs/developer-guide/working-with-rules#options-schemas", + "DeprecationWarning" + ] + ); + }); + + it("should log a deprecation warning when schema is not defined for the rule", () => { + ruleTester.run("rule-with-no-schema-1", ruleWithNoSchema, { + valid: [], + invalid: [ + { code: "var foo = bar;", options: [{ foo: true }], errors: 1 } + ] + }); + + assert.strictEqual(processStub.callCount, 1, "calls `process.emitWarning()` once"); + assert.deepStrictEqual( + processStub.getCall(0).args, + [ + "\"rule-with-no-schema-1\" rule has options but is missing the \"meta.schema\" property and will stop working in ESLint v9. Please add a schema: https://eslint.org/docs/developer-guide/working-with-rules#options-schemas", + "DeprecationWarning" + ] + ); + }); + + it("should log a deprecation warning when schema is `undefined`", () => { + const ruleWithUndefinedSchema = { + meta: { + type: "problem", + // eslint-disable-next-line no-undefined -- intentioally added for test case + schema: undefined + }, + create(context) { + return { + Program(node) { + context.report({ node, message: "bad" }); + } + }; + } + }; + + ruleTester.run("rule-with-undefined-schema", ruleWithUndefinedSchema, { + valid: [], + invalid: [ + { code: "var foo = bar;", options: [{ foo: true }], errors: 1 } + ] + }); + + assert.strictEqual(processStub.callCount, 1, "calls `process.emitWarning()` once"); + assert.deepStrictEqual( + processStub.getCall(0).args, + [ + "\"rule-with-undefined-schema\" rule has options but is missing the \"meta.schema\" property and will stop working in ESLint v9. Please add a schema: https://eslint.org/docs/developer-guide/working-with-rules#options-schemas", + "DeprecationWarning" + ] + ); + }); + + it("should log a deprecation warning when schema is `null`", () => { + const ruleWithNullSchema = { + meta: { + type: "problem", + schema: null + }, + create(context) { + return { + Program(node) { + context.report({ node, message: "bad" }); + } + }; + } + }; + + ruleTester.run("rule-with-null-schema", ruleWithNullSchema, { + valid: [], + invalid: [ + { code: "var foo = bar;", options: [{ foo: true }], errors: 1 } + ] + }); + + assert.strictEqual(processStub.callCount, 1, "calls `process.emitWarning()` once"); + assert.deepStrictEqual( + processStub.getCall(0).args, + [ + "\"rule-with-null-schema\" rule has options but is missing the \"meta.schema\" property and will stop working in ESLint v9. Please add a schema: https://eslint.org/docs/developer-guide/working-with-rules#options-schemas", + "DeprecationWarning" + ] + ); + }); + + it("should not log a deprecation warning when schema is an empty array", () => { + const ruleWithEmptySchema = { + meta: { + type: "suggestion", + schema: [] + }, + create(context) { + return { + Program(node) { + context.report({ node, message: "bad" }); + } + }; + } + }; + + ruleTester.run("rule-with-no-options", ruleWithEmptySchema, { + valid: [], + invalid: [{ code: "var foo = bar;", errors: 1 }] + }); + + assert.strictEqual(processStub.callCount, 0, "never calls `process.emitWarning()`"); + }); + + it("When the rule is an object-style rule, the legacy rule API warning is not emitted", () => { + ruleTester.run("rule-with-no-schema-2", ruleWithNoSchema, { + valid: [], + invalid: [ + { code: "var foo = bar;", errors: 1 } + ] + }); + + assert.strictEqual(processStub.callCount, 0, "never calls `process.emitWarning()`"); + }); + + it("When the rule has meta.schema and there are test cases with options, the missing schema warning is not emitted", () => { + const ruleWithSchema = { + meta: { + type: "suggestion", + schema: [{ + type: "boolean" + }] + }, + create(context) { + return { + Program(node) { + context.report({ node, message: "bad" }); + } + }; + } + }; + + ruleTester.run("rule-with-schema", ruleWithSchema, { + valid: [], + invalid: [ + { code: "var foo = bar;", options: [true], errors: 1 } + ] + }); + + assert.strictEqual(processStub.callCount, 0, "never calls `process.emitWarning()`"); + }); + + it("When the rule does not have meta, but there are no test cases with options, the missing schema warning is not emitted", () => { + ruleTester.run("rule-with-no-meta-2", ruleWithNoMeta, { + valid: [], + invalid: [ + { code: "var foo = bar;", errors: 1 } + ] + }); + + assert.strictEqual(processStub.callCount, 0, "never calls `process.emitWarning()`"); + }); + + it("When the rule has meta without meta.schema, but there are no test cases with options, the missing schema warning is not emitted", () => { + ruleTester.run("rule-with-no-schema-3", ruleWithNoSchema, { + valid: [], + invalid: [ + { code: "var foo = bar;", errors: 1 } + ] + }); + + assert.strictEqual(processStub.callCount, 0, "never calls `process.emitWarning()`"); + }); + it("When the rule has meta without meta.schema, and some test cases have options property but it's an empty array, the missing schema warning is not emitted", () => { + ruleTester.run("rule-with-no-schema-4", ruleWithNoSchema, { + valid: [], + invalid: [ + { code: "var foo = bar;", options: [], errors: 1 } + ] + }); + + assert.strictEqual(processStub.callCount, 0, "never calls `process.emitWarning()`"); + }); + }); + + /** + * Asserts that a particular value will be emitted from an EventEmitter. + * @param {EventEmitter} emitter The emitter that should emit a value + * @param {string} emitType The type of emission to listen for + * @param {any} expectedValue The value that should be emitted + * @returns {Promise<void>} A Promise that fulfills if the value is emitted, and rejects if something else is emitted. + * The Promise will be indefinitely pending if no value is emitted. + */ + function assertEmitted(emitter, emitType, expectedValue) { + return new Promise((resolve, reject) => { + emitter.once(emitType, emittedValue => { + if (emittedValue === expectedValue) { + resolve(); + } else { + reject(new Error(`Expected ${expectedValue} to be emitted but ${emittedValue} was emitted instead.`)); + } + }); + }); + } + + describe("naming test cases", () => { it("should use the first argument as the name of the test suite", () => { const assertion = assertEmitted(ruleTesterTestEmitter, "describe", "this-is-a-rule-name"); @@ -2441,6 +2633,65 @@ describe("RuleTester", () => { return assertion; }); + + it('should throw if "name" property is not a string', () => { + assert.throws(() => { + ruleTester.run("foo", require("../../fixtures/testers/rule-tester/no-var"), { + valid: [{ code: "foo", name: 123 }], + invalid: [{ code: "foo" }] + + }); + }, /Optional test case property 'name' must be a string/u); + + assert.throws(() => { + ruleTester.run("foo", require("../../fixtures/testers/rule-tester/no-var"), { + valid: ["foo"], + invalid: [{ code: "foo", name: 123 }] + }); + }, /Optional test case property 'name' must be a string/u); + }); + + it('should throw if "code" property is not a string', () => { + assert.throws(() => { + ruleTester.run("foo", require("../../fixtures/testers/rule-tester/no-var"), { + valid: [{ code: 123 }], + invalid: [{ code: "foo" }] + + }); + }, /Test case must specify a string value for 'code'/u); + + assert.throws(() => { + ruleTester.run("foo", require("../../fixtures/testers/rule-tester/no-var"), { + valid: [123], + invalid: [{ code: "foo" }] + + }); + }, /Test case must specify a string value for 'code'/u); + + assert.throws(() => { + ruleTester.run("foo", require("../../fixtures/testers/rule-tester/no-var"), { + valid: ["foo"], + invalid: [{ code: 123 }] + }); + }, /Test case must specify a string value for 'code'/u); + }); + + it('should throw if "code" property is missing', () => { + assert.throws(() => { + ruleTester.run("foo", require("../../fixtures/testers/rule-tester/no-var"), { + valid: [{ }], + invalid: [{ code: "foo" }] + + }); + }, /Test case must specify a string value for 'code'/u); + + assert.throws(() => { + ruleTester.run("foo", require("../../fixtures/testers/rule-tester/no-var"), { + valid: ["foo"], + invalid: [{ }] + }); + }, /Test case must specify a string value for 'code'/u); + }); }); // https://github.com/eslint/eslint/issues/11615 @@ -2569,4 +2820,50 @@ describe("RuleTester", () => { }); }); + describe("Subclassing", () => { + + it("should allow subclasses to set the describe/it/itOnly statics and should correctly use those values", () => { + const assertionDescribe = assertEmitted(ruleTesterTestEmitter, "custom describe", "this-is-a-rule-name"); + const assertionIt = assertEmitted(ruleTesterTestEmitter, "custom it", "valid(code);"); + const assertionItOnly = assertEmitted(ruleTesterTestEmitter, "custom itOnly", "validOnly(code);"); + + /** + * Subclass for testing + */ + class RuleTesterSubclass extends RuleTester { } + RuleTesterSubclass.describe = function(text, method) { + ruleTesterTestEmitter.emit("custom describe", text, method); + return method.call(this); + }; + RuleTesterSubclass.it = function(text, method) { + ruleTesterTestEmitter.emit("custom it", text, method); + return method.call(this); + }; + RuleTesterSubclass.itOnly = function(text, method) { + ruleTesterTestEmitter.emit("custom itOnly", text, method); + return method.call(this); + }; + + const ruleTesterSubclass = new RuleTesterSubclass(); + + ruleTesterSubclass.run("this-is-a-rule-name", require("../../fixtures/testers/rule-tester/no-var"), { + valid: [ + "valid(code);", + { + code: "validOnly(code);", + only: true + } + ], + invalid: [] + }); + + return Promise.all([ + assertionDescribe, + assertionIt, + assertionItOnly + ]); + }); + + }); + }); diff --git a/eslint/tests/lib/rules/array-bracket-newline.js b/eslint/tests/lib/rules/array-bracket-newline.js index 90ee821..3f2b66f 100644 --- a/eslint/tests/lib/rules/array-bracket-newline.js +++ b/eslint/tests/lib/rules/array-bracket-newline.js @@ -440,7 +440,7 @@ ruleTester.run("array-bracket-newline", rule, { invalid: [ - // default : { mutliline : true} + // default : { multiline : true} { code: `var foo = [ [1,2] diff --git a/eslint/tests/lib/rules/arrow-parens.js b/eslint/tests/lib/rules/arrow-parens.js index d2f32a7..c7af7f6 100644 --- a/eslint/tests/lib/rules/arrow-parens.js +++ b/eslint/tests/lib/rules/arrow-parens.js @@ -46,7 +46,7 @@ const valid = [ { code: "a.then((foo) => {});", options: ["always"] }, { code: "a.then((foo) => { if (true) {}; });", options: ["always"] }, { code: "a.then(async (foo) => { if (true) {}; });", options: ["always"], parserOptions: { ecmaVersion: 8 } }, - { code: "(a: T) => a", options: ["always"], parser: parser("identifer-type") }, + { code: "(a: T) => a", options: ["always"], parser: parser("identifier-type") }, { code: "(a): T => a", options: ["always"], parser: parser("return-type") }, // "as-needed" @@ -64,7 +64,7 @@ const valid = [ { code: "async a => a", options: ["as-needed"], parserOptions: { ecmaVersion: 8 } }, { code: "async ([a, b]) => {}", options: ["as-needed"], parserOptions: { ecmaVersion: 8 } }, { code: "async (a, b) => {}", options: ["as-needed"], parserOptions: { ecmaVersion: 8 } }, - { code: "(a: T) => a", options: ["as-needed"], parser: parser("identifer-type") }, + { code: "(a: T) => a", options: ["as-needed"], parser: parser("identifier-type") }, { code: "(a): T => a", options: ["as-needed"], parser: parser("return-type") }, // "as-needed", { "requireForBlockBody": true } @@ -83,7 +83,7 @@ const valid = [ { code: "a => ({})", options: ["as-needed", { requireForBlockBody: true }] }, { code: "async a => ({})", options: ["as-needed", { requireForBlockBody: true }], parserOptions: { ecmaVersion: 8 } }, { code: "async a => a", options: ["as-needed", { requireForBlockBody: true }], parserOptions: { ecmaVersion: 8 } }, - { code: "(a: T) => a", options: ["as-needed", { requireForBlockBody: true }], parser: parser("identifer-type") }, + { code: "(a: T) => a", options: ["as-needed", { requireForBlockBody: true }], parser: parser("identifier-type") }, { code: "(a): T => a", options: ["as-needed", { requireForBlockBody: true }], parser: parser("return-type") }, { code: "const f = (/** @type {number} */a/**hello*/) => a + a;", diff --git a/eslint/tests/lib/rules/camelcase.js b/eslint/tests/lib/rules/camelcase.js index 514eb85..f634c71 100644 --- a/eslint/tests/lib/rules/camelcase.js +++ b/eslint/tests/lib/rules/camelcase.js @@ -164,11 +164,32 @@ ruleTester.run("camelcase", rule, { options: [{ ignoreImports: true }], parserOptions: { ecmaVersion: 6, sourceType: "module" } }, + { + code: "import { snake_cased as snake_cased } from 'mod'", + options: [{ ignoreImports: true }], + parserOptions: { ecmaVersion: 2022, sourceType: "module" } + }, + { + code: "import { 'snake_cased' as snake_cased } from 'mod'", + options: [{ ignoreImports: true }], + parserOptions: { ecmaVersion: 2022, sourceType: "module" } + }, { code: "import { camelCased } from 'mod'", options: [{ ignoreImports: false }], parserOptions: { ecmaVersion: 6, sourceType: "module" } }, + + // this rule doesn't apply to quoted module export names, as it doesn't apply to quoted property names. + { + code: "export { a as 'snake_cased' } from 'mod'", + parserOptions: { ecmaVersion: 2022, sourceType: "module" } + }, + { + code: "export * as 'snake_cased' from 'mod'", + parserOptions: { ecmaVersion: 2022, sourceType: "module" } + }, + { code: "var _camelCased = aGlobalVariable", options: [{ ignoreGlobals: false }], @@ -386,6 +407,35 @@ ruleTester.run("camelcase", rule, { code: "class C { snake_case; #snake_case; #snake_case2() {} }", options: [{ properties: "never" }], parserOptions: { ecmaVersion: 2022 } + }, + + // Combinations of `properties` and `ignoreDestructuring` + { + code: ` + const { some_property } = obj; + + const bar = { some_property }; + + obj.some_property = 10; + + const xyz = { some_property: obj.some_property }; + + const foo = ({ some_property }) => { + console.log(some_property) + }; + `, + options: [{ properties: "never", ignoreDestructuring: true }], + parserOptions: { ecmaVersion: 2022 } + }, + + // https://github.com/eslint/eslint/issues/15572 + { + code: ` + const { some_property } = obj; + doSomething({ some_property }); + `, + options: [{ properties: "never", ignoreDestructuring: true }], + parserOptions: { ecmaVersion: 2022 } } ], invalid: [ @@ -668,6 +718,29 @@ ruleTester.run("camelcase", rule, { } ] }, + { + code: "import { 'snake_cased' as snake_cased } from 'mod'", + parserOptions: { ecmaVersion: 2022, sourceType: "module" }, + errors: [ + { + messageId: "notCamelCase", + data: { name: "snake_cased" }, + type: "Identifier" + } + ] + }, + { + code: "import { 'snake_cased' as another_snake_cased } from 'mod'", + options: [{ ignoreImports: true }], + parserOptions: { ecmaVersion: 2022, sourceType: "module" }, + errors: [ + { + messageId: "notCamelCase", + data: { name: "another_snake_cased" }, + type: "Identifier" + } + ] + }, { code: "import { camelCased, no_camelcased } from \"external-module\";", parserOptions: { ecmaVersion: 6, sourceType: "module" }, @@ -1372,6 +1445,78 @@ ruleTester.run("camelcase", rule, { options: [{ properties: "always" }], parserOptions: { ecmaVersion: 2022 }, errors: [{ messageId: "notCamelCasePrivate", data: { name: "snake_case" } }] + }, + + // Combinations of `properties` and `ignoreDestructuring` + { + code: ` + const { some_property } = obj; + doSomething({ some_property }); + `, + options: [{ properties: "always", ignoreDestructuring: true }], + parserOptions: { ecmaVersion: 2022 }, + errors: [ + { + messageId: "notCamelCase", + data: { name: "some_property" }, + line: 3, + column: 27 + } + ] + }, + { + code: ` + const { some_property } = obj; + doSomething({ some_property }); + doSomething({ [some_property]: "bar" }); + `, + options: [{ properties: "never", ignoreDestructuring: true }], + parserOptions: { ecmaVersion: 2022 }, + errors: [ + { + messageId: "notCamelCase", + data: { name: "some_property" }, + line: 4, + column: 28 + } + ] + }, + { + code: ` + const { some_property } = obj; + + const bar = { some_property }; + + obj.some_property = 10; + + const xyz = { some_property: obj.some_property }; + + const foo = ({ some_property }) => { + console.log(some_property) + }; + `, + options: [{ properties: "always", ignoreDestructuring: true }], + parserOptions: { ecmaVersion: 2022 }, + errors: [ + { + messageId: "notCamelCase", + data: { name: "some_property" }, + line: 4, + column: 27 + }, + { + messageId: "notCamelCase", + data: { name: "some_property" }, + line: 6, + column: 17 + }, + { + messageId: "notCamelCase", + data: { name: "some_property" }, + line: 8, + column: 27 + } + ] } ] }); diff --git a/eslint/tests/lib/rules/comma-dangle.js b/eslint/tests/lib/rules/comma-dangle.js index 2ef7a00..b02a74a 100644 --- a/eslint/tests/lib/rules/comma-dangle.js +++ b/eslint/tests/lib/rules/comma-dangle.js @@ -10,6 +10,7 @@ //------------------------------------------------------------------------------ const path = require("path"), + { unIndent } = require("../../_utils"), rule = require("../../../lib/rules/comma-dangle"), { RuleTester } = require("../../../lib/rule-tester"); @@ -35,6 +36,29 @@ function parser(name) { const ruleTester = new RuleTester(); +ruleTester.defineRule("add-named-import", { + meta: { + fixable: "code" + }, + create(context) { + return { + ImportDeclaration(node) { + const sourceCode = context.getSourceCode(); + const closingBrace = sourceCode.getLastToken(node, token => token.value === "}"); + const addComma = sourceCode.getTokenBefore(closingBrace).value !== ","; + + context.report({ + message: "Add I18nManager.", + node, + fix(fixer) { + return fixer.insertTextBefore(closingBrace, `${addComma ? "," : ""}I18nManager`); + } + }); + } + }; + } +}); + ruleTester.run("comma-dangle", rule, { valid: [ "var foo = { bar: 'baz' }", @@ -1766,6 +1790,66 @@ let d = 0;export {d,}; output: "foo(a)", parserOptions: { ecmaVersion: 8 }, errors: [{ messageId: "unexpected" }] + }, + + // https://github.com/eslint/eslint/issues/15660 + { + code: unIndent` + /*eslint add-named-import:1*/ + import { + StyleSheet, + View, + TextInput, + ImageBackground, + Image, + TouchableOpacity, + SafeAreaView + } from 'react-native'; + `, + output: unIndent` + /*eslint add-named-import:1*/ + import { + StyleSheet, + View, + TextInput, + ImageBackground, + Image, + TouchableOpacity, + SafeAreaView, + } from 'react-native'; + `, + options: [{ imports: "always-multiline" }], + parserOptions: { ecmaVersion: 6, sourceType: "module" }, + errors: 2 + }, + { + code: unIndent` + /*eslint add-named-import:1*/ + import { + StyleSheet, + View, + TextInput, + ImageBackground, + Image, + TouchableOpacity, + SafeAreaView, + } from 'react-native'; + `, + output: unIndent` + /*eslint add-named-import:1*/ + import { + StyleSheet, + View, + TextInput, + ImageBackground, + Image, + TouchableOpacity, + SafeAreaView + } from 'react-native'; + `, + options: [{ imports: "never" }], + parserOptions: { ecmaVersion: 6, sourceType: "module" }, + errors: 2 } ] }); diff --git a/eslint/tests/lib/rules/comma-spacing.js b/eslint/tests/lib/rules/comma-spacing.js index df7dac6..a3b23b6 100644 --- a/eslint/tests/lib/rules/comma-spacing.js +++ b/eslint/tests/lib/rules/comma-spacing.js @@ -27,19 +27,36 @@ ruleTester.run("comma-spacing", rule, { "myfunc(404, // comment\n true, /* bla bla bla */ 'hello');", { code: "myfunc(404, // comment\n true,/* bla bla bla */ 'hello');", options: [{ before: false, after: false }] }, "var a = 1, b = 2;", + "var arr = [,];", "var arr = [, ];", + "var arr = [ ,];", + "var arr = [ , ];", + "var arr = [1,];", "var arr = [1, ];", "var arr = [, 2];", + "var arr = [ , 2];", "var arr = [1, 2];", + "var arr = [,,];", + "var arr = [ ,,];", + "var arr = [, ,];", + "var arr = [,, ];", + "var arr = [ , ,];", + "var arr = [ ,, ];", "var arr = [, , ];", + "var arr = [ , , ];", "var arr = [1, , ];", "var arr = [, 2, ];", "var arr = [, , 3];", + "var arr = [,, 3];", "var arr = [1, 2, ];", "var arr = [, 2, 3];", "var arr = [1, , 3];", "var arr = [1, 2, 3];", + "var arr = [1, 2, 3,];", + "var arr = [1, 2, 3, ];", "var obj = {'foo':'bar', 'baz':'qur'};", + "var obj = {'foo':'bar', 'baz':'qur', };", + "var obj = {'foo':'bar', 'baz':'qur',};", "var obj = {'foo':'bar', 'baz':\n'qur'};", "var obj = {'foo':\n'bar', 'baz':\n'qur'};", "function foo(a, b){}", @@ -74,20 +91,34 @@ ruleTester.run("comma-spacing", rule, { { code: "var a = 1 ,b = 2;", options: [{ before: true, after: false }] }, { code: "function foo(a ,b){}", options: [{ before: true, after: false }] }, { code: "var arr = [,];", options: [{ before: true, after: false }] }, + { code: "var arr = [ ,];", options: [{ before: true, after: false }] }, + { code: "var arr = [, ];", options: [{ before: true, after: false }] }, + { code: "var arr = [ , ];", options: [{ before: true, after: false }] }, { code: "var arr = [1 ,];", options: [{ before: true, after: false }] }, + { code: "var arr = [1 , ];", options: [{ before: true, after: false }] }, { code: "var arr = [ ,2];", options: [{ before: true, after: false }] }, { code: "var arr = [1 ,2];", options: [{ before: true, after: false }] }, { code: "var arr = [,,];", options: [{ before: true, after: false }] }, + { code: "var arr = [ ,,];", options: [{ before: true, after: false }] }, + { code: "var arr = [, ,];", options: [{ before: true, after: false }] }, + { code: "var arr = [,, ];", options: [{ before: true, after: false }] }, + { code: "var arr = [ , ,];", options: [{ before: true, after: false }] }, + { code: "var arr = [ ,, ];", options: [{ before: true, after: false }] }, + { code: "var arr = [, , ];", options: [{ before: true, after: false }] }, + { code: "var arr = [ , , ];", options: [{ before: true, after: false }] }, { code: "var arr = [1 , ,];", options: [{ before: true, after: false }] }, { code: "var arr = [ ,2 ,];", options: [{ before: true, after: false }] }, + { code: "var arr = [,2 , ];", options: [{ before: true, after: false }] }, { code: "var arr = [ , ,3];", options: [{ before: true, after: false }] }, { code: "var arr = [1 ,2 ,];", options: [{ before: true, after: false }] }, { code: "var arr = [ ,2 ,3];", options: [{ before: true, after: false }] }, { code: "var arr = [1 , ,3];", options: [{ before: true, after: false }] }, { code: "var arr = [1 ,2 ,3];", options: [{ before: true, after: false }] }, { code: "var obj = {'foo':'bar' , 'baz':'qur'};", options: [{ before: true, after: true }] }, + { code: "var obj = {'foo':'bar' ,'baz':'qur' , };", options: [{ before: true, after: false }] }, { code: "var a = 1 , b = 2;", options: [{ before: true, after: true }] }, { code: "var arr = [, ];", options: [{ before: true, after: true }] }, + { code: "var arr = [,,];", options: [{ before: true, after: true }] }, { code: "var arr = [1 , ];", options: [{ before: true, after: true }] }, { code: "var arr = [ , 2];", options: [{ before: true, after: true }] }, { code: "var arr = [1 , 2];", options: [{ before: true, after: true }] }, @@ -107,6 +138,7 @@ ruleTester.run("comma-spacing", rule, { { code: "var arr = [ ,2];", options: [{ before: false, after: false }] }, { code: "var arr = [1,2];", options: [{ before: false, after: false }] }, { code: "var arr = [,,];", options: [{ before: false, after: false }] }, + { code: "var arr = [ , , ];", options: [{ before: false, after: false }] }, { code: "var arr = [ ,,];", options: [{ before: false, after: false }] }, { code: "var arr = [1,,];", options: [{ before: false, after: false }] }, { code: "var arr = [,2,];", options: [{ before: false, after: false }] }, @@ -120,12 +152,22 @@ ruleTester.run("comma-spacing", rule, { { code: "var a; console.log(`${a}`, \"a\");", parserOptions: { ecmaVersion: 6 } }, { code: "var [a, b] = [1, 2];", parserOptions: { ecmaVersion: 6 } }, { code: "var [a, b, ] = [1, 2];", parserOptions: { ecmaVersion: 6 } }, + { code: "var [a, b,] = [1, 2];", parserOptions: { ecmaVersion: 6 } }, { code: "var [a, , b] = [1, 2, 3];", parserOptions: { ecmaVersion: 6 } }, + { code: "var [a,, b] = [1, 2, 3];", parserOptions: { ecmaVersion: 6 } }, { code: "var [ , b] = a;", parserOptions: { ecmaVersion: 6 } }, { code: "var [, b] = a;", parserOptions: { ecmaVersion: 6 } }, + { code: "var { a,} = a;", parserOptions: { ecmaVersion: 6 } }, + { code: "import { a,} from 'mod';", parserOptions: { ecmaVersion: 6, sourceType: "module" } }, { code: "<a>,</a>", parserOptions: { ecmaVersion: 6, ecmaFeatures: { jsx: true } } }, { code: "<a> , </a>", parserOptions: { ecmaVersion: 6, ecmaFeatures: { jsx: true } } }, - { code: "<a>Hello, world</a>", options: [{ before: true, after: false }], parserOptions: { ecmaVersion: 6, ecmaFeatures: { jsx: true } } } + { code: "<a>Hello, world</a>", options: [{ before: true, after: false }], parserOptions: { ecmaVersion: 6, ecmaFeatures: { jsx: true } } }, + + // For backwards compatibility. Ignoring spacing between a comment and comma of a null element was possibly unintentional. + { code: "[a, /**/ , ]", options: [{ before: false, after: true }] }, + { code: "[a , /**/, ]", options: [{ before: true, after: true }] }, + { code: "[a, /**/ , ] = foo", options: [{ before: false, after: true }], parserOptions: { ecmaVersion: 6 } }, + { code: "[a , /**/, ] = foo", options: [{ before: true, after: true }], parserOptions: { ecmaVersion: 6 } } ], invalid: [ @@ -198,17 +240,6 @@ ruleTester.run("comma-spacing", rule, { } ] }, - { - code: "var arr = [1 , ];", - output: "var arr = [1 ,];", - options: [{ before: true, after: false }], - errors: [ - { - message: "There should be no space after ','.", - type: "Punctuator" - } - ] - }, { code: "var arr = [1 ,2];", output: "var arr = [1, 2];", diff --git a/eslint/tests/lib/rules/computed-property-spacing.js b/eslint/tests/lib/rules/computed-property-spacing.js index eff0c0a..35533d9 100644 --- a/eslint/tests/lib/rules/computed-property-spacing.js +++ b/eslint/tests/lib/rules/computed-property-spacing.js @@ -265,7 +265,30 @@ ruleTester.run("computed-property-spacing", rule, { ].join("\n"), options: ["never"], parserOptions: { ecmaVersion: 6 } + }, + + // Destructuring Assignment + { + code: "const { [a]: someProp } = obj;", + options: ["never"], + parserOptions: { ecmaVersion: 6 } + }, + { + code: "({ [a]: someProp } = obj);", + options: ["never"], + parserOptions: { ecmaVersion: 6 } + }, + { + code: "const { [ a ]: someProp } = obj;", + options: ["always"], + parserOptions: { ecmaVersion: 6 } + }, + { + code: "({ [ a ]: someProp } = obj);", + options: ["always"], + parserOptions: { ecmaVersion: 6 } } + ], invalid: [ @@ -2062,6 +2085,66 @@ ruleTester.run("computed-property-spacing", rule, { { messageId: "unexpectedSpaceAfter", data: { tokenValue: "[" } }, { messageId: "unexpectedSpaceBefore", data: { tokenValue: "]" } } ] + }, + + // Destructuring Assignment + { + code: "const { [ a]: someProp } = obj;", + output: "const { [a]: someProp } = obj;", + options: ["never"], + parserOptions: { ecmaVersion: 2022 }, + errors: [ + { messageId: "unexpectedSpaceAfter", data: { tokenValue: "[" } } + ] + }, + { + code: "const { [a ]: someProp } = obj;", + output: "const { [a]: someProp } = obj;", + options: ["never"], + parserOptions: { ecmaVersion: 2022 }, + errors: [ + { messageId: "unexpectedSpaceBefore", data: { tokenValue: "]" } } + ] + }, + { + code: "const { [ a ]: someProp } = obj;", + output: "const { [a]: someProp } = obj;", + options: ["never"], + parserOptions: { ecmaVersion: 2022 }, + errors: [ + { messageId: "unexpectedSpaceAfter", data: { tokenValue: "[" } }, + { messageId: "unexpectedSpaceBefore", data: { tokenValue: "]" } } + ] + }, + { + code: "({ [ a ]: someProp } = obj);", + output: "({ [a]: someProp } = obj);", + options: ["never"], + parserOptions: { ecmaVersion: 2022 }, + errors: [ + { messageId: "unexpectedSpaceAfter", data: { tokenValue: "[" } }, + { messageId: "unexpectedSpaceBefore", data: { tokenValue: "]" } } + ] + }, + { + code: "const { [a]: someProp } = obj;", + output: "const { [ a ]: someProp } = obj;", + options: ["always"], + parserOptions: { ecmaVersion: 2022 }, + errors: [ + { messageId: "missingSpaceAfter", data: { tokenValue: "[" } }, + { messageId: "missingSpaceBefore", data: { tokenValue: "]" } } + ] + }, + { + code: "({ [a]: someProp } = obj);", + output: "({ [ a ]: someProp } = obj);", + options: ["always"], + parserOptions: { ecmaVersion: 2022 }, + errors: [ + { messageId: "missingSpaceAfter", data: { tokenValue: "[" } }, + { messageId: "missingSpaceBefore", data: { tokenValue: "]" } } + ] } ] }); diff --git a/eslint/tests/lib/rules/function-paren-newline.js b/eslint/tests/lib/rules/function-paren-newline.js index 0c9feb7..a8c7cc8 100644 --- a/eslint/tests/lib/rules/function-paren-newline.js +++ b/eslint/tests/lib/rules/function-paren-newline.js @@ -11,6 +11,9 @@ const rule = require("../../../lib/rules/function-paren-newline"); const { RuleTester } = require("../../../lib/rule-tester"); +const { unIndent } = require("../../_utils"); +const fixtureParser = require("../../fixtures/fixture-parser"); + //------------------------------------------------------------------------------ // Tests @@ -27,6 +30,7 @@ const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 6 } }); ruleTester.run("function-paren-newline", rule, { valid: [ + "new new Foo();", // multiline option (default) "function baz(foo, bar) {}", @@ -583,6 +587,22 @@ ruleTester.run("function-paren-newline", rule, { code: "import(\n source\n)", options: ["consistent"], parserOptions: { ecmaVersion: 2020 } + }, + + // https://github.com/eslint/eslint/issues/15091#issuecomment-975605821 + { + code: unIndent` + const method6 = ( + abc: number, + def: () => void, + ): [ + string, + () => void + ] => [\`a\${abc}\`, def]; + method6(3, () => {}); + `, + options: ["multiline"], + parser: fixtureParser("function-paren-newline", "arrow-function-return-type") } ], @@ -1155,6 +1175,18 @@ ruleTester.run("function-paren-newline", rule, { options: ["never"], errors: [LEFT_UNEXPECTED_ERROR] }, + { + code: ` + new new C()( + ); + `, + output: ` + new new C()(); + `, + options: ["never"], + errors: [LEFT_UNEXPECTED_ERROR, RIGHT_UNEXPECTED_ERROR] + }, + { code: ` function baz( @@ -1437,6 +1469,31 @@ ruleTester.run("function-paren-newline", rule, { options: ["consistent"], parserOptions: { ecmaVersion: 2020 }, errors: [RIGHT_MISSING_ERROR] + }, + + // https://github.com/eslint/eslint/issues/15091#issuecomment-975605821 + { + code: unIndent` + const method6 = ( + abc: number, + def: () => void, + ): [ + string, + () => void + ] => [\`a\${abc}\`, def]; + method6(3, () => {}); + `, + output: unIndent` + const method6 = (abc: number, + def: () => void,): [ + string, + () => void + ] => [\`a\${abc}\`, def]; + method6(3, () => {}); + `, + options: ["never"], + parser: fixtureParser("function-paren-newline", "arrow-function-return-type"), + errors: [LEFT_UNEXPECTED_ERROR, RIGHT_UNEXPECTED_ERROR] } ] }); diff --git a/eslint/tests/lib/rules/id-match.js b/eslint/tests/lib/rules/id-match.js index d1fad2e..7e469bd 100644 --- a/eslint/tests/lib/rules/id-match.js +++ b/eslint/tests/lib/rules/id-match.js @@ -185,6 +185,71 @@ ruleTester.run("id-match", rule, { }] }, + // Should not report for global references - https://github.com/eslint/eslint/issues/15395 + { + code: ` + const foo = Object.keys(bar); + const a = Array.from(b); + const bar = () => Array; + `, + options: ["^\\$?[a-z]+([A-Z0-9][a-z0-9]+)*$", { + properties: true + }], + parserOptions: { ecmaVersion: 2022 } + }, + { + code: ` + const foo = { + foo_one: 1, + bar_one: 2, + fooBar: 3 + }; + `, + options: ["^[^_]+$", { + properties: false + }], + parserOptions: { ecmaVersion: 2022 } + }, + { + code: ` + const foo = { + foo_one: 1, + bar_one: 2, + fooBar: 3 + }; + `, + options: ["^[^_]+$", { + onlyDeclarations: true + }], + parserOptions: { ecmaVersion: 2022 } + }, + { + code: ` + const foo = { + foo_one: 1, + bar_one: 2, + fooBar: 3 + }; + `, + options: ["^[^_]+$", { + properties: false, + onlyDeclarations: false + }], + parserOptions: { ecmaVersion: 2022 } + }, + { + code: ` + const foo = { + [a]: 1, + }; + `, + options: ["^[^a]", { + properties: true, + onlyDeclarations: true + }], + parserOptions: { ecmaVersion: 2022 } + }, + // Class Methods { code: "class x { foo() {} }", @@ -641,6 +706,76 @@ ruleTester.run("id-match", rule, { ] }, + // https://github.com/eslint/eslint/issues/15395 + { + code: ` + const foo_variable = 1; + class MyClass { + } + let a = new MyClass(); + let b = {id: 1}; + let c = Object.keys(b); + let d = Array.from(b); + let e = (Object) => Object.keys(obj, prop); // not global Object + let f = (Array) => Array.from(obj, prop); // not global Array + foo.Array = 5; // not global Array + `, + options: ["^\\$?[a-z]+([A-Z0-9][a-z0-9]+)*$", { + properties: true + }], + parserOptions: { ecmaVersion: 6 }, + errors: [ + { + message: "Identifier 'foo_variable' does not match the pattern '^\\$?[a-z]+([A-Z0-9][a-z0-9]+)*$'.", + type: "Identifier", + line: 2, + column: 19 + }, + { + message: "Identifier 'MyClass' does not match the pattern '^\\$?[a-z]+([A-Z0-9][a-z0-9]+)*$'.", + type: "Identifier", + line: 3, + column: 19 + }, + + // let e = (Object) => Object.keys(obj, prop) + { + message: "Identifier 'Object' does not match the pattern '^\\$?[a-z]+([A-Z0-9][a-z0-9]+)*$'.", + type: "Identifier", + line: 9, + column: 22 + }, + { + message: "Identifier 'Object' does not match the pattern '^\\$?[a-z]+([A-Z0-9][a-z0-9]+)*$'.", + type: "Identifier", + line: 9, + column: 33 + }, + + // let f =(Array) => Array.from(obj, prop); + { + message: "Identifier 'Array' does not match the pattern '^\\$?[a-z]+([A-Z0-9][a-z0-9]+)*$'.", + type: "Identifier", + line: 10, + column: 22 + }, + { + message: "Identifier 'Array' does not match the pattern '^\\$?[a-z]+([A-Z0-9][a-z0-9]+)*$'.", + type: "Identifier", + line: 10, + column: 32 + }, + + // foo.Array = 5; + { + message: "Identifier 'Array' does not match the pattern '^\\$?[a-z]+([A-Z0-9][a-z0-9]+)*$'.", + type: "Identifier", + line: 11, + column: 17 + } + ] + }, + // Class Methods { code: "class x { _foo() {} }", @@ -691,7 +826,94 @@ ruleTester.run("id-match", rule, { type: "PrivateIdentifier" } ] - } + }, + + // https://github.com/eslint/eslint/issues/15123 + { + code: ` + const foo = { + foo_one: 1, + bar_one: 2, + fooBar: 3 + }; + `, + options: ["^[^_]+$", { + properties: true, + onlyDeclarations: true + }], + parserOptions: { ecmaVersion: 2022 }, + errors: [ + { + message: "Identifier 'foo_one' does not match the pattern '^[^_]+$'.", + type: "Identifier" + }, + { + message: "Identifier 'bar_one' does not match the pattern '^[^_]+$'.", + type: "Identifier" + } + ] + }, + { + code: ` + const foo = { + foo_one: 1, + bar_one: 2, + fooBar: 3 + }; + `, + options: ["^[^_]+$", { + properties: true, + onlyDeclarations: false + }], + parserOptions: { ecmaVersion: 2022 }, + errors: [ + { + message: "Identifier 'foo_one' does not match the pattern '^[^_]+$'.", + type: "Identifier" + }, + { + message: "Identifier 'bar_one' does not match the pattern '^[^_]+$'.", + type: "Identifier" + } + ] + }, + { + code: ` + const foo = { + [a]: 1, + }; + `, + options: ["^[^a]", { + properties: true, + onlyDeclarations: false + }], + parserOptions: { ecmaVersion: 2022 }, + errors: [ + { + message: "Identifier 'a' does not match the pattern '^[^a]'.", + type: "Identifier" + } + ] + }, + // https://github.com/eslint/eslint/issues/15443 + { + code: ` + const foo = { + [a]: 1, + }; + `, + options: ["^[^a]", { + properties: false, + onlyDeclarations: false + }], + parserOptions: { ecmaVersion: 2022 }, + errors: [ + { + message: "Identifier 'a' does not match the pattern '^[^a]'.", + type: "Identifier" + } + ] + } ] }); diff --git a/eslint/tests/lib/rules/indent.js b/eslint/tests/lib/rules/indent.js index 3947679..0785083 100644 --- a/eslint/tests/lib/rules/indent.js +++ b/eslint/tests/lib/rules/indent.js @@ -776,6 +776,21 @@ ruleTester.run("indent", rule, { `, options: [2, { VariableDeclarator: 2, SwitchCase: 1 }] }, + { + code: unIndent` + with (a) + b(); + `, + options: [4] + }, + { + code: unIndent` + with (a) + b(); + c(); + `, + options: [4] + }, { code: unIndent` if(true) @@ -6082,6 +6097,270 @@ ruleTester.run("indent", rule, { `, options: [4, { FunctionExpression: { body: 2 }, StaticBlock: { body: 2 } }], parserOptions: { ecmaVersion: 2022 } + }, + + // https://github.com/eslint/eslint/issues/15930 + { + code: unIndent` + if (2 > 1) + \tconsole.log('a') + ;[1, 2, 3].forEach(x=>console.log(x)) + `, + options: ["tab"] + }, + { + code: unIndent` + if (2 > 1) + console.log('a') + ;[1, 2, 3].forEach(x=>console.log(x)) + `, + options: [4] + }, + { + code: unIndent` + if (foo) bar(); + baz() + `, + options: [4] + }, + { + code: unIndent` + if (foo) bar() + ;baz() + `, + options: [4] + }, + { + code: unIndent` + if (foo) + bar(); + baz(); + `, + options: [4] + }, + { + code: unIndent` + if (foo) + bar() + ; baz() + `, + options: [4] + }, + { + code: unIndent` + if (foo) + bar() + ;baz() + qux() + `, + options: [4] + }, + { + code: unIndent` + if (foo) + bar() + ;else + baz() + `, + options: [4] + }, + { + code: unIndent` + if (foo) + bar() + else + baz() + ;qux() + `, + options: [4] + }, + { + code: unIndent` + if (foo) + if (bar) + baz() + ;qux() + `, + options: [4] + }, + { + code: unIndent` + if (foo) + bar() + else if (baz) + qux() + ;quux() + `, + options: [4] + }, + { + code: unIndent` + if (foo) + if (bar) + baz() + else + qux() + ;quux() + `, + options: [4] + }, + { + code: unIndent` + if (foo) + bar() + ; + baz() + `, + options: [4] + }, + { + code: unIndent` + if (foo) + ; + baz() + `, + options: [4] + }, + { + code: unIndent` + if (foo) + ;baz() + `, + options: [4] + }, + { + code: unIndent` + if (foo); + else + baz() + `, + options: [4] + }, + { + code: unIndent` + if (foo) + ; + else + baz() + `, + options: [4] + }, + { + code: unIndent` + if (foo) + ;else + baz() + `, + options: [4] + }, + { + code: unIndent` + do foo(); + while (bar) + `, + options: [4] + }, + { + code: unIndent` + do foo() + ;while (bar) + `, + options: [4] + }, + { + code: unIndent` + do + foo(); + while (bar) + `, + options: [4] + }, + { + code: unIndent` + do + foo() + ;while (bar) + `, + options: [4] + }, + { + code: unIndent` + do; + while (foo) + `, + options: [4] + }, + { + code: unIndent` + do + ; + while (foo) + `, + options: [4] + }, + { + code: unIndent` + do + ;while (foo) + `, + options: [4] + }, + { + code: unIndent` + while (2 > 1) + console.log('a') + ;[1, 2, 3].forEach(x=>console.log(x)) + `, + options: [4] + }, + { + code: unIndent` + for (;;) + console.log('a') + ;[1, 2, 3].forEach(x=>console.log(x)) + `, + options: [4] + }, + { + code: unIndent` + for (a in b) + console.log('a') + ;[1, 2, 3].forEach(x=>console.log(x)) + `, + options: [4] + }, + { + code: unIndent` + for (a of b) + console.log('a') + ;[1, 2, 3].forEach(x=>console.log(x)) + `, + options: [4] + }, + { + code: unIndent` + with (a) + console.log(b) + ;[1, 2, 3].forEach(x=>console.log(x)) + `, + options: [4] + }, + { + code: unIndent` + label: for (a of b) + console.log('a') + ;[1, 2, 3].forEach(x=>console.log(x)) + `, + options: [4] + }, + { + code: unIndent` + label: + for (a of b) + console.log('a') + ;[1, 2, 3].forEach(x=>console.log(x)) + `, + options: [4] } ], @@ -6699,6 +6978,20 @@ ruleTester.run("indent", rule, { [2, 4, 0, "Identifier"] ]) }, + { + code: unIndent` + with(a) + b(); + `, + output: unIndent` + with(a) + b(); + `, + options: [4], + errors: expectedErrors([ + [2, 4, 0, "Identifier"] + ]) + }, { code: unIndent` if(true) @@ -12623,6 +12916,471 @@ ruleTester.run("indent", rule, { [6, 12, 0, "Identifier"], [7, 4, 0, "Punctuator"] ]) + }, + + // https://github.com/eslint/eslint/issues/15930 + { + code: unIndent` + if (2 > 1) + \tconsole.log('a') + \t;[1, 2, 3].forEach(x=>console.log(x)) + `, + output: unIndent` + if (2 > 1) + \tconsole.log('a') + ;[1, 2, 3].forEach(x=>console.log(x)) + `, + options: ["tab"], + errors: expectedErrors("tab", [3, 0, 1, "Punctuator"]) + }, + { + code: unIndent` + if (2 > 1) + console.log('a') + ;[1, 2, 3].forEach(x=>console.log(x)) + `, + output: unIndent` + if (2 > 1) + console.log('a') + ;[1, 2, 3].forEach(x=>console.log(x)) + `, + options: [4], + errors: expectedErrors([3, 0, 4, "Punctuator"]) + }, + { + code: unIndent` + if (foo) bar(); + baz() + `, + output: unIndent` + if (foo) bar(); + baz() + `, + options: [4], + errors: expectedErrors([2, 0, 4, "Identifier"]) + }, + { + code: unIndent` + if (foo) bar() + ;baz() + `, + output: unIndent` + if (foo) bar() + ;baz() + `, + options: [4], + errors: expectedErrors([2, 0, 4, "Punctuator"]) + }, + { + code: unIndent` + if (foo) + bar(); + baz(); + `, + output: unIndent` + if (foo) + bar(); + baz(); + `, + options: [4], + errors: expectedErrors([3, 0, 4, "Identifier"]) + }, + { + code: unIndent` + if (foo) + bar() + ; baz() + `, + output: unIndent` + if (foo) + bar() + ; baz() + `, + options: [4], + errors: expectedErrors([3, 0, 4, "Punctuator"]) + }, + { + code: unIndent` + if (foo) + bar() + ;baz() + qux() + `, + output: unIndent` + if (foo) + bar() + ;baz() + qux() + `, + options: [4], + errors: expectedErrors([ + [3, 0, 4, "Punctuator"], + [4, 0, 4, "Identifier"] + ]) + }, + { + code: unIndent` + if (foo) + bar() + ;else + baz() + `, + output: unIndent` + if (foo) + bar() + ;else + baz() + `, + options: [4], + errors: expectedErrors([3, 0, 4, "Punctuator"]) + }, + { + code: unIndent` + if (foo) + bar() + else + baz() + ;qux() + `, + output: unIndent` + if (foo) + bar() + else + baz() + ;qux() + `, + options: [4], + errors: expectedErrors([5, 0, 4, "Punctuator"]) + }, + { + code: unIndent` + if (foo) + if (bar) + baz() + ;qux() + `, + output: unIndent` + if (foo) + if (bar) + baz() + ;qux() + `, + options: [4], + errors: expectedErrors([4, 0, 4, "Punctuator"]) + }, + { + code: unIndent` + if (foo) + bar() + else if (baz) + qux() + ;quux() + `, + output: unIndent` + if (foo) + bar() + else if (baz) + qux() + ;quux() + `, + options: [4], + errors: expectedErrors([5, 0, 4, "Punctuator"]) + }, + { + code: unIndent` + if (foo) + if (bar) + baz() + else + qux() + ;quux() + `, + output: unIndent` + if (foo) + if (bar) + baz() + else + qux() + ;quux() + `, + options: [4], + errors: expectedErrors([6, 0, 4, "Punctuator"]) + }, + { + code: unIndent` + if (foo) + bar() + ; + baz() + `, + output: unIndent` + if (foo) + bar() + ; + baz() + `, + options: [4], + errors: expectedErrors([3, 4, 0, "Punctuator"]) + }, + { + code: unIndent` + if (foo) + ; + baz() + `, + output: unIndent` + if (foo) + ; + baz() + `, + options: [4], + errors: expectedErrors([2, 4, 0, "Punctuator"]) + }, + { + code: unIndent` + if (foo) + ;baz() + `, + output: unIndent` + if (foo) + ;baz() + `, + options: [4], + errors: expectedErrors([2, 0, 4, "Punctuator"]) + }, + { + code: unIndent` + if (foo); + else + baz() + `, + output: unIndent` + if (foo); + else + baz() + `, + options: [4], + errors: expectedErrors([2, 0, 4, "Keyword"]) + }, + { + code: unIndent` + if (foo) + ; + else + baz() + `, + output: unIndent` + if (foo) + ; + else + baz() + `, + options: [4], + errors: expectedErrors([2, 4, 0, "Punctuator"]) + }, + { + code: unIndent` + if (foo) + ;else + baz() + `, + output: unIndent` + if (foo) + ;else + baz() + `, + options: [4], + errors: expectedErrors([2, 0, 4, "Punctuator"]) + }, + { + code: unIndent` + do foo(); + while (bar) + `, + output: unIndent` + do foo(); + while (bar) + `, + options: [4], + errors: expectedErrors([2, 0, 4, "Keyword"]) + }, + { + code: unIndent` + do foo() + ;while (bar) + `, + output: unIndent` + do foo() + ;while (bar) + `, + options: [4], + errors: expectedErrors([2, 0, 4, "Punctuator"]) + }, + { + code: unIndent` + do + foo(); + while (bar) + `, + output: unIndent` + do + foo(); + while (bar) + `, + options: [4], + errors: expectedErrors([3, 0, 4, "Keyword"]) + }, + { + code: unIndent` + do + foo() + ;while (bar) + `, + output: unIndent` + do + foo() + ;while (bar) + `, + options: [4], + errors: expectedErrors([3, 0, 4, "Punctuator"]) + }, + { + code: unIndent` + do; + while (foo) + `, + output: unIndent` + do; + while (foo) + `, + options: [4], + errors: expectedErrors([2, 0, 4, "Keyword"]) + }, + { + code: unIndent` + do + ; + while (foo) + `, + output: unIndent` + do + ; + while (foo) + `, + options: [4], + errors: expectedErrors([2, 4, 0, "Punctuator"]) + }, + { + code: unIndent` + do + ;while (foo) + `, + output: unIndent` + do + ;while (foo) + `, + options: [4], + errors: expectedErrors([2, 0, 4, "Punctuator"]) + }, + { + code: unIndent` + while (2 > 1) + console.log('a') + ;[1, 2, 3].forEach(x=>console.log(x)) + `, + output: unIndent` + while (2 > 1) + console.log('a') + ;[1, 2, 3].forEach(x=>console.log(x)) + `, + options: [4], + errors: expectedErrors([3, 0, 4, "Punctuator"]) + }, + { + code: unIndent` + for (;;) + console.log('a') + ;[1, 2, 3].forEach(x=>console.log(x)) + `, + output: unIndent` + for (;;) + console.log('a') + ;[1, 2, 3].forEach(x=>console.log(x)) + `, + options: [4], + errors: expectedErrors([3, 0, 4, "Punctuator"]) + }, + { + code: unIndent` + for (a in b) + console.log('a') + ;[1, 2, 3].forEach(x=>console.log(x)) + `, + output: unIndent` + for (a in b) + console.log('a') + ;[1, 2, 3].forEach(x=>console.log(x)) + `, + options: [4], + errors: expectedErrors([3, 0, 4, "Punctuator"]) + }, + { + code: unIndent` + for (a of b) + console.log('a') + ;[1, 2, 3].forEach(x=>console.log(x)) + `, + output: unIndent` + for (a of b) + console.log('a') + ;[1, 2, 3].forEach(x=>console.log(x)) + `, + options: [4], + errors: expectedErrors([3, 0, 4, "Punctuator"]) + }, + { + code: unIndent` + with (a) + console.log(b) + ;[1, 2, 3].forEach(x=>console.log(x)) + `, + output: unIndent` + with (a) + console.log(b) + ;[1, 2, 3].forEach(x=>console.log(x)) + `, + options: [4], + errors: expectedErrors([3, 0, 4, "Punctuator"]) + }, + { + code: unIndent` + label: for (a of b) + console.log('a') + ;[1, 2, 3].forEach(x=>console.log(x)) + `, + output: unIndent` + label: for (a of b) + console.log('a') + ;[1, 2, 3].forEach(x=>console.log(x)) + `, + options: [4], + errors: expectedErrors([3, 0, 4, "Punctuator"]) + }, + { + code: unIndent` + label: + for (a of b) + console.log('a') + ;[1, 2, 3].forEach(x=>console.log(x)) + `, + output: unIndent` + label: + for (a of b) + console.log('a') + ;[1, 2, 3].forEach(x=>console.log(x)) + `, + options: [4], + errors: expectedErrors([4, 0, 4, "Punctuator"]) } ] }); diff --git a/eslint/tests/lib/rules/key-spacing.js b/eslint/tests/lib/rules/key-spacing.js index fde9673..dd0fcbc 100644 --- a/eslint/tests/lib/rules/key-spacing.js +++ b/eslint/tests/lib/rules/key-spacing.js @@ -896,8 +896,82 @@ ruleTester.run("key-spacing", rule, { on: "value" } }] - } - ], + }, + + // https://github.com/eslint/eslint/issues/15914 + { + code: ` + var foo = { + "a": "bar", + "𐌘": "baz" + }; + `, + options: [{ + align: { + on: "value" + } + }] + }, + { + code: ` + var foo = { + "a": "bar", + "Á": "baz", + "o͂": "qux", + "m̅": "xyz", + "ř": "abc" + + }; + `, + options: [{ + align: { + on: "value" + } + }] + }, + { + code: ` + var foo = { + "🌷": "bar", // 2 code points + "🎁": "baz", // 2 code points + "🇮🇳": "qux", // 4 code points + "🏳️‍🌈": "xyz", // 6 code points + }; + `, + options: [{ + align: { + on: "value" + } + }] + }, + { + code: ` + const foo = { + "a": "bar", + [𐌘]: "baz" + }; + `, + options: [{ + align: { + on: "value" + } + }], + parserOptions: { ecmaVersion: 6 } + }, + { + code: ` + const foo = { + "abc": "bar", + [ 𐌘 ]: "baz" + }; + `, + options: [{ + align: { + on: "value" + } + }], + parserOptions: { ecmaVersion: 6 } + }], invalid: [{ code: "var a ={'key' : value };", output: "var a ={'key':value };", @@ -2203,5 +2277,103 @@ ruleTester.run("key-spacing", rule, { { messageId: "missingValue", data: { computed: "", key: "bar" }, line: 3, column: 12, type: "Literal" }, { messageId: "missingValue", data: { computed: "", key: "baz" }, line: 3, column: 20, type: "Literal" } ] - }] + }, + { + code: ` + const foo = { + "a": "bar", + [ 𐌘 ]: "baz" + }; + `, + output: ` + const foo = { + "a": "bar", + [ 𐌘 ]: "baz" + }; + `, + options: [{ + align: { + on: "value" + } + }], + parserOptions: { ecmaVersion: 6 }, + errors: [ + { messageId: "missingValue", data: { computed: "", key: "a" }, line: 3, column: 22, type: "Literal" } + ] + }, + { + code: ` + const foo = { + "a": "bar", + [ 𐌘 ]: "baz" + }; + `, + output: ` + const foo = { + "a" : "bar", + [ 𐌘 ]: "baz" + }; + `, + options: [{ + align: { + on: "colon" + } + }], + parserOptions: { ecmaVersion: 6 }, + errors: [ + { messageId: "missingKey", data: { computed: "", key: "a" }, line: 3, column: 17, type: "Literal" } + ] + }, + { + code: ` + const foo = { + "a": "bar", + "𐌘": "baz" + }; + `, + output: ` + const foo = { + "a": "bar", + "𐌘": "baz" + }; + `, + options: [{ + align: { + on: "value" + } + }], + parserOptions: { ecmaVersion: 6 }, + errors: [ + { messageId: "extraValue", data: { computed: "", key: "a" }, line: 3, column: 20, type: "Literal" } + ] + }, + { + code: ` + var foo = { + "🌷": "bar", // 2 code points + "🎁": "baz", // 2 code points + "🇮🇳": "qux", // 4 code points + "🏳️‍🌈": "xyz", // 6 code points + }; + `, + output: ` + var foo = { + "🌷": "bar", // 2 code points + "🎁": "baz", // 2 code points + "🇮🇳": "qux", // 4 code points + "🏳️‍🌈": "xyz", // 6 code points + }; + `, + options: [{ + align: { + on: "value" + } + }], + errors: [ + { messageId: "extraValue", data: { computed: "", key: "🌷" }, line: 3, column: 21, type: "Literal" }, + { messageId: "extraValue", data: { computed: "", key: "🎁" }, line: 4, column: 21, type: "Literal" }, + { messageId: "extraValue", data: { computed: "", key: "🇮🇳" }, line: 5, column: 23, type: "Literal" } + ] + } + ] }); diff --git a/eslint/tests/lib/rules/keyword-spacing.js b/eslint/tests/lib/rules/keyword-spacing.js index 35c8a06..97d198f 100644 --- a/eslint/tests/lib/rules/keyword-spacing.js +++ b/eslint/tests/lib/rules/keyword-spacing.js @@ -126,14 +126,53 @@ ruleTester.run("keyword-spacing", rule, { // as //---------------------------------------------------------------------- + // import { a as b } + { code: "import { a } from \"foo\"", parserOptions: { ecmaVersion: 6, sourceType: "module" } }, + { code: "import { a as b } from \"foo\"", parserOptions: { ecmaVersion: 6, sourceType: "module" } }, + { code: "import { \"a\" as b } from \"foo\"", parserOptions: { ecmaVersion: 2022, sourceType: "module" } }, + { code: "import{ a }from\"foo\"", options: [NEITHER], parserOptions: { ecmaVersion: 6, sourceType: "module" } }, + { code: "import{ a as b }from\"foo\"", options: [NEITHER], parserOptions: { ecmaVersion: 6, sourceType: "module" } }, + { code: "import{ \"a\"as b }from\"foo\"", options: [NEITHER], parserOptions: { ecmaVersion: 2022, sourceType: "module" } }, + { code: "import{ \"a\" as b }from\"foo\"", options: [override("as", BOTH)], parserOptions: { ecmaVersion: 2022, sourceType: "module" } }, + { code: "import { a as b } from \"foo\"", options: [override("as", NEITHER)], parserOptions: { ecmaVersion: 2022, sourceType: "module" } }, + { code: "import { \"a\"as b } from \"foo\"", options: [override("as", NEITHER)], parserOptions: { ecmaVersion: 2022, sourceType: "module" } }, + + // export { a as b } + { code: "let a; export { a };", parserOptions: { ecmaVersion: 6, sourceType: "module" } }, + { code: "export { \"a\" } from \"foo\";", parserOptions: { ecmaVersion: 2022, sourceType: "module" } }, + { code: "let a; export { a as b };", parserOptions: { ecmaVersion: 6, sourceType: "module" } }, + { code: "let a; export { a as \"b\" };", parserOptions: { ecmaVersion: 2022, sourceType: "module" } }, + { code: "export { \"a\" as b } from \"foo\";", parserOptions: { ecmaVersion: 2022, sourceType: "module" } }, + { code: "export { \"a\" as \"b\" } from \"foo\";", parserOptions: { ecmaVersion: 2022, sourceType: "module" } }, + { code: "let a; export{ a };", options: [NEITHER], parserOptions: { ecmaVersion: 6, sourceType: "module" } }, + { code: "export{ \"a\" }from\"foo\";", options: [NEITHER], parserOptions: { ecmaVersion: 2022, sourceType: "module" } }, + { code: "let a; export{ a as b };", options: [NEITHER], parserOptions: { ecmaVersion: 6, sourceType: "module" } }, + { code: "let a; export{ a as\"b\" };", options: [NEITHER], parserOptions: { ecmaVersion: 2022, sourceType: "module" } }, + { code: "export{ \"a\"as b }from\"foo\";", options: [NEITHER], parserOptions: { ecmaVersion: 2022, sourceType: "module" } }, + { code: "export{ \"a\"as\"b\" }from\"foo\";", options: [NEITHER], parserOptions: { ecmaVersion: 2022, sourceType: "module" } }, + { code: "let a; export{ a as \"b\" };", options: [override("as", BOTH)], parserOptions: { ecmaVersion: 2022, sourceType: "module" } }, + { code: "export{ \"a\" as b }from\"foo\";", options: [override("as", BOTH)], parserOptions: { ecmaVersion: 2022, sourceType: "module" } }, + { code: "export{ \"a\" as \"b\" }from\"foo\";", options: [override("as", BOTH)], parserOptions: { ecmaVersion: 2022, sourceType: "module" } }, + { code: "let a; export { a as b };", options: [override("as", NEITHER)], parserOptions: { ecmaVersion: 6, sourceType: "module" } }, + { code: "let a; export { a as\"b\" };", options: [override("as", NEITHER)], parserOptions: { ecmaVersion: 2022, sourceType: "module" } }, + { code: "export { \"a\"as b } from \"foo\";", options: [override("as", NEITHER)], parserOptions: { ecmaVersion: 2022, sourceType: "module" } }, + { code: "export { \"a\"as\"b\" } from \"foo\";", options: [override("as", NEITHER)], parserOptions: { ecmaVersion: 2022, sourceType: "module" } }, + + // import * as a { code: "import * as a from \"foo\"", parserOptions: { ecmaVersion: 6, sourceType: "module" } }, { code: "import*as a from\"foo\"", options: [NEITHER], parserOptions: { ecmaVersion: 6, sourceType: "module" } }, { code: "import* as a from\"foo\"", options: [override("as", BOTH)], parserOptions: { ecmaVersion: 6, sourceType: "module" } }, { code: "import *as a from \"foo\"", options: [override("as", NEITHER)], parserOptions: { ecmaVersion: 6, sourceType: "module" } }, + + // export * as a { code: "export * as a from \"foo\"", parserOptions: { ecmaVersion: 2020, sourceType: "module" } }, + { code: "export * as \"a\" from \"foo\"", parserOptions: { ecmaVersion: 2022, sourceType: "module" } }, { code: "export*as a from\"foo\"", options: [NEITHER], parserOptions: { ecmaVersion: 2020, sourceType: "module" } }, + { code: "export*as\"a\"from\"foo\"", options: [NEITHER], parserOptions: { ecmaVersion: 2022, sourceType: "module" } }, { code: "export* as a from\"foo\"", options: [override("as", BOTH)], parserOptions: { ecmaVersion: 2020, sourceType: "module" } }, + { code: "export* as \"a\"from\"foo\"", options: [override("as", BOTH)], parserOptions: { ecmaVersion: 2022, sourceType: "module" } }, { code: "export *as a from \"foo\"", options: [override("as", NEITHER)], parserOptions: { ecmaVersion: 2020, sourceType: "module" } }, + { code: "export *as\"a\" from \"foo\"", options: [override("as", NEITHER)], parserOptions: { ecmaVersion: 2022, sourceType: "module" } }, //---------------------------------------------------------------------- // async @@ -654,15 +693,21 @@ ruleTester.run("keyword-spacing", rule, { { code: "import {foo} from \"foo\"", parserOptions: { ecmaVersion: 6, sourceType: "module" } }, { code: "export {foo} from \"foo\"", parserOptions: { ecmaVersion: 6, sourceType: "module" } }, { code: "export * from \"foo\"", parserOptions: { ecmaVersion: 6, sourceType: "module" } }, + { code: "export * as \"x\" from \"foo\"", parserOptions: { ecmaVersion: 2022, sourceType: "module" } }, { code: "import{foo}from\"foo\"", options: [NEITHER], parserOptions: { ecmaVersion: 6, sourceType: "module" } }, { code: "export{foo}from\"foo\"", options: [NEITHER], parserOptions: { ecmaVersion: 6, sourceType: "module" } }, { code: "export*from\"foo\"", options: [NEITHER], parserOptions: { ecmaVersion: 6, sourceType: "module" } }, + { code: "export*as x from\"foo\"", options: [NEITHER], parserOptions: { ecmaVersion: 2020, sourceType: "module" } }, + { code: "export*as\"x\"from\"foo\"", options: [NEITHER], parserOptions: { ecmaVersion: 2022, sourceType: "module" } }, { code: "import{foo} from \"foo\"", options: [override("from", BOTH)], parserOptions: { ecmaVersion: 6, sourceType: "module" } }, { code: "export{foo} from \"foo\"", options: [override("from", BOTH)], parserOptions: { ecmaVersion: 6, sourceType: "module" } }, { code: "export* from \"foo\"", options: [override("from", BOTH)], parserOptions: { ecmaVersion: 6, sourceType: "module" } }, + { code: "export*as\"x\" from \"foo\"", options: [override("from", BOTH)], parserOptions: { ecmaVersion: 2022, sourceType: "module" } }, { code: "import {foo}from\"foo\"", options: [override("from", NEITHER)], parserOptions: { ecmaVersion: 6, sourceType: "module" } }, { code: "export {foo}from\"foo\"", options: [override("from", NEITHER)], parserOptions: { ecmaVersion: 6, sourceType: "module" } }, { code: "export *from\"foo\"", options: [override("from", NEITHER)], parserOptions: { ecmaVersion: 6, sourceType: "module" } }, + { code: "export * as x from\"foo\"", options: [override("from", NEITHER)], parserOptions: { ecmaVersion: 2020, sourceType: "module" } }, + { code: "export * as \"x\"from\"foo\"", options: [override("from", NEITHER)], parserOptions: { ecmaVersion: 2022, sourceType: "module" } }, //---------------------------------------------------------------------- // function @@ -1469,6 +1514,119 @@ ruleTester.run("keyword-spacing", rule, { // as //---------------------------------------------------------------------- + // import { a as b } + { + code: "import { \"a\"as b } from \"foo\"", + output: "import { \"a\" as b } from \"foo\"", + parserOptions: { ecmaVersion: 2022, sourceType: "module" }, + errors: expectedBefore("as") + }, + { + code: "import{ \"a\" as b }from\"foo\"", + output: "import{ \"a\"as b }from\"foo\"", + options: [NEITHER], + parserOptions: { ecmaVersion: 2022, sourceType: "module" }, + errors: unexpectedBefore("as") + }, + { + code: "import{ \"a\"as b }from\"foo\"", + output: "import{ \"a\" as b }from\"foo\"", + options: [override("as", BOTH)], + parserOptions: { ecmaVersion: 2022, sourceType: "module" }, + errors: expectedBefore("as") + }, + { + code: "import { \"a\" as b } from \"foo\"", + output: "import { \"a\"as b } from \"foo\"", + options: [override("as", NEITHER)], + parserOptions: { ecmaVersion: 2022, sourceType: "module" }, + errors: unexpectedBefore("as") + }, + + // export { a as b } + { + code: "let a; export { a as\"b\" };", + output: "let a; export { a as \"b\" };", + parserOptions: { ecmaVersion: 2022, sourceType: "module" }, + errors: expectedAfter("as") + }, + { + code: "export { \"a\"as b } from \"foo\";", + output: "export { \"a\" as b } from \"foo\";", + parserOptions: { ecmaVersion: 2022, sourceType: "module" }, + errors: expectedBefore("as") + }, + { + code: "export { \"a\"as\"b\" } from \"foo\";", + output: "export { \"a\" as \"b\" } from \"foo\";", + parserOptions: { ecmaVersion: 2022, sourceType: "module" }, + errors: expectedBeforeAndAfter("as") + }, + { + code: "let a; export{ a as \"b\" };", + output: "let a; export{ a as\"b\" };", + options: [NEITHER], + parserOptions: { ecmaVersion: 2022, sourceType: "module" }, + errors: unexpectedAfter("as") + }, + { + code: "export{ \"a\" as b }from\"foo\";", + output: "export{ \"a\"as b }from\"foo\";", + options: [NEITHER], + parserOptions: { ecmaVersion: 2022, sourceType: "module" }, + errors: unexpectedBefore("as") + }, + { + code: "export{ \"a\" as \"b\" }from\"foo\";", + output: "export{ \"a\"as\"b\" }from\"foo\";", + options: [NEITHER], + parserOptions: { ecmaVersion: 2022, sourceType: "module" }, + errors: unexpectedBeforeAndAfter("as") + }, + { + code: "let a; export{ a as\"b\" };", + output: "let a; export{ a as \"b\" };", + options: [override("as", BOTH)], + parserOptions: { ecmaVersion: 2022, sourceType: "module" }, + errors: expectedAfter("as") + }, + { + code: "export{ \"a\"as b }from\"foo\";", + output: "export{ \"a\" as b }from\"foo\";", + options: [override("as", BOTH)], + parserOptions: { ecmaVersion: 2022, sourceType: "module" }, + errors: expectedBefore("as") + }, + { + code: "export{ \"a\"as\"b\" }from\"foo\";", + output: "export{ \"a\" as \"b\" }from\"foo\";", + options: [override("as", BOTH)], + parserOptions: { ecmaVersion: 2022, sourceType: "module" }, + errors: expectedBeforeAndAfter("as") + }, + { + code: "let a; export { a as \"b\" };", + output: "let a; export { a as\"b\" };", + options: [override("as", NEITHER)], + parserOptions: { ecmaVersion: 2022, sourceType: "module" }, + errors: unexpectedAfter("as") + }, + { + code: "export { \"a\" as b } from \"foo\";", + output: "export { \"a\"as b } from \"foo\";", + options: [override("as", NEITHER)], + parserOptions: { ecmaVersion: 2022, sourceType: "module" }, + errors: unexpectedBefore("as") + }, + { + code: "export { \"a\" as \"b\" } from \"foo\";", + output: "export { \"a\"as\"b\" } from \"foo\";", + options: [override("as", NEITHER)], + parserOptions: { ecmaVersion: 2022, sourceType: "module" }, + errors: unexpectedBeforeAndAfter("as") + }, + + // import * as a { code: "import *as a from \"foo\"", output: "import * as a from \"foo\"", @@ -1524,12 +1682,20 @@ ruleTester.run("keyword-spacing", rule, { parserOptions: { ecmaVersion: 6, sourceType: "module" }, errors: unexpectedBefore("as") }, + + // export * as a { code: "export *as a from \"foo\"", output: "export * as a from \"foo\"", parserOptions: { ecmaVersion: 2020, sourceType: "module" }, errors: expectedBefore("as") }, + { + code: "export *as\"a\" from \"foo\"", + output: "export * as \"a\" from \"foo\"", + parserOptions: { ecmaVersion: 2022, sourceType: "module" }, + errors: expectedBeforeAndAfter("as") + }, { code: "export* as a from\"foo\"", output: "export*as a from\"foo\"", @@ -1537,6 +1703,13 @@ ruleTester.run("keyword-spacing", rule, { parserOptions: { ecmaVersion: 2020, sourceType: "module" }, errors: unexpectedBefore("as") }, + { + code: "export* as \"a\"from\"foo\"", + output: "export*as\"a\"from\"foo\"", + options: [NEITHER], + parserOptions: { ecmaVersion: 2022, sourceType: "module" }, + errors: unexpectedBeforeAndAfter("as") + }, { code: "export*as a from\"foo\"", output: "export* as a from\"foo\"", @@ -1544,6 +1717,13 @@ ruleTester.run("keyword-spacing", rule, { parserOptions: { ecmaVersion: 2020, sourceType: "module" }, errors: expectedBefore("as") }, + { + code: "export*as\"a\"from\"foo\"", + output: "export* as \"a\"from\"foo\"", + options: [override("as", BOTH)], + parserOptions: { ecmaVersion: 2022, sourceType: "module" }, + errors: expectedBeforeAndAfter("as") + }, { code: "export * as a from \"foo\"", output: "export *as a from \"foo\"", @@ -1551,6 +1731,13 @@ ruleTester.run("keyword-spacing", rule, { parserOptions: { ecmaVersion: 2020, sourceType: "module" }, errors: unexpectedBefore("as") }, + { + code: "export * as \"a\" from \"foo\"", + output: "export *as\"a\" from \"foo\"", + options: [override("as", NEITHER)], + parserOptions: { ecmaVersion: 2022, sourceType: "module" }, + errors: unexpectedBeforeAndAfter("as") + }, //---------------------------------------------------------------------- // async @@ -2399,6 +2586,12 @@ ruleTester.run("keyword-spacing", rule, { parserOptions: { ecmaVersion: 6, sourceType: "module" }, errors: expectedBeforeAndAfter("from") }, + { + code: "export * as \"a\"from\"foo\"", + output: "export * as \"a\" from \"foo\"", + parserOptions: { ecmaVersion: 2022, sourceType: "module" }, + errors: expectedBeforeAndAfter("from") + }, { code: "import{foo} from \"foo\"", output: "import{foo}from\"foo\"", @@ -2420,6 +2613,20 @@ ruleTester.run("keyword-spacing", rule, { parserOptions: { ecmaVersion: 6, sourceType: "module" }, errors: unexpectedBeforeAndAfter("from") }, + { + code: "export*as x from \"foo\"", + output: "export*as x from\"foo\"", + options: [NEITHER], + parserOptions: { ecmaVersion: 2020, sourceType: "module" }, + errors: unexpectedAfter("from") + }, + { + code: "export*as\"x\" from \"foo\"", + output: "export*as\"x\"from\"foo\"", + options: [NEITHER], + parserOptions: { ecmaVersion: 2022, sourceType: "module" }, + errors: unexpectedBeforeAndAfter("from") + }, { code: "import{foo}from\"foo\"", output: "import{foo} from \"foo\"", @@ -2441,6 +2648,13 @@ ruleTester.run("keyword-spacing", rule, { parserOptions: { ecmaVersion: 6, sourceType: "module" }, errors: expectedBeforeAndAfter("from") }, + { + code: "export*as\"x\"from\"foo\"", + output: "export*as\"x\" from \"foo\"", + options: [override("from", BOTH)], + parserOptions: { ecmaVersion: 2022, sourceType: "module" }, + errors: expectedBeforeAndAfter("from") + }, { code: "import {foo} from \"foo\"", output: "import {foo}from\"foo\"", @@ -2462,6 +2676,20 @@ ruleTester.run("keyword-spacing", rule, { parserOptions: { ecmaVersion: 6, sourceType: "module" }, errors: unexpectedBeforeAndAfter("from") }, + { + code: "export * as x from \"foo\"", + output: "export * as x from\"foo\"", + options: [override("from", NEITHER)], + parserOptions: { ecmaVersion: 2020, sourceType: "module" }, + errors: unexpectedAfter("from") + }, + { + code: "export * as \"x\" from \"foo\"", + output: "export * as \"x\"from\"foo\"", + options: [override("from", NEITHER)], + parserOptions: { ecmaVersion: 2022, sourceType: "module" }, + errors: unexpectedBeforeAndAfter("from") + }, //---------------------------------------------------------------------- // function diff --git a/eslint/tests/lib/rules/lines-around-comment.js b/eslint/tests/lib/rules/lines-around-comment.js index 2687f14..3796985 100644 --- a/eslint/tests/lib/rules/lines-around-comment.js +++ b/eslint/tests/lib/rules/lines-around-comment.js @@ -364,6 +364,60 @@ ruleTester.run("lines-around-comment", rule, { parserOptions: { ecmaVersion: 2022 } }, + // https://github.com/eslint/eslint/issues/16131 + { + code: ` + switch (foo) { + // this comment is allowed by allowBlockStart: true + + case 1: + bar(); + break; + + // this comment is allowed by allowBlockEnd: true + } + `, + options: [{ + allowBlockStart: true, + beforeLineComment: true, + afterLineComment: true, + allowBlockEnd: true + }] + }, + { + code: ` + switch (foo) + { + // this comment is allowed by allowBlockStart: true + + case 1: + bar(); + break; + } + `, + options: [{ + allowBlockStart: true, + beforeLineComment: true, + afterLineComment: true + }] + }, + { + code: ` + switch ( + function(){}() + ) + { + // this comment is allowed by allowBlockStart: true + case foo: + break; + } + `, + options: [{ + allowBlockStart: true, + beforeLineComment: true + }] + }, + // check for block end comments { code: "var a,\n// line\n\nb;", @@ -2106,6 +2160,39 @@ ruleTester.run("lines-around-comment", rule, { output: "foo;\n\n/* fallthrough */", options: [], errors: [{ messageId: "before", type: "Block" }] + }, + { + code: ` + switch ( + // this comment is not allowed by allowBlockStart: true + + foo + ) + { + case 1: + bar(); + break; + } + `, + output: ` + switch ( + + // this comment is not allowed by allowBlockStart: true + + foo + ) + { + case 1: + bar(); + break; + } + `, + options: [{ + allowBlockStart: true, + beforeLineComment: true, + afterLineComment: true + }], + errors: [{ messageId: "before", type: "Line" }] } ] diff --git a/eslint/tests/lib/rules/max-lines-per-function.js b/eslint/tests/lib/rules/max-lines-per-function.js index 74acab2..621d66e 100644 --- a/eslint/tests/lib/rules/max-lines-per-function.js +++ b/eslint/tests/lib/rules/max-lines-per-function.js @@ -143,7 +143,7 @@ if ( x === y ) { options: [{ max: 5, skipComments: true, skipBlankLines: false }] }, - // IIFEs should be recognised if IIFEs: true + // IIFEs should be recognized if IIFEs: true { code: `(function(){ let x = 0; @@ -155,7 +155,7 @@ if ( x === y ) { options: [{ max: 7, skipComments: true, skipBlankLines: false, IIFEs: true }] }, - // IIFEs should not be recognised if IIFEs: false + // IIFEs should not be recognized if IIFEs: false { code: `(function(){ let x = 0; @@ -167,7 +167,7 @@ if ( x === y ) { options: [{ max: 2, skipComments: true, skipBlankLines: false, IIFEs: false }] }, - // Arrow IIFEs should be recognised if IIFEs: true + // Arrow IIFEs should be recognized if IIFEs: true { code: `(() => { let x = 0; @@ -179,7 +179,7 @@ if ( x === y ) { options: [{ max: 7, skipComments: true, skipBlankLines: false, IIFEs: true }] }, - // Arrow IIFEs should not be recognised if IIFEs: false + // Arrow IIFEs should not be recognized if IIFEs: false { code: `(() => { let x = 0; @@ -194,67 +194,39 @@ if ( x === y ) { invalid: [ - // Test simple standalone function is recognised + // Test simple standalone function is recognized { code: "function name() {\n}", options: [1], errors: [ - { - messageId: "exceed", - data: { name: "Function 'name'", linesExceed: 1, maxLines: 1 }, - line: 2, - column: 1, - endLine: 2, - endColumn: 2 - } + { messageId: "exceed", data: { name: "Function 'name'", lineCount: 2, maxLines: 1 } } ] }, - // Test anonymous function assigned to variable is recognised + // Test anonymous function assigned to variable is recognized { code: "var func = function() {\n}", options: [1], errors: [ - { - messageId: "exceed", - data: { name: "Function", linesExceed: 1, maxLines: 1 }, - line: 2, - column: 1, - endLine: 2, - endColumn: 2 - } + { messageId: "exceed", data: { name: "Function", lineCount: 2, maxLines: 1 } } ] }, - // Test arrow functions are recognised + // Test arrow functions are recognized { code: "const bar = () => {\nconst x = 2 + 1;\nreturn x;\n}", options: [3], errors: [ - { - messageId: "exceed", - data: { name: "Arrow function", linesExceed: 1, maxLines: 3 }, - line: 4, - column: 1, - endLine: 4, - endColumn: 2 - } + { messageId: "exceed", data: { name: "Arrow function", lineCount: 4, maxLines: 3 } } ] }, - // Test inline arrow functions are recognised + // Test inline arrow functions are recognized { code: "const bar = () =>\n 2", options: [1], errors: [ - { - messageId: "exceed", - data: { name: "Arrow function", linesExceed: 1, maxLines: 1 }, - line: 2, - column: 1, - endLine: 2, - endColumn: 3 - } + { messageId: "exceed", data: { name: "Arrow function", lineCount: 2, maxLines: 1 } } ] }, @@ -263,14 +235,7 @@ if ( x === y ) { code: `() => {${"foo\n".repeat(60)}}`, options: [{}], errors: [ - { - messageId: "exceed", - data: { name: "Arrow function", linesExceed: 11, maxLines: 50 }, - line: 51, - column: 1, - endLine: 61, - endColumn: 2 - } + { messageId: "exceed", data: { name: "Arrow function", lineCount: 61, maxLines: 50 } } ] }, @@ -279,14 +244,7 @@ if ( x === y ) { code: "function name() {\nvar x = 5;\n\t\n \n\nvar x = 2;\n}", options: [{ max: 6, skipComments: false, skipBlankLines: false }], errors: [ - { - messageId: "exceed", - data: { name: "Function 'name'", linesExceed: 1, maxLines: 6 }, - line: 7, - column: 1, - endLine: 7, - endColumn: 2 - } + { messageId: "exceed", data: { name: "Function 'name'", lineCount: 7, maxLines: 6 } } ] }, @@ -295,14 +253,7 @@ if ( x === y ) { code: "function name() {\r\nvar x = 5;\r\n\t\r\n \r\n\r\nvar x = 2;\r\n}", options: [{ max: 6, skipComments: true, skipBlankLines: false }], errors: [ - { - messageId: "exceed", - data: { name: "Function 'name'", linesExceed: 1, maxLines: 6 }, - line: 7, - column: 1, - endLine: 7, - endColumn: 2 - } + { messageId: "exceed", data: { name: "Function 'name'", lineCount: 7, maxLines: 6 } } ] }, @@ -311,14 +262,7 @@ if ( x === y ) { code: "function name() {\nvar x = 5;\n\t\n \n\nvar x = 2;\n}", options: [{ max: 2, skipComments: true, skipBlankLines: true }], errors: [ - { - messageId: "exceed", - data: { name: "Function 'name'", linesExceed: 2, maxLines: 2 }, - line: 6, - column: 1, - endLine: 7, - endColumn: 2 - } + { messageId: "exceed", data: { name: "Function 'name'", lineCount: 4, maxLines: 2 } } ] }, @@ -327,14 +271,7 @@ if ( x === y ) { code: "function name() {\r\nvar x = 5;\r\n\t\r\n \r\n\r\nvar x = 2;\r\n}", options: [{ max: 2, skipComments: true, skipBlankLines: true }], errors: [ - { - messageId: "exceed", - data: { name: "Function 'name'", linesExceed: 2, maxLines: 2 }, - line: 6, - column: 1, - endLine: 7, - endColumn: 2 - } + { messageId: "exceed", data: { name: "Function 'name'", lineCount: 4, maxLines: 2 } } ] }, @@ -343,14 +280,7 @@ if ( x === y ) { code: "function name() { // end of line comment\nvar x = 5; /* mid line comment */\n\t// single line comment taking up whole line\n\t\n \n\nvar x = 2;\n}", options: [{ max: 6, skipComments: true, skipBlankLines: false }], errors: [ - { - messageId: "exceed", - data: { name: "Function 'name'", linesExceed: 1, maxLines: 6 }, - line: 8, - column: 1, - endLine: 8, - endColumn: 2 - } + { messageId: "exceed", data: { name: "Function 'name'", lineCount: 7, maxLines: 6 } } ] }, @@ -359,14 +289,7 @@ if ( x === y ) { code: "function name() { // end of line comment\nvar x = 5; /* mid line comment */\n\t// single line comment taking up whole line\n\t\n \n\nvar x = 2;\n}", options: [{ max: 1, skipComments: true, skipBlankLines: true }], errors: [ - { - messageId: "exceed", - data: { name: "Function 'name'", linesExceed: 3, maxLines: 1 }, - line: 2, - column: 1, - endLine: 8, - endColumn: 2 - } + { messageId: "exceed", data: { name: "Function 'name'", lineCount: 4, maxLines: 1 } } ] }, @@ -375,14 +298,7 @@ if ( x === y ) { code: "function name() { // end of line comment\nvar x = 5; /* mid line comment */\n\t// single line comment taking up whole line\n\t\n \n\nvar x = 2;\n}", options: [{ max: 1, skipComments: false, skipBlankLines: true }], errors: [ - { - messageId: "exceed", - data: { name: "Function 'name'", linesExceed: 4, maxLines: 1 }, - line: 2, - column: 1, - endLine: 8, - endColumn: 2 - } + { messageId: "exceed", data: { name: "Function 'name'", lineCount: 5, maxLines: 1 } } ] }, @@ -397,14 +313,7 @@ if ( x === y ) { }`, options: [{ max: 2, skipComments: true, skipBlankLines: false }], errors: [ - { - messageId: "exceed", - data: { name: "Function 'foo'", linesExceed: 5, maxLines: 2 }, - line: 3, - column: 1, - endLine: 7, - endColumn: 2 - } + { messageId: "exceed", data: { name: "Function 'foo'", lineCount: 7, maxLines: 2 } } ] }, @@ -419,14 +328,7 @@ function ()`, options: [{ max: 2, skipComments: true, skipBlankLines: false, IIFEs: true }], errors: [ - { - messageId: "exceed", - data: { name: "Function", linesExceed: 2, maxLines: 2 }, - line: 4, - column: 1, - endLine: 5, - endColumn: 2 - } + { messageId: "exceed", data: { name: "Function", lineCount: 4, maxLines: 2 } } ] }, @@ -444,14 +346,7 @@ if ( x === y ) { }`, options: [{ max: 9, skipComments: true, skipBlankLines: false }], errors: [ - { - messageId: "exceed", - data: { name: "Function 'parent'", linesExceed: 1, maxLines: 9 }, - line: 10, - column: 1, - endLine: 10, - endColumn: 2 - } + { messageId: "exceed", data: { name: "Function 'parent'", lineCount: 10, maxLines: 9 } } ] }, @@ -469,26 +364,12 @@ if ( x === y ) { }`, options: [{ max: 2, skipComments: true, skipBlankLines: false }], errors: [ - { - messageId: "exceed", - data: { name: "Function 'parent'", linesExceed: 8, maxLines: 2 }, - line: 3, - column: 1, - endLine: 10, - endColumn: 2 - }, - { - messageId: "exceed", - data: { name: "Function 'nested'", linesExceed: 2, maxLines: 2 }, - line: 5, - column: 1, - endLine: 6, - endColumn: 2 - } + { messageId: "exceed", data: { name: "Function 'parent'", lineCount: 10, maxLines: 2 } }, + { messageId: "exceed", data: { name: "Function 'nested'", lineCount: 4, maxLines: 2 } } ] }, - // Test regular methods are recognised + // Test regular methods are recognized { code: `class foo { method() { @@ -499,18 +380,11 @@ if ( x === y ) { }`, options: [{ max: 2, skipComments: true, skipBlankLines: false }], errors: [ - { - messageId: "exceed", - data: { name: "Method 'method'", linesExceed: 3, maxLines: 2 }, - line: 4, - column: 1, - endLine: 6, - endColumn: 6 - } + { messageId: "exceed", data: { name: "Method 'method'", lineCount: 5, maxLines: 2 } } ] }, - // Test static methods are recognised + // Test static methods are recognized { code: `class A { static @@ -521,18 +395,11 @@ if ( x === y ) { }`, options: [{ max: 2, skipComments: true, skipBlankLines: false }], errors: [ - { - messageId: "exceed", - data: { name: "Static method 'foo'", linesExceed: 3, maxLines: 2 }, - line: 4, - column: 1, - endLine: 6, - endColumn: 6 - } + { messageId: "exceed", data: { name: "Static method 'foo'", lineCount: 5, maxLines: 2 } } ] }, - // Test getters are recognised as properties + // Test getters are recognized as properties { code: `var obj = { get @@ -541,20 +408,13 @@ if ( x === y ) { return 1 } }`, - options: [{ max: 4, skipComments: true, skipBlankLines: false }], + options: [{ max: 2, skipComments: true, skipBlankLines: false }], errors: [ - { - messageId: "exceed", - data: { name: "Getter 'foo'", linesExceed: 1, maxLines: 4 }, - line: 6, - column: 1, - endLine: 6, - endColumn: 6 - } + { messageId: "exceed", data: { name: "Getter 'foo'", lineCount: 5, maxLines: 2 } } ] }, - // Test setters are recognised as properties + // Test setters are recognized as properties { code: `var obj = { set @@ -565,14 +425,7 @@ if ( x === y ) { }`, options: [{ max: 2, skipComments: true, skipBlankLines: false }], errors: [ - { - messageId: "exceed", - data: { name: "Setter 'foo'", linesExceed: 3, maxLines: 2 }, - line: 4, - column: 1, - endLine: 6, - endColumn: 6 - } + { messageId: "exceed", data: { name: "Setter 'foo'", lineCount: 5, maxLines: 2 } } ] }, @@ -590,14 +443,7 @@ if ( x === y ) { }`, options: [{ max: 2, skipComments: true, skipBlankLines: false }], errors: [ - { - messageId: "exceed", - data: { name: "Static method", linesExceed: 6, maxLines: 2 }, - line: 4, - column: 1, - endLine: 9, - endColumn: 6 - } + { messageId: "exceed", data: { name: "Static method", lineCount: 8, maxLines: 2 } } ] }, @@ -612,14 +458,7 @@ if ( x === y ) { }());`, options: [{ max: 2, skipComments: true, skipBlankLines: false, IIFEs: true }], errors: [ - { - messageId: "exceed", - data: { name: "Function", linesExceed: 5, maxLines: 2 }, - line: 3, - column: 1, - endLine: 7, - endColumn: 2 - } + { messageId: "exceed", data: { name: "Function", lineCount: 7, maxLines: 2 } } ] }, @@ -634,28 +473,7 @@ if ( x === y ) { })();`, options: [{ max: 2, skipComments: true, skipBlankLines: false, IIFEs: true }], errors: [ - { - messageId: "exceed", - data: { name: "Arrow function", linesExceed: 5, maxLines: 2 }, - line: 3, - column: 1, - endLine: 7, - endColumn: 2 - } - ] - }, - { - code: "\nfoo();\nbar();\nbaz();\nfunction name() {\nvar x = 5;\n/* comment 1 */\n/* comment 2 */\n\t\n \n\nvar x = 2;\n}\nquz();", - options: [{ max: 2, skipComments: true, skipBlankLines: true }], - errors: [ - { - messageId: "exceed", - data: { name: "Function 'name'", linesExceed: 2, maxLines: 2 }, - line: 12, - column: 1, - endLine: 13, - endColumn: 2 - } + { messageId: "exceed", data: { name: "Arrow function", lineCount: 7, maxLines: 2 } } ] } ] diff --git a/eslint/tests/lib/rules/no-confusing-arrow.js b/eslint/tests/lib/rules/no-confusing-arrow.js index 58724d9..372f205 100644 --- a/eslint/tests/lib/rules/no-confusing-arrow.js +++ b/eslint/tests/lib/rules/no-confusing-arrow.js @@ -30,7 +30,15 @@ ruleTester.run("no-confusing-arrow", rule, { { code: "var x = (a) => { return 1 ? 2 : 3; }", options: [{ allowParens: false }] }, "var x = a => (1 ? 2 : 3)", - { code: "var x = a => (1 ? 2 : 3)", options: [{ allowParens: true }] } + { code: "var x = a => (1 ? 2 : 3)", options: [{ allowParens: true }] }, + + "var x = (a,b) => (1 ? 2 : 3)", + { code: "() => 1 ? 2 : 3", options: [{ onlyOneSimpleParam: true }] }, + { code: "(a, b) => 1 ? 2 : 3", options: [{ onlyOneSimpleParam: true }] }, + { code: "(a = b) => 1 ? 2 : 3", options: [{ onlyOneSimpleParam: true }] }, + { code: "({ a }) => 1 ? 2 : 3", options: [{ onlyOneSimpleParam: true }] }, + { code: "([a]) => 1 ? 2 : 3", options: [{ onlyOneSimpleParam: true }] }, + { code: "(...a) => 1 ? 2 : 3", options: [{ onlyOneSimpleParam: true }] } ], invalid: [ { @@ -71,6 +79,48 @@ ruleTester.run("no-confusing-arrow", rule, { code: "var x = (a) => 1 ? 2 : 3", output: "var x = (a) => (1 ? 2 : 3)", errors: [{ messageId: "confusing" }] + }, + { + code: "var x = () => 1 ? 2 : 3", + output: "var x = () => (1 ? 2 : 3)", + errors: [{ messageId: "confusing" }] + }, + { + code: "var x = () => 1 ? 2 : 3", + output: "var x = () => (1 ? 2 : 3)", + options: [{}], + errors: [{ messageId: "confusing" }] + }, + { + code: "var x = () => 1 ? 2 : 3", + output: "var x = () => (1 ? 2 : 3)", + options: [{ onlyOneSimpleParam: false }], + errors: [{ messageId: "confusing" }] + }, + { + code: "var x = (a, b) => 1 ? 2 : 3", + output: "var x = (a, b) => (1 ? 2 : 3)", + errors: [{ messageId: "confusing" }] + }, + { + code: "var x = (a = b) => 1 ? 2 : 3", + output: "var x = (a = b) => (1 ? 2 : 3)", + errors: [{ messageId: "confusing" }] + }, + { + code: "var x = ({ a }) => 1 ? 2 : 3", + output: "var x = ({ a }) => (1 ? 2 : 3)", + errors: [{ messageId: "confusing" }] + }, + { + code: "var x = ([a]) => 1 ? 2 : 3", + output: "var x = ([a]) => (1 ? 2 : 3)", + errors: [{ messageId: "confusing" }] + }, + { + code: "var x = (...a) => 1 ? 2 : 3", + output: "var x = (...a) => (1 ? 2 : 3)", + errors: [{ messageId: "confusing" }] } ] }); diff --git a/eslint/tests/lib/rules/no-constant-binary-expression.js b/eslint/tests/lib/rules/no-constant-binary-expression.js new file mode 100644 index 0000000..c430c77 --- /dev/null +++ b/eslint/tests/lib/rules/no-constant-binary-expression.js @@ -0,0 +1,313 @@ +/** + * @fileoverview Tests for no-constant-binary-expression rule. + * @author Jordan Eldredge <https://jordaneldredge.com> + */ + +"use strict"; + +//------------------------------------------------------------------------------ +// Requirements +//------------------------------------------------------------------------------ + +const rule = require("../../../lib/rules/no-constant-binary-expression"); +const { RuleTester } = require("../../../lib/rule-tester"); + +//------------------------------------------------------------------------------ +// Tests +//------------------------------------------------------------------------------ + +const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 2021, ecmaFeatures: { jsx: true } } }); + +ruleTester.run("no-constant-binary-expression", rule, { + valid: [ + + // While this _would_ be a constant condition in React, ESLint has a policy of not attributing any specific behavior to JSX. + "<p /> && foo", + "<></> && foo", + "<p /> ?? foo", + "<></> ?? foo", + "arbitraryFunction(n) ?? foo", + "foo.Boolean(n) ?? foo", + "(x += 1) && foo", + "`${bar}` && foo", + "bar && foo", + "delete bar.baz && foo", + "true ? foo : bar", // We leave ConditionalExpression for `no-constant-condition`. + "new Foo() == true", + "foo == true", + "`${foo}` == true", + "`${foo}${bar}` == true", + "`0${foo}` == true", + "`00000000${foo}` == true", + "`0${foo}.000` == true", + "[n] == true", + + "delete bar.baz === true", + + "foo.Boolean(true) && foo", + "function Boolean(n) { return n; }; Boolean(x) ?? foo", + "function String(n) { return n; }; String(x) ?? foo", + "function Number(n) { return n; }; Number(x) ?? foo", + "function Boolean(n) { return Math.random(); }; Boolean(x) === 1", + "function Boolean(n) { return Math.random(); }; Boolean(1) == true", + + "new Foo() === x", + "x === new someObj.Promise()", + "Boolean(foo) === true", + "function foo(undefined) { undefined ?? bar;}", + "function foo(undefined) { undefined == true;}", + "function foo(undefined) { undefined === true;}", + "[...arr, 1] == true", + "[,,,] == true", + { code: "new Foo() === bar;", globals: { Foo: "writable" } } + ], + invalid: [ + + // Error messages + { code: "[] && greeting", errors: [{ message: "Unexpected constant truthiness on the left-hand side of a `&&` expression." }] }, + { code: "[] || greeting", errors: [{ message: "Unexpected constant truthiness on the left-hand side of a `||` expression." }] }, + { code: "[] ?? greeting", errors: [{ message: "Unexpected constant nullishness on the left-hand side of a `??` expression." }] }, + { code: "[] == true", errors: [{ message: "Unexpected constant binary expression. Compares constantly with the right-hand side of the `==`." }] }, + { code: "true == []", errors: [{ message: "Unexpected constant binary expression. Compares constantly with the left-hand side of the `==`." }] }, + { code: "[] != true", errors: [{ message: "Unexpected constant binary expression. Compares constantly with the right-hand side of the `!=`." }] }, + { code: "[] === true", errors: [{ message: "Unexpected constant binary expression. Compares constantly with the right-hand side of the `===`." }] }, + { code: "[] !== true", errors: [{ message: "Unexpected constant binary expression. Compares constantly with the right-hand side of the `!==`." }] }, + + // Motivating examples from the original proposal https://github.com/eslint/eslint/issues/13752 + { code: "!foo == null", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "!foo ?? bar", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "(a + b) / 2 ?? bar", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "String(foo.bar) ?? baz", errors: [{ messageId: "constantShortCircuit" }] }, + { code: '"hello" + name ?? ""', errors: [{ messageId: "constantShortCircuit" }] }, + { code: '[foo?.bar ?? ""] ?? []', errors: [{ messageId: "constantShortCircuit" }] }, + + // Logical expression with constant truthiness + { code: "true && hello", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "true || hello", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "true && foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "'' && foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "100 && foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "+100 && foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "-100 && foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "~100 && foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "/[a-z]/ && foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "Boolean([]) && foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "Boolean() && foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "Boolean([], n) && foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "({}) && foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "[] && foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "(() => {}) && foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "(function() {}) && foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "(class {}) && foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "(class { valueOf() { return x; } }) && foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "(class { [x]() { return x; } }) && foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "new Foo() && foo", errors: [{ messageId: "constantShortCircuit" }] }, + + // (boxed values are always truthy) + { code: "new Boolean(unknown) && foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "(bar = false) && foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "(bar.baz = false) && foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "(bar[0] = false) && foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "`hello ${hello}` && foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "void bar && foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "!true && foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "typeof bar && foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "(bar, baz, true) && foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "undefined && foo", errors: [{ messageId: "constantShortCircuit" }] }, + + // Logical expression with constant nullishness + { code: "({}) ?? foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "([]) ?? foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "(() => {}) ?? foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "(function() {}) ?? foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "(class {}) ?? foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "new Foo() ?? foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "1 ?? foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "/[a-z]/ ?? foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "`${''}` ?? foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "(a = true) ?? foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "(a += 1) ?? foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "(a -= 1) ?? foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "(a *= 1) ?? foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "(a /= 1) ?? foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "(a %= 1) ?? foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "(a <<= 1) ?? foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "(a >>= 1) ?? foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "(a >>>= 1) ?? foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "(a |= 1) ?? foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "(a ^= 1) ?? foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "(a &= 1) ?? foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "undefined ?? foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "!bar ?? foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "void bar ?? foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "typeof bar ?? foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "+bar ?? foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "-bar ?? foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "~bar ?? foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "++bar ?? foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "bar++ ?? foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "--bar ?? foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "bar-- ?? foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "(x == y) ?? foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "(x + y) ?? foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "(x / y) ?? foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "(x instanceof String) ?? foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "(x in y) ?? foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "Boolean(x) ?? foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "String(x) ?? foo", errors: [{ messageId: "constantShortCircuit" }] }, + { code: "Number(x) ?? foo", errors: [{ messageId: "constantShortCircuit" }] }, + + // Binary expression with comparison to null + { code: "({}) != null", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "({}) == null", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "null == ({})", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "({}) == undefined", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "undefined == ({})", errors: [{ messageId: "constantBinaryOperand" }] }, + + // Binary expression with loose comparison to boolean + { code: "({}) != true", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "({}) == true", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "([]) == true", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "([a, b]) == true", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "(() => {}) == true", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "(function() {}) == true", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "void foo == true", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "typeof foo == true", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "![] == true", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "true == class {}", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "true == 1", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "undefined == true", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "true == undefined", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "`hello` == true", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "/[a-z]/ == true", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "({}) == Boolean({})", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "({}) == Boolean()", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "({}) == Boolean(() => {}, foo)", errors: [{ messageId: "constantBinaryOperand" }] }, + + // Binary expression with strict comparison to boolean + { code: "({}) !== true", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "({}) == !({})", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "({}) === true", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "([]) === true", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "(function() {}) === true", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "(() => {}) === true", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "!{} === true", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "typeof n === true", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "void n === true", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "+n === true", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "-n === true", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "~n === true", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "true === true", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "1 === true", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "'hello' === true", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "/[a-z]/ === true", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "undefined === true", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "(a = {}) === true", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "(a += 1) === true", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "(a -= 1) === true", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "(a *= 1) === true", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "(a %= 1) === true", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "(a ** b) === true", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "(a << b) === true", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "(a >> b) === true", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "(a >>> b) === true", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "--a === true", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "a-- === true", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "++a === true", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "a++ === true", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "(a + b) === true", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "(a - b) === true", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "(a * b) === true", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "(a / b) === true", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "(a % b) === true", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "(a | b) === true", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "(a ^ b) === true", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "(a & b) === true", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "Boolean(0) === Boolean(1)", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "true === String(x)", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "true === Number(x)", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "Boolean(0) == !({})", errors: [{ messageId: "constantBinaryOperand" }] }, + + // Binary expression with strict comparison to null + { code: "({}) !== null", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "({}) === null", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "([]) === null", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "(() => {}) === null", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "(function() {}) === null", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "(class {}) === null", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "new Foo() === null", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "`` === null", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "1 === null", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "'hello' === null", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "/[a-z]/ === null", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "true === null", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "null === null", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "a++ === null", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "++a === null", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "--a === null", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "a-- === null", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "!a === null", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "typeof a === null", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "delete a === null", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "void a === null", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "undefined === null", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "(x = {}) === null", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "(x += y) === null", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "(x -= y) === null", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "(a, b, {}) === null", errors: [{ messageId: "constantBinaryOperand" }] }, + + // Binary expression with strict comparison to undefined + { code: "({}) !== undefined", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "({}) === undefined", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "([]) === undefined", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "(() => {}) === undefined", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "(function() {}) === undefined", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "(class {}) === undefined", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "new Foo() === undefined", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "`` === undefined", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "1 === undefined", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "'hello' === undefined", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "/[a-z]/ === undefined", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "true === undefined", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "null === undefined", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "a++ === undefined", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "++a === undefined", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "--a === undefined", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "a-- === undefined", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "!a === undefined", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "typeof a === undefined", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "delete a === undefined", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "void a === undefined", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "undefined === undefined", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "(x = {}) === undefined", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "(x += y) === undefined", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "(x -= y) === undefined", errors: [{ messageId: "constantBinaryOperand" }] }, + { code: "(a, b, {}) === undefined", errors: [{ messageId: "constantBinaryOperand" }] }, + + /* + * If both sides are newly constructed objects, we can tell they will + * never be equal, even with == equality. + */ + { code: "[a] == [a]", errors: [{ messageId: "bothAlwaysNew" }] }, + { code: "[a] != [a]", errors: [{ messageId: "bothAlwaysNew" }] }, + { code: "({}) == []", errors: [{ messageId: "bothAlwaysNew" }] }, + + // Comparing to always new objects + { code: "x === {}", errors: [{ messageId: "alwaysNew" }] }, + { code: "x !== {}", errors: [{ messageId: "alwaysNew" }] }, + { code: "x === []", errors: [{ messageId: "alwaysNew" }] }, + { code: "x === (() => {})", errors: [{ messageId: "alwaysNew" }] }, + { code: "x === (function() {})", errors: [{ messageId: "alwaysNew" }] }, + { code: "x === (class {})", errors: [{ messageId: "alwaysNew" }] }, + { code: "x === new Boolean()", errors: [{ messageId: "alwaysNew" }] }, + { code: "x === new Promise()", env: { es6: true }, errors: [{ messageId: "alwaysNew" }] }, + { code: "x === new WeakSet()", env: { es6: true }, errors: [{ messageId: "alwaysNew" }] }, + { code: "x === (foo, {})", errors: [{ messageId: "alwaysNew" }] }, + { code: "x === (y = {})", errors: [{ messageId: "alwaysNew" }] }, + { code: "x === (y ? {} : [])", errors: [{ messageId: "alwaysNew" }] }, + { code: "x === /[a-z]/", errors: [{ messageId: "alwaysNew" }] }, + + // It's not obvious what this does, but it compares the old value of `x` to the new object. + { code: "x === (x = {})", errors: [{ messageId: "alwaysNew" }] } + ] +}); diff --git a/eslint/tests/lib/rules/no-constant-condition.js b/eslint/tests/lib/rules/no-constant-condition.js index 0b5f3c5..af7bd35 100644 --- a/eslint/tests/lib/rules/no-constant-condition.js +++ b/eslint/tests/lib/rules/no-constant-condition.js @@ -175,7 +175,27 @@ ruleTester.run("no-constant-condition", rule, { "function* foo() {while (true) {function* foo() {yield;}yield;}}", "function* foo() { for (let x = yield; x < 10; x++) {yield;}yield;}", "function* foo() { for (let x = yield; ; x++) { yield; }}", - "if (new Number(x) + 1 === 2) {}" + "if (new Number(x) + 1 === 2) {}", + + // #15467 + "if([a]==[b]) {}", + "if (+[...a]) {}", + "if (+[...[...a]]) {}", + "if (`${[...a]}`) {}", + "if (`${[a]}`) {}", + "if (+[a]) {}", + "if (0 - [a]) {}", + "if (1 * [a]) {}", + + // Boolean function + "if (Boolean(a)) {}", + "if (Boolean(...args)) {}", + "if (foo.Boolean(1)) {}", + "function foo(Boolean) { if (Boolean(1)) {} }", + "const Boolean = () => {}; if (Boolean(1)) {}", + { code: "if (Boolean()) {}", globals: { Boolean: "off" } }, + "const undefined = 'lol'; if (undefined) {}", + { code: "if (undefined) {}", globals: { undefined: "off" } } ], invalid: [ { code: "for(;true;);", errors: [{ messageId: "unexpected", type: "Literal" }] }, @@ -262,8 +282,6 @@ ruleTester.run("no-constant-condition", rule, { // #5228 , typeof conditions { code: "if(typeof x){}", errors: [{ messageId: "unexpected", type: "UnaryExpression" }] }, - { code: "if(`${typeof x}`){}", errors: [{ messageId: "unexpected", type: "TemplateLiteral" }] }, - { code: "if(`${''}${typeof x}`){}", errors: [{ messageId: "unexpected", type: "TemplateLiteral" }] }, { code: "if(typeof 'abc' === 'string'){}", errors: [{ messageId: "unexpected", type: "BinaryExpression" }] }, { code: "if(a = typeof b){}", errors: [{ messageId: "unexpected", type: "AssignmentExpression" }] }, { code: "if(a, typeof b){}", errors: [{ messageId: "unexpected", type: "SequenceExpression" }] }, @@ -358,18 +376,6 @@ ruleTester.run("no-constant-condition", rule, { code: "if(''+[]) {}", errors: [{ messageId: "unexpected", type: "BinaryExpression" }] }, - { - code: "if([a]==[a]) {}", - errors: [{ messageId: "unexpected", type: "BinaryExpression" }] - }, - { - code: "if([a] - '') {}", - errors: [{ messageId: "unexpected", type: "BinaryExpression" }] - }, - { - code: "if(+[a]) {}", - errors: [{ messageId: "unexpected", type: "UnaryExpression" }] - }, { code: "if(+1) {}", errors: [{ messageId: "unexpected", type: "UnaryExpression" }] @@ -397,7 +403,21 @@ ruleTester.run("no-constant-condition", rule, { // Boxed primitives are always truthy { code: "if(new Boolean(foo)) {}", errors: [{ messageId: "unexpected" }] }, { code: "if(new String(foo)) {}", errors: [{ messageId: "unexpected" }] }, - { code: "if(new Number(foo)) {}", errors: [{ messageId: "unexpected" }] } + { code: "if(new Number(foo)) {}", errors: [{ messageId: "unexpected" }] }, + + // Spreading a constant array + { code: "if(`${[...['a']]}`) {}", errors: [{ messageId: "unexpected" }] }, + + /* + * undefined is always falsy (except in old browsers that let you + * re-assign, but that's an obscure enough edge case to not worry about) + */ + { code: "if (undefined) {}", errors: [{ messageId: "unexpected" }] }, + // Coercion to boolean via Boolean function + { code: "if (Boolean(1)) {}", errors: [{ messageId: "unexpected" }] }, + { code: "if (Boolean()) {}", errors: [{ messageId: "unexpected" }] }, + { code: "if (Boolean([a])) {}", errors: [{ messageId: "unexpected" }] }, + { code: "if (Boolean(1)) { function Boolean() {}}", errors: [{ messageId: "unexpected" }] } ] }); diff --git a/eslint/tests/lib/rules/no-control-regex.js b/eslint/tests/lib/rules/no-control-regex.js index 059e50d..14abfbc 100644 --- a/eslint/tests/lib/rules/no-control-regex.js +++ b/eslint/tests/lib/rules/no-control-regex.js @@ -26,7 +26,14 @@ ruleTester.run("no-control-regex", rule, { "var regex = RegExp('x1f')", "new RegExp('[')", "RegExp('[')", - "new (function foo(){})('\\x1f')" + "new (function foo(){})('\\x1f')", + { code: String.raw`/\u{20}/u`, parserOptions: { ecmaVersion: 2015 } }, + String.raw`/\u{1F}/`, + String.raw`/\u{1F}/g`, + String.raw`new RegExp("\\u{20}", "u")`, + String.raw`new RegExp("\\u{1F}")`, + String.raw`new RegExp("\\u{1F}", "g")`, + String.raw`new RegExp("\\u{1F}", flags)` // when flags are unknown, this rule assumes there's no `u` flag ], invalid: [ { code: String.raw`var regex = /\x1f/`, errors: [{ messageId: "unexpected", data: { controlChars: "\\x1f" }, type: "Literal" }] }, @@ -46,6 +53,38 @@ ruleTester.run("no-control-regex", rule, { code: String.raw`var regex = /(?<\u{1d49c}>.)\x1f/`, parserOptions: { ecmaVersion: 2020 }, errors: [{ messageId: "unexpected", data: { controlChars: "\\x1f" }, type: "Literal" }] + }, + { + code: String.raw`new RegExp("\\u001F", flags)`, + errors: [{ messageId: "unexpected", data: { controlChars: "\\x1f" }, type: "Literal" }] + }, + { + code: String.raw`/\u{1111}*\x1F/u`, + parserOptions: { ecmaVersion: 2015 }, + errors: [{ messageId: "unexpected", data: { controlChars: "\\x1f" }, type: "Literal" }] + }, + { + code: String.raw`new RegExp("\\u{1111}*\\x1F", "u")`, + parserOptions: { ecmaVersion: 2015 }, + errors: [{ messageId: "unexpected", data: { controlChars: "\\x1f" }, type: "Literal" }] + }, + { + code: String.raw`/\u{1F}/u`, + parserOptions: { ecmaVersion: 2015 }, + errors: [{ messageId: "unexpected", data: { controlChars: "\\x1f" }, type: "Literal" }] + }, + { + code: String.raw`/\u{1F}/gui`, + parserOptions: { ecmaVersion: 2015 }, + errors: [{ messageId: "unexpected", data: { controlChars: "\\x1f" }, type: "Literal" }] + }, + { + code: String.raw`new RegExp("\\u{1F}", "u")`, + errors: [{ messageId: "unexpected", data: { controlChars: "\\x1f" }, type: "Literal" }] + }, + { + code: String.raw`new RegExp("\\u{1F}", "gui")`, + errors: [{ messageId: "unexpected", data: { controlChars: "\\x1f" }, type: "Literal" }] } ] }); diff --git a/eslint/tests/lib/rules/no-eval.js b/eslint/tests/lib/rules/no-eval.js index 79ba4a1..840bcb2 100644 --- a/eslint/tests/lib/rules/no-eval.js +++ b/eslint/tests/lib/rules/no-eval.js @@ -42,10 +42,15 @@ ruleTester.run("no-eval", rule, { { code: "function foo() { var eval = 'foo'; globalThis[eval]('foo') }", env: { es2020: true } }, "this.noeval('foo');", "function foo() { 'use strict'; this.eval('foo'); }", + { code: "'use strict'; this.eval('foo');", parserOptions: { ecmaFeatures: { globalReturn: true } } }, + { code: "this.eval('foo');", parserOptions: { ecmaVersion: 6, sourceType: "module" } }, { code: "function foo() { this.eval('foo'); }", parserOptions: { ecmaVersion: 6, sourceType: "module" } }, { code: "function foo() { this.eval('foo'); }", parserOptions: { ecmaFeatures: { impliedStrict: true } } }, "var obj = {foo: function() { this.eval('foo'); }}", "var obj = {}; obj.foo = function() { this.eval('foo'); }", + { code: "() => { this.eval('foo') }", parserOptions: { ecmaVersion: 6, sourceType: "module" } }, + { code: "function f() { 'use strict'; () => { this.eval('foo') } }", parserOptions: { ecmaVersion: 6 } }, + { code: "(function f() { 'use strict'; () => { this.eval('foo') } })", parserOptions: { ecmaVersion: 6 } }, { code: "class A { foo() { this.eval(); } }", parserOptions: { ecmaVersion: 6 } }, { code: "class A { static foo() { this.eval(); } }", parserOptions: { ecmaVersion: 6 } }, { code: "class A { field = this.eval(); }", parserOptions: { ecmaVersion: 2022 } }, @@ -92,6 +97,11 @@ ruleTester.run("no-eval", rule, { { code: "(0, window['eval'])('foo')", env: { browser: true }, errors: [{ messageId: "unexpected", type: "MemberExpression", column: 12, endColumn: 18 }] }, { code: "var EVAL = eval; EVAL('foo')", errors: [{ messageId: "unexpected", type: "Identifier", column: 12, endColumn: 16 }] }, { code: "var EVAL = this.eval; EVAL('foo')", errors: [{ messageId: "unexpected", type: "MemberExpression", column: 17, endColumn: 21 }] }, + { code: "'use strict'; var EVAL = this.eval; EVAL('foo')", errors: [{ messageId: "unexpected", type: "MemberExpression", column: 31, endColumn: 35 }] }, + { code: "() => { this.eval('foo'); }", parserOptions: { ecmaVersion: 6 }, errors: [{ messageId: "unexpected", type: "CallExpression", column: 14, endColumn: 18 }] }, + { code: "() => { 'use strict'; this.eval('foo'); }", parserOptions: { ecmaVersion: 6 }, errors: [{ messageId: "unexpected", type: "CallExpression", column: 28, endColumn: 32 }] }, + { code: "'use strict'; () => { this.eval('foo'); }", parserOptions: { ecmaVersion: 6 }, errors: [{ messageId: "unexpected", type: "CallExpression", column: 28, endColumn: 32 }] }, + { code: "() => { 'use strict'; () => { this.eval('foo'); } }", parserOptions: { ecmaVersion: 6 }, errors: [{ messageId: "unexpected", type: "CallExpression", column: 36, endColumn: 40 }] }, { code: "(function(exe){ exe('foo') })(eval);", errors: [{ messageId: "unexpected", type: "Identifier", column: 31, endColumn: 35 }] }, { code: "window.eval('foo')", env: { browser: true }, errors: [{ messageId: "unexpected", type: "CallExpression", column: 8, endColumn: 12 }] }, { code: "window.window.eval('foo')", env: { browser: true }, errors: [{ messageId: "unexpected", type: "CallExpression", column: 15, endColumn: 19 }] }, @@ -100,6 +110,7 @@ ruleTester.run("no-eval", rule, { { code: "global.global.eval('foo')", env: { node: true }, errors: [{ messageId: "unexpected", type: "CallExpression", column: 15, endColumn: 19 }] }, { code: "global.global[`eval`]('foo')", parserOptions: { ecmaVersion: 6 }, env: { node: true }, errors: [{ messageId: "unexpected", type: "CallExpression", column: 15, endColumn: 21 }] }, { code: "this.eval('foo')", errors: [{ messageId: "unexpected", type: "CallExpression", column: 6, endColumn: 10 }] }, + { code: "'use strict'; this.eval('foo')", errors: [{ messageId: "unexpected", type: "CallExpression", column: 20, endColumn: 24 }] }, { code: "function foo() { this.eval('foo') }", errors: [{ messageId: "unexpected", type: "CallExpression", column: 23, endColumn: 27 }] }, { code: "var EVAL = globalThis.eval; EVAL('foo')", env: { es2020: true }, errors: [{ messageId: "unexpected", type: "MemberExpression", column: 23, endColumn: 27 }] }, { code: "globalThis.eval('foo')", env: { es2020: true }, errors: [{ messageId: "unexpected", type: "CallExpression", column: 12, endColumn: 16 }] }, @@ -134,11 +145,23 @@ ruleTester.run("no-eval", rule, { parserOptions: { ecmaVersion: 2022 }, errors: [{ messageId: "unexpected" }] }, + { + code: "'use strict'; class C { [this.eval('foo')] }", + parserOptions: { ecmaVersion: 2022 }, + errors: [{ messageId: "unexpected" }] + }, { code: "class A { static {} [this.eval()]; }", parserOptions: { ecmaVersion: 2022 }, errors: [{ messageId: "unexpected" }] + }, + + // in es3, "use strict" directives do not apply + { + code: "function foo() { 'use strict'; this.eval(); }", + parserOptions: { ecmaVersion: 3 }, + errors: [{ messageId: "unexpected" }] } ] }); diff --git a/eslint/tests/lib/rules/no-extra-parens.js b/eslint/tests/lib/rules/no-extra-parens.js index cb488c8..557b641 100644 --- a/eslint/tests/lib/rules/no-extra-parens.js +++ b/eslint/tests/lib/rules/no-extra-parens.js @@ -1,5 +1,5 @@ /** - * @fileoverview Disallow parenthesesisng higher precedence subexpressions. + * @fileoverview Disallow parenthesising higher precedence subexpressions. * @author Michael Ficarra */ @@ -2334,13 +2334,8 @@ ruleTester.run("no-extra-parens", rule, { invalid("[...(a.b)] = []", "[...a.b] = []", "MemberExpression"), invalid("({ a: (b) } = {})", "({ a: b } = {})", "Identifier"), invalid("({ a: (b.c) } = {})", "({ a: b.c } = {})", "MemberExpression"), - - /* - * TODO: Add these tests for RestElement's parenthesized arguments in object patterns when that becomes supported by Espree. - * - * invalid("({ ...(a) } = {})", "({ ...a } = {})", "Identifier"), - * invalid("({ ...(a.b) } = {})", "({ ...a.b } = {})", "MemberExpression") - */ + invalid("({ ...(a) } = {})", "({ ...a } = {})", "Identifier"), + invalid("({ ...(a.b) } = {})", "({ ...a.b } = {})", "MemberExpression"), // https://github.com/eslint/eslint/issues/11706 (also in valid[]) { diff --git a/eslint/tests/lib/rules/no-fallthrough.js b/eslint/tests/lib/rules/no-fallthrough.js index 0b98d32..d6f6c6f 100644 --- a/eslint/tests/lib/rules/no-fallthrough.js +++ b/eslint/tests/lib/rules/no-fallthrough.js @@ -92,6 +92,22 @@ ruleTester.run("no-fallthrough", rule, { options: [{ commentPattern: "break[\\s\\w]+omitted" }] + }, + { + code: "switch(foo) { case 0: \n\n\n case 1: b(); }", + options: [{ allowEmptyCase: true }] + }, + { + code: "switch(foo) { case 0: \n /* with comments */ \n case 1: b(); }", + options: [{ allowEmptyCase: true }] + }, + { + code: "switch (a) {\n case 1: ; break; \n case 3: }", + options: [{ allowEmptyCase: true }] + }, + { + code: "switch (a) {\n case 1: ; break; \n case 3: }", + options: [{ allowEmptyCase: false }] } ], invalid: [ @@ -214,6 +230,73 @@ ruleTester.run("no-fallthrough", rule, { column: 1 } ] + }, + { + code: "switch(foo) { case 0: \n /* with comments */ \ncase 1: b(); }", + errors: [ + { + messageId: "case", + type: "SwitchCase", + line: 3, + column: 1 + } + ] + }, + { + code: "switch(foo) { case 0:\n\ncase 1: b(); }", + options: [{ + allowEmptyCase: false + }], + errors: [ + { + messageId: "case", + type: "SwitchCase", + line: 3, + column: 1 + } + ] + }, + { + code: "switch(foo) { case 0:\n\ncase 1: b(); }", + options: [{}], + errors: [ + { + messageId: "case", + type: "SwitchCase", + line: 3, + column: 1 + } + ] + }, + { + code: "switch (a) { case 1: \n ; case 2: }", + options: [{ allowEmptyCase: false }], + errors: [ + { + messageId: "case", + type: "SwitchCase", + line: 2, + column: 4 + } + ] + }, + { + code: "switch (a) { case 1: ; case 2: ; case 3: }", + options: [{ allowEmptyCase: true }], + errors: [ + { + messageId: "case", + type: "SwitchCase", + line: 1, + column: 24 + }, + { + messageId: "case", + type: "SwitchCase", + line: 1, + column: 34 + } + ] } ] }); diff --git a/eslint/tests/lib/rules/no-inline-comments.js b/eslint/tests/lib/rules/no-inline-comments.js index 463c86e..7eb0cac 100644 --- a/eslint/tests/lib/rules/no-inline-comments.js +++ b/eslint/tests/lib/rules/no-inline-comments.js @@ -39,6 +39,9 @@ ruleTester.run("no-inline-comments", rule, { "// A solitary comment", "var a = 1; // eslint-disable-line no-debugger", "var a = 1; /* eslint-disable-line no-debugger */", + "foo(); /* global foo */", + "foo(); /* globals foo */", + "var foo; /* exported foo */", // JSX exception `var a = ( diff --git a/eslint/tests/lib/rules/no-invalid-this.js b/eslint/tests/lib/rules/no-invalid-this.js index 62033fd..dd72be4 100644 --- a/eslint/tests/lib/rules/no-invalid-this.js +++ b/eslint/tests/lib/rules/no-invalid-this.js @@ -86,8 +86,7 @@ function extractPatterns(patterns, type) { return thisPattern; })); - // Flatten. - return [].concat(...patternsList); + return patternsList.flat(); } //------------------------------------------------------------------------------ @@ -106,8 +105,8 @@ const patterns = [ code: "console.log(this); z(x => console.log(x, this));", parserOptions: { ecmaVersion: 6 }, errors, - valid: [NORMAL], - invalid: [USE_STRICT, IMPLIED_STRICT, MODULES] + valid: [NORMAL, USE_STRICT, IMPLIED_STRICT], + invalid: [MODULES] }, { code: "console.log(this); z(x => console.log(x, this));", @@ -119,6 +118,24 @@ const patterns = [ valid: [NORMAL], invalid: [USE_STRICT, IMPLIED_STRICT, MODULES] }, + { + code: "() => { this }; this;", + parserOptions: { + ecmaVersion: 6 + }, + errors, + valid: [NORMAL, USE_STRICT, IMPLIED_STRICT], + invalid: [MODULES] + }, + { + code: "this.eval('foo');", + parserOptions: { + ecmaVersion: 6 + }, + errors: [{ messageId: "unexpectedThis", type: "ThisExpression" }], + valid: [NORMAL, USE_STRICT, IMPLIED_STRICT], + invalid: [MODULES] + }, // IIFE. { @@ -365,8 +382,8 @@ const patterns = [ { code: "obj.foo = (() => () => { console.log(this); z(x => console.log(x, this)); })();", parserOptions: { ecmaVersion: 6 }, - valid: [NORMAL], - invalid: [USE_STRICT, IMPLIED_STRICT, MODULES], + valid: [NORMAL, USE_STRICT, IMPLIED_STRICT], + invalid: [MODULES], errors }, { @@ -745,6 +762,18 @@ const patterns = [ }, // Class fields. + { + code: "class C { field = this }", + parserOptions: { ecmaVersion: 2022 }, + valid: [NORMAL, USE_STRICT, IMPLIED_STRICT, MODULES], + invalid: [] + }, + { + code: "class C { static field = this }", + parserOptions: { ecmaVersion: 2022 }, + valid: [NORMAL, USE_STRICT, IMPLIED_STRICT, MODULES], + invalid: [] + }, { code: "class C { field = console.log(this); }", parserOptions: { ecmaVersion: 2022 }, @@ -772,8 +801,22 @@ const patterns = [ { code: "class C { [this.foo]; }", parserOptions: { ecmaVersion: 2022 }, - valid: [NORMAL], // the global this in non-strict mode is OK. - invalid: [USE_STRICT, IMPLIED_STRICT, MODULES], + valid: [NORMAL, USE_STRICT, IMPLIED_STRICT], // `this` is the top-level `this` + invalid: [MODULES], + errors: [{ messageId: "unexpectedThis", type: "ThisExpression" }] + }, + { + code: "class C { foo = () => this; }", + parserOptions: { ecmaVersion: 2022 }, + valid: [NORMAL, USE_STRICT, IMPLIED_STRICT, MODULES], + invalid: [], + errors: [{ messageId: "unexpectedThis", type: "ThisExpression" }] + }, + { + code: "class C { foo = () => { this }; }", + parserOptions: { ecmaVersion: 2022 }, + valid: [NORMAL, USE_STRICT, IMPLIED_STRICT, MODULES], + invalid: [], errors: [{ messageId: "unexpectedThis", type: "ThisExpression" }] }, @@ -817,12 +860,27 @@ const patterns = [ invalid: [NORMAL, USE_STRICT, IMPLIED_STRICT, MODULES], errors: [{ messageId: "unexpectedThis", type: "ThisExpression" }] }, + { + code: "class C { static {} [this]; }", + parserOptions: { ecmaVersion: 2022 }, + valid: [NORMAL, USE_STRICT, IMPLIED_STRICT], + invalid: [MODULES], + errors: [{ messageId: "unexpectedThis", type: "ThisExpression" }] + }, { code: "class C { static {} [this.x]; }", parserOptions: { ecmaVersion: 2022 }, - valid: [NORMAL], - invalid: [USE_STRICT, IMPLIED_STRICT, MODULES], + valid: [NORMAL, USE_STRICT, IMPLIED_STRICT], + invalid: [MODULES], errors: [{ messageId: "unexpectedThis", type: "ThisExpression" }] + }, + + // in es3, "use strict" directives do not apply + { + code: "function foo() { 'use strict'; this.eval(); }", + parserOptions: { ecmaVersion: 3 }, + valid: [NORMAL, USE_STRICT, IMPLIED_STRICT], + invalid: [] } ]; diff --git a/eslint/tests/lib/rules/no-misleading-character-class.js b/eslint/tests/lib/rules/no-misleading-character-class.js index a02e5e1..0aaf34e 100644 --- a/eslint/tests/lib/rules/no-misleading-character-class.js +++ b/eslint/tests/lib/rules/no-misleading-character-class.js @@ -76,223 +76,549 @@ ruleTester.run("no-misleading-character-class", rule, { // RegExp Literals. { code: "var r = /[👍]/", - errors: [{ messageId: "surrogatePairWithoutUFlag" }] + errors: [{ + messageId: "surrogatePairWithoutUFlag", + suggestions: [{ messageId: "suggestUnicodeFlag", output: "var r = /[👍]/u" }] + }] }, { code: "var r = /[\\uD83D\\uDC4D]/", - errors: [{ messageId: "surrogatePairWithoutUFlag" }] + errors: [{ + messageId: "surrogatePairWithoutUFlag", + suggestions: [{ messageId: "suggestUnicodeFlag", output: "var r = /[\\uD83D\\uDC4D]/u" }] + }] + }, + { + code: "var r = /[👍]/", + parserOptions: { ecmaVersion: 3 }, + errors: [{ + messageId: "surrogatePairWithoutUFlag", + suggestions: null // ecmaVersion doesn't support the 'u' flag + }] + }, + { + code: "var r = /[👍]/", + parserOptions: { ecmaVersion: 5 }, + errors: [{ + messageId: "surrogatePairWithoutUFlag", + suggestions: null // ecmaVersion doesn't support the 'u' flag + }] + }, + { + code: "var r = /[👍]\\a/", + errors: [{ + messageId: "surrogatePairWithoutUFlag", + suggestions: null // pattern would be invalid with the 'u' flag + }] + }, + { + code: "var r = /(?<=[👍])/", + parserOptions: { ecmaVersion: 9 }, + errors: [{ + messageId: "surrogatePairWithoutUFlag", + suggestions: [{ messageId: "suggestUnicodeFlag", output: "var r = /(?<=[👍])/u" }] + }] + }, + { + code: "var r = /(?<=[👍])/", + parserOptions: { ecmaVersion: 2018 }, + errors: [{ + messageId: "surrogatePairWithoutUFlag", + suggestions: [{ messageId: "suggestUnicodeFlag", output: "var r = /(?<=[👍])/u" }] + }] }, { code: "var r = /[Á]/", - errors: [{ messageId: "combiningClass" }] + errors: [{ + messageId: "combiningClass", + suggestions: null + }] }, { code: "var r = /[Á]/u", - errors: [{ messageId: "combiningClass" }] + errors: [{ + messageId: "combiningClass", + suggestions: null + }] }, { code: "var r = /[\\u0041\\u0301]/", - errors: [{ messageId: "combiningClass" }] + errors: [{ + messageId: "combiningClass", + suggestions: null + }] }, { code: "var r = /[\\u0041\\u0301]/u", - errors: [{ messageId: "combiningClass" }] + errors: [{ + messageId: "combiningClass", + suggestions: null + }] }, { code: "var r = /[\\u{41}\\u{301}]/u", - errors: [{ messageId: "combiningClass" }] + errors: [{ + messageId: "combiningClass", + suggestions: null + }] }, { code: "var r = /[❇️]/", - errors: [{ messageId: "combiningClass" }] + errors: [{ + messageId: "combiningClass", + suggestions: null + }] }, { code: "var r = /[❇️]/u", - errors: [{ messageId: "combiningClass" }] + errors: [{ + messageId: "combiningClass", + suggestions: null + }] }, { code: "var r = /[\\u2747\\uFE0F]/", - errors: [{ messageId: "combiningClass" }] + errors: [{ + messageId: "combiningClass", + suggestions: null + }] }, { code: "var r = /[\\u2747\\uFE0F]/u", - errors: [{ messageId: "combiningClass" }] + errors: [{ + messageId: "combiningClass", + suggestions: null + }] }, { code: "var r = /[\\u{2747}\\u{FE0F}]/u", - errors: [{ messageId: "combiningClass" }] + errors: [{ + messageId: "combiningClass", + suggestions: null + }] }, { code: "var r = /[👶🏻]/", - errors: [{ messageId: "surrogatePairWithoutUFlag" }] + errors: [{ + messageId: "surrogatePairWithoutUFlag", + suggestions: [{ messageId: "suggestUnicodeFlag", output: "var r = /[👶🏻]/u" }] + }] }, { code: "var r = /[👶🏻]/u", - errors: [{ messageId: "emojiModifier" }] + errors: [{ + messageId: "emojiModifier", + suggestions: null + }] }, { code: "var r = /[\\uD83D\\uDC76\\uD83C\\uDFFB]/u", - errors: [{ messageId: "emojiModifier" }] + errors: [{ + messageId: "emojiModifier", + suggestions: null + }] }, { code: "var r = /[\\u{1F476}\\u{1F3FB}]/u", - errors: [{ messageId: "emojiModifier" }] + errors: [{ + messageId: "emojiModifier", + suggestions: null + }] }, { code: "var r = /[🇯🇵]/", - errors: [{ messageId: "surrogatePairWithoutUFlag" }] + errors: [{ + messageId: "surrogatePairWithoutUFlag", + suggestions: [{ messageId: "suggestUnicodeFlag", output: "var r = /[🇯🇵]/u" }] + }] + }, + { + code: "var r = /[🇯🇵]/i", + errors: [{ + messageId: "surrogatePairWithoutUFlag", + suggestions: [{ messageId: "suggestUnicodeFlag", output: "var r = /[🇯🇵]/iu" }] + }] }, { code: "var r = /[🇯🇵]/u", - errors: [{ messageId: "regionalIndicatorSymbol" }] + errors: [{ + messageId: "regionalIndicatorSymbol", + suggestions: null + }] }, { code: "var r = /[\\uD83C\\uDDEF\\uD83C\\uDDF5]/u", - errors: [{ messageId: "regionalIndicatorSymbol" }] + errors: [{ + messageId: "regionalIndicatorSymbol", + suggestions: null + }] }, { code: "var r = /[\\u{1F1EF}\\u{1F1F5}]/u", - errors: [{ messageId: "regionalIndicatorSymbol" }] + errors: [{ + messageId: "regionalIndicatorSymbol", + suggestions: null + }] }, { code: "var r = /[👨‍👩‍👦]/", errors: [ - { messageId: "surrogatePairWithoutUFlag" }, - { messageId: "zwj" } + { + messageId: "surrogatePairWithoutUFlag", + suggestions: [{ messageId: "suggestUnicodeFlag", output: "var r = /[👨‍👩‍👦]/u" }] + }, + { + messageId: "zwj", + suggestions: null + } ] }, { code: "var r = /[👨‍👩‍👦]/u", - errors: [{ messageId: "zwj" }] + errors: [{ + messageId: "zwj", + suggestions: null + }] }, { code: "var r = /[\\uD83D\\uDC68\\u200D\\uD83D\\uDC69\\u200D\\uD83D\\uDC66]/u", - errors: [{ messageId: "zwj" }] + errors: [{ + messageId: "zwj", + suggestions: null + }] }, { code: "var r = /[\\u{1F468}\\u{200D}\\u{1F469}\\u{200D}\\u{1F466}]/u", - errors: [{ messageId: "zwj" }] + errors: [{ + messageId: "zwj", + suggestions: null + }] }, // RegExp constructors. { code: String.raw`var r = new RegExp("[👍]", "")`, - errors: [{ messageId: "surrogatePairWithoutUFlag" }] + errors: [{ + messageId: "surrogatePairWithoutUFlag", + suggestions: [{ messageId: "suggestUnicodeFlag", output: String.raw`var r = new RegExp("[👍]", "u")` }] + }] + }, + { + code: "var r = new RegExp('[👍]', ``)", + errors: [{ + messageId: "surrogatePairWithoutUFlag", + suggestions: [{ messageId: "suggestUnicodeFlag", output: "var r = new RegExp('[👍]', `u`)" }] + }] + }, + { + code: String.raw`var r = new RegExp("[👍]", flags)`, + errors: [{ + messageId: "surrogatePairWithoutUFlag", + suggestions: null + }] + }, + { + code: String.raw`const flags = ""; var r = new RegExp("[👍]", flags)`, + errors: [{ + messageId: "surrogatePairWithoutUFlag", + suggestions: null + }] }, { code: String.raw`var r = new RegExp("[\\uD83D\\uDC4D]", "")`, - errors: [{ messageId: "surrogatePairWithoutUFlag" }] + errors: [{ + messageId: "surrogatePairWithoutUFlag", + suggestions: [{ messageId: "suggestUnicodeFlag", output: String.raw`var r = new RegExp("[\\uD83D\\uDC4D]", "u")` }] + }] + }, + { + code: String.raw`var r = new RegExp("[👍]", "")`, + parserOptions: { ecmaVersion: 3 }, + errors: [{ + messageId: "surrogatePairWithoutUFlag", + suggestions: null // ecmaVersion doesn't support the 'u' flag + }] + }, + { + code: String.raw`var r = new RegExp("[👍]", "")`, + parserOptions: { ecmaVersion: 5 }, + errors: [{ + messageId: "surrogatePairWithoutUFlag", + suggestions: null // ecmaVersion doesn't support the 'u' flag + }] + }, + { + code: String.raw`var r = new RegExp("[👍]\\a", "")`, + errors: [{ + messageId: "surrogatePairWithoutUFlag", + suggestions: null // pattern would be invalid with the 'u' flag + }] + }, + { + code: String.raw`var r = new RegExp("/(?<=[👍])", "")`, + parserOptions: { ecmaVersion: 9 }, + errors: [{ + messageId: "surrogatePairWithoutUFlag", + suggestions: [{ messageId: "suggestUnicodeFlag", output: String.raw`var r = new RegExp("/(?<=[👍])", "u")` }] + }] + }, + { + code: String.raw`var r = new RegExp("/(?<=[👍])", "")`, + parserOptions: { ecmaVersion: 2018 }, + errors: [{ + messageId: "surrogatePairWithoutUFlag", + suggestions: [{ messageId: "suggestUnicodeFlag", output: String.raw`var r = new RegExp("/(?<=[👍])", "u")` }] + }] }, { code: String.raw`var r = new RegExp("[Á]", "")`, - errors: [{ messageId: "combiningClass" }] + errors: [{ + messageId: "combiningClass", + suggestions: null + }] }, { code: String.raw`var r = new RegExp("[Á]", "u")`, - errors: [{ messageId: "combiningClass" }] + errors: [{ + messageId: "combiningClass", + suggestions: null + }] }, { code: String.raw`var r = new RegExp("[\\u0041\\u0301]", "")`, - errors: [{ messageId: "combiningClass" }] + errors: [{ + messageId: "combiningClass", + suggestions: null + }] }, { code: String.raw`var r = new RegExp("[\\u0041\\u0301]", "u")`, - errors: [{ messageId: "combiningClass" }] + errors: [{ + messageId: "combiningClass", + suggestions: null + }] }, { code: String.raw`var r = new RegExp("[\\u{41}\\u{301}]", "u")`, - errors: [{ messageId: "combiningClass" }] + errors: [{ + messageId: "combiningClass", + suggestions: null + }] }, { code: String.raw`var r = new RegExp("[❇️]", "")`, - errors: [{ messageId: "combiningClass" }] + errors: [{ + messageId: "combiningClass", + suggestions: null + }] }, { code: String.raw`var r = new RegExp("[❇️]", "u")`, - errors: [{ messageId: "combiningClass" }] + errors: [{ + messageId: "combiningClass", + suggestions: null + }] }, { code: String.raw`var r = new RegExp("[\\u2747\\uFE0F]", "")`, - errors: [{ messageId: "combiningClass" }] + errors: [{ + messageId: "combiningClass", + suggestions: null + }] }, { code: String.raw`var r = new RegExp("[\\u2747\\uFE0F]", "u")`, - errors: [{ messageId: "combiningClass" }] + errors: [{ + messageId: "combiningClass", + suggestions: null + }] }, { code: String.raw`var r = new RegExp("[\\u{2747}\\u{FE0F}]", "u")`, - errors: [{ messageId: "combiningClass" }] + errors: [{ + messageId: "combiningClass", + suggestions: null + }] }, { code: String.raw`var r = new RegExp("[👶🏻]", "")`, - errors: [{ messageId: "surrogatePairWithoutUFlag" }] + errors: [{ + messageId: "surrogatePairWithoutUFlag", + suggestions: [{ messageId: "suggestUnicodeFlag", output: String.raw`var r = new RegExp("[👶🏻]", "u")` }] + }] }, { code: String.raw`var r = new RegExp("[👶🏻]", "u")`, - errors: [{ messageId: "emojiModifier" }] + errors: [{ + messageId: "emojiModifier", + suggestions: null + }] }, { code: String.raw`var r = new RegExp("[\\uD83D\\uDC76\\uD83C\\uDFFB]", "u")`, - errors: [{ messageId: "emojiModifier" }] + errors: [{ + messageId: "emojiModifier", + suggestions: null + }] }, { code: String.raw`var r = new RegExp("[\\u{1F476}\\u{1F3FB}]", "u")`, - errors: [{ messageId: "emojiModifier" }] + errors: [{ + messageId: "emojiModifier", + suggestions: null + }] }, { code: String.raw`var r = new RegExp("[🇯🇵]", "")`, - errors: [{ messageId: "surrogatePairWithoutUFlag" }] + errors: [{ + messageId: "surrogatePairWithoutUFlag", + suggestions: [{ messageId: "suggestUnicodeFlag", output: String.raw`var r = new RegExp("[🇯🇵]", "u")` }] + }] + }, + { + code: String.raw`var r = new RegExp("[🇯🇵]", "i")`, + errors: [{ + messageId: "surrogatePairWithoutUFlag", + suggestions: [{ messageId: "suggestUnicodeFlag", output: String.raw`var r = new RegExp("[🇯🇵]", "iu")` }] + }] + }, + { + code: "var r = new RegExp('[🇯🇵]', `i`)", + errors: [{ + messageId: "surrogatePairWithoutUFlag", + suggestions: [{ messageId: "suggestUnicodeFlag", output: "var r = new RegExp('[🇯🇵]', `iu`)" }] + }] + }, + { + code: "var r = new RegExp('[🇯🇵]', `${foo}`)", + errors: [{ + messageId: "surrogatePairWithoutUFlag", + suggestions: [{ messageId: "suggestUnicodeFlag", output: "var r = new RegExp('[🇯🇵]', `${foo}u`)" }] + }] + }, + { + code: String.raw`var r = new RegExp("[🇯🇵]")`, + errors: [{ + messageId: "surrogatePairWithoutUFlag", + suggestions: [{ messageId: "suggestUnicodeFlag", output: String.raw`var r = new RegExp("[🇯🇵]", "u")` }] + }] + }, + { + code: String.raw`var r = new RegExp("[🇯🇵]",)`, + parserOptions: { ecmaVersion: 2017 }, + errors: [{ + messageId: "surrogatePairWithoutUFlag", + suggestions: [{ messageId: "suggestUnicodeFlag", output: String.raw`var r = new RegExp("[🇯🇵]", "u",)` }] + }] + }, + { + code: String.raw`var r = new RegExp(("[🇯🇵]"))`, + errors: [{ + messageId: "surrogatePairWithoutUFlag", + suggestions: [{ messageId: "suggestUnicodeFlag", output: String.raw`var r = new RegExp(("[🇯🇵]"), "u")` }] + }] + }, + { + code: String.raw`var r = new RegExp((("[🇯🇵]")))`, + errors: [{ + messageId: "surrogatePairWithoutUFlag", + suggestions: [{ messageId: "suggestUnicodeFlag", output: String.raw`var r = new RegExp((("[🇯🇵]")), "u")` }] + }] + }, + { + code: String.raw`var r = new RegExp(("[🇯🇵]"),)`, + parserOptions: { ecmaVersion: 2017 }, + errors: [{ + messageId: "surrogatePairWithoutUFlag", + suggestions: [{ messageId: "suggestUnicodeFlag", output: String.raw`var r = new RegExp(("[🇯🇵]"), "u",)` }] + }] }, { code: String.raw`var r = new RegExp("[🇯🇵]", "u")`, - errors: [{ messageId: "regionalIndicatorSymbol" }] + errors: [{ + messageId: "regionalIndicatorSymbol", + suggestions: null + }] }, { code: String.raw`var r = new RegExp("[\\uD83C\\uDDEF\\uD83C\\uDDF5]", "u")`, - errors: [{ messageId: "regionalIndicatorSymbol" }] + errors: [{ + messageId: "regionalIndicatorSymbol", + suggestions: null + }] }, { code: String.raw`var r = new RegExp("[\\u{1F1EF}\\u{1F1F5}]", "u")`, - errors: [{ messageId: "regionalIndicatorSymbol" }] + errors: [{ + messageId: "regionalIndicatorSymbol", + suggestions: null + }] }, { code: String.raw`var r = new RegExp("[👨‍👩‍👦]", "")`, errors: [ - { messageId: "surrogatePairWithoutUFlag" }, - { messageId: "zwj" } + { + messageId: "surrogatePairWithoutUFlag", + suggestions: [{ messageId: "suggestUnicodeFlag", output: String.raw`var r = new RegExp("[👨‍👩‍👦]", "u")` }] + }, + { + messageId: "zwj", + suggestions: null + } ] }, { code: String.raw`var r = new RegExp("[👨‍👩‍👦]", "u")`, - errors: [{ messageId: "zwj" }] + errors: [{ + messageId: "zwj", + suggestions: null + }] }, { code: String.raw`var r = new RegExp("[\\uD83D\\uDC68\\u200D\\uD83D\\uDC69\\u200D\\uD83D\\uDC66]", "u")`, - errors: [{ messageId: "zwj" }] + errors: [{ + messageId: "zwj", + suggestions: null + }] }, { code: String.raw`var r = new RegExp("[\\u{1F468}\\u{200D}\\u{1F469}\\u{200D}\\u{1F466}]", "u")`, - errors: [{ messageId: "zwj" }] + errors: [{ + messageId: "zwj", + suggestions: null + }] }, { code: String.raw`var r = new globalThis.RegExp("[❇️]", "")`, env: { es2020: true }, - errors: [{ messageId: "combiningClass" }] + errors: [{ + messageId: "combiningClass", + suggestions: null + }] }, { code: String.raw`var r = new globalThis.RegExp("[👶🏻]", "u")`, env: { es2020: true }, - errors: [{ messageId: "emojiModifier" }] + errors: [{ + messageId: "emojiModifier", + suggestions: null + }] }, { code: String.raw`var r = new globalThis.RegExp("[🇯🇵]", "")`, env: { es2020: true }, - errors: [{ messageId: "surrogatePairWithoutUFlag" }] + errors: [{ + messageId: "surrogatePairWithoutUFlag", + suggestions: [{ messageId: "suggestUnicodeFlag", output: String.raw`var r = new globalThis.RegExp("[🇯🇵]", "u")` }] + }] }, { code: String.raw`var r = new globalThis.RegExp("[\\u{1F468}\\u{200D}\\u{1F469}\\u{200D}\\u{1F466}]", "u")`, env: { es2020: true }, - errors: [{ messageId: "zwj" }] + errors: [{ + messageId: "zwj", + suggestions: null + }] } ] }); diff --git a/eslint/tests/lib/rules/no-multi-assign.js b/eslint/tests/lib/rules/no-multi-assign.js index 7920d99..94db78f 100644 --- a/eslint/tests/lib/rules/no-multi-assign.js +++ b/eslint/tests/lib/rules/no-multi-assign.js @@ -39,7 +39,7 @@ function errorAt(line, column, type) { const ruleTester = new RuleTester(); -ruleTester.run("no-mutli-assign", rule, { +ruleTester.run("no-multi-assign", rule, { valid: [ "var a, b, c,\nd = 0;", "var a = 1; var b = 2; var c = 3;\nvar d = 0;", diff --git a/eslint/tests/lib/rules/no-octal.js b/eslint/tests/lib/rules/no-octal.js index dd2839e..a48bf5a 100644 --- a/eslint/tests/lib/rules/no-octal.js +++ b/eslint/tests/lib/rules/no-octal.js @@ -31,77 +31,77 @@ ruleTester.run("no-octal", rule, { { code: "var a = 01234;", errors: [{ - messageId: "noOcatal", + messageId: "noOctal", type: "Literal" }] }, { code: "a = 1 + 01234;", errors: [{ - messageId: "noOcatal", + messageId: "noOctal", type: "Literal" }] }, { code: "00", errors: [{ - messageId: "noOcatal", + messageId: "noOctal", type: "Literal" }] }, { code: "08", errors: [{ - messageId: "noOcatal", + messageId: "noOctal", type: "Literal" }] }, { code: "09.1", errors: [{ - messageId: "noOcatal", + messageId: "noOctal", type: "Literal" }] }, { code: "09e1", errors: [{ - messageId: "noOcatal", + messageId: "noOctal", type: "Literal" }] }, { code: "09.1e1", errors: [{ - messageId: "noOcatal", + messageId: "noOctal", type: "Literal" }] }, { code: "018", errors: [{ - messageId: "noOcatal", + messageId: "noOctal", type: "Literal" }] }, { code: "019.1", errors: [{ - messageId: "noOcatal", + messageId: "noOctal", type: "Literal" }] }, { code: "019e1", errors: [{ - messageId: "noOcatal", + messageId: "noOctal", type: "Literal" }] }, { code: "019.1e1", errors: [{ - messageId: "noOcatal", + messageId: "noOctal", type: "Literal" }] } diff --git a/eslint/tests/lib/rules/no-redeclare.js b/eslint/tests/lib/rules/no-redeclare.js index bbbe580..5754d19 100644 --- a/eslint/tests/lib/rules/no-redeclare.js +++ b/eslint/tests/lib/rules/no-redeclare.js @@ -105,8 +105,8 @@ ruleTester.run("no-redeclare", rule, { options: [{ builtinGlobals: true }], env: { browser: false } }, - { code: "var glovalThis = foo", options: [{ builtinGlobals: true }], env: { es6: true } }, - { code: "var glovalThis = foo", options: [{ builtinGlobals: true }], env: { es2017: true } }, + { code: "var globalThis = foo", options: [{ builtinGlobals: true }], env: { es6: true } }, + { code: "var globalThis = foo", options: [{ builtinGlobals: true }], env: { es2017: true } }, // Comments and built-ins. { diff --git a/eslint/tests/lib/rules/no-restricted-exports.js b/eslint/tests/lib/rules/no-restricted-exports.js index ac0602a..631fd6f 100644 --- a/eslint/tests/lib/rules/no-restricted-exports.js +++ b/eslint/tests/lib/rules/no-restricted-exports.js @@ -16,7 +16,7 @@ const { RuleTester } = require("../../../lib/rule-tester"); // Tests //------------------------------------------------------------------------------ -const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 2020, sourceType: "module" } }); +const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 2022, sourceType: "module" } }); ruleTester.run("no-restricted-exports", rule, { valid: [ @@ -57,8 +57,12 @@ ruleTester.run("no-restricted-exports", rule, { { code: "var b; export { b as a };", options: [{ restrictedNamedExports: ["x"] }] }, { code: "export { a } from 'foo';", options: [{ restrictedNamedExports: ["x"] }] }, { code: "export { b as a } from 'foo';", options: [{ restrictedNamedExports: ["x"] }] }, + { code: "export { '' } from 'foo';", options: [{ restrictedNamedExports: ["undefined"] }] }, + { code: "export { '' } from 'foo';", options: [{ restrictedNamedExports: [" "] }] }, + { code: "export { ' ' } from 'foo';", options: [{ restrictedNamedExports: [""] }] }, + { code: "export { ' a', 'a ' } from 'foo';", options: [{ restrictedNamedExports: ["a"] }] }, - // does not mistakenly disallow non-exported identifiers that appear in named export declarations + // does not mistakenly disallow non-exported names that appear in named export declarations { code: "export var b = a;", options: [{ restrictedNamedExports: ["a"] }] }, { code: "export let [b = a] = [];", options: [{ restrictedNamedExports: ["a"] }] }, { code: "export const [b] = [a];", options: [{ restrictedNamedExports: ["a"] }] }, @@ -69,7 +73,10 @@ ruleTester.run("no-restricted-exports", rule, { { code: "export class A { a(){} }", options: [{ restrictedNamedExports: ["a"] }] }, { code: "export class A extends B {}", options: [{ restrictedNamedExports: ["B"] }] }, { code: "var a; export { a as b };", options: [{ restrictedNamedExports: ["a"] }] }, + { code: "var a; export { a as 'a ' };", options: [{ restrictedNamedExports: ["a"] }] }, { code: "export { a as b } from 'foo';", options: [{ restrictedNamedExports: ["a"] }] }, + { code: "export { a as 'a ' } from 'foo';", options: [{ restrictedNamedExports: ["a"] }] }, + { code: "export { 'a' as 'a ' } from 'foo';", options: [{ restrictedNamedExports: ["a"] }] }, // does not check source in re-export declarations { code: "export { b } from 'a';", options: [{ restrictedNamedExports: ["a"] }] }, @@ -188,6 +195,59 @@ ruleTester.run("no-restricted-exports", rule, { errors: [{ messageId: "restrictedNamed", data: { name: "a" }, type: "Identifier" }] }, + // string literals + { + code: "let a; export { a as 'a' };", + options: [{ restrictedNamedExports: ["a"] }], + errors: [{ messageId: "restrictedNamed", data: { name: "a" }, type: "Literal", column: 22 }] + }, + { + code: "let a; export { a as 'b' };", + options: [{ restrictedNamedExports: ["b"] }], + errors: [{ messageId: "restrictedNamed", data: { name: "b" }, type: "Literal", column: 22 }] + }, + { + code: "let a; export { a as ' b ' };", + options: [{ restrictedNamedExports: [" b "] }], + errors: [{ messageId: "restrictedNamed", data: { name: " b " }, type: "Literal", column: 22 }] + }, + { + code: "let a; export { a as '👍' };", + options: [{ restrictedNamedExports: ["👍"] }], + errors: [{ messageId: "restrictedNamed", data: { name: "👍" }, type: "Literal", column: 22 }] + }, + { + code: "export { 'a' } from 'foo';", + options: [{ restrictedNamedExports: ["a"] }], + errors: [{ messageId: "restrictedNamed", data: { name: "a" }, type: "Literal" }] + }, + { + code: "export { '' } from 'foo';", + options: [{ restrictedNamedExports: [""] }], + errors: [{ messageId: "restrictedNamed", data: { name: "" }, type: "Literal" }] + }, + { + code: "export { ' ' } from 'foo';", + options: [{ restrictedNamedExports: [" "] }], + errors: [{ messageId: "restrictedNamed", data: { name: " " }, type: "Literal" }] + }, + { + code: "export { b as 'a' } from 'foo';", + options: [{ restrictedNamedExports: ["a"] }], + errors: [{ messageId: "restrictedNamed", data: { name: "a" }, type: "Literal" }] + }, + { + code: "export { b as '\\u0061' } from 'foo';", + options: [{ restrictedNamedExports: ["a"] }], + errors: [{ messageId: "restrictedNamed", data: { name: "a" }, type: "Literal" }] + }, + { + code: "export * as 'a' from 'foo';", + options: [{ restrictedNamedExports: ["a"] }], + errors: [{ messageId: "restrictedNamed", data: { name: "a" }, type: "Literal" }] + }, + + // destructuring { code: "export var [a] = [];", @@ -341,7 +401,7 @@ ruleTester.run("no-restricted-exports", rule, { // Note: duplicate identifiers in the same export declaration are a 'duplicate export' syntax error. Example: export var a, a; - // invalid and valid or multiple ivalid in the same declaration + // invalid and valid or multiple invalid in the same declaration { code: "export var a, b;", options: [{ restrictedNamedExports: ["a"] }], diff --git a/eslint/tests/lib/rules/no-restricted-imports.js b/eslint/tests/lib/rules/no-restricted-imports.js index c86e67e..5403812 100644 --- a/eslint/tests/lib/rules/no-restricted-imports.js +++ b/eslint/tests/lib/rules/no-restricted-imports.js @@ -16,7 +16,7 @@ const rule = require("../../../lib/rules/no-restricted-imports"), // Tests //------------------------------------------------------------------------------ -const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 2020, sourceType: "module" } }); +const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 2022, sourceType: "module" } }); ruleTester.run("no-restricted-imports", rule, { valid: [ @@ -54,6 +54,16 @@ ruleTester.run("no-restricted-imports", rule, { code: "import withPatterns from \"foo/bar\";", options: [{ patterns: [{ group: ["foo/*", "!foo/bar"], message: "foo is forbidden, use bar instead" }] }] }, + { + code: "import withPatternsCaseSensitive from 'foo';", + options: [{ + patterns: [{ + group: ["FOO"], + message: "foo is forbidden, use bar instead", + caseSensitive: true + }] + }] + }, { code: "import AllowedObject from \"foo\";", options: [{ @@ -92,6 +102,34 @@ ruleTester.run("no-restricted-imports", rule, { }] }] }, + { + code: "import { 'AllowedObject' as bar } from \"foo\";", + options: [{ + paths: [{ + name: "foo", + importNames: ["DisallowedObject"], + message: "Please import 'DisallowedObject' from /bar/ instead." + }] + }] + }, + { + code: "import { ' ' as bar } from \"foo\";", + options: [{ + paths: [{ + name: "foo", + importNames: [""] + }] + }] + }, + { + code: "import { '' as bar } from \"foo\";", + options: [{ + paths: [{ + name: "foo", + importNames: [" "] + }] + }] + }, { code: "import { DisallowedObject } from \"foo\";", options: [{ @@ -112,6 +150,16 @@ ruleTester.run("no-restricted-imports", rule, { }] }] }, + { + code: "import { 'AllowedObject' as DisallowedObject } from \"foo\";", + options: [{ + paths: [{ + name: "foo", + importNames: ["DisallowedObject"], + message: "Please import 'DisallowedObject' from /bar/ instead." + }] + }] + }, { code: "import { AllowedObject, AllowedObjectTwo } from \"foo\";", options: [{ @@ -196,6 +244,44 @@ ruleTester.run("no-restricted-imports", rule, { name: "bar", importNames: ["DisallowedObject"] }] + }, + { + code: "export { 'AllowedObject' } from \"foo\";", + options: [{ + paths: [{ + name: "foo", + importNames: ["DisallowedObject"] + }] + }] + }, + { + code: "export { 'AllowedObject' as DisallowedObject } from \"foo\";", + options: [{ + paths: [{ + name: "foo", + importNames: ["DisallowedObject"] + }] + }] + }, + { + code: "import { Bar } from '../../my/relative-module';", + options: [{ + patterns: [{ + group: ["**/my/relative-module"], + importNames: ["Foo"] + }] + }] + }, + { + + // Default import should not be reported unless importNames includes 'default' + code: "import Foo from '../../my/relative-module';", + options: [{ + patterns: [{ + group: ["**/my/relative-module"], + importNames: ["Foo"] + }] + }] } ], invalid: [{ @@ -288,6 +374,16 @@ ruleTester.run("no-restricted-imports", rule, { column: 1, endColumn: 36 }] + }, { + code: "import withPatternsCaseInsensitive from 'foo';", + options: [{ patterns: [{ group: ["FOO"] }] }], + errors: [{ + message: "'foo' import is restricted from being used by a pattern.", + type: "ImportDeclaration", + line: 1, + column: 1, + endColumn: 47 + }] }, { code: "import withGitignores from \"foo/bar\";", options: [{ patterns: ["foo/*", "!foo/baz"] }], @@ -344,6 +440,70 @@ ruleTester.run("no-restricted-imports", rule, { column: 9, endColumn: 17 }] + }, { + code: "export {'foo' as b} from \"fs\";", + options: [{ + paths: [{ + name: "fs", + importNames: ["foo"], + message: "Don't import 'foo'." + }] + }], + errors: [{ + message: "'foo' import from 'fs' is restricted. Don't import 'foo'.", + type: "ExportNamedDeclaration", + line: 1, + column: 9, + endColumn: 19 + }] + }, { + code: "export {'foo'} from \"fs\";", + options: [{ + paths: [{ + name: "fs", + importNames: ["foo"], + message: "Don't import 'foo'." + }] + }], + errors: [{ + message: "'foo' import from 'fs' is restricted. Don't import 'foo'.", + type: "ExportNamedDeclaration", + line: 1, + column: 9, + endColumn: 14 + }] + }, { + code: "export {'👍'} from \"fs\";", + options: [{ + paths: [{ + name: "fs", + importNames: ["👍"], + message: "Don't import '👍'." + }] + }], + errors: [{ + message: "'👍' import from 'fs' is restricted. Don't import '👍'.", + type: "ExportNamedDeclaration", + line: 1, + column: 9, + endColumn: 13 + }] + }, { + code: "export {''} from \"fs\";", + options: [{ + paths: [{ + name: "fs", + importNames: [""], + message: "Don't import ''." + }] + }], + errors: [{ + message: "'' import from 'fs' is restricted. Don't import ''.", + type: "ExportNamedDeclaration", + line: 1, + column: 9, + endColumn: 11 + }] }, { code: "export * as ns from \"fs\";", options: [{ @@ -505,6 +665,55 @@ ruleTester.run("no-restricted-imports", rule, { endColumn: 43 }] }, + { + code: "import { 'DisallowedObject' as AllowedObject } from \"foo\";", + options: [{ + paths: [{ + name: "foo", + importNames: ["DisallowedObject"], + message: "Please import 'DisallowedObject' from /bar/ instead." + }] + }], + errors: [{ + message: "'DisallowedObject' import from 'foo' is restricted. Please import 'DisallowedObject' from /bar/ instead.", + type: "ImportDeclaration", + line: 1, + column: 10, + endColumn: 45 + }] + }, + { + code: "import { '👍' as bar } from \"foo\";", + options: [{ + paths: [{ + name: "foo", + importNames: ["👍"] + }] + }], + errors: [{ + message: "'👍' import from 'foo' is restricted.", + type: "ImportDeclaration", + line: 1, + column: 10, + endColumn: 21 + }] + }, + { + code: "import { '' as bar } from \"foo\";", + options: [{ + paths: [{ + name: "foo", + importNames: [""] + }] + }], + errors: [{ + message: "'' import from 'foo' is restricted.", + type: "ImportDeclaration", + line: 1, + column: 10, + endColumn: 19 + }] + }, { code: "import { AllowedObject, DisallowedObject } from \"foo\";", options: [{ @@ -894,6 +1103,138 @@ ruleTester.run("no-restricted-imports", rule, { column: 1, endColumn: 41 }] + }, + { + code: "import absoluteWithPatterns from '#foo/bar';", + options: [{ patterns: ["\\#foo"] }], + errors: [{ + message: "'#foo/bar' import is restricted from being used by a pattern.", + type: "ImportDeclaration", + line: 1, + column: 1, + endColumn: 45 + }] + }, + { + code: "import { Foo } from '../../my/relative-module';", + options: [{ + patterns: [{ + group: ["**/my/relative-module"], + importNames: ["Foo"] + }] + }], + errors: [{ + type: "ImportDeclaration", + line: 1, + column: 10, + endColumn: 13, + message: "'Foo' import from '../../my/relative-module' is restricted from being used by a pattern." + }] + }, + { + code: "import { Foo, Bar } from '../../my/relative-module';", + options: [{ + patterns: [{ + group: ["**/my/relative-module"], + importNames: ["Foo", "Bar"], + message: "Import from @/utils instead." + }] + }], + errors: [{ + type: "ImportDeclaration", + line: 1, + column: 10, + endColumn: 13, + message: "'Foo' import from '../../my/relative-module' is restricted from being used by a pattern. Import from @/utils instead." + }, { + type: "ImportDeclaration", + line: 1, + column: 15, + endColumn: 18, + message: "'Bar' import from '../../my/relative-module' is restricted from being used by a pattern. Import from @/utils instead." + }] + }, + { + + /* + * Star import should be reported for consistency with `paths` option (see: https://github.com/eslint/eslint/pull/16059#discussion_r908749964) + * For example, import * as All allows for calling/referencing the restricted import All.Foo + */ + code: "import * as All from '../../my/relative-module';", + options: [{ + patterns: [{ + group: ["**/my/relative-module"], + importNames: ["Foo"] + }] + }], + errors: [{ + message: "* import is invalid because 'Foo' from '../../my/relative-module' is restricted from being used by a pattern.", + type: "ImportDeclaration", + line: 1, + column: 8, + endColumn: 16 + }] + }, + { + + /* + * Star import should be reported for consistency with `paths` option (see: https://github.com/eslint/eslint/pull/16059#discussion_r908749964) + * For example, import * as All allows for calling/referencing the restricted import All.Foo + */ + code: "import * as AllWithCustomMessage from '../../my/relative-module';", + options: [{ + patterns: [{ + group: ["**/my/relative-module"], + importNames: ["Foo"], + message: "Import from @/utils instead." + }] + }], + errors: [{ + message: "* import is invalid because 'Foo' from '../../my/relative-module' is restricted from being used by a pattern. Import from @/utils instead.", + type: "ImportDeclaration", + line: 1, + column: 8, + endColumn: 33 + }] + }, + { + code: "import def, * as ns from 'mod';", + options: [{ + patterns: [{ + group: ["mod"], + importNames: ["default"] + }] + }], + errors: [{ + type: "ImportDeclaration", + line: 1, + column: 8, + endColumn: 11, + message: "'default' import from 'mod' is restricted from being used by a pattern." + }, + { + type: "ImportDeclaration", + line: 1, + column: 13, + endColumn: 20, + message: "* import is invalid because 'default' from 'mod' is restricted from being used by a pattern." + }] + }, + { + code: "import Foo from 'mod';", + options: [{ + patterns: [{ + group: ["mod"], + importNames: ["default"] + }] + }], + errors: [{ + type: "ImportDeclaration", + line: 1, + column: 8, + endColumn: 11, + message: "'default' import from 'mod' is restricted from being used by a pattern." + }] } ] }); diff --git a/eslint/tests/lib/rules/no-self-assign.js b/eslint/tests/lib/rules/no-self-assign.js index 04aa2de..0fe0404 100644 --- a/eslint/tests/lib/rules/no-self-assign.js +++ b/eslint/tests/lib/rules/no-self-assign.js @@ -25,6 +25,8 @@ ruleTester.run("no-self-assign", rule, { "a += a", "a = +a", "a = [a]", + "a &= a", + "a |= a", { code: "let a = a", parserOptions: { ecmaVersion: 6 } }, { code: "const a = a", parserOptions: { ecmaVersion: 6 } }, { code: "[a] = a", parserOptions: { ecmaVersion: 6 } }, @@ -167,6 +169,23 @@ ruleTester.run("no-self-assign", rule, { code: "class C { #field; foo() { [this.#field] = [this.#field]; } }", parserOptions: { ecmaVersion: 2022 }, errors: [{ messageId: "selfAssignment", data: { name: "this.#field" } }] + }, + + // logical assignment + { + code: "a &&= a", + parserOptions: { ecmaVersion: 2021 }, + errors: [{ messageId: "selfAssignment", data: { name: "a" } }] + }, + { + code: "a ||= a", + parserOptions: { ecmaVersion: 2021 }, + errors: [{ messageId: "selfAssignment", data: { name: "a" } }] + }, + { + code: "a ??= a", + parserOptions: { ecmaVersion: 2021 }, + errors: [{ messageId: "selfAssignment", data: { name: "a" } }] } ] }); diff --git a/eslint/tests/lib/rules/no-shadow.js b/eslint/tests/lib/rules/no-shadow.js index 13c4c11..0afcc3f 100644 --- a/eslint/tests/lib/rules/no-shadow.js +++ b/eslint/tests/lib/rules/no-shadow.js @@ -63,7 +63,35 @@ ruleTester.run("no-shadow", rule, { { code: "class C { static { let x; } static { let x; } }", parserOptions: { ecmaVersion: 2022 } }, { code: "class C { static { var x; { var x; /* redeclaration */ } } }", parserOptions: { ecmaVersion: 2022 } }, { code: "class C { static { { var x; } { var x; /* redeclaration */ } } }", parserOptions: { ecmaVersion: 2022 } }, - { code: "class C { static { { let x; } { let x; } } }", parserOptions: { ecmaVersion: 2022 } } + { code: "class C { static { { let x; } { let x; } } }", parserOptions: { ecmaVersion: 2022 } }, + { code: "const a = [].find(a => a)", options: [{ ignoreOnInitialization: true }], parserOptions: { ecmaVersion: 6 } }, + { code: "const a = [].find(function(a) { return a; })", options: [{ ignoreOnInitialization: true }], parserOptions: { ecmaVersion: 6 } }, + { code: "const [a = [].find(a => true)] = dummy", options: [{ ignoreOnInitialization: true }], parserOptions: { ecmaVersion: 6 } }, + { code: "const { a = [].find(a => true) } = dummy", options: [{ ignoreOnInitialization: true }], parserOptions: { ecmaVersion: 6 } }, + { code: "function func(a = [].find(a => true)) {}", options: [{ ignoreOnInitialization: true }], parserOptions: { ecmaVersion: 6 } }, + { code: "for (const a in [].find(a => true)) {}", options: [{ ignoreOnInitialization: true }], parserOptions: { ecmaVersion: 6 } }, + { code: "for (const a of [].find(a => true)) {}", options: [{ ignoreOnInitialization: true }], parserOptions: { ecmaVersion: 6 } }, + { code: "const a = [].map(a => true).filter(a => a === 'b')", options: [{ ignoreOnInitialization: true }], parserOptions: { ecmaVersion: 6 } }, + { code: "const a = [].map(a => true).filter(a => a === 'b').find(a => a === 'c')", options: [{ ignoreOnInitialization: true }], parserOptions: { ecmaVersion: 6 } }, + { code: "const { a } = (({ a }) => ({ a }))();", options: [{ ignoreOnInitialization: true }], parserOptions: { ecmaVersion: 6 } }, + { code: "const person = people.find(item => {const person = item.name; return person === 'foo'})", options: [{ ignoreOnInitialization: true }], parserOptions: { ecmaVersion: 6 } }, + { code: "var y = bar || foo(y => y);", options: [{ ignoreOnInitialization: true }], parserOptions: { ecmaVersion: 6 } }, + { code: "var y = bar && foo(y => y);", options: [{ ignoreOnInitialization: true }], parserOptions: { ecmaVersion: 6 } }, + { code: "var z = bar(foo(z => z));", options: [{ ignoreOnInitialization: true }], parserOptions: { ecmaVersion: 6 } }, + { code: "var z = boo(bar(foo(z => z)));", options: [{ ignoreOnInitialization: true }], parserOptions: { ecmaVersion: 6 } }, + { code: "var match = function (person) { return person.name === 'foo'; };\nconst person = [].find(match);", options: [{ ignoreOnInitialization: true }], parserOptions: { ecmaVersion: 6 } }, + { code: "const a = foo(x || (a => {}))", options: [{ ignoreOnInitialization: true }], parserOptions: { ecmaVersion: 6 } }, + { code: "const { a = 1 } = foo(a => {})", options: [{ ignoreOnInitialization: true }], parserOptions: { ecmaVersion: 6 } }, + { code: "const person = {...people.find((person) => person.firstName.startsWith('s'))}", options: [{ ignoreOnInitialization: true }], parserOptions: { ecmaVersion: 2021 } }, + { code: "const person = { firstName: people.filter((person) => person.firstName.startsWith('s')).map((person) => person.firstName)[0]}", options: [{ ignoreOnInitialization: true }], parserOptions: { ecmaVersion: 2021 } }, + { code: "() => { const y = foo(y => y); }", options: [{ ignoreOnInitialization: true }], parserOptions: { ecmaVersion: 6 } }, + { code: "const x = (x => x)()", options: [{ ignoreOnInitialization: true }], parserOptions: { ecmaVersion: 6 } }, + { code: "var y = bar || (y => y)();", options: [{ ignoreOnInitialization: true }], parserOptions: { ecmaVersion: 6 } }, + { code: "var y = bar && (y => y)();", options: [{ ignoreOnInitialization: true }], parserOptions: { ecmaVersion: 6 } }, + { code: "var x = (x => x)((y => y)());", options: [{ ignoreOnInitialization: true }], parserOptions: { ecmaVersion: 6 } }, + { code: "const { a = 1 } = (a => {})()", options: [{ ignoreOnInitialization: true }], parserOptions: { ecmaVersion: 6 } }, + { code: "() => { const y = (y => y)(); }", options: [{ ignoreOnInitialization: true }], parserOptions: { ecmaVersion: 6 } }, + { code: "const [x = y => y] = [].map(y => y)", parserOptions: { ecmaVersion: 6 } } ], invalid: [ { @@ -859,6 +887,232 @@ ruleTester.run("no-shadow", rule, { line: 1, column: 50 }] + }, + { + code: "let x = foo((x,y) => {});\nlet y;", + options: [{ hoist: "all" }], + parserOptions: { ecmaVersion: 6 }, + errors: [ + { + messageId: "noShadow", + data: { + name: "x", + shadowedLine: 1, + shadowedColumn: 5 + }, + type: "Identifier" + }, + { + messageId: "noShadow", + data: { + name: "y", + shadowedLine: 2, + shadowedColumn: 5 + }, + type: "Identifier" + } + ] + }, + { + code: "const a = fn(()=>{ class C { fn () { const a = 42; return a } } return new C() })", + options: [{ ignoreOnInitialization: true }], + parserOptions: { ecmaVersion: 6 }, + errors: [{ + messageId: "noShadow", + data: { + name: "a", + shadowedLine: 1, + shadowedColumn: 7 + }, + type: "Identifier", + line: 1, + column: 44 + }] + }, + { + code: "function a() {}\nfoo(a => {});", + options: [{ ignoreOnInitialization: true }], + parserOptions: { ecmaVersion: 6 }, + errors: [{ + messageId: "noShadow", + data: { + name: "a", + shadowedLine: 1, + shadowedColumn: 10 + }, + type: "Identifier", + line: 2, + column: 5 + }] + }, + { + code: "const a = fn(()=>{ function C() { this.fn=function() { const a = 42; return a } } return new C() });", + options: [{ ignoreOnInitialization: true }], + parserOptions: { ecmaVersion: 6 }, + errors: [{ + messageId: "noShadow", + data: { + name: "a", + shadowedLine: 1, + shadowedColumn: 7 + }, + type: "Identifier", + line: 1, + column: 62 + }] + }, + { + code: "const x = foo(() => { const bar = () => { return x => {}; }; return bar; });", + options: [{ ignoreOnInitialization: true }], + parserOptions: { ecmaVersion: 6 }, + errors: [{ + messageId: "noShadow", + data: { + name: "x", + shadowedLine: 1, + shadowedColumn: 7 + }, + type: "Identifier", + line: 1, + column: 50 + }] + }, + { + code: "const x = foo(() => { return { bar(x) {} }; });", + options: [{ ignoreOnInitialization: true }], + parserOptions: { ecmaVersion: 6 }, + errors: [{ + messageId: "noShadow", + data: { + name: "x", + shadowedLine: 1, + shadowedColumn: 7 + }, + type: "Identifier", + line: 1, + column: 36 + }] + }, + { + code: "const x = () => { foo(x => x); }", + options: [{ ignoreOnInitialization: true }], + parserOptions: { ecmaVersion: 6 }, + errors: [{ + messageId: "noShadow", + data: { + name: "x", + shadowedLine: 1, + shadowedColumn: 7 + }, + type: "Identifier", + line: 1, + column: 23 + }] + }, + { + code: "const foo = () => { let x; bar(x => x); }", + options: [{ ignoreOnInitialization: true }], + parserOptions: { ecmaVersion: 6 }, + errors: [{ + messageId: "noShadow", + data: { + name: "x", + shadowedLine: 1, + shadowedColumn: 25 + }, + type: "Identifier", + line: 1, + column: 32 + }] + }, + { + code: "foo(() => { const x = x => x; });", + options: [{ ignoreOnInitialization: true }], + parserOptions: { ecmaVersion: 6 }, + errors: [{ + messageId: "noShadow", + data: { + name: "x", + shadowedLine: 1, + shadowedColumn: 19 + }, + type: "Identifier", + line: 1, + column: 23 + }] + }, + { + code: "const foo = (x) => { bar(x => {}) }", + options: [{ ignoreOnInitialization: true }], + parserOptions: { ecmaVersion: 6 }, + errors: [{ + messageId: "noShadow", + data: { + name: "x", + shadowedLine: 1, + shadowedColumn: 14 + }, + type: "Identifier", + line: 1, + column: 26 + }] + }, + { + code: "let x = ((x,y) => {})();\nlet y;", + options: [{ hoist: "all" }], + parserOptions: { ecmaVersion: 6 }, + errors: [ + { + messageId: "noShadow", + data: { + name: "x", + shadowedLine: 1, + shadowedColumn: 5 + }, + type: "Identifier" + }, + { + messageId: "noShadow", + data: { + name: "y", + shadowedLine: 2, + shadowedColumn: 5 + }, + type: "Identifier" + } + ] + }, + { + code: "const a = (()=>{ class C { fn () { const a = 42; return a } } return new C() })()", + options: [{ ignoreOnInitialization: true }], + parserOptions: { ecmaVersion: 6 }, + errors: [{ + messageId: "noShadow", + data: { + name: "a", + shadowedLine: 1, + shadowedColumn: 7 + }, + type: "Identifier", + line: 1, + column: 42 + }] + }, + { + code: "const x = () => { (x => x)(); }", + options: [{ ignoreOnInitialization: true }], + parserOptions: { ecmaVersion: 6 }, + errors: [{ + messageId: "noShadow", + data: { + name: "x", + shadowedLine: 1, + shadowedColumn: 7 + }, + type: "Identifier", + line: 1, + column: 20 + }] } ] }); diff --git a/eslint/tests/lib/rules/no-underscore-dangle.js b/eslint/tests/lib/rules/no-underscore-dangle.js index c83a5b3..f3e11cc 100644 --- a/eslint/tests/lib/rules/no-underscore-dangle.js +++ b/eslint/tests/lib/rules/no-underscore-dangle.js @@ -71,7 +71,10 @@ ruleTester.run("no-underscore-dangle", rule, { { code: "function foo( { _bar = 0 } = {}) {}", options: [{ allowFunctionParams: false }], parserOptions: { ecmaVersion: 6 } }, { code: "function foo(...[_bar]) {}", options: [{ allowFunctionParams: false }], parserOptions: { ecmaVersion: 2016 } }, { code: "class foo { _field; }", parserOptions: { ecmaVersion: 2022 } }, - { code: "class foo { #_field; }", parserOptions: { ecmaVersion: 2022 } } + { code: "class foo { _field; }", options: [{ enforceInClassFields: false }], parserOptions: { ecmaVersion: 2022 } }, + { code: "class foo { #_field; }", parserOptions: { ecmaVersion: 2022 } }, + { code: "class foo { #_field; }", options: [{ enforceInClassFields: false }], parserOptions: { ecmaVersion: 2022 } }, + { code: "class foo { _field; }", options: [{}], parserOptions: { ecmaVersion: 2022 } } ], invalid: [ { code: "var _foo = 1", errors: [{ messageId: "unexpectedUnderscore", data: { identifier: "_foo" }, type: "VariableDeclarator" }] }, @@ -109,6 +112,30 @@ ruleTester.run("no-underscore-dangle", rule, { options: [{ enforceInMethodNames: true }], parserOptions: { ecmaVersion: 2022 }, errors: [{ messageId: "unexpectedUnderscore", data: { identifier: "#bar_" } }] + }, + { + code: "class foo { _field; }", + options: [{ enforceInClassFields: true }], + parserOptions: { ecmaVersion: 2022 }, + errors: [{ messageId: "unexpectedUnderscore", data: { identifier: "_field" } }] + }, + { + code: "class foo { #_field; }", + options: [{ enforceInClassFields: true }], + parserOptions: { ecmaVersion: 2022 }, + errors: [{ messageId: "unexpectedUnderscore", data: { identifier: "#_field" } }] + }, + { + code: "class foo { field_; }", + options: [{ enforceInClassFields: true }], + parserOptions: { ecmaVersion: 2022 }, + errors: [{ messageId: "unexpectedUnderscore", data: { identifier: "field_" } }] + }, + { + code: "class foo { #field_; }", + options: [{ enforceInClassFields: true }], + parserOptions: { ecmaVersion: 2022 }, + errors: [{ messageId: "unexpectedUnderscore", data: { identifier: "#field_" } }] } ] }); diff --git a/eslint/tests/lib/rules/no-unused-vars.js b/eslint/tests/lib/rules/no-unused-vars.js index 7c5c871..b723a29 100644 --- a/eslint/tests/lib/rules/no-unused-vars.js +++ b/eslint/tests/lib/rules/no-unused-vars.js @@ -162,6 +162,81 @@ ruleTester.run("no-unused-vars", rule, { { code: "function foo(_a) { } foo();", options: [{ args: "all", argsIgnorePattern: "^_" }] }, { code: "function foo(a, _b) { return a; } foo();", options: [{ args: "after-used", argsIgnorePattern: "^_" }] }, { code: "var [ firstItemIgnored, secondItem ] = items;\nconsole.log(secondItem);", options: [{ vars: "all", varsIgnorePattern: "[iI]gnored" }], parserOptions: { ecmaVersion: 6 } }, + { + code: "const [ a, _b, c ] = items;\nconsole.log(a+c);", + options: [{ destructuredArrayIgnorePattern: "^_" }], + parserOptions: { ecmaVersion: 6 } + }, + { + code: "const [ [a, _b, c] ] = items;\nconsole.log(a+c);", + options: [{ destructuredArrayIgnorePattern: "^_" }], + parserOptions: { ecmaVersion: 6 } + }, + { + code: "const { x: [_a, foo] } = bar;\nconsole.log(foo);", + options: [{ destructuredArrayIgnorePattern: "^_" }], + parserOptions: { ecmaVersion: 6 } + }, + { + code: "function baz([_b, foo]) { foo; };\nbaz()", + options: [{ destructuredArrayIgnorePattern: "^_" }], + parserOptions: { ecmaVersion: 6 } + }, + { + code: "function baz({x: [_b, foo]}) {foo};\nbaz()", + options: [{ destructuredArrayIgnorePattern: "^_" }], + parserOptions: { ecmaVersion: 6 } + }, + { + code: "function baz([{x: [_b, foo]}]) {foo};\nbaz()", + options: [{ destructuredArrayIgnorePattern: "^_" }], + parserOptions: { ecmaVersion: 6 } + }, + { + code: ` + let _a, b; + foo.forEach(item => { + [_a, b] = item; + doSomething(b); + }); + `, + options: [{ destructuredArrayIgnorePattern: "^_" }], + parserOptions: { ecmaVersion: 6 } + }, + { + code: ` + // doesn't report _x + let _x, y; + _x = 1; + [_x, y] = foo; + y; + + // doesn't report _a + let _a, b; + [_a, b] = foo; + _a = 1; + b; + `, + options: [{ destructuredArrayIgnorePattern: "^_" }], + parserOptions: { ecmaVersion: 2018 } + }, + { + code: ` + // doesn't report _x + let _x, y; + _x = 1; + [_x, y] = foo; + y; + + // doesn't report _a + let _a, b; + _a = 1; + ({_a, ...b } = foo); + b; + `, + options: [{ destructuredArrayIgnorePattern: "^_", ignoreRestSiblings: true }], + parserOptions: { ecmaVersion: 2018 } + }, // for-in loops (see #2342) "(function(obj) { var name; for ( name in obj ) return; })({});", @@ -177,6 +252,15 @@ ruleTester.run("no-unused-vars", rule, { { code: "(function(obj) { for ( const name in obj ) { return true } })({})", parserOptions: { ecmaVersion: 6 } }, { code: "(function(obj) { for ( const name in obj ) return true })({})", parserOptions: { ecmaVersion: 6 } }, + // For-of loops + { code: "(function(iter) { let name; for ( name of iter ) return; })({});", parserOptions: { ecmaVersion: 6 } }, + { code: "(function(iter) { let name; for ( name of iter ) { return; } })({});", parserOptions: { ecmaVersion: 6 } }, + { code: "(function(iter) { for ( let name of iter ) { return true } })({})", parserOptions: { ecmaVersion: 6 } }, + { code: "(function(iter) { for ( let name of iter ) return true })({})", parserOptions: { ecmaVersion: 6 } }, + + { code: "(function(iter) { for ( const name of iter ) { return true } })({})", parserOptions: { ecmaVersion: 6 } }, + { code: "(function(iter) { for ( const name of iter ) return true })({})", parserOptions: { ecmaVersion: 6 } }, + // Sequence Expressions (See https://github.com/eslint/eslint/issues/14325) { code: "let x = 0; foo = (0, x++);", parserOptions: { ecmaVersion: 6 } }, { code: "let x = 0; foo = (0, x += 1);", parserOptions: { ecmaVersion: 6 } }, @@ -463,6 +547,131 @@ ruleTester.run("no-unused-vars", rule, { }] }, + // https://github.com/eslint/eslint/issues/15611 + { + code: ` + const array = ['a', 'b', 'c']; + const [a, _b, c] = array; + const newArray = [a, c]; + `, + options: [{ destructuredArrayIgnorePattern: "^_" }], + parserOptions: { ecmaVersion: 2020 }, + errors: [ + + // should report only `newArray` + { ...assignedError("newArray"), line: 4, column: 19 } + ] + }, + { + code: ` + const array = ['a', 'b', 'c', 'd', 'e']; + const [a, _b, c] = array; + `, + options: [{ destructuredArrayIgnorePattern: "^_" }], + parserOptions: { ecmaVersion: 2020 }, + errors: [ + { + ...assignedError("a", ". Allowed unused elements of array destructuring patterns must match /^_/u"), + line: 3, + column: 20 + }, + { + ...assignedError("c", ". Allowed unused elements of array destructuring patterns must match /^_/u"), + line: 3, + column: 27 + } + ] + }, + { + code: ` + const array = ['a', 'b', 'c']; + const [a, _b, c] = array; + const fooArray = ['foo']; + const barArray = ['bar']; + const ignoreArray = ['ignore']; + `, + options: [{ destructuredArrayIgnorePattern: "^_", varsIgnorePattern: "ignore" }], + parserOptions: { ecmaVersion: 2020 }, + errors: [ + { + ...assignedError("a", ". Allowed unused elements of array destructuring patterns must match /^_/u"), + line: 3, + column: 20 + }, + { + ...assignedError("c", ". Allowed unused elements of array destructuring patterns must match /^_/u"), + line: 3, + column: 27 + }, + { + ...assignedError("fooArray", ". Allowed unused vars must match /ignore/u"), + line: 4, + column: 19 + }, + { + ...assignedError("barArray", ". Allowed unused vars must match /ignore/u"), + line: 5, + column: 19 + } + ] + }, + { + code: ` + const array = [obj]; + const [{_a, foo}] = array; + console.log(foo); + `, + options: [{ destructuredArrayIgnorePattern: "^_" }], + parserOptions: { ecmaVersion: 2020 }, + errors: [ + { + ...assignedError("_a"), + line: 3, + column: 21 + } + ] + }, + { + code: ` + function foo([{_a, bar}]) { + bar; + } + foo(); + `, + options: [{ destructuredArrayIgnorePattern: "^_" }], + parserOptions: { ecmaVersion: 2020 }, + errors: [ + { + ...definedError("_a"), + line: 2, + column: 28 + } + ] + }, + { + code: ` + let _a, b; + + foo.forEach(item => { + [a, b] = item; + }); + `, + options: [{ destructuredArrayIgnorePattern: "^_" }], + parserOptions: { ecmaVersion: 2020 }, + errors: [ + { + ...definedError("_a"), + line: 2, + column: 17 + }, + { + ...assignedError("b"), + line: 2, + column: 21 + } + ] + }, + // for-in loops (see #2342) { code: "(function(obj) { var name; for ( name in obj ) { i(); return; } })({});", @@ -504,6 +713,50 @@ ruleTester.run("no-unused-vars", rule, { }] }, + // For-of loops + { + code: "(function(iter) { var name; for ( name of iter ) { i(); return; } })({});", + env: { es6: true }, + errors: [{ + line: 1, + column: 35, + messageId: "unusedVar", + data: { + varName: "name", + action: "assigned a value", + additional: "" + } + }] + }, + { + code: "(function(iter) { var name; for ( name of iter ) { } })({});", + env: { es6: true }, + errors: [{ + line: 1, + column: 35, + messageId: "unusedVar", + data: { + varName: "name", + action: "assigned a value", + additional: "" + } + }] + }, + { + code: "(function(iter) { for ( var name of iter ) { } })({});", + env: { es6: true }, + errors: [{ + line: 1, + column: 29, + messageId: "unusedVar", + data: { + varName: "name", + action: "assigned a value", + additional: "" + } + }] + }, + // https://github.com/eslint/eslint/issues/3617 { code: "\n/* global foobar, foo, bar */\nfoobar;", diff --git a/eslint/tests/lib/rules/no-use-before-define.js b/eslint/tests/lib/rules/no-use-before-define.js index ba80e40..dc858f7 100644 --- a/eslint/tests/lib/rules/no-use-before-define.js +++ b/eslint/tests/lib/rules/no-use-before-define.js @@ -209,6 +209,38 @@ ruleTester.run("no-use-before-define", rule, { { code: "const C = class C { static { C.x; } }", parserOptions: { ecmaVersion: 2022 } + }, + + // "allowNamedExports" option + { + code: "export { a }; const a = 1;", + options: [{ allowNamedExports: true }], + parserOptions: { ecmaVersion: 2015, sourceType: "module" } + }, + { + code: "export { a as b }; const a = 1;", + options: [{ allowNamedExports: true }], + parserOptions: { ecmaVersion: 2015, sourceType: "module" } + }, + { + code: "export { a, b }; let a, b;", + options: [{ allowNamedExports: true }], + parserOptions: { ecmaVersion: 2015, sourceType: "module" } + }, + { + code: "export { a }; var a;", + options: [{ allowNamedExports: true }], + parserOptions: { ecmaVersion: 2015, sourceType: "module" } + }, + { + code: "export { f }; function f() {}", + options: [{ allowNamedExports: true }], + parserOptions: { ecmaVersion: 2015, sourceType: "module" } + }, + { + code: "export { C }; class C {}", + options: [{ allowNamedExports: true }], + parserOptions: { ecmaVersion: 2015, sourceType: "module" } } ], invalid: [ @@ -1091,7 +1123,7 @@ ruleTester.run("no-use-before-define", rule, { messageId: "usedBeforeDefined", data: { name: "a" } }] - } + }, /* * TODO(mdjermanovic): Add the following test cases once https://github.com/eslint/eslint-scope/issues/59 gets fixed: @@ -1123,5 +1155,124 @@ ruleTester.run("no-use-before-define", rule, { * }] * } */ + + // "allowNamedExports" option + { + code: "export { a }; const a = 1;", + parserOptions: { ecmaVersion: 2015, sourceType: "module" }, + errors: [{ + messageId: "usedBeforeDefined", + data: { name: "a" } + }] + }, + { + code: "export { a }; const a = 1;", + options: [{}], + parserOptions: { ecmaVersion: 2015, sourceType: "module" }, + errors: [{ + messageId: "usedBeforeDefined", + data: { name: "a" } + }] + }, + { + code: "export { a }; const a = 1;", + options: [{ allowNamedExports: false }], + parserOptions: { ecmaVersion: 2015, sourceType: "module" }, + errors: [{ + messageId: "usedBeforeDefined", + data: { name: "a" } + }] + }, + { + code: "export { a }; const a = 1;", + options: ["nofunc"], + parserOptions: { ecmaVersion: 2015, sourceType: "module" }, + errors: [{ + messageId: "usedBeforeDefined", + data: { name: "a" } + }] + }, + { + code: "export { a as b }; const a = 1;", + parserOptions: { ecmaVersion: 2015, sourceType: "module" }, + errors: [{ + messageId: "usedBeforeDefined", + data: { name: "a" } + }] + }, + { + code: "export { a, b }; let a, b;", + parserOptions: { ecmaVersion: 2015, sourceType: "module" }, + errors: [ + { + messageId: "usedBeforeDefined", + data: { name: "a" } + }, + { + messageId: "usedBeforeDefined", + data: { name: "b" } + } + ] + }, + { + code: "export { a }; var a;", + parserOptions: { ecmaVersion: 2015, sourceType: "module" }, + errors: [{ + messageId: "usedBeforeDefined", + data: { name: "a" } + }] + }, + { + code: "export { f }; function f() {}", + parserOptions: { ecmaVersion: 2015, sourceType: "module" }, + errors: [{ + messageId: "usedBeforeDefined", + data: { name: "f" } + }] + }, + { + code: "export { C }; class C {}", + parserOptions: { ecmaVersion: 2015, sourceType: "module" }, + errors: [{ + messageId: "usedBeforeDefined", + data: { name: "C" } + }] + }, + { + code: "export const foo = a; const a = 1;", + options: [{ allowNamedExports: true }], + parserOptions: { ecmaVersion: 2015, sourceType: "module" }, + errors: [{ + messageId: "usedBeforeDefined", + data: { name: "a" } + }] + }, + { + code: "export default a; const a = 1;", + options: [{ allowNamedExports: true }], + parserOptions: { ecmaVersion: 2015, sourceType: "module" }, + errors: [{ + messageId: "usedBeforeDefined", + data: { name: "a" } + }] + }, + { + code: "export function foo() { return a; }; const a = 1;", + options: [{ allowNamedExports: true }], + parserOptions: { ecmaVersion: 2015, sourceType: "module" }, + errors: [{ + messageId: "usedBeforeDefined", + data: { name: "a" } + }] + }, + { + code: "export class C { foo() { return a; } }; const a = 1;", + options: [{ allowNamedExports: true }], + parserOptions: { ecmaVersion: 2015, sourceType: "module" }, + errors: [{ + messageId: "usedBeforeDefined", + data: { name: "a" } + }] + } ] }); diff --git a/eslint/tests/lib/rules/no-useless-rename.js b/eslint/tests/lib/rules/no-useless-rename.js index 66077f2..262cf2c 100644 --- a/eslint/tests/lib/rules/no-useless-rename.js +++ b/eslint/tests/lib/rules/no-useless-rename.js @@ -47,11 +47,43 @@ ruleTester.run("no-useless-rename", rule, { "import {foo} from 'foo';", "import {foo as bar} from 'foo';", "import {foo as bar, baz as qux} from 'foo';", + { + code: "import {'foo' as bar} from 'baz';", + parserOptions: { ecmaVersion: 2022 } + }, "export {foo} from 'foo';", "var foo = 0;export {foo as bar};", "var foo = 0; var baz = 0; export {foo as bar, baz as qux};", "export {foo as bar} from 'foo';", "export {foo as bar, baz as qux} from 'foo';", + { + code: "var foo = 0; export {foo as 'bar'};", + parserOptions: { ecmaVersion: 2022 } + }, + { + code: "export {foo as 'bar'} from 'baz';", + parserOptions: { ecmaVersion: 2022 } + }, + { + code: "export {'foo' as bar} from 'baz';", + parserOptions: { ecmaVersion: 2022 } + }, + { + code: "export {'foo' as 'bar'} from 'baz';", + parserOptions: { ecmaVersion: 2022 } + }, + { + code: "export {'' as ' '} from 'baz';", + parserOptions: { ecmaVersion: 2022 } + }, + { + code: "export {' ' as ''} from 'baz';", + parserOptions: { ecmaVersion: 2022 } + }, + { + code: "export {'foo'} from 'bar';", + parserOptions: { ecmaVersion: 2022 } + }, { code: "const {...stuff} = myObject;", parserOptions: { ecmaVersion: 2018 } @@ -380,6 +412,12 @@ ruleTester.run("no-useless-rename", rule, { output: "import {foo} from 'foo';", errors: [{ messageId: "unnecessarilyRenamed", data: { type: "Import", name: "foo" } }] }, + { + code: "import {'foo' as foo} from 'foo';", + output: "import {foo} from 'foo';", + parserOptions: { ecmaVersion: 2022 }, + errors: [{ messageId: "unnecessarilyRenamed", data: { type: "Import", name: "foo" } }] + }, { code: "import {\\u0061 as a} from 'foo';", output: "import {a} from 'foo';", @@ -418,6 +456,42 @@ ruleTester.run("no-useless-rename", rule, { output: "var foo = 0; export {foo};", errors: [{ messageId: "unnecessarilyRenamed", data: { type: "Export", name: "foo" } }] }, + { + code: "var foo = 0; export {foo as 'foo'};", + output: "var foo = 0; export {foo};", + parserOptions: { ecmaVersion: 2022 }, + errors: [{ messageId: "unnecessarilyRenamed", data: { type: "Export", name: "foo" } }] + }, + { + code: "export {foo as 'foo'} from 'bar';", + output: "export {foo} from 'bar';", + parserOptions: { ecmaVersion: 2022 }, + errors: [{ messageId: "unnecessarilyRenamed", data: { type: "Export", name: "foo" } }] + }, + { + code: "export {'foo' as foo} from 'bar';", + output: "export {'foo'} from 'bar';", + parserOptions: { ecmaVersion: 2022 }, + errors: [{ messageId: "unnecessarilyRenamed", data: { type: "Export", name: "foo" } }] + }, + { + code: "export {'foo' as 'foo'} from 'bar';", + output: "export {'foo'} from 'bar';", + parserOptions: { ecmaVersion: 2022 }, + errors: [{ messageId: "unnecessarilyRenamed", data: { type: "Export", name: "foo" } }] + }, + { + code: "export {' 👍 ' as ' 👍 '} from 'bar';", + output: "export {' 👍 '} from 'bar';", + parserOptions: { ecmaVersion: 2022 }, + errors: [{ messageId: "unnecessarilyRenamed", data: { type: "Export", name: " 👍 " } }] + }, + { + code: "export {'' as ''} from 'bar';", + output: "export {''} from 'bar';", + parserOptions: { ecmaVersion: 2022 }, + errors: [{ messageId: "unnecessarilyRenamed", data: { type: "Export", name: "" } }] + }, { code: "var a = 0; export {a as \\u0061};", output: "var a = 0; export {a};", diff --git a/eslint/tests/lib/rules/no-warning-comments.js b/eslint/tests/lib/rules/no-warning-comments.js index c2689de..7412245 100644 --- a/eslint/tests/lib/rules/no-warning-comments.js +++ b/eslint/tests/lib/rules/no-warning-comments.js @@ -34,10 +34,12 @@ ruleTester.run("no-warning-comments", rule, { "/* any block comment with TODO, FIXME or XXX */", "/* any block comment with (TODO, FIXME's or XXX!) */", { code: "// comments containing terms as substrings like TodoMVC", options: [{ terms: ["todo"], location: "anywhere" }] }, - { code: "// special regex characters don't cause problems", options: [{ terms: ["[aeiou]"], location: "anywhere" }] }, + { code: "// special regex characters don't cause a problem", options: [{ terms: ["[aeiou]"], location: "anywhere" }] }, "/*eslint no-warning-comments: [2, { \"terms\": [\"todo\", \"fixme\", \"any other term\"], \"location\": \"anywhere\" }]*/\n\nvar x = 10;\n", { code: "/*eslint no-warning-comments: [2, { \"terms\": [\"todo\", \"fixme\", \"any other term\"], \"location\": \"anywhere\" }]*/\n\nvar x = 10;\n", options: [{ location: "anywhere" }] }, - { code: "foo", options: [{ terms: ["foo-bar"] }] } + { code: "// foo", options: [{ terms: ["foo-bar"] }] }, + "/** multi-line block comment with lines starting with\nTODO\nFIXME or\nXXX\n*/", + { code: "//!TODO ", options: [{ decoration: ["*"] }] } ], invalid: [ { @@ -257,6 +259,188 @@ ruleTester.run("no-warning-comments", rule, { } } ] + }, + { + code: "// Comment ending with term followed by punctuation TODO!", + options: [{ terms: ["todo"], location: "anywhere" }], + errors: [ + { + messageId: "unexpectedComment", + data: { + matchedTerm: "todo", + comment: "Comment ending with term followed by..." + } + } + ] + }, + { + code: "// Comment ending with term including punctuation TODO!", + options: [{ terms: ["todo!"], location: "anywhere" }], + errors: [ + { + messageId: "unexpectedComment", + data: { + matchedTerm: "todo!", + comment: "Comment ending with term including..." + } + } + ] + }, + { + code: "// Comment ending with term including punctuation followed by more TODO!!!", + options: [{ terms: ["todo!"], location: "anywhere" }], + errors: [ + { + messageId: "unexpectedComment", + data: { + matchedTerm: "todo!", + comment: "Comment ending with term including..." + } + } + ] + }, + { + code: "// !TODO comment starting with term preceded by punctuation", + options: [{ terms: ["todo"], location: "anywhere" }], + errors: [ + { + messageId: "unexpectedComment", + data: { + matchedTerm: "todo", + comment: "!TODO comment starting with term..." + } + } + ] + }, + { + code: "// !TODO comment starting with term including punctuation", + options: [{ terms: ["!todo"], location: "anywhere" }], + errors: [ + { + messageId: "unexpectedComment", + data: { + matchedTerm: "!todo", + comment: "!TODO comment starting with term..." + } + } + ] + }, + { + code: "// !!!TODO comment starting with term including punctuation preceded by more", + options: [{ terms: ["!todo"], location: "anywhere" }], + errors: [ + { + messageId: "unexpectedComment", + data: { + matchedTerm: "!todo", + comment: "!!!TODO comment starting with term..." + } + } + ] + }, + { + code: "// FIX!term ending with punctuation followed word character", + options: [{ terms: ["FIX!"], location: "anywhere" }], + errors: [ + { + messageId: "unexpectedComment", + data: { + matchedTerm: "FIX!", + comment: "FIX!term ending with punctuation..." + } + } + ] + }, + { + code: "// Term starting with punctuation preceded word character!FIX", + options: [{ terms: ["!FIX"], location: "anywhere" }], + errors: [ + { + messageId: "unexpectedComment", + data: { + matchedTerm: "!FIX", + comment: "Term starting with punctuation preceded..." + } + } + ] + }, + { + code: "//!XXX comment starting with no spaces (anywhere)", + options: [{ terms: ["!xxx"], location: "anywhere" }], + errors: [ + { + messageId: "unexpectedComment", + data: { + matchedTerm: "!xxx", + comment: "!XXX comment starting with no spaces..." + } + } + ] + }, + { + code: "//!XXX comment starting with no spaces (start)", + options: [{ terms: ["!xxx"], location: "start" }], + errors: [ + { + messageId: "unexpectedComment", + data: { + matchedTerm: "!xxx", + comment: "!XXX comment starting with no spaces..." + } + } + ] + }, + { + code: "/*\nTODO undecorated multi-line block comment (start)\n*/", + options: [{ terms: ["todo"], location: "start" }], + errors: [ + { + messageId: "unexpectedComment", + data: { + matchedTerm: "todo", + comment: "TODO undecorated multi-line block..." + } + } + ] + }, + { + code: "///// TODO decorated single-line comment with decoration array \n /////", + options: [{ terms: ["todo"], location: "start", decoration: ["*", "/"] }], + errors: [ + { + messageId: "unexpectedComment", + data: { + matchedTerm: "todo", + comment: "/// TODO decorated single-line comment..." + } + } + ] + }, + { + code: "///*/*/ TODO decorated single-line comment with multiple decoration characters (start) \n /////", + options: [{ terms: ["todo"], location: "start", decoration: ["*", "/"] }], + errors: [ + { + messageId: "unexpectedComment", + data: { + matchedTerm: "todo", + comment: "/*/*/ TODO decorated single-line comment..." + } + } + ] + }, + { + code: "//**TODO term starts with a decoration character", + options: [{ terms: ["*todo"], location: "start", decoration: ["*"] }], + errors: [ + { + messageId: "unexpectedComment", + data: { + matchedTerm: "*todo", + comment: "**TODO term starts with a decoration..." + } + } + ] } ] }); diff --git a/eslint/tests/lib/rules/object-shorthand.js b/eslint/tests/lib/rules/object-shorthand.js index 01a72f4..58bb570 100644 --- a/eslint/tests/lib/rules/object-shorthand.js +++ b/eslint/tests/lib/rules/object-shorthand.js @@ -185,6 +185,52 @@ ruleTester.run("object-shorthand", rule, { options: ["never"] }, + // methodsIgnorePattern + { + code: "var x = { foo: function() {} }", + options: ["always", { methodsIgnorePattern: "^foo$" }] + }, + { + code: "var x = { foo: function() {} }", + options: ["methods", { methodsIgnorePattern: "^foo$" }] + }, + { + code: "var x = { foo: function*() {} }", + options: ["always", { methodsIgnorePattern: "^foo$" }] + }, + { + code: "var x = { foo: async function() {} }", + options: ["always", { methodsIgnorePattern: "^foo$" }] + }, + { + code: "var x = { foo: () => { return 5; } }", + options: ["always", { methodsIgnorePattern: "^foo$", avoidExplicitReturnArrows: true }] + }, + { + code: "var x = { 'foo': function() {} }", + options: ["always", { methodsIgnorePattern: "^foo$" }] + }, + { + code: "var x = { ['foo']: function() {} }", + options: ["always", { methodsIgnorePattern: "^foo$" }] + }, + { + code: "var x = { 123: function() {} }", + options: ["always", { methodsIgnorePattern: "^123$" }] + }, + { + code: "var x = { afoob: function() {} }", + options: ["always", { methodsIgnorePattern: "foo" }] + }, + { + code: "var x = { afoob: function() {} }", + options: ["always", { methodsIgnorePattern: "^.foo.$" }] + }, + { + code: "var x = { '👍foo👍': function() {} }", // this wouldn't pass without the "u" flag + options: ["always", { methodsIgnorePattern: "^.foo.$" }] + }, + // avoidQuotes { code: "var x = {'a': function(){}}", @@ -781,6 +827,50 @@ ruleTester.run("object-shorthand", rule, { errors: [METHOD_ERROR] }, + // methodsIgnorePattern + { + code: "var x = { afoob: function() {} }", + output: "var x = { afoob() {} }", + options: ["always", { methodsIgnorePattern: "^foo$" }], + errors: [METHOD_ERROR] + }, + { + code: "var x = { afoob: function() {} }", + output: "var x = { afoob() {} }", + options: ["methods", { methodsIgnorePattern: "^foo$" }], + errors: [METHOD_ERROR] + }, + { + code: "var x = { 'afoob': function() {} }", + output: "var x = { 'afoob'() {} }", + options: ["always", { methodsIgnorePattern: "^foo$" }], + errors: [METHOD_ERROR] + }, + { + code: "var x = { 1234: function() {} }", + output: "var x = { 1234() {} }", + options: ["always", { methodsIgnorePattern: "^123$" }], + errors: [METHOD_ERROR] + }, + { + code: "var x = { bar: function() {} }", + output: "var x = { bar() {} }", + options: ["always", { methodsIgnorePattern: "foo" }], + errors: [METHOD_ERROR] + }, + { + code: "var x = { [foo]: function() {} }", + output: "var x = { [foo]() {} }", + options: ["always", { methodsIgnorePattern: "foo" }], + errors: [METHOD_ERROR] + }, + { + code: "var x = { foo: foo }", // does not apply to properties + output: "var x = { foo }", + options: ["always", { methodsIgnorePattern: "^foo$" }], + errors: [PROPERTY_ERROR] + }, + // avoidQuotes { code: "var x = {a: a}", diff --git a/eslint/tests/lib/rules/operator-assignment.js b/eslint/tests/lib/rules/operator-assignment.js index 8f81484..50229af 100644 --- a/eslint/tests/lib/rules/operator-assignment.js +++ b/eslint/tests/lib/rules/operator-assignment.js @@ -18,9 +18,6 @@ const rule = require("../../../lib/rules/operator-assignment"), const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 2022 } }); -const EXPECTED_OPERATOR_ASSIGNMENT = [{ messageId: "replaced", type: "AssignmentExpression" }]; -const UNEXPECTED_OPERATOR_ASSIGNMENT = [{ messageId: "unexpected", type: "AssignmentExpression" }]; - ruleTester.run("operator-assignment", rule, { valid: [ @@ -117,326 +114,326 @@ ruleTester.run("operator-assignment", rule, { invalid: [{ code: "x = x + y", output: "x += y", - errors: EXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "replaced", type: "AssignmentExpression", data: { operator: "+=" } }] }, { code: "x = x - y", output: "x -= y", - errors: EXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "replaced", type: "AssignmentExpression", data: { operator: "-=" } }] }, { code: "x = x * y", output: "x *= y", - errors: EXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "replaced", type: "AssignmentExpression", data: { operator: "*=" } }] }, { code: "x = y * x", output: null, // not fixed (possible change in behavior if y and x have valueOf() functions) - errors: EXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "replaced", type: "AssignmentExpression", data: { operator: "*=" } }] }, { code: "x = (y * z) * x", output: null, // not fixed (possible change in behavior if y/z and x have valueOf() functions) - errors: EXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "replaced", type: "AssignmentExpression", data: { operator: "*=" } }] }, { code: "x = x / y", output: "x /= y", - errors: EXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "replaced", type: "AssignmentExpression", data: { operator: "/=" } }] }, { code: "x = x % y", output: "x %= y", - errors: EXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "replaced", type: "AssignmentExpression", data: { operator: "%=" } }] }, { code: "x = x << y", output: "x <<= y", - errors: EXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "replaced", type: "AssignmentExpression", data: { operator: "<<=" } }] }, { code: "x = x >> y", output: "x >>= y", - errors: EXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "replaced", type: "AssignmentExpression", data: { operator: ">>=" } }] }, { code: "x = x >>> y", output: "x >>>= y", - errors: EXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "replaced", type: "AssignmentExpression", data: { operator: ">>>=" } }] }, { code: "x = x & y", output: "x &= y", - errors: EXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "replaced", type: "AssignmentExpression", data: { operator: "&=" } }] }, { code: "x = x ^ y", output: "x ^= y", - errors: EXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "replaced", type: "AssignmentExpression", data: { operator: "^=" } }] }, { code: "x = x | y", output: "x |= y", - errors: EXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "replaced", type: "AssignmentExpression", data: { operator: "|=" } }] }, { code: "x[0] = x[0] - y", output: "x[0] -= y", - errors: EXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "replaced", type: "AssignmentExpression", data: { operator: "-=" } }] }, { code: "x.y[z['a']][0].b = x.y[z['a']][0].b * 2", output: null, // not fixed; might activate getters more than before - errors: EXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "replaced", type: "AssignmentExpression", data: { operator: "*=" } }] }, { code: "x = x + y", output: "x += y", options: ["always"], - errors: EXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "replaced", type: "AssignmentExpression", data: { operator: "+=" } }] }, { code: "x = (x + y)", output: "x += y", options: ["always"], - errors: EXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "replaced", type: "AssignmentExpression", data: { operator: "+=" } }] }, { code: "x = x + (y)", output: "x += (y)", options: ["always"], - errors: EXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "replaced", type: "AssignmentExpression", data: { operator: "+=" } }] }, { code: "x += (y)", output: "x = x + (y)", options: ["never"], - errors: UNEXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "unexpected", type: "AssignmentExpression", data: { operator: "+=" } }] }, { code: "x += y", output: "x = x + y", options: ["never"], - errors: UNEXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "unexpected", type: "AssignmentExpression", data: { operator: "+=" } }] }, { code: "foo.bar = foo.bar + baz", output: "foo.bar += baz", - errors: EXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "replaced", type: "AssignmentExpression", data: { operator: "+=" } }] }, { code: "foo.bar += baz", output: "foo.bar = foo.bar + baz", options: ["never"], - errors: UNEXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "unexpected", type: "AssignmentExpression", data: { operator: "+=" } }] }, { code: "this.foo = this.foo + bar", output: "this.foo += bar", - errors: EXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "replaced", type: "AssignmentExpression", data: { operator: "+=" } }] }, { code: "this.foo += bar", output: "this.foo = this.foo + bar", options: ["never"], - errors: UNEXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "unexpected", type: "AssignmentExpression", data: { operator: "+=" } }] }, { code: "foo.bar.baz = foo.bar.baz + qux", output: null, // not fixed; fixing would cause a foo.bar getter to activate once rather than twice - errors: EXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "replaced", type: "AssignmentExpression", data: { operator: "+=" } }] }, { code: "foo.bar.baz += qux", output: null, // not fixed; fixing would cause a foo.bar getter to activate twice rather than once options: ["never"], - errors: UNEXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "unexpected", type: "AssignmentExpression", data: { operator: "+=" } }] }, { code: "this.foo.bar = this.foo.bar + baz", output: null, // not fixed; fixing would cause a this.foo getter to activate once rather than twice - errors: EXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "replaced", type: "AssignmentExpression", data: { operator: "+=" } }] }, { code: "this.foo.bar += baz", output: null, // not fixed; fixing would cause a this.foo getter to activate twice rather than once options: ["never"], - errors: UNEXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "unexpected", type: "AssignmentExpression", data: { operator: "+=" } }] }, { code: "foo[bar] = foo[bar] + baz", output: null, // not fixed; fixing would cause bar.toString() to get called once instead of twice - errors: EXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "replaced", type: "AssignmentExpression", data: { operator: "+=" } }] }, { code: "this[foo] = this[foo] + bar", output: null, // not fixed; fixing would cause foo.toString() to get called once instead of twice - errors: EXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "replaced", type: "AssignmentExpression", data: { operator: "+=" } }] }, { code: "foo[bar] >>>= baz", output: null, // not fixed; fixing would cause bar.toString() to get called twice instead of once options: ["never"], - errors: UNEXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "unexpected", type: "AssignmentExpression", data: { operator: ">>>=" } }] }, { code: "this[foo] >>>= bar", output: null, // not fixed; fixing would cause foo.toString() to get called twice instead of once options: ["never"], - errors: UNEXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "unexpected", type: "AssignmentExpression", data: { operator: ">>>=" } }] }, { code: "foo[5] = foo[5] / baz", output: "foo[5] /= baz", // this is ok because 5 is a literal, so toString won't get called - errors: EXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "replaced", type: "AssignmentExpression", data: { operator: "/=" } }] }, { code: "this[5] = this[5] / foo", output: "this[5] /= foo", // this is ok because 5 is a literal, so toString won't get called - errors: EXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "replaced", type: "AssignmentExpression", data: { operator: "/=" } }] }, { code: "/*1*/x/*2*/./*3*/y/*4*/= x.y +/*5*/z/*6*/./*7*/w/*8*/;", output: "/*1*/x/*2*/./*3*/y/*4*/+=/*5*/z/*6*/./*7*/w/*8*/;", // these comments are preserved options: ["always"], - errors: EXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "replaced", type: "AssignmentExpression", data: { operator: "+=" } }] }, { code: "x // 1\n . // 2\n y // 3\n = x.y + //4\n z //5\n . //6\n w;", output: "x // 1\n . // 2\n y // 3\n += //4\n z //5\n . //6\n w;", // these comments are preserved options: ["always"], - errors: EXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "replaced", type: "AssignmentExpression", data: { operator: "+=" } }] }, { code: "x = /*1*/ x + y", output: null, // not fixed; fixing would remove this comment options: ["always"], - errors: EXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "replaced", type: "AssignmentExpression", data: { operator: "+=" } }] }, { code: "x = //1\n x + y", output: null, // not fixed; fixing would remove this comment options: ["always"], - errors: EXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "replaced", type: "AssignmentExpression", data: { operator: "+=" } }] }, { code: "x.y = x/*1*/.y + z", output: null, // not fixed; fixing would remove this comment options: ["always"], - errors: EXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "replaced", type: "AssignmentExpression", data: { operator: "+=" } }] }, { code: "x.y = x. //1\n y + z", output: null, // not fixed; fixing would remove this comment options: ["always"], - errors: EXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "replaced", type: "AssignmentExpression", data: { operator: "+=" } }] }, { code: "x = x /*1*/ + y", output: null, // not fixed; fixing would remove this comment options: ["always"], - errors: EXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "replaced", type: "AssignmentExpression", data: { operator: "+=" } }] }, { code: "x = x //1\n + y", output: null, // not fixed; fixing would remove this comment options: ["always"], - errors: EXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "replaced", type: "AssignmentExpression", data: { operator: "+=" } }] }, { code: "/*1*/x +=/*2*/y/*3*/;", output: "/*1*/x = x +/*2*/y/*3*/;", // these comments are preserved and not duplicated options: ["never"], - errors: UNEXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "unexpected", type: "AssignmentExpression", data: { operator: "+=" } }] }, { code: "x +=//1\n y", output: "x = x +//1\n y", // this comment is preserved and not duplicated options: ["never"], - errors: UNEXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "unexpected", type: "AssignmentExpression", data: { operator: "+=" } }] }, { code: "(/*1*/x += y)", output: "(/*1*/x = x + y)", // this comment is preserved and not duplicated options: ["never"], - errors: UNEXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "unexpected", type: "AssignmentExpression", data: { operator: "+=" } }] }, { code: "x/*1*/+= y", output: null, // not fixed; fixing would duplicate this comment options: ["never"], - errors: UNEXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "unexpected", type: "AssignmentExpression", data: { operator: "+=" } }] }, { code: "x //1\n += y", output: null, // not fixed; fixing would duplicate this comment options: ["never"], - errors: UNEXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "unexpected", type: "AssignmentExpression", data: { operator: "+=" } }] }, { code: "(/*1*/x) += y", output: null, // not fixed; fixing would duplicate this comment options: ["never"], - errors: UNEXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "unexpected", type: "AssignmentExpression", data: { operator: "+=" } }] }, { code: "x/*1*/.y += z", output: null, // not fixed; fixing would duplicate this comment options: ["never"], - errors: UNEXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "unexpected", type: "AssignmentExpression", data: { operator: "+=" } }] }, { code: "x.//1\n y += z", output: null, // not fixed; fixing would duplicate this comment options: ["never"], - errors: UNEXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "unexpected", type: "AssignmentExpression", data: { operator: "+=" } }] }, { code: "(foo.bar) ^= ((((((((((((((((baz))))))))))))))))", output: "(foo.bar) = (foo.bar) ^ ((((((((((((((((baz))))))))))))))))", options: ["never"], - errors: UNEXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "unexpected", type: "AssignmentExpression", data: { operator: "^=" } }] }, { code: "foo = foo ** bar", output: "foo **= bar", - errors: EXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "replaced", type: "AssignmentExpression", data: { operator: "**=" } }] }, { code: "foo **= bar", output: "foo = foo ** bar", options: ["never"], - errors: UNEXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "unexpected", type: "AssignmentExpression", data: { operator: "**=" } }] }, { code: "foo *= bar + 1", output: "foo = foo * (bar + 1)", options: ["never"], - errors: UNEXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "unexpected", type: "AssignmentExpression", data: { operator: "*=" } }] }, { code: "foo -= bar - baz", output: "foo = foo - (bar - baz)", options: ["never"], - errors: UNEXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "unexpected", type: "AssignmentExpression", data: { operator: "-=" } }] }, { code: "foo += bar + baz", output: "foo = foo + (bar + baz)", // addition is not associative in JS, e.g. (1 + 2) + '3' !== 1 + (2 + '3') options: ["never"], - errors: UNEXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "unexpected", type: "AssignmentExpression", data: { operator: "+=" } }] }, { code: "foo += bar = 1", output: "foo = foo + (bar = 1)", options: ["never"], - errors: UNEXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "unexpected", type: "AssignmentExpression", data: { operator: "+=" } }] }, { code: "foo *= (bar + 1)", output: "foo = foo * (bar + 1)", options: ["never"], - errors: UNEXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "unexpected", type: "AssignmentExpression", data: { operator: "*=" } }] }, { code: "foo+=-bar", output: "foo= foo+-bar", // tokens can be adjacent options: ["never"], - errors: UNEXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "unexpected", type: "AssignmentExpression", data: { operator: "+=" } }] }, { code: "foo/=bar", output: "foo= foo/bar", // tokens can be adjacent options: ["never"], - errors: UNEXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "unexpected", type: "AssignmentExpression", data: { operator: "/=" } }] }, { code: "foo/=/**/bar", output: "foo= foo/ /**/bar", // // tokens cannot be adjacent, insert a space between options: ["never"], - errors: UNEXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "unexpected", type: "AssignmentExpression", data: { operator: "/=" } }] }, { code: "foo/=//\nbar", output: "foo= foo/ //\nbar", // // tokens cannot be adjacent, insert a space between options: ["never"], - errors: UNEXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "unexpected", type: "AssignmentExpression", data: { operator: "/=" } }] }, { code: "foo/=/^bar$/", output: "foo= foo/ /^bar$/", // // tokens cannot be adjacent, insert a space between options: ["never"], - errors: UNEXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "unexpected", type: "AssignmentExpression", data: { operator: "/=" } }] }, { code: "foo+=+bar", output: "foo= foo+ +bar", // tokens cannot be adjacent, insert a space between options: ["never"], - errors: UNEXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "unexpected", type: "AssignmentExpression", data: { operator: "+=" } }] }, { code: "foo+= +bar", output: "foo= foo+ +bar", // tokens cannot be adjacent, but there is already a space between options: ["never"], - errors: UNEXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "unexpected", type: "AssignmentExpression", data: { operator: "+=" } }] }, { code: "foo+=/**/+bar", output: "foo= foo+/**/+bar", // tokens cannot be adjacent, but there is a comment between options: ["never"], - errors: UNEXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "unexpected", type: "AssignmentExpression", data: { operator: "+=" } }] }, { code: "foo+=+bar===baz", output: "foo= foo+(+bar===baz)", // tokens cannot be adjacent, but the right side will be parenthesised options: ["never"], - errors: UNEXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "unexpected", type: "AssignmentExpression", data: { operator: "+=" } }] }, // Optional chaining { code: "(obj?.a).b = (obj?.a).b + y", output: null, - errors: EXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "replaced", type: "AssignmentExpression", data: { operator: "+=" } }] }, { code: "obj.a = obj?.a + b", output: null, - errors: EXPECTED_OPERATOR_ASSIGNMENT + errors: [{ messageId: "replaced", type: "AssignmentExpression", data: { operator: "+=" } }] } ] diff --git a/eslint/tests/lib/rules/padding-line-between-statements.js b/eslint/tests/lib/rules/padding-line-between-statements.js index 51ddf0e..0d6e93c 100644 --- a/eslint/tests/lib/rules/padding-line-between-statements.js +++ b/eslint/tests/lib/rules/padding-line-between-statements.js @@ -2729,7 +2729,7 @@ ruleTester.run("padding-line-between-statements", rule, { parserOptions: { ecmaVersion: 2022 } }, { - code: "class C { static { 'use strict'; let x; } }", // 'use strict'; is "espression", because class static blocks don't have directives + code: "class C { static { 'use strict'; let x; } }", // 'use strict'; is "expression", because class static blocks don't have directives options: [ { blankLine: "always", prev: "directive", next: "let" } ], @@ -5188,7 +5188,7 @@ ruleTester.run("padding-line-between-statements", rule, { errors: [{ messageId: "expectedBlankLine" }] }, { - code: "class C { static { 'use strict'; let x; } }", // 'use strict'; is "espression", because class static blocks don't have directives + code: "class C { static { 'use strict'; let x; } }", // 'use strict'; is "expression", because class static blocks don't have directives output: "class C { static { 'use strict';\n\n let x; } }", options: [ { blankLine: "always", prev: "expression", next: "let" } diff --git a/eslint/tests/lib/rules/prefer-const.js b/eslint/tests/lib/rules/prefer-const.js index 0a44b0b..c65252c 100644 --- a/eslint/tests/lib/rules/prefer-const.js +++ b/eslint/tests/lib/rules/prefer-const.js @@ -684,6 +684,78 @@ ruleTester.run("prefer-const", rule, { errors: [ { messageId: "useConst", data: { name: "a" }, type: "Identifier" } ] + }, + + // https://github.com/eslint/eslint/issues/16266 + { + code: ` + let { itemId, list } = {}, + obj = [], + total = 0; + total = 9; + console.log(itemId, list, obj, total); + `, + output: null, + options: [{ destructuring: "any", ignoreReadBeforeAssign: true }], + parserOptions: { ecmaVersion: 2022 }, + errors: [ + { messageId: "useConst", data: { name: "itemId" }, type: "Identifier" }, + { messageId: "useConst", data: { name: "list" }, type: "Identifier" }, + { messageId: "useConst", data: { name: "obj" }, type: "Identifier" } + ] + }, + { + code: ` + let { itemId, list } = {}, + obj = []; + console.log(itemId, list, obj); + `, + output: ` + const { itemId, list } = {}, + obj = []; + console.log(itemId, list, obj); + `, + options: [{ destructuring: "any", ignoreReadBeforeAssign: true }], + parserOptions: { ecmaVersion: 2022 }, + errors: [ + { messageId: "useConst", data: { name: "itemId" }, type: "Identifier" }, + { messageId: "useConst", data: { name: "list" }, type: "Identifier" }, + { messageId: "useConst", data: { name: "obj" }, type: "Identifier" } + ] + }, + { + code: ` + let [ itemId, list ] = [], + total = 0; + total = 9; + console.log(itemId, list, total); + `, + output: null, + options: [{ destructuring: "any", ignoreReadBeforeAssign: true }], + parserOptions: { ecmaVersion: 2022 }, + errors: [ + { messageId: "useConst", data: { name: "itemId" }, type: "Identifier" }, + { messageId: "useConst", data: { name: "list" }, type: "Identifier" } + ] + }, + { + code: ` + let [ itemId, list ] = [], + obj = []; + console.log(itemId, list, obj); + `, + output: ` + const [ itemId, list ] = [], + obj = []; + console.log(itemId, list, obj); + `, + options: [{ destructuring: "any", ignoreReadBeforeAssign: true }], + parserOptions: { ecmaVersion: 2022 }, + errors: [ + { messageId: "useConst", data: { name: "itemId" }, type: "Identifier" }, + { messageId: "useConst", data: { name: "list" }, type: "Identifier" }, + { messageId: "useConst", data: { name: "obj" }, type: "Identifier" } + ] } ] }); diff --git a/eslint/tests/lib/rules/prefer-object-has-own.js b/eslint/tests/lib/rules/prefer-object-has-own.js new file mode 100644 index 0000000..d58f7f5 --- /dev/null +++ b/eslint/tests/lib/rules/prefer-object-has-own.js @@ -0,0 +1,461 @@ +/** + * @fileoverview Tests for prefer-object-has-own rule. + * @author Nitin Kumar + * @author Gautam Arora + */ + +"use strict"; + +//------------------------------------------------------------------------------ +// Requirements +//------------------------------------------------------------------------------ + +const rule = require("../../../lib/rules/prefer-object-has-own"); +const { RuleTester } = require("../../../lib/rule-tester"); + +//------------------------------------------------------------------------------ +// Tests +//------------------------------------------------------------------------------ + +const parserOptions = { + ecmaVersion: 2022 +}; + +const ruleTester = new RuleTester({ parserOptions }); + +ruleTester.run("prefer-object-has-own", rule, { + valid: [ + "Object", + "Object(obj, prop)", + "Object.hasOwnProperty", + "Object.hasOwnProperty(prop)", + "hasOwnProperty(obj, prop)", + "foo.hasOwnProperty(prop)", + "foo.hasOwnProperty(obj, prop)", + "Object.hasOwnProperty.call", + "foo.Object.hasOwnProperty.call(obj, prop)", + "foo.hasOwnProperty.call(obj, prop)", + "foo.call(Object.prototype.hasOwnProperty, Object.prototype.hasOwnProperty.call)", + "Object.foo.call(obj, prop)", + "Object.hasOwnProperty.foo(obj, prop)", + "Object.hasOwnProperty.call.foo(obj, prop)", + "Object[hasOwnProperty].call(obj, prop)", + "Object.hasOwnProperty[call](obj, prop)", + "class C { #hasOwnProperty; foo() { Object.#hasOwnProperty.call(obj, prop) } }", + "class C { #call; foo() { Object.hasOwnProperty.#call(obj, prop) } }", + "(Object) => Object.hasOwnProperty.call(obj, prop)", // not global Object + "Object.prototype", + "Object.prototype(obj, prop)", + "Object.prototype.hasOwnProperty", + "Object.prototype.hasOwnProperty(obj, prop)", + "Object.prototype.hasOwnProperty.call", + "foo.Object.prototype.hasOwnProperty.call(obj, prop)", + "foo.prototype.hasOwnProperty.call(obj, prop)", + "Object.foo.hasOwnProperty.call(obj, prop)", + "Object.prototype.foo.call(obj, prop)", + "Object.prototype.hasOwnProperty.foo(obj, prop)", + "Object.prototype.hasOwnProperty.call.foo(obj, prop)", + "Object.prototype.prototype.hasOwnProperty.call(a, b);", + "Object.hasOwnProperty.prototype.hasOwnProperty.call(a, b);", + "Object.prototype[hasOwnProperty].call(obj, prop)", + "Object.prototype.hasOwnProperty[call](obj, prop)", + "class C { #hasOwnProperty; foo() { Object.prototype.#hasOwnProperty.call(obj, prop) } }", + "class C { #call; foo() { Object.prototype.hasOwnProperty.#call(obj, prop) } }", + "Object[prototype].hasOwnProperty.call(obj, prop)", + "class C { #prototype; foo() { Object.#prototype.hasOwnProperty.call(obj, prop) } }", + "(Object) => Object.prototype.hasOwnProperty.call(obj, prop)", // not global Object + "({})", + "({}(obj, prop))", + "({}.hasOwnProperty)", + "({}.hasOwnProperty(prop))", + "({}.hasOwnProperty(obj, prop))", + "({}.hasOwnProperty.call)", + "({}).prototype.hasOwnProperty.call(a, b);", + "({}.foo.call(obj, prop))", + "({}.hasOwnProperty.foo(obj, prop))", + "({}[hasOwnProperty].call(obj, prop))", + "({}.hasOwnProperty[call](obj, prop))", + "({}).hasOwnProperty[call](object, property)", + "({})[hasOwnProperty].call(object, property)", + "class C { #hasOwnProperty; foo() { ({}.#hasOwnProperty.call(obj, prop)) } }", + "class C { #call; foo() { ({}.hasOwnProperty.#call(obj, prop)) } }", + "({ foo }.hasOwnProperty.call(obj, prop))", // object literal should be empty + "(Object) => ({}).hasOwnProperty.call(obj, prop)", // Object is shadowed, so Object.hasOwn cannot be used here + ` + let obj = {}; + Object.hasOwn(obj,""); + `, + "const hasProperty = Object.hasOwn(object, property);", + `/* global Object: off */ + ({}).hasOwnProperty.call(a, b);` + ], + invalid: [ + { + code: "Object.hasOwnProperty.call(obj, 'foo')", + output: "Object.hasOwn(obj, 'foo')", + errors: [{ + messageId: "useHasOwn", + line: 1, + column: 1, + endLine: 1, + endColumn: 39 + }] + }, + { + code: "Object.hasOwnProperty.call(obj, property)", + output: "Object.hasOwn(obj, property)", + errors: [{ + messageId: "useHasOwn", + line: 1, + column: 1, + endLine: 1, + endColumn: 42 + }] + }, + { + code: "Object.prototype.hasOwnProperty.call(obj, 'foo')", + output: "Object.hasOwn(obj, 'foo')", + errors: [{ + messageId: "useHasOwn", + line: 1, + column: 1, + endLine: 1, + endColumn: 49 + }] + }, + { + code: "({}).hasOwnProperty.call(obj, 'foo')", + output: "Object.hasOwn(obj, 'foo')", + errors: [{ + messageId: "useHasOwn", + line: 1, + column: 1, + endLine: 1, + endColumn: 37 + }] + }, + + // prevent autofixing if there are any comments + { + code: "Object/* comment */.prototype.hasOwnProperty.call(a, b);", + output: null, + errors: [{ + messageId: "useHasOwn", + line: 1, + column: 1, + endLine: 1, + endColumn: 56 + }] + }, + { + code: "const hasProperty = Object.prototype.hasOwnProperty.call(object, property);", + output: "const hasProperty = Object.hasOwn(object, property);", + errors: [{ + messageId: "useHasOwn", + line: 1, + column: 21, + endLine: 1, + endColumn: 75 + }] + }, + { + code: "const hasProperty = (( Object.prototype.hasOwnProperty.call(object, property) ));", + output: "const hasProperty = (( Object.hasOwn(object, property) ));", + errors: [{ + messageId: "useHasOwn", + line: 1, + column: 24, + endLine: 1, + endColumn: 78 + }] + }, + { + code: "const hasProperty = (( Object.prototype.hasOwnProperty.call ))(object, property);", + output: "const hasProperty = (( Object.hasOwn ))(object, property);", + errors: [{ + messageId: "useHasOwn", + line: 1, + column: 21, + endLine: 1, + endColumn: 81 + }] + }, + { + code: "const hasProperty = (( Object.prototype.hasOwnProperty )).call(object, property);", + output: "const hasProperty = Object.hasOwn(object, property);", + errors: [{ + messageId: "useHasOwn", + line: 1, + column: 21, + endLine: 1, + endColumn: 81 + }] + }, + { + code: "const hasProperty = (( Object.prototype )).hasOwnProperty.call(object, property);", + output: "const hasProperty = Object.hasOwn(object, property);", + errors: [{ + messageId: "useHasOwn", + line: 1, + column: 21, + endLine: 1, + endColumn: 81 + }] + }, + { + code: "const hasProperty = (( Object )).prototype.hasOwnProperty.call(object, property);", + output: "const hasProperty = Object.hasOwn(object, property);", + errors: [{ + messageId: "useHasOwn", + line: 1, + column: 21, + endLine: 1, + endColumn: 81 + }] + }, + { + code: "const hasProperty = {}.hasOwnProperty.call(object, property);", + output: "const hasProperty = Object.hasOwn(object, property);", + errors: [{ + messageId: "useHasOwn", + line: 1, + column: 21, + endLine: 1, + endColumn: 61 + }] + }, + { + code: "const hasProperty={}.hasOwnProperty.call(object, property);", + output: "const hasProperty=Object.hasOwn(object, property);", + errors: [{ + messageId: "useHasOwn", + line: 1, + column: 19, + endLine: 1, + endColumn: 59 + }] + }, + { + code: "const hasProperty = (( {}.hasOwnProperty.call(object, property) ));", + output: "const hasProperty = (( Object.hasOwn(object, property) ));", + errors: [{ + messageId: "useHasOwn", + line: 1, + column: 24, + endLine: 1, + endColumn: 64 + }] + }, + { + code: "const hasProperty = (( {}.hasOwnProperty.call ))(object, property);", + output: "const hasProperty = (( Object.hasOwn ))(object, property);", + errors: [{ + messageId: "useHasOwn", + line: 1, + column: 21, + endLine: 1, + endColumn: 67 + }] + }, + { + code: "const hasProperty = (( {}.hasOwnProperty )).call(object, property);", + output: "const hasProperty = Object.hasOwn(object, property);", + errors: [{ + messageId: "useHasOwn", + line: 1, + column: 21, + endLine: 1, + endColumn: 67 + }] + }, + { + code: "const hasProperty = (( {} )).hasOwnProperty.call(object, property);", + output: "const hasProperty = Object.hasOwn(object, property);", + errors: [{ + messageId: "useHasOwn", + line: 1, + column: 21, + endLine: 1, + endColumn: 67 + }] + }, + { + code: "function foo(){return {}.hasOwnProperty.call(object, property)}", + output: "function foo(){return Object.hasOwn(object, property)}", + errors: [{ + messageId: "useHasOwn", + line: 1, + column: 23, + endLine: 1, + endColumn: 63 + }] + }, + + // https://github.com/eslint/eslint/pull/15346#issuecomment-991417335 + { + code: "function foo(){return{}.hasOwnProperty.call(object, property)}", + output: "function foo(){return Object.hasOwn(object, property)}", + errors: [{ + messageId: "useHasOwn", + line: 1, + column: 22, + endLine: 1, + endColumn: 62 + }] + }, + { + code: "function foo(){return/*comment*/{}.hasOwnProperty.call(object, property)}", + output: "function foo(){return/*comment*/Object.hasOwn(object, property)}", + errors: [{ + messageId: "useHasOwn", + line: 1, + column: 33, + endLine: 1, + endColumn: 73 + }] + }, + { + code: "async function foo(){return await{}.hasOwnProperty.call(object, property)}", + output: "async function foo(){return await Object.hasOwn(object, property)}", + errors: [{ + messageId: "useHasOwn", + line: 1, + column: 34, + endLine: 1, + endColumn: 74 + }] + }, + { + code: "async function foo(){return await/*comment*/{}.hasOwnProperty.call(object, property)}", + output: "async function foo(){return await/*comment*/Object.hasOwn(object, property)}", + errors: [{ + messageId: "useHasOwn", + line: 1, + column: 45, + endLine: 1, + endColumn: 85 + }] + }, + { + code: "for (const x of{}.hasOwnProperty.call(object, property).toString());", + output: "for (const x of Object.hasOwn(object, property).toString());", + errors: [{ + messageId: "useHasOwn", + line: 1, + column: 16, + endLine: 1, + endColumn: 56 + }] + }, + { + code: "for (const x of/*comment*/{}.hasOwnProperty.call(object, property).toString());", + output: "for (const x of/*comment*/Object.hasOwn(object, property).toString());", + errors: [{ + messageId: "useHasOwn", + line: 1, + column: 27, + endLine: 1, + endColumn: 67 + }] + }, + { + code: "for (const x in{}.hasOwnProperty.call(object, property).toString());", + output: "for (const x in Object.hasOwn(object, property).toString());", + errors: [{ + messageId: "useHasOwn", + line: 1, + column: 16, + endLine: 1, + endColumn: 56 + }] + }, + { + code: "for (const x in/*comment*/{}.hasOwnProperty.call(object, property).toString());", + output: "for (const x in/*comment*/Object.hasOwn(object, property).toString());", + errors: [{ + messageId: "useHasOwn", + line: 1, + column: 27, + endLine: 1, + endColumn: 67 + }] + }, + { + code: "function foo(){return({}.hasOwnProperty.call)(object, property)}", + output: "function foo(){return(Object.hasOwn)(object, property)}", + errors: [{ + messageId: "useHasOwn", + line: 1, + column: 22, + endLine: 1, + endColumn: 64 + }] + }, + { + code: "Object['prototype']['hasOwnProperty']['call'](object, property);", + output: "Object.hasOwn(object, property);", + errors: [{ + messageId: "useHasOwn", + line: 1, + column: 1, + endLine: 1, + endColumn: 64 + }] + }, + { + code: "Object[`prototype`][`hasOwnProperty`][`call`](object, property);", + output: "Object.hasOwn(object, property);", + errors: [{ + messageId: "useHasOwn", + line: 1, + column: 1, + endLine: 1, + endColumn: 64 + }] + }, + { + code: "Object['hasOwnProperty']['call'](object, property);", + output: "Object.hasOwn(object, property);", + errors: [{ + messageId: "useHasOwn", + line: 1, + column: 1, + endLine: 1, + endColumn: 51 + }] + }, + { + code: "Object[`hasOwnProperty`][`call`](object, property);", + output: "Object.hasOwn(object, property);", + errors: [{ + messageId: "useHasOwn", + line: 1, + column: 1, + endLine: 1, + endColumn: 51 + }] + }, + { + code: "({})['hasOwnProperty']['call'](object, property);", + output: "Object.hasOwn(object, property);", + errors: [{ + messageId: "useHasOwn", + line: 1, + column: 1, + endLine: 1, + endColumn: 49 + }] + }, + { + code: "({})[`hasOwnProperty`][`call`](object, property);", + output: "Object.hasOwn(object, property);", + errors: [{ + messageId: "useHasOwn", + line: 1, + column: 1, + endLine: 1, + endColumn: 49 + }] + } + ] +}); diff --git a/eslint/tests/lib/rules/prefer-regex-literals.js b/eslint/tests/lib/rules/prefer-regex-literals.js index ccd88ae..f2982cb 100644 --- a/eslint/tests/lib/rules/prefer-regex-literals.js +++ b/eslint/tests/lib/rules/prefer-regex-literals.js @@ -26,6 +26,8 @@ ruleTester.run("prefer-regex-literals", rule, { // considered as dynamic "new RegExp(pattern)", + "new RegExp('\\\\p{Emoji_Presentation}\\\\P{Script_Extensions=Latin}' + '', `ug`)", + "new RegExp('\\\\cA' + '')", "RegExp(pattern, 'g')", "new RegExp(f('a'))", "RegExp(prefix + 'a')", @@ -33,6 +35,7 @@ ruleTester.run("prefer-regex-literals", rule, { "RegExp(`a` + suffix);", "new RegExp(String.raw`a` + suffix);", "RegExp('a', flags)", + "const flags = 'gu';RegExp('a', flags)", "RegExp('a', 'g' + flags)", "new RegExp(String.raw`a`, flags);", "RegExp(`${prefix}abc`)", @@ -42,8 +45,10 @@ ruleTester.run("prefer-regex-literals", rule, { "new RegExp(String.raw`a${''}c`);", "new RegExp('a' + 'b')", "RegExp(1)", - "new RegExp(/a/, 'u');", - "new RegExp(/a/);", + "new RegExp('(\\\\p{Emoji_Presentation})\\\\1' + '', `ug`)", + "RegExp(String.raw`\\78\\126` + '\\\\5934', '' + `g` + '')", + "func(new RegExp(String.raw`a${''}c\\d`, 'u'),new RegExp(String.raw`a${''}c\\d`, 'u'))", + "new RegExp('\\\\[' + \"b\\\\]\")", { code: "new RegExp(/a/, flags);", options: [{ disallowRedundantWrapping: true }] @@ -134,124 +139,2338 @@ ruleTester.run("prefer-regex-literals", rule, { invalid: [ { code: "new RegExp('abc');", - errors: [{ messageId: "unexpectedRegExp", type: "NewExpression" }] + errors: [ + { + messageId: "unexpectedRegExp", + type: "NewExpression", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/abc/;" + } + ] + } + ] }, { code: "RegExp('abc');", - errors: [{ messageId: "unexpectedRegExp", type: "CallExpression" }] + errors: [ + { + messageId: "unexpectedRegExp", + type: "CallExpression", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/abc/;" + } + ] + } + ] }, { code: "new RegExp('abc', 'g');", - errors: [{ messageId: "unexpectedRegExp", type: "NewExpression" }] + errors: [ + { + messageId: "unexpectedRegExp", + type: "NewExpression", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/abc/g;" + } + ] + } + ] }, { code: "RegExp('abc', 'g');", - errors: [{ messageId: "unexpectedRegExp", type: "CallExpression" }] + errors: [ + { + messageId: "unexpectedRegExp", + type: "CallExpression", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/abc/g;" + } + ] + } + ] }, { code: "new RegExp(`abc`);", - errors: [{ messageId: "unexpectedRegExp", type: "NewExpression" }] + errors: [ + { + messageId: "unexpectedRegExp", + type: "NewExpression", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/abc/;" + } + ] + } + ] }, { code: "RegExp(`abc`);", - errors: [{ messageId: "unexpectedRegExp", type: "CallExpression" }] + errors: [ + { + messageId: "unexpectedRegExp", + type: "CallExpression", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/abc/;" + } + ] + } + ] }, { code: "new RegExp(`abc`, `g`);", - errors: [{ messageId: "unexpectedRegExp", type: "NewExpression" }] + errors: [ + { + messageId: "unexpectedRegExp", + type: "NewExpression", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/abc/g;" + } + ] + } + ] }, { code: "RegExp(`abc`, `g`);", - errors: [{ messageId: "unexpectedRegExp", type: "CallExpression" }] + errors: [ + { + messageId: "unexpectedRegExp", + type: "CallExpression", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/abc/g;" + } + ] + } + ] }, { code: "new RegExp(String.raw`abc`);", - errors: [{ messageId: "unexpectedRegExp", type: "NewExpression" }] + errors: [ + { + messageId: "unexpectedRegExp", + type: "NewExpression", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/abc/;" + } + ] + } + ] + }, + { + code: "new RegExp(String.raw`abc\nabc`);", + errors: [ + { + messageId: "unexpectedRegExp", + type: "NewExpression", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/abc\\nabc/;" + } + ] + } + ] + }, + { + code: "new RegExp(String.raw`\tabc\nabc`);", + errors: [ + { + messageId: "unexpectedRegExp", + type: "NewExpression", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/\\tabc\\nabc/;" + } + ] + } + ] }, { code: "RegExp(String.raw`abc`);", - errors: [{ messageId: "unexpectedRegExp", type: "CallExpression" }] + errors: [ + { + messageId: "unexpectedRegExp", + type: "CallExpression", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/abc/;" + } + ] + } + ] }, { code: "new RegExp(String.raw`abc`, String.raw`g`);", - errors: [{ messageId: "unexpectedRegExp", type: "NewExpression" }] + errors: [ + { + messageId: "unexpectedRegExp", + type: "NewExpression", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/abc/g;" + } + ] + } + ] }, { code: "RegExp(String.raw`abc`, String.raw`g`);", - errors: [{ messageId: "unexpectedRegExp", type: "CallExpression" }] + errors: [ + { + messageId: "unexpectedRegExp", + type: "CallExpression", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/abc/g;" + } + ] + } + ] }, { code: "new RegExp(String['raw']`a`);", - errors: [{ messageId: "unexpectedRegExp", type: "NewExpression" }] + errors: [ + { + messageId: "unexpectedRegExp", + type: "NewExpression", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/a/;" + } + ] + } + ] }, { code: "new RegExp('');", - errors: [{ messageId: "unexpectedRegExp", type: "NewExpression" }] + errors: [ + { + messageId: "unexpectedRegExp", + type: "NewExpression", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/(?:)/;" + } + ] + } + ] }, { code: "RegExp('', '');", - errors: [{ messageId: "unexpectedRegExp", type: "CallExpression" }] + errors: [ + { + messageId: "unexpectedRegExp", + type: "CallExpression", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/(?:)/;" + } + ] + } + ] }, { code: "new RegExp(String.raw``);", - errors: [{ messageId: "unexpectedRegExp", type: "NewExpression" }] + errors: [ + { + messageId: "unexpectedRegExp", + type: "NewExpression", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/(?:)/;" + } + ] + } + ] }, { code: "new RegExp('a', `g`);", - errors: [{ messageId: "unexpectedRegExp", type: "NewExpression" }] + errors: [ + { + messageId: "unexpectedRegExp", + type: "NewExpression", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/a/g;" + } + ] + } + ] }, { code: "RegExp(`a`, 'g');", - errors: [{ messageId: "unexpectedRegExp", type: "CallExpression" }] + errors: [ + { + messageId: "unexpectedRegExp", + type: "CallExpression", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/a/g;" + } + ] + } + ] }, { code: "RegExp(String.raw`a`, 'g');", - errors: [{ messageId: "unexpectedRegExp", type: "CallExpression" }] + errors: [ + { + messageId: "unexpectedRegExp", + type: "CallExpression", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/a/g;" + } + ] + } + ] }, { code: "new RegExp(String.raw`\\d`, `g`);", - errors: [{ messageId: "unexpectedRegExp", type: "NewExpression" }] + errors: [ + { + messageId: "unexpectedRegExp", + type: "NewExpression", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/\\d/g;" + } + ] + } + ] + }, + { + code: "new RegExp(String.raw`\\\\d`, `g`);", + errors: [ + { + messageId: "unexpectedRegExp", + type: "NewExpression", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/\\\\d/g;" + } + ] + } + ] + }, + { + code: "new RegExp(String['raw']`\\\\d`, `g`);", + errors: [ + { + messageId: "unexpectedRegExp", + type: "NewExpression", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/\\\\d/g;" + } + ] + } + ] + }, + { + code: "new RegExp(String[\"raw\"]`\\\\d`, `g`);", + errors: [ + { + messageId: "unexpectedRegExp", + type: "NewExpression", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/\\\\d/g;" + } + ] + } + ] }, { code: "RegExp('a', String.raw`g`);", - errors: [{ messageId: "unexpectedRegExp", type: "CallExpression" }] + errors: [ + { + messageId: "unexpectedRegExp", + type: "CallExpression", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/a/g;" + } + ] + } + ] }, { code: "new globalThis.RegExp('a');", - env: { es2020: true }, - errors: [{ messageId: "unexpectedRegExp", type: "NewExpression" }] + env: { + es2020: true + }, + errors: [ + { + messageId: "unexpectedRegExp", + type: "NewExpression", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/a/;" + } + ] + } + ] }, { code: "globalThis.RegExp('a');", - env: { es2020: true }, - errors: [{ messageId: "unexpectedRegExp", type: "CallExpression" }] + env: { + es2020: true + }, + errors: [ + { + messageId: "unexpectedRegExp", + type: "CallExpression", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/a/;" + } + ] + } + ] }, - { code: "new RegExp(/a/);", - options: [{ disallowRedundantWrapping: true }], - errors: [{ messageId: "unexpectedRedundantRegExp", type: "NewExpression", line: 1, column: 1 }] + options: [ + { + disallowRedundantWrapping: true + } + ], + errors: [ + { + messageId: "unexpectedRedundantRegExp", + type: "NewExpression", + line: 1, + column: 1 + } + ] }, { code: "new RegExp(/a/, 'u');", - options: [{ disallowRedundantWrapping: true }], - errors: [{ messageId: "unexpectedRedundantRegExpWithFlags", type: "NewExpression", line: 1, column: 1 }] + options: [ + { + disallowRedundantWrapping: true + } + ], + errors: [ + { + messageId: "unexpectedRedundantRegExpWithFlags", + type: "NewExpression", + line: 1, + column: 1 + } + ] }, { code: "new RegExp(/a/, `u`);", - options: [{ disallowRedundantWrapping: true }], - errors: [{ messageId: "unexpectedRedundantRegExpWithFlags", type: "NewExpression", line: 1, column: 1 }] + options: [ + { + disallowRedundantWrapping: true + } + ], + errors: [ + { + messageId: "unexpectedRedundantRegExpWithFlags", + type: "NewExpression", + line: 1, + column: 1 + } + ] + }, + { + code: "new RegExp(/a/, String.raw`u`);", + options: [ + { + disallowRedundantWrapping: true + } + ], + errors: [ + { + messageId: "unexpectedRedundantRegExpWithFlags", + type: "NewExpression", + line: 1, + column: 1 + } + ] }, { code: "new RegExp('a');", - options: [{ disallowRedundantWrapping: true }], - errors: [{ messageId: "unexpectedRegExp", type: "NewExpression", line: 1, column: 1 }] + options: [ + { + disallowRedundantWrapping: true + } + ], + errors: [ + { + messageId: "unexpectedRegExp", + type: "NewExpression", + line: 1, + column: 1, + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/a/;" + } + ] + } + ] }, - - // Optional chaining { code: "new RegExp((String?.raw)`a`);", - errors: [{ messageId: "unexpectedRegExp" }] + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/a/;" + } + ] + } + ] + }, + { + code: "new RegExp('+');", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: null + } + ] + }, + { + code: "new RegExp('*');", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: null + } + ] + }, + { + code: "RegExp('+');", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: null + } + ] + }, + { + code: "RegExp('*');", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: null + } + ] + }, + { + code: "new RegExp('+', 'g');", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: null + } + ] + }, + { + code: "new RegExp('*', 'g');", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: null + } + ] + }, + { + code: "RegExp('+', 'g');", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: null + } + ] + }, + { + code: "RegExp('*', 'g');", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: null + } + ] + }, + { + code: "RegExp('abc', 'u');", + parserOptions: { + ecmaVersion: 3 + }, + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: null + } + ] + }, + { + code: "new RegExp('abc', 'd');", + parserOptions: { + ecmaVersion: 2021 + }, + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: null + } + ] + }, + { + code: "RegExp('abc', 'd');", + parserOptions: { + ecmaVersion: 2022 + }, + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/abc/d;" + } + ] + } + ] + }, + { + code: "RegExp('\\\\\\\\', '');", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/\\\\/;" + } + ] + } + ] + }, + { + code: "RegExp('\\n', '');", + parserOptions: { + ecmaVersion: 2022 + }, + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/\\n/;" + } + ] + } + ] + }, + { + code: "RegExp('\\n\\n', '');", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/\\n\\n/;" + } + ] + } + ] + }, + { + code: "RegExp('\\t', '');", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/\\t/;" + } + ] + } + ] + }, + { + code: "RegExp('\\t\\t', '');", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/\\t\\t/;" + } + ] + } + ] + }, + { + code: "RegExp('\\r\\n', '');", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/\\r\\n/;" + } + ] + } + ] + }, + { + code: "RegExp('\\u1234', 'g')", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: null + } + ] + }, + { + code: "RegExp('\\u{1234}', 'g')", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: null + } + ] + }, + { + code: "RegExp('\\u{11111}', 'g')", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: null + } + ] + }, + { + code: "RegExp('\\v', '');", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/\\v/;" + } + ] + } + ] + }, + { + code: "RegExp('\\v\\v', '');", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/\\v\\v/;" + } + ] + } + ] + }, + { + code: "RegExp('\\f', '');", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/\\f/;" + } + ] + } + ] + }, + { + code: "RegExp('\\f\\f', '');", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/\\f\\f/;" + } + ] + } + ] + }, + { + code: "RegExp('\\\\b', '');", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/\\b/;" + } + ] + } + ] + }, + { + code: "RegExp('\\\\b\\\\b', '');", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/\\b\\b/;" + } + ] + } + ] + }, + { + code: "new RegExp('\\\\B\\\\b', '');", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/\\B\\b/;" + } + ] + } + ] + }, + { + code: "RegExp('\\\\w', '');", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/\\w/;" + } + ] + } + ] + }, + { + code: "new globalThis.RegExp('\\\\W', '');", + globals: { + globalThis: "readonly" + }, + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/\\W/;" + } + ] + } + ] + }, + { + code: "RegExp('\\\\s', '');", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/\\s/;" + } + ] + } + ] + }, + { + code: "new RegExp('\\\\S', '')", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/\\S/" + } + ] + } + ] + }, + { + code: "globalThis.RegExp('\\\\d', '');", + globals: { + globalThis: "readonly" + }, + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/\\d/;" + } + ] + } + ] + }, + { + code: "globalThis.RegExp('\\\\D', '')", + globals: { + globalThis: "readonly" + }, + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/\\D/" + } + ] + } + ] + }, + { + code: "globalThis.RegExp('\\\\\\\\\\\\D', '')", + globals: { + globalThis: "readonly" + }, + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/\\\\\\D/" + } + ] + } + ] + }, + { + code: "new RegExp('\\\\D\\\\D', '')", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/\\D\\D/" + } + ] + } + ] + }, + { + code: "new globalThis.RegExp('\\\\0\\\\0', '');", + globals: { + globalThis: "writable" + }, + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/\\0\\0/;" + } + ] + } + ] + }, + { + code: "new RegExp('\\\\0\\\\0', '');", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/\\0\\0/;" + } + ] + } + ] + }, + { + code: "new RegExp('\\0\\0', 'g');", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: null + } + ] + }, + { + code: "RegExp('\\\\0\\\\0\\\\0', '')", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/\\0\\0\\0/" + } + ] + } + ] + }, + { + code: "RegExp('\\\\78\\\\126\\\\5934', '')", + parserOptions: { + ecmaVersion: 2022 + }, + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/\\78\\126\\5934/" + } + ] + } + ] + }, + { + code: "new window['RegExp']('\\\\x56\\\\x78\\\\x45', '');", + env: { + browser: true + }, + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/\\x56\\x78\\x45/;" + } + ] + } + ] + }, + { + code: "a in(RegExp('abc'))", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "a in(/abc/)" + } + ] + } + ] + }, + { + code: "x = y\n RegExp(\"foo\").test(x) ? bar() : baz()", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: null + } + ] + }, + { + code: "func(new RegExp(String.raw`\\w{1, 2`, 'u'),new RegExp(String.raw`\\w{1, 2`, 'u'))", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: null + }, + { + messageId: "unexpectedRegExp", + suggestions: null + } + ] + }, + { + code: "x = y;\n RegExp(\"foo\").test(x) ? bar() : baz()", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "x = y;\n /foo/.test(x) ? bar() : baz()" + } + ] + } + ] + }, + { + code: "typeof RegExp(\"foo\")", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "typeof /foo/" + } + ] + } + ] + }, + { + code: "RegExp(\"foo\") instanceof RegExp(String.raw`blahblah`, 'g') ? typeof new RegExp('(\\\\p{Emoji_Presentation})\\\\1', `ug`) : false", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/foo/ instanceof RegExp(String.raw`blahblah`, 'g') ? typeof new RegExp('(\\\\p{Emoji_Presentation})\\\\1', `ug`) : false" + } + ] + }, + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "RegExp(\"foo\") instanceof /blahblah/g ? typeof new RegExp('(\\\\p{Emoji_Presentation})\\\\1', `ug`) : false" + } + ] + }, + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "RegExp(\"foo\") instanceof RegExp(String.raw`blahblah`, 'g') ? typeof /(\\p{Emoji_Presentation})\\1/ug : false" + } + ] + } + ] + }, + { + code: "[ new RegExp(`someregular`)]", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "[ /someregular/]" + } + ] + } + ] + }, + { + code: "const totallyValidatesEmails = new RegExp(\"\\\\S+@(\\\\S+\\\\.)+\\\\S+\")\n if (typeof totallyValidatesEmails === 'object') {\n runSomethingThatExists(Regexp('stuff'))\n }", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "const totallyValidatesEmails = /\\S+@(\\S+\\.)+\\S+/\n if (typeof totallyValidatesEmails === 'object') {\n runSomethingThatExists(Regexp('stuff'))\n }" + } + ] + } + ] + }, + { + code: "!new RegExp('^Hey, ', 'u') && new RegExp('jk$') && ~new RegExp('^Sup, ') || new RegExp('hi') + new RegExp('person') === -new RegExp('hi again') ? 5 * new RegExp('abc') : 'notregbutstring'", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "!/^Hey, /u && new RegExp('jk$') && ~new RegExp('^Sup, ') || new RegExp('hi') + new RegExp('person') === -new RegExp('hi again') ? 5 * new RegExp('abc') : 'notregbutstring'" + } + ] + }, + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "!new RegExp('^Hey, ', 'u') && /jk$/ && ~new RegExp('^Sup, ') || new RegExp('hi') + new RegExp('person') === -new RegExp('hi again') ? 5 * new RegExp('abc') : 'notregbutstring'" + } + ] + }, + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "!new RegExp('^Hey, ', 'u') && new RegExp('jk$') && ~/^Sup, / || new RegExp('hi') + new RegExp('person') === -new RegExp('hi again') ? 5 * new RegExp('abc') : 'notregbutstring'" + } + ] + }, + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "!new RegExp('^Hey, ', 'u') && new RegExp('jk$') && ~new RegExp('^Sup, ') || /hi/ + new RegExp('person') === -new RegExp('hi again') ? 5 * new RegExp('abc') : 'notregbutstring'" + } + ] + }, + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "!new RegExp('^Hey, ', 'u') && new RegExp('jk$') && ~new RegExp('^Sup, ') || new RegExp('hi') + /person/ === -new RegExp('hi again') ? 5 * new RegExp('abc') : 'notregbutstring'" + } + ] + }, + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "!new RegExp('^Hey, ', 'u') && new RegExp('jk$') && ~new RegExp('^Sup, ') || new RegExp('hi') + new RegExp('person') === -/hi again/ ? 5 * new RegExp('abc') : 'notregbutstring'" + } + ] + }, + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "!new RegExp('^Hey, ', 'u') && new RegExp('jk$') && ~new RegExp('^Sup, ') || new RegExp('hi') + new RegExp('person') === -new RegExp('hi again') ? 5 * /abc/ : 'notregbutstring'" + } + ] + } + ] + }, + { + code: "#!/usr/bin/sh\n RegExp(\"foo\")", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "#!/usr/bin/sh\n /foo/" + } + ] + } + ] + }, + { + code: "async function abc(){await new RegExp(\"foo\")}", + parserOptions: { + ecmaVersion: 8, + sourceType: "module" + }, + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: null + } + ] + }, + { + code: "function* abc(){yield new RegExp(\"foo\")}", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: null + } + ] + }, + { + code: "function* abc(){yield* new RegExp(\"foo\")}", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "function* abc(){yield* /foo/}" + } + ] + } + ] + }, + { + code: "console.log({ ...new RegExp('a') })", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "console.log({ .../a/ })" + } + ] + } + ] + }, + { + code: "delete RegExp('a');", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "delete /a/;" + } + ] + } + ] + }, + { + code: "void RegExp('a');", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "void /a/;" + } + ] + } + ] + }, + { + code: "new RegExp(\"\\\\S+@(\\\\S+\\\\.)+\\\\S+\")**RegExp('a')", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/\\S+@(\\S+\\.)+\\S+/**RegExp('a')" + } + ] + }, + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "new RegExp(\"\\\\S+@(\\\\S+\\\\.)+\\\\S+\")**/a/" + } + ] + } + ] + }, + { + code: "new RegExp(\"\\\\S+@(\\\\S+\\\\.)+\\\\S+\")%RegExp('a')", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/\\S+@(\\S+\\.)+\\S+/%RegExp('a')" + } + ] + }, + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "new RegExp(\"\\\\S+@(\\\\S+\\\\.)+\\\\S+\")%/a/" + } + ] + } + ] + }, + { + code: "a in RegExp('abc')", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "a in /abc/" + } + ] + } + ] + }, + { + code: "\n /abc/ == new RegExp('cba');\n ", + parserOptions: { + ecmaVersion: 2021 + }, + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "\n /abc/ == /cba/;\n " + } + ] + } + ] + }, + { + code: "\n /abc/ === new RegExp('cba');\n ", + parserOptions: { + ecmaVersion: 2021 + }, + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "\n /abc/ === /cba/;\n " + } + ] + } + ] + }, + { + code: "\n /abc/ != new RegExp('cba');\n ", + parserOptions: { + ecmaVersion: 2021 + }, + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "\n /abc/ != /cba/;\n " + } + ] + } + ] + }, + { + code: "\n /abc/ !== new RegExp('cba');\n ", + parserOptions: { + ecmaVersion: 2021 + }, + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "\n /abc/ !== /cba/;\n " + } + ] + } + ] + }, + { + code: "\n /abc/ > new RegExp('cba');\n ", + parserOptions: { + ecmaVersion: 2021 + }, + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "\n /abc/ > /cba/;\n " + } + ] + } + ] + }, + { + code: "\n /abc/ < new RegExp('cba');\n ", + parserOptions: { + ecmaVersion: 2021 + }, + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "\n /abc/ < /cba/;\n " + } + ] + } + ] + }, + { + code: "\n /abc/ >= new RegExp('cba');\n ", + parserOptions: { + ecmaVersion: 2021 + }, + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "\n /abc/ >= /cba/;\n " + } + ] + } + ] + }, + { + code: "\n /abc/ <= new RegExp('cba');\n ", + parserOptions: { + ecmaVersion: 2021 + }, + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "\n /abc/ <= /cba/;\n " + } + ] + } + ] + }, + { + code: "\n /abc/ << new RegExp('cba');\n ", + parserOptions: { + ecmaVersion: 2021 + }, + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "\n /abc/ << /cba/;\n " + } + ] + } + ] + }, + { + code: "\n /abc/ >> new RegExp('cba');\n ", + parserOptions: { + ecmaVersion: 2021 + }, + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "\n /abc/ >> /cba/;\n " + } + ] + } + ] + }, + { + code: "\n /abc/ >>> new RegExp('cba');\n ", + parserOptions: { + ecmaVersion: 2021 + }, + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "\n /abc/ >>> /cba/;\n " + } + ] + } + ] + }, + { + code: "\n /abc/ ^ new RegExp('cba');\n ", + parserOptions: { + ecmaVersion: 2021 + }, + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "\n /abc/ ^ /cba/;\n " + } + ] + } + ] + }, + { + code: "\n /abc/ & new RegExp('cba');\n ", + parserOptions: { + ecmaVersion: 2021 + }, + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "\n /abc/ & /cba/;\n " + } + ] + } + ] + }, + { + code: "\n /abc/ | new RegExp('cba');\n ", + parserOptions: { + ecmaVersion: 2021 + }, + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "\n /abc/ | /cba/;\n " + } + ] + } + ] + }, + { + code: "\n null ?? new RegExp('blah')\n ", + parserOptions: { + ecmaVersion: 2021 + }, + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "\n null ?? /blah/\n " + } + ] + } + ] + }, + { + code: "\n abc *= new RegExp('blah')\n ", + parserOptions: { + ecmaVersion: 2021 + }, + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "\n abc *= /blah/\n " + } + ] + } + ] + }, + { + code: "\n console.log({a: new RegExp('sup')})\n ", + parserOptions: { + ecmaVersion: 2021 + }, + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "\n console.log({a: /sup/})\n " + } + ] + } + ] + }, + { + code: "\n console.log(() => {new RegExp('sup')})\n ", + parserOptions: { + ecmaVersion: 2021 + }, + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "\n console.log(() => {/sup/})\n " + } + ] + } + ] + }, + { + code: "\n function abc() {new RegExp('sup')}\n ", + parserOptions: { + ecmaVersion: 2021 + }, + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "\n function abc() {/sup/}\n " + } + ] + } + ] + }, + { + code: "\n function abc() {return new RegExp('sup')}\n ", + parserOptions: { + ecmaVersion: 2021 + }, + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "\n function abc() {return /sup/}\n " + } + ] + } + ] + }, + { + code: "\n abc <<= new RegExp('cba');\n ", + parserOptions: { + ecmaVersion: 2021 + }, + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "\n abc <<= /cba/;\n " + } + ] + } + ] + }, + { + code: "\n abc >>= new RegExp('cba');\n ", + parserOptions: { + ecmaVersion: 2021 + }, + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "\n abc >>= /cba/;\n " + } + ] + } + ] + }, + { + code: "\n abc >>>= new RegExp('cba');\n ", + parserOptions: { + ecmaVersion: 2021 + }, + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "\n abc >>>= /cba/;\n " + } + ] + } + ] + }, + { + code: "\n abc ^= new RegExp('cba');\n ", + parserOptions: { + ecmaVersion: 2021 + }, + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "\n abc ^= /cba/;\n " + } + ] + } + ] + }, + { + code: "\n abc &= new RegExp('cba');\n ", + parserOptions: { + ecmaVersion: 2021 + }, + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "\n abc &= /cba/;\n " + } + ] + } + ] + }, + { + code: "\n abc |= new RegExp('cba');\n ", + parserOptions: { + ecmaVersion: 2021 + }, + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "\n abc |= /cba/;\n " + } + ] + } + ] + }, + { + code: "\n abc ??= new RegExp('cba');\n ", + parserOptions: { + ecmaVersion: 2021 + }, + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "\n abc ??= /cba/;\n " + } + ] + } + ] + }, + { + code: "\n abc &&= new RegExp('cba');\n ", + parserOptions: { + ecmaVersion: 2021 + }, + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "\n abc &&= /cba/;\n " + } + ] + } + ] + }, + { + code: "\n abc ||= new RegExp('cba');\n ", + parserOptions: { + ecmaVersion: 2021 + }, + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "\n abc ||= /cba/;\n " + } + ] + } + ] + }, + { + code: "\n abc **= new RegExp('blah')\n ", + parserOptions: { + ecmaVersion: 2021 + }, + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "\n abc **= /blah/\n " + } + ] + } + ] + }, + { + code: "\n abc /= new RegExp('blah')\n ", + parserOptions: { + ecmaVersion: 2021 + }, + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "\n abc /= /blah/\n " + } + ] + } + ] + }, + { + code: "\n abc += new RegExp('blah')\n ", + parserOptions: { + ecmaVersion: 2021 + }, + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "\n abc += /blah/\n " + } + ] + } + ] + }, + { + code: "\n abc -= new RegExp('blah')\n ", + parserOptions: { + ecmaVersion: 2021 + }, + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "\n abc -= /blah/\n " + } + ] + } + ] + }, + { + code: "\n abc %= new RegExp('blah')\n ", + parserOptions: { + ecmaVersion: 2021 + }, + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "\n abc %= /blah/\n " + } + ] + } + ] + }, + { + code: "\n () => new RegExp('blah')\n ", + parserOptions: { + ecmaVersion: 2021 + }, + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "\n () => /blah/\n " + } + ] + } + ] + }, + { + code: "a/RegExp(\"foo\")in b", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "a/ /foo/ in b" + } + ] + } + ] + }, + { + code: "a/RegExp(\"foo\")instanceof b", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "a/ /foo/ instanceof b" + } + ] + } + ] + }, + { + code: "do RegExp(\"foo\")\nwhile (true);", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "do /foo/\nwhile (true);" + } + ] + } + ] + }, + { + code: "for(let i;i<5;i++) { break\nnew RegExp('search')}", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "for(let i;i<5;i++) { break\n/search/}" + } + ] + } + ] + }, + { + code: "for(let i;i<5;i++) { continue\nnew RegExp('search')}", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "for(let i;i<5;i++) { continue\n/search/}" + } + ] + } + ] + }, + { + code: "\n switch (value) {\n case \"possibility\":\n console.log('possibility matched')\n case RegExp('myReg').toString():\n console.log('matches a regexp\\' toString value')\n break;\n }\n ", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "\n switch (value) {\n case \"possibility\":\n console.log('possibility matched')\n case /myReg/.toString():\n console.log('matches a regexp\\' toString value')\n break;\n }\n " + } + ] + } + ] + }, + { + code: "throw new RegExp('abcdefg') // fail with a regular expression", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "throw /abcdefg/ // fail with a regular expression" + } + ] + } + ] + }, + { + code: "for (value of new RegExp('something being searched')) { console.log(value) }", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: null + } + ] + }, + { + code: "(async function(){for await (value of new RegExp('something being searched')) { console.log(value) }})()", + parserOptions: { + ecmaVersion: 2018 + }, + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: null + } + ] + }, + { + code: "for (value in new RegExp('something being searched')) { console.log(value) }", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "for (value in /something being searched/) { console.log(value) }" + } + ] + } + ] + }, + { + code: "if (condition1 && condition2) new RegExp('avalue').test(str);", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: null + } + ] + }, + { + code: "debugger\nnew RegExp('myReg')", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "debugger\n/myReg/" + } + ] + } + ] + }, + { + code: "RegExp(\"\\\\\\n\")", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/\\n/" + } + ] + } + ] + }, + { + code: "RegExp(\"\\\\\\t\")", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/\\t/" + } + ] + } + ] + }, + { + code: "RegExp(\"\\\\\\f\")", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/\\f/" + } + ] + } + ] + }, + { + code: "RegExp(\"\\\\\\v\")", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/\\v/" + } + ] + } + ] + }, + { + code: "RegExp(\"\\\\\\r\")", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/\\r/" + } + ] + } + ] + }, + { + code: "new RegExp(\"\t\")", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/\\t/" + } + ] + } + ] + }, + { + code: "new RegExp(\"/\")", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/\\//" + } + ] + } + ] + }, + { + code: "new RegExp(\"\\.\")", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/./" + } + ] + } + ] + }, + { + code: "new RegExp(\"\\\\.\")", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/\\./" + } + ] + } + ] + }, + { + code: "new RegExp(\"\\\\\\n\\\\\\n\")", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/\\n\\n/" + } + ] + } + ] + }, + { + code: "new RegExp(\"\\\\\\n\\\\\\f\\\\\\n\")", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/\\n\\f\\n/" + } + ] + } + ] + }, + { + code: "new RegExp(\"\\u000A\\u000A\");", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: [ + { + messageId: "replaceWithLiteral", + output: "/\\n\\n/;" + } + ] + } + ] + }, + { + code: "new RegExp('mysafereg' /* comment explaining its safety */)", + errors: [ + { + messageId: "unexpectedRegExp", + suggestions: null + } + ] } ] }); diff --git a/eslint/tests/lib/rules/prefer-template.js b/eslint/tests/lib/rules/prefer-template.js index eea0255..a89a36a 100644 --- a/eslint/tests/lib/rules/prefer-template.js +++ b/eslint/tests/lib/rules/prefer-template.js @@ -223,6 +223,187 @@ ruleTester.run("prefer-template", rule, { code: "foo + '\\0'", output: "`${foo }\\0`", errors + }, + + // https://github.com/eslint/eslint/issues/15083 + { + code: `"default-src 'self' https://*.google.com;" + + "frame-ancestors 'none';" + + "report-to " + foo + ";"`, + output: `\`default-src 'self' https://*.google.com;\` + + \`frame-ancestors 'none';\` + + \`report-to \${ foo };\``, + errors + }, + { + code: "'a' + 'b' + foo", + output: "`a` + `b${ foo}`", + errors + }, + { + code: "'a' + 'b' + foo + 'c' + 'd'", + output: "`a` + `b${ foo }c` + `d`", + errors + }, + { + code: "'a' + 'b + c' + foo + 'd' + 'e'", + output: "`a` + `b + c${ foo }d` + `e`", + errors + }, + { + code: "'a' + 'b' + foo + ('c' + 'd')", + output: "`a` + `b${ foo }c` + `d`", + errors + }, + { + code: "'a' + 'b' + foo + ('a' + 'b')", + output: "`a` + `b${ foo }a` + `b`", + errors + }, + { + code: "'a' + 'b' + foo + ('c' + 'd') + ('e' + 'f')", + output: "`a` + `b${ foo }c` + `d` + `e` + `f`", + errors + }, + { + code: "foo + ('a' + 'b') + ('c' + 'd')", + output: "`${foo }a` + `b` + `c` + `d`", + errors + }, + { + code: "'a' + foo + ('b' + 'c') + ('d' + bar + 'e')", + output: "`a${ foo }b` + `c` + `d${ bar }e`", + errors + }, + { + code: "foo + ('b' + 'c') + ('d' + bar + 'e')", + output: "`${foo }b` + `c` + `d${ bar }e`", + errors + }, + { + code: "'a' + 'b' + foo + ('c' + 'd' + 'e')", + output: "`a` + `b${ foo }c` + `d` + `e`", + errors + }, + { + code: "'a' + 'b' + foo + ('c' + bar + 'd')", + output: "`a` + `b${ foo }c${ bar }d`", + errors + }, + { + code: "'a' + 'b' + foo + ('c' + bar + ('d' + 'e') + 'f')", + output: "`a` + `b${ foo }c${ bar }d` + `e` + `f`", + errors + }, + { + code: "'a' + 'b' + foo + ('c' + bar + 'e') + 'f' + test", + output: "`a` + `b${ foo }c${ bar }e` + `f${ test}`", + errors + }, + { + code: "'a' + foo + ('b' + bar + 'c') + ('d' + test)", + output: "`a${ foo }b${ bar }c` + `d${ test}`", + errors + }, + { + code: "'a' + foo + ('b' + 'c') + ('d' + bar)", + output: "`a${ foo }b` + `c` + `d${ bar}`", + errors + }, + { + code: "foo + ('a' + bar + 'b') + 'c' + test", + output: "`${foo }a${ bar }b` + `c${ test}`", + errors + }, + { + code: "'a' + '`b`' + c", + output: "`a` + `\\`b\\`${ c}`", + errors + }, + { + code: "'a' + '`b` + `c`' + d", + output: "`a` + `\\`b\\` + \\`c\\`${ d}`", + errors + }, + { + code: "'a' + b + ('`c`' + '`d`')", + output: "`a${ b }\\`c\\`` + `\\`d\\``", + errors + }, + { + code: "'`a`' + b + ('`c`' + '`d`')", + output: "`\\`a\\`${ b }\\`c\\`` + `\\`d\\``", + errors + }, + { + code: "foo + ('`a`' + bar + '`b`') + '`c`' + test", + output: "`${foo }\\`a\\`${ bar }\\`b\\`` + `\\`c\\`${ test}`", + errors + }, + { + code: "'a' + ('b' + 'c') + d", + output: "`a` + `b` + `c${ d}`", + errors + }, + { + code: "'a' + ('`b`' + '`c`') + d", + output: "`a` + `\\`b\\`` + `\\`c\\`${ d}`", + errors + }, + { + code: "a + ('b' + 'c') + d", + output: "`${a }b` + `c${ d}`", + errors + }, + { + code: "a + ('b' + 'c') + (d + 'e')", + output: "`${a }b` + `c${ d }e`", + errors + }, + { + code: "a + ('`b`' + '`c`') + d", + output: "`${a }\\`b\\`` + `\\`c\\`${ d}`", + errors + }, + { + code: "a + ('`b` + `c`' + '`d`') + e", + output: "`${a }\\`b\\` + \\`c\\`` + `\\`d\\`${ e}`", + errors + }, + { + code: "'a' + ('b' + 'c' + 'd') + e", + output: "`a` + `b` + `c` + `d${ e}`", + errors + }, + { + code: "'a' + ('b' + 'c' + 'd' + (e + 'f') + 'g' +'h' + 'i') + j", + output: "`a` + `b` + `c` + `d${ e }fg` +`h` + `i${ j}`", + errors + }, + { + code: "a + (('b' + 'c') + 'd')", + output: "`${a }b` + `c` + `d`", + errors + }, + { + code: "(a + 'b') + ('c' + 'd') + e", + output: "`${a }b` + `c` + `d${ e}`", + errors + }, + { + code: "var foo = \"Hello \" + \"world \" + \"another \" + test", + output: "var foo = `Hello ` + `world ` + `another ${ test}`", + errors + }, + { + code: "'Hello ' + '\"world\" ' + test", + output: "`Hello ` + `\"world\" ${ test}`", + errors + }, + { + code: "\"Hello \" + \"'world' \" + test", + output: "`Hello ` + `'world' ${ test}`", + errors } ] }); diff --git a/eslint/tests/lib/rules/quotes.js b/eslint/tests/lib/rules/quotes.js index faf3713..d1c42b7 100644 --- a/eslint/tests/lib/rules/quotes.js +++ b/eslint/tests/lib/rules/quotes.js @@ -77,6 +77,16 @@ ruleTester.run("quotes", rule, { { code: "import a from \"a\"; import b from 'b';", options: ["backtick"], parserOptions: { ecmaVersion: 6, sourceType: "module" } }, { code: "export * from \"a\"; export * from 'b';", options: ["backtick"], parserOptions: { ecmaVersion: 6, sourceType: "module" } }, + // `backtick` should not warn module export names. + { code: "import { \"a\" as b, 'c' as d } from 'mod';", options: ["backtick"], parserOptions: { ecmaVersion: 2022, sourceType: "module" } }, + { code: "let a, c; export { a as \"b\", c as 'd' };", options: ["backtick"], parserOptions: { ecmaVersion: 2022, sourceType: "module" } }, + { code: "export { \"a\", 'b' } from 'mod';", options: ["backtick"], parserOptions: { ecmaVersion: 2022, sourceType: "module" } }, + { code: "export { a as \"b\", c as 'd' } from 'mod';", options: ["backtick"], parserOptions: { ecmaVersion: 2022, sourceType: "module" } }, + { code: "export { \"a\" as b, 'c' as d } from 'mod';", options: ["backtick"], parserOptions: { ecmaVersion: 2022, sourceType: "module" } }, + { code: "export { \"a\" as \"b\", 'c' as 'd' } from 'mod';", options: ["backtick"], parserOptions: { ecmaVersion: 2022, sourceType: "module" } }, + { code: "export * as \"a\" from 'mod';", options: ["backtick"], parserOptions: { ecmaVersion: 2022, sourceType: "module" } }, + { code: "export * as 'a' from 'mod';", options: ["backtick"], parserOptions: { ecmaVersion: 2022, sourceType: "module" } }, + // `backtick` should not warn property/method names (not computed). { code: "var obj = {\"key0\": 0, 'key1': 1};", options: ["backtick"], parserOptions: { ecmaVersion: 6 } }, { code: "class Foo { 'bar'(){} }", options: ["backtick"], parserOptions: { ecmaVersion: 6 } }, diff --git a/eslint/tests/lib/rules/sort-keys.js b/eslint/tests/lib/rules/sort-keys.js index ff64827..5c9523a 100644 --- a/eslint/tests/lib/rules/sort-keys.js +++ b/eslint/tests/lib/rules/sort-keys.js @@ -163,7 +163,202 @@ ruleTester.run("sort-keys", rule, { { code: "var obj = {è:4, À:3, 'Z':2, '#':1}", options: ["desc", { natural: true, caseSensitive: false }] }, // desc, natural, insensitive, minKeys should ignore unsorted keys when number of keys is less than minKeys - { code: "var obj = {a:1, _:2, b:3}", options: ["desc", { natural: true, caseSensitive: false, minKeys: 4 }] } + { code: "var obj = {a:1, _:2, b:3}", options: ["desc", { natural: true, caseSensitive: false, minKeys: 4 }] }, + + // allowLineSeparatedGroups option + { + code: ` + var obj = { + e: 1, + f: 2, + g: 3, + + a: 4, + b: 5, + c: 6 + } + `, + options: ["asc", { allowLineSeparatedGroups: true }] + }, + { + code: ` + var obj = { + b: 1, + + // comment + a: 2, + c: 3 + } + `, + options: ["asc", { allowLineSeparatedGroups: true }] + }, + { + code: ` + var obj = { + b: 1 + + , + + // comment + a: 2, + c: 3 + } + `, + options: ["asc", { allowLineSeparatedGroups: true }] + }, + { + code: ` + var obj = { + c: 1, + d: 2, + + b() { + }, + e: 4 + } + `, + options: ["asc", { allowLineSeparatedGroups: true }], + parserOptions: { ecmaVersion: 6 } + }, + { + code: ` + var obj = { + c: 1, + d: 2, + // comment + + // comment + b() { + }, + e: 4 + } + `, + options: ["asc", { allowLineSeparatedGroups: true }], + parserOptions: { ecmaVersion: 6 } + }, + { + code: ` + var obj = { + b, + + [a+b]: 1, + a + } + `, + options: ["asc", { allowLineSeparatedGroups: true }], + parserOptions: { ecmaVersion: 6 } + }, + { + code: ` + var obj = { + c: 1, + d: 2, + + a() { + + }, + + // abce + f: 3, + + /* + + */ + [a+b]: 1, + cc: 1, + e: 2 + } + `, + options: ["asc", { allowLineSeparatedGroups: true }], + parserOptions: { ecmaVersion: 6 } + }, + { + code: ` + var obj = { + b: "/*", + + a: "*/", + } + `, + options: ["asc", { allowLineSeparatedGroups: true }] + }, + { + code: ` + var obj = { + b, + /* + */ // + + a + } + `, + options: ["asc", { allowLineSeparatedGroups: true }], + parserOptions: { ecmaVersion: 6 } + }, + { + code: ` + var obj = { + b, + + /* + */ // + a + } + `, + options: ["asc", { allowLineSeparatedGroups: true }], + parserOptions: { ecmaVersion: 6 } + }, + { + code: ` + var obj = { + b: 1 + + ,a: 2 + }; + `, + options: ["asc", { allowLineSeparatedGroups: true }], + parserOptions: { ecmaVersion: 6 } + }, + { + code: ` + var obj = { + b: 1 + // comment before comma + + , + a: 2 + }; + `, + options: ["asc", { allowLineSeparatedGroups: true }], + parserOptions: { ecmaVersion: 6 } + }, + { + code: ` + var obj = { + b, + + a, + ...z, + c + } + `, + options: ["asc", { allowLineSeparatedGroups: true }], + parserOptions: { ecmaVersion: 2018 } + }, + { + code: ` + var obj = { + b, + + [foo()]: [ + + ], + a + } + `, + options: ["asc", { allowLineSeparatedGroups: true }], + parserOptions: { ecmaVersion: 2018 } + } ], invalid: [ @@ -1761,6 +1956,296 @@ ruleTester.run("sort-keys", rule, { } } ] + }, + + // When allowLineSeparatedGroups option is false + { + code: ` + var obj = { + b: 1, + c: 2, + a: 3 + } + `, + options: ["asc", { allowLineSeparatedGroups: false }], + errors: [ + { + messageId: "sortKeys", + data: { + natural: "", + insensitive: "", + order: "asc", + thisName: "a", + prevName: "c" + } + } + ] + }, + { + code: ` + let obj = { + b + + ,a + } + `, + options: ["asc", { allowLineSeparatedGroups: false }], + parserOptions: { ecmaVersion: 6 }, + errors: [ + { + messageId: "sortKeys", + data: { + natural: "", + insensitive: "", + order: "asc", + thisName: "a", + prevName: "b" + } + } + ] + }, + + // When allowLineSeparatedGroups option is true + { + code: ` + var obj = { + b: 1, + c () { + + }, + a: 3 + } + `, + options: ["asc", { allowLineSeparatedGroups: true }], + parserOptions: { ecmaVersion: 6 }, + errors: [ + { + messageId: "sortKeys", + data: { + natural: "", + insensitive: "", + order: "asc", + thisName: "a", + prevName: "c" + } + } + ] + }, + { + code: ` + var obj = { + a: 1, + b: 2, + + z () { + + }, + y: 3 + } + `, + options: ["asc", { allowLineSeparatedGroups: true }], + parserOptions: { ecmaVersion: 6 }, + errors: [ + { + messageId: "sortKeys", + data: { + natural: "", + insensitive: "", + order: "asc", + thisName: "y", + prevName: "z" + } + } + ] + }, + { + code: ` + var obj = { + b: 1, + c () { + }, + // comment + a: 3 + } + `, + options: ["asc", { allowLineSeparatedGroups: true }], + parserOptions: { ecmaVersion: 6 }, + errors: [ + { + messageId: "sortKeys", + data: { + natural: "", + insensitive: "", + order: "asc", + thisName: "a", + prevName: "c" + } + } + ] + }, + { + code: ` + var obj = { + b, + [a+b]: 1, + a // sort-keys: 'a' should be before 'b' + } + `, + options: ["asc", { allowLineSeparatedGroups: true }], + parserOptions: { ecmaVersion: 6 }, + errors: [ + { + messageId: "sortKeys", + data: { + natural: "", + insensitive: "", + order: "asc", + thisName: "a", + prevName: "b" + } + } + ] + }, + { + code: ` + var obj = { + c: 1, + d: 2, + // comment + // comment + b() { + }, + e: 4 + } + `, + options: ["asc", { allowLineSeparatedGroups: true }], + parserOptions: { ecmaVersion: 6 }, + errors: [ + { + messageId: "sortKeys", + data: { + natural: "", + insensitive: "", + order: "asc", + thisName: "b", + prevName: "d" + } + } + ] + }, + { + code: ` + var obj = { + c: 1, + d: 2, + + z() { + + }, + f: 3, + /* + + + */ + [a+b]: 1, + b: 1, + e: 2 + } + `, + options: ["asc", { allowLineSeparatedGroups: true }], + parserOptions: { ecmaVersion: 6 }, + errors: [ + { + messageId: "sortKeys", + data: { + natural: "", + insensitive: "", + order: "asc", + thisName: "f", + prevName: "z" + } + }, + { + messageId: "sortKeys", + data: { + natural: "", + insensitive: "", + order: "asc", + thisName: "b", + prevName: "f" + } + } + ] + }, + { + code: ` + var obj = { + b: "/*", + a: "*/", + } + `, + options: ["asc", { allowLineSeparatedGroups: true }], + errors: [ + { + messageId: "sortKeys", + data: { + natural: "", + insensitive: "", + order: "asc", + thisName: "a", + prevName: "b" + } + } + ] + }, + { + code: ` + var obj = { + b: 1 + // comment before comma + , a: 2 + }; + `, + options: ["asc", { allowLineSeparatedGroups: true }], + parserOptions: { ecmaVersion: 6 }, + errors: [ + { + messageId: "sortKeys", + data: { + natural: "", + insensitive: "", + order: "asc", + thisName: "a", + prevName: "b" + } + } + ] + }, + { + code: ` + let obj = { + b, + [foo()]: [ + // ↓ this blank is inside a property and therefore should not count + + ], + a + } + `, + options: ["asc", { allowLineSeparatedGroups: true }], + parserOptions: { ecmaVersion: 2018 }, + errors: [ + { + messageId: "sortKeys", + data: { + natural: "", + insensitive: "", + order: "asc", + thisName: "a", + prevName: "b" + } + } + ] } ] }); diff --git a/eslint/tests/lib/rules/space-unary-ops.js b/eslint/tests/lib/rules/space-unary-ops.js index ccee19c..9969bbc 100644 --- a/eslint/tests/lib/rules/space-unary-ops.js +++ b/eslint/tests/lib/rules/space-unary-ops.js @@ -1,5 +1,5 @@ /** - * @fileoverview This rule shoud require or disallow spaces before or after unary operations. + * @fileoverview This rule should require or disallow spaces before or after unary operations. * @author Marcin Kumorek */ "use strict"; diff --git a/eslint/tests/lib/rules/utils/ast-utils.js b/eslint/tests/lib/rules/utils/ast-utils.js index 7789de7..c36a9ac 100644 --- a/eslint/tests/lib/rules/utils/ast-utils.js +++ b/eslint/tests/lib/rules/utils/ast-utils.js @@ -204,7 +204,10 @@ describe("ast-utils", () => { "// lalala I'm a normal comment", "// trying to confuse eslint ", "//trying to confuse eslint-directive-detection", - "//eslint is awesome" + "//eslint is awesome", + "//global line comment is not a directive", + "//globals line comment is not a directive", + "//exported line comment is not a directive" ].join("\n"); const ast = espree.parse(code, ESPREE_CONFIG); const sourceCode = new SourceCode(code, ast); @@ -247,7 +250,10 @@ describe("ast-utils", () => { "/*eslint-enable no-undef*/", "/* eslint-env {\"es6\": true} */", "/* eslint foo */", - "/*eslint bar*/" + "/*eslint bar*/", + "/*global foo*/", + "/*globals foo*/", + "/*exported foo*/" ].join("\n"); const ast = espree.parse(code, ESPREE_CONFIG); const sourceCode = new SourceCode(code, ast); @@ -1480,10 +1486,14 @@ describe("ast-utils", () => { [["a/", "+b"], true], [["a+", "/^regex$/"], true], [["a/", "/^regex$/"], false], + [["a+", "/**/"], true], [["a+", "/**/b"], true], + [["//", "a"], false], [["a/", "/**/b"], false], + [["a+", "//"], true], [["a+", "//\nb"], true], [["a/", "//\nb"], false], + [["/**/", "b"], true], [["a/**/", "b"], true], [["/**/a", "b"], false], [["a", "/**/b"], true], diff --git a/eslint/tests/lib/rules/utils/fix-tracker.js b/eslint/tests/lib/rules/utils/fix-tracker.js index 33fe23e..aeed891 100644 --- a/eslint/tests/lib/rules/utils/fix-tracker.js +++ b/eslint/tests/lib/rules/utils/fix-tracker.js @@ -129,7 +129,7 @@ describe("FixTracker", () => { }); }); - describe("retainSurroungingTokens", () => { + describe("retainSurroundingTokens", () => { it("handles a change to a binary operator", () => { const sourceCode = createSourceCode("const i = j + k;"); const plusToken = sourceCode.ast.tokens[4]; diff --git a/eslint/tests/lib/rules/valid-typeof.js b/eslint/tests/lib/rules/valid-typeof.js index cd28088..35a52f0 100644 --- a/eslint/tests/lib/rules/valid-typeof.js +++ b/eslint/tests/lib/rules/valid-typeof.js @@ -45,6 +45,7 @@ ruleTester.run("valid-typeof", rule, { "typeof(foo) == 'string'", "typeof(foo) != 'string'", "var oddUse = typeof foo + 'thing'", + "function f(undefined) { typeof x === undefined }", { code: "typeof foo === 'number'", options: [{ requireStringLiterals: true }] @@ -136,6 +137,21 @@ ruleTester.run("valid-typeof", rule, { options: [{ requireStringLiterals: true }], errors: [{ messageId: "invalidValue", type: "Literal" }] }, + { + code: "if (typeof bar !== undefined) {}", + errors: [ + { + messageId: "invalidValue", + type: "Identifier", + suggestions: [ + { + messageId: "suggestString", + data: { type: "undefined" }, + output: 'if (typeof bar !== "undefined") {}' + } + ] + }] + }, { code: "typeof foo == Object", options: [{ requireStringLiterals: true }], @@ -144,17 +160,50 @@ ruleTester.run("valid-typeof", rule, { { code: "typeof foo === undefined", options: [{ requireStringLiterals: true }], - errors: [{ messageId: "notString", type: "Identifier" }] + errors: [ + { + messageId: "notString", + type: "Identifier", + suggestions: [ + { + messageId: "suggestString", + data: { type: "undefined" }, + output: 'typeof foo === "undefined"' + } + ] + }] }, { code: "undefined === typeof foo", options: [{ requireStringLiterals: true }], - errors: [{ messageId: "notString", type: "Identifier" }] + errors: [ + { + messageId: "notString", + type: "Identifier", + suggestions: [ + { + messageId: "suggestString", + data: { type: "undefined" }, + output: '"undefined" === typeof foo' + } + ] + }] }, { code: "undefined == typeof foo", options: [{ requireStringLiterals: true }], - errors: [{ messageId: "notString", type: "Identifier" }] + errors: [ + { + messageId: "notString", + type: "Identifier", + suggestions: [ + { + messageId: "suggestString", + data: { type: "undefined" }, + output: '"undefined" == typeof foo' + } + ] + }] }, { code: "typeof foo === `undefined${foo}`", diff --git a/eslint/tests/lib/rules/wrap-iife.js b/eslint/tests/lib/rules/wrap-iife.js index 035e265..642e29b 100644 --- a/eslint/tests/lib/rules/wrap-iife.js +++ b/eslint/tests/lib/rules/wrap-iife.js @@ -434,7 +434,7 @@ ruleTester.run("wrap-iife", rule, { }, { code: "if ((function (){}())) {}", - output: "if ((function (){})()) {}", // wrap function expression and remove unnecessary grouping parens aroung the call expression + output: "if ((function (){})()) {}", // wrap function expression and remove unnecessary grouping parens around the call expression options: ["inside"], errors: [wrapExpressionError] }, @@ -557,7 +557,7 @@ ruleTester.run("wrap-iife", rule, { }, { code: "if ((function (){}.call())) {}", - output: "if ((function (){}).call()) {}", // wrap function expression and remove unnecessary grouping parens aroung the call expression + output: "if ((function (){}).call()) {}", // wrap function expression and remove unnecessary grouping parens around the call expression options: ["inside", { functionPrototypeMethods: true }], errors: [wrapExpressionError] }, diff --git a/eslint/tests/lib/unsupported-api.js b/eslint/tests/lib/unsupported-api.js index dd88be5..53b466a 100644 --- a/eslint/tests/lib/unsupported-api.js +++ b/eslint/tests/lib/unsupported-api.js @@ -23,6 +23,14 @@ describe("unsupported-api", () => { assert.isFunction(api.FileEnumerator); }); + it("should have FlatESLint exposed", () => { + assert.isFunction(api.FlatESLint); + }); + + it("should have FlatRuleTester exposed", () => { + assert.isFunction(api.FlatRuleTester); + }); + it("should have builtinRules exposed", () => { assert.instanceOf(api.builtinRules, LazyLoadingRuleMap); }); diff --git a/eslint/tests/lib/init/config-rule.js b/eslint/tests/tools/config-rule.js similarity index 98% rename from eslint/tests/lib/init/config-rule.js rename to eslint/tests/tools/config-rule.js index 425317d..c91f464 100644 --- a/eslint/tests/lib/init/config-rule.js +++ b/eslint/tests/tools/config-rule.js @@ -10,9 +10,9 @@ //------------------------------------------------------------------------------ const assert = require("chai").assert, - ConfigRule = require("../../../lib/init/config-rule"), - builtInRules = require("../../../lib/rules"), - schema = require("../../fixtures/config-rule/schemas"); + ConfigRule = require("../../tools/config-rule"), + builtInRules = require("../../lib/rules"), + schema = require("../fixtures/config-rule/schemas"); //------------------------------------------------------------------------------ // Tests diff --git a/eslint/tools/code-sample-minimizer.js b/eslint/tools/code-sample-minimizer.js index c68f458..e1eb499 100644 --- a/eslint/tools/code-sample-minimizer.js +++ b/eslint/tools/code-sample-minimizer.js @@ -133,10 +133,8 @@ function reduceBadExampleSize({ * @returns {ASTNode} A descendent of `node` which is also bad */ function extractRelevantChild(node) { - const childNodes = [].concat( - ...visitorKeys[node.type] - .map(key => (Array.isArray(node[key]) ? node[key] : [node[key]])) - ); + const childNodes = visitorKeys[node.type] + .flatMap(key => (Array.isArray(node[key]) ? node[key] : [node[key]])); for (const childNode of childNodes) { if (!childNode) { diff --git a/eslint/lib/init/config-rule.js b/eslint/tools/config-rule.js similarity index 99% rename from eslint/lib/init/config-rule.js rename to eslint/tools/config-rule.js index 131e84a..91e7eae 100644 --- a/eslint/lib/init/config-rule.js +++ b/eslint/tools/config-rule.js @@ -9,7 +9,7 @@ // Requirements //------------------------------------------------------------------------------ -const builtInRules = require("../rules"); +const builtInRules = require("../lib/rules"); //------------------------------------------------------------------------------ // Helpers diff --git a/eslint/tools/fetch-docs-links.js b/eslint/tools/fetch-docs-links.js new file mode 100644 index 0000000..3d92633 --- /dev/null +++ b/eslint/tools/fetch-docs-links.js @@ -0,0 +1,112 @@ +/** + * @fileoverview Script to fetch link data. + * + * To fetch info about all files: + * + * node tools/fetch-docs-links.js + * + * To fetch info for just selected files (for use with lint-staged): + * + * node tools/fetch-docs-links.js docs/src/user-guide/index.md + * + * @author Nicholas C. Zakas + */ + +"use strict"; + +//----------------------------------------------------------------------------- +// Requirements +//----------------------------------------------------------------------------- + +const matter = require("gray-matter"); +const metascraper = require("metascraper")([ + require("metascraper-image")(), + require("metascraper-logo")(), + require("metascraper-logo-favicon")(), + require("metascraper-title")(), + require("metascraper-description")() +]); +const got = require("got"); +const path = require("path"); +const fs = require("fs").promises; +const glob = require("fast-glob"); + +//----------------------------------------------------------------------------- +// Data +//----------------------------------------------------------------------------- + +const BASE_DIR = path.resolve(__dirname, "../"); +const SRC_DIR = path.resolve(BASE_DIR, "docs/src"); +const DATA_DIR = path.resolve(SRC_DIR, "_data"); +const DATA_FILE_PATH = path.resolve(DATA_DIR, "further_reading_links.json"); + +// determine which files to check +let filenames = process.argv.slice(2); + +if (filenames.length === 0) { + filenames = glob.sync("docs/src/rules/*.md", { cwd: BASE_DIR }); +} + +filenames = filenames.map(filename => path.resolve(BASE_DIR, filename)); + +//----------------------------------------------------------------------------- +// Helpers +//----------------------------------------------------------------------------- + +/** + * Fetches metadata information for a given URL. + * @param {string} url The URL to fetch data for. + * @returns {Promise<object>} An object with metadata info. + */ +async function fetchLinkMeta(url) { + const { body: html, url: returnedURL } = await got(url); + const metadata = await metascraper({ html, url: returnedURL }); + const domain = (new URL(returnedURL)).hostname; + + return { + domain, + url, + logo: metadata.logo, + title: metadata.title, + description: metadata.description + }; +} + + +//----------------------------------------------------------------------------- +// Main +//----------------------------------------------------------------------------- + +(async () => { + + // First read in the current data file + const links = JSON.parse(await fs.readFile(DATA_FILE_PATH, "utf8")); + + // check each file + for (const filename of filenames) { + + const text = await fs.readFile(filename, "utf8"); + const frontmatter = matter(text).data; + + if (frontmatter.further_reading) { + + for (const url of frontmatter.further_reading) { + if (!links[url]) { + try { + links[url] = await fetchLinkMeta(url); + } catch (ex) { + console.error("Error in ", filename); + console.error("Could not fetch data for", url); + console.error(ex.message); + console.error(ex.stack); + process.exit(1); // eslint-disable-line n/no-process-exit -- used in tools + } + } + } + + } + } + + // Last write new data into the current data file + await fs.writeFile(DATA_FILE_PATH, JSON.stringify(links, null, 4), "utf8"); +})(); diff --git a/eslint/tools/internal-rules/no-invalid-meta.js b/eslint/tools/internal-rules/no-invalid-meta.js index 2bfa2e2..7fd62f5 100644 --- a/eslint/tools/internal-rules/no-invalid-meta.js +++ b/eslint/tools/internal-rules/no-invalid-meta.js @@ -92,7 +92,7 @@ function checkMetaValidity(context, exportsNode) { module.exports = { meta: { docs: { - description: "enforce correct use of `meta` property in core rules", + description: "Enforce correct use of `meta` property in core rules", recommended: false }, type: "problem", diff --git a/eslint/tools/internal-testers/event-generator-tester.js b/eslint/tools/internal-testers/event-generator-tester.js index ce4449a..46cbafb 100644 --- a/eslint/tools/internal-testers/event-generator-tester.js +++ b/eslint/tools/internal-testers/event-generator-tester.js @@ -4,7 +4,7 @@ */ "use strict"; -/* eslint-env mocha -- Mocha */ +/* globals describe, it -- Mocha globals */ //------------------------------------------------------------------------------ // Requirements @@ -24,7 +24,7 @@ module.exports = { * @param {Function} method A test logic. * @returns {any} The returned value with the test logic. */ - describe: (typeof describe === "function") ? describe : /* istanbul ignore next */ function(text, method) { + describe: (typeof describe === "function") ? describe : /* c8 ignore next */ function(text, method) { return method.apply(this); }, @@ -34,7 +34,7 @@ module.exports = { * @param {Function} method A test logic. * @returns {any} The returned value with the test logic. */ - it: (typeof it === "function") ? it : /* istanbul ignore next */ function(text, method) { + it: (typeof it === "function") ? it : /* c8 ignore next */ function(text, method) { return method.apply(this); }, diff --git a/eslint/tools/rule-types.json b/eslint/tools/rule-types.json index 4a71a8b..d690284 100644 --- a/eslint/tools/rule-types.json +++ b/eslint/tools/rule-types.json @@ -90,6 +90,7 @@ "no-confusing-arrow": "suggestion", "no-console": "suggestion", "no-const-assign": "problem", + "no-constant-binary-expression": "problem", "no-constant-condition": "problem", "no-constructor-return": "problem", "no-continue": "suggestion", @@ -242,6 +243,7 @@ "prefer-exponentiation-operator": "suggestion", "prefer-named-capture-group": "suggestion", "prefer-numeric-literals": "suggestion", + "prefer-object-has-own": "suggestion", "prefer-object-spread": "suggestion", "prefer-promise-reject-errors": "suggestion", "prefer-reflect": "suggestion", -- 2.39.2

    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 O%ke+Hk#uwF^`r$y0*FdIgrS*NT^-DR-`CVSC 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 literal 0 HcmV?d00001 diff --git a/eslint/docs/src/assets/fonts/Inter/static/Inter-ExtraLight.ttf b/eslint/docs/src/assets/fonts/Inter/static/Inter-ExtraLight.ttf new file mode 100644 index 0000000000000000000000000000000000000000..69426a3eb5660eda166c828d3606ab7bcbc46133 GIT binary patch literal 288400 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