Repository: eslint/eslint
Pull request #15755 (2022-04-04 15:34:24)

feat: fix no-eval logic for `this` in arrow functions
<!--
    Thank you for contributing!

    ESLint adheres to the [JS Foundation Code of Conduct](https://eslint.org/conduct).
-->

#### Prerequisites checklist

- [x] I have read the [contributing guidelines](https://github.com/eslint/eslint/blob/HEAD/CONTRIBUTING.md).

#### What is the purpose of this pull request? (put an "X" next to an item)

<!--
    The following template is intentionally not a markdown checkbox list for the reasons
    explained in https://github.com/eslint/eslint/pull/12848#issuecomment-580302888
-->

[ ] Documentation update
[x] Bug fix ([template](https://raw.githubusercontent.com/eslint/eslint/HEAD/templates/bug-report.md))
[ ] New rule ([template](https://raw.githubusercontent.com/eslint/eslint/HEAD/templates/rule-proposal.md))
[ ] Changes an existing rule ([template](https://raw.githubusercontent.com/eslint/eslint/HEAD/templates/rule-change-proposal.md))
[ ] Add autofix to a rule
[ ] Add a CLI option
[ ] Add something to the core
[ ] Other, please explain:

This bug fix produces more warnings from the `no-eval` rule, and thus this change is marked as `feat`.

**Tell us about your environment:**

* **ESLint Version:** v8.12.0
* **Node Version:** 16.14.0
* **npm Version:** 8.3.1

**What parser (default, `@babel/eslint-parser`, `@typescript-eslint/parser`, etc.) are you using?**

default

**Please show your full configuration:**

<details>
<summary>Configuration</summary>

<!-- Paste your configuration below: -->
```js
module.exports = {
    parserOptions: {
        ecmaVersion: 2015
    }
};

```

</details>

**What did you do? Please include the actual source code causing the issue.**

[Online Demo](https://eslint.org/demo#eyJ0ZXh0IjoiLyogZXNsaW50IG5vLWV2YWw6IFwiZXJyb3JcIiAqL1xuXG52YXIgZiA9ICgpID0+IHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG4gIHRoaXMuZXZhbChcImFsZXJ0KCdmb28nKVwiKTtcbn07XG5cbmYoKTtcbiIsIm9wdGlvbnMiOnsicGFyc2VyT3B0aW9ucyI6eyJlY21hVmVyc2lvbiI6ImxhdGVzdCIsInNvdXJjZVR5cGUiOiJzY3JpcHQiLCJlY21hRmVhdHVyZXMiOnt9fSwicnVsZXMiOnt9LCJlbnYiOnt9fX0=)

```js
/* eslint no-eval: "error" */

var f = () => {
  "use strict";
  this.eval("alert('foo')");
};

f();


```

**What did you expect to happen?**

One `no-eval` error.

In browsers, the above code alerts `foo`.

Environment records for arrow functions do not have `this` binding. For `this` from the above code, [GetThisEnvironment](https://tc39.es/ecma262/#sec-getthisenvironment) returns the global environment, where `this` is the global object. Arrow function being "strict" doesn't matter.

**What actually happened? Please include the actual, raw output from ESLint.**

No errors.

<!--
    If the item you've checked above has a template, please paste the template questions below and answer them. (If this pull request is addressing an issue, you can just paste a link to the issue here instead.)
-->

<!--
    Please ensure your pull request is ready:

    - Read the pull request guide (https://eslint.org/docs/developer-guide/contributing/pull-requests)
    - Include tests for this change
    - Update documentation for this change (if appropriate)
-->

<!--
    The following is required for all pull requests:
-->

#### What changes did you make? (Give an overview)

Fixed the `no-eval` rule to skip arrow functions when looking for `this` scopes.

#### Is there anything you'd like reviewers to focus on?

This bug is not caused by the recent fix https://github.com/eslint/eslint/pull/15712.  Previous versions had the same false negative.

<!-- markdownlint-disable-file MD004 -->



Patch:
diff --git a/Makefile.js b/Makefile.js
index 519b9943a..25eb619fd 100644
--- a/Makefile.js
+++ b/Makefile.js
@@ -622,7 +622,11 @@ target.gensite = function(prereleaseVersion) {
 
     // 3. Copy docs folder to a temporary directory
     echo("> Copying the docs folder (Step 3)");
-    cp("-rf", "docs/*", TEMP_DIR);
+    cp("-rf", "docs/src/*", TEMP_DIR);
+
+    // special case (for now)
+    cp("-f", "docs/src/pages/index.md", path.join(TEMP_DIR, "index.md"));
+    rm("-rf", path.join(TEMP_DIR, "pages"));
 
     let versions = test("-f", "./versions.json") ? JSON.parse(cat("./versions.json")) : {};
 
@@ -650,12 +654,12 @@ target.gensite = function(prereleaseVersion) {
 
             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/",
+                docsUrl = "https://github.com/eslint/eslint/tree/HEAD/docs/src/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));
+                filePath = path.posix.join("docs", path.relative("tmp", filename));
             let text = cat(filename),
                 ruleType = "",
                 title;
@@ -697,7 +701,7 @@ target.gensite = function(prereleaseVersion) {
                 "---",
                 `title: ${title}`,
                 "layout: doc",
-                `edit_link: https://github.com/eslint/eslint/edit/main/${filePath}`,
+                `edit_link: https://github.com/eslint/eslint/edit/main/${filePath.replace("docs/", "docs/src/")}`,
                 ruleType,
                 "---",
                 "<!-- Note: No pull requests accepted for this file. See README.md in the root directory for details. -->",
@@ -789,7 +793,7 @@ 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);
diff --git a/docs/about/index.md b/docs/src/about/index.md
similarity index 100%
rename from docs/about/index.md
rename to docs/src/about/index.md
diff --git a/docs/developer-guide/README.md b/docs/src/developer-guide/README.md
similarity index 100%
rename from docs/developer-guide/README.md
rename to docs/src/developer-guide/README.md
diff --git a/docs/developer-guide/architecture.md b/docs/src/developer-guide/architecture.md
similarity index 100%
rename from docs/developer-guide/architecture.md
rename to docs/src/developer-guide/architecture.md
diff --git a/docs/developer-guide/architecture/dependency.svg b/docs/src/developer-guide/architecture/dependency.svg
similarity index 100%
rename from docs/developer-guide/architecture/dependency.svg
rename to docs/src/developer-guide/architecture/dependency.svg
diff --git a/docs/developer-guide/code-conventions.md b/docs/src/developer-guide/code-conventions.md
similarity index 100%
rename from docs/developer-guide/code-conventions.md
rename to docs/src/developer-guide/code-conventions.md
diff --git a/docs/developer-guide/code-path-analysis.md b/docs/src/developer-guide/code-path-analysis.md
similarity index 100%
rename from docs/developer-guide/code-path-analysis.md
rename to docs/src/developer-guide/code-path-analysis.md
diff --git a/docs/developer-guide/code-path-analysis/README.md b/docs/src/developer-guide/code-path-analysis/README.md
similarity index 100%
rename from docs/developer-guide/code-path-analysis/README.md
rename to docs/src/developer-guide/code-path-analysis/README.md
diff --git a/docs/developer-guide/code-path-analysis/example-dowhilestatement.svg b/docs/src/developer-guide/code-path-analysis/example-dowhilestatement.svg
similarity index 100%
rename from docs/developer-guide/code-path-analysis/example-dowhilestatement.svg
rename to docs/src/developer-guide/code-path-analysis/example-dowhilestatement.svg
diff --git a/docs/developer-guide/code-path-analysis/example-forinstatement.svg b/docs/src/developer-guide/code-path-analysis/example-forinstatement.svg
similarity index 100%
rename from docs/developer-guide/code-path-analysis/example-forinstatement.svg
rename to docs/src/developer-guide/code-path-analysis/example-forinstatement.svg
diff --git a/docs/developer-guide/code-path-analysis/example-forstatement-for-ever.svg b/docs/src/developer-guide/code-path-analysis/example-forstatement-for-ever.svg
similarity index 100%
rename from docs/developer-guide/code-path-analysis/example-forstatement-for-ever.svg
rename to docs/src/developer-guide/code-path-analysis/example-forstatement-for-ever.svg
diff --git a/docs/developer-guide/code-path-analysis/example-forstatement.svg b/docs/src/developer-guide/code-path-analysis/example-forstatement.svg
similarity index 100%
rename from docs/developer-guide/code-path-analysis/example-forstatement.svg
rename to docs/src/developer-guide/code-path-analysis/example-forstatement.svg
diff --git a/docs/developer-guide/code-path-analysis/example-hello-world.svg b/docs/src/developer-guide/code-path-analysis/example-hello-world.svg
similarity index 100%
rename from docs/developer-guide/code-path-analysis/example-hello-world.svg
rename to docs/src/developer-guide/code-path-analysis/example-hello-world.svg
diff --git a/docs/developer-guide/code-path-analysis/example-ifstatement-chain.svg b/docs/src/developer-guide/code-path-analysis/example-ifstatement-chain.svg
similarity index 100%
rename from docs/developer-guide/code-path-analysis/example-ifstatement-chain.svg
rename to docs/src/developer-guide/code-path-analysis/example-ifstatement-chain.svg
diff --git a/docs/developer-guide/code-path-analysis/example-ifstatement.svg b/docs/src/developer-guide/code-path-analysis/example-ifstatement.svg
similarity index 100%
rename from docs/developer-guide/code-path-analysis/example-ifstatement.svg
rename to docs/src/developer-guide/code-path-analysis/example-ifstatement.svg
diff --git a/docs/developer-guide/code-path-analysis/example-switchstatement-has-default.svg b/docs/src/developer-guide/code-path-analysis/example-switchstatement-has-default.svg
similarity index 100%
rename from docs/developer-guide/code-path-analysis/example-switchstatement-has-default.svg
rename to docs/src/developer-guide/code-path-analysis/example-switchstatement-has-default.svg
diff --git a/docs/developer-guide/code-path-analysis/example-switchstatement.svg b/docs/src/developer-guide/code-path-analysis/example-switchstatement.svg
similarity index 100%
rename from docs/developer-guide/code-path-analysis/example-switchstatement.svg
rename to docs/src/developer-guide/code-path-analysis/example-switchstatement.svg
diff --git a/docs/developer-guide/code-path-analysis/example-trystatement-try-catch-finally.svg b/docs/src/developer-guide/code-path-analysis/example-trystatement-try-catch-finally.svg
similarity index 100%
rename from docs/developer-guide/code-path-analysis/example-trystatement-try-catch-finally.svg
rename to docs/src/developer-guide/code-path-analysis/example-trystatement-try-catch-finally.svg
diff --git a/docs/developer-guide/code-path-analysis/example-trystatement-try-catch.svg b/docs/src/developer-guide/code-path-analysis/example-trystatement-try-catch.svg
similarity index 100%
rename from docs/developer-guide/code-path-analysis/example-trystatement-try-catch.svg
rename to docs/src/developer-guide/code-path-analysis/example-trystatement-try-catch.svg
diff --git a/docs/developer-guide/code-path-analysis/example-trystatement-try-finally.svg b/docs/src/developer-guide/code-path-analysis/example-trystatement-try-finally.svg
similarity index 100%
rename from docs/developer-guide/code-path-analysis/example-trystatement-try-finally.svg
rename to docs/src/developer-guide/code-path-analysis/example-trystatement-try-finally.svg
diff --git a/docs/developer-guide/code-path-analysis/example-when-there-is-a-function-f.svg b/docs/src/developer-guide/code-path-analysis/example-when-there-is-a-function-f.svg
similarity index 100%
rename from docs/developer-guide/code-path-analysis/example-when-there-is-a-function-f.svg
rename to docs/src/developer-guide/code-path-analysis/example-when-there-is-a-function-f.svg
diff --git a/docs/developer-guide/code-path-analysis/example-when-there-is-a-function-g.svg b/docs/src/developer-guide/code-path-analysis/example-when-there-is-a-function-g.svg
similarity index 100%
rename from docs/developer-guide/code-path-analysis/example-when-there-is-a-function-g.svg
rename to docs/src/developer-guide/code-path-analysis/example-when-there-is-a-function-g.svg
diff --git a/docs/developer-guide/code-path-analysis/example-whilestatement.svg b/docs/src/developer-guide/code-path-analysis/example-whilestatement.svg
similarity index 100%
rename from docs/developer-guide/code-path-analysis/example-whilestatement.svg
rename to docs/src/developer-guide/code-path-analysis/example-whilestatement.svg
diff --git a/docs/developer-guide/code-path-analysis/helo.svg b/docs/src/developer-guide/code-path-analysis/helo.svg
similarity index 100%
rename from docs/developer-guide/code-path-analysis/helo.svg
rename to docs/src/developer-guide/code-path-analysis/helo.svg
diff --git a/docs/developer-guide/code-path-analysis/loop-event-example-for-1.svg b/docs/src/developer-guide/code-path-analysis/loop-event-example-for-1.svg
similarity index 100%
rename from docs/developer-guide/code-path-analysis/loop-event-example-for-1.svg
rename to docs/src/developer-guide/code-path-analysis/loop-event-example-for-1.svg
diff --git a/docs/developer-guide/code-path-analysis/loop-event-example-for-2.svg b/docs/src/developer-guide/code-path-analysis/loop-event-example-for-2.svg
similarity index 100%
rename from docs/developer-guide/code-path-analysis/loop-event-example-for-2.svg
rename to docs/src/developer-guide/code-path-analysis/loop-event-example-for-2.svg
diff --git a/docs/developer-guide/code-path-analysis/loop-event-example-for-3.svg b/docs/src/developer-guide/code-path-analysis/loop-event-example-for-3.svg
similarity index 100%
rename from docs/developer-guide/code-path-analysis/loop-event-example-for-3.svg
rename to docs/src/developer-guide/code-path-analysis/loop-event-example-for-3.svg
diff --git a/docs/developer-guide/code-path-analysis/loop-event-example-for-4.svg b/docs/src/developer-guide/code-path-analysis/loop-event-example-for-4.svg
similarity index 100%
rename from docs/developer-guide/code-path-analysis/loop-event-example-for-4.svg
rename to docs/src/developer-guide/code-path-analysis/loop-event-example-for-4.svg
diff --git a/docs/developer-guide/code-path-analysis/loop-event-example-for-5.svg b/docs/src/developer-guide/code-path-analysis/loop-event-example-for-5.svg
similarity index 100%
rename from docs/developer-guide/code-path-analysis/loop-event-example-for-5.svg
rename to docs/src/developer-guide/code-path-analysis/loop-event-example-for-5.svg
diff --git a/docs/developer-guide/code-path-analysis/loop-event-example-while-1.svg b/docs/src/developer-guide/code-path-analysis/loop-event-example-while-1.svg
similarity index 100%
rename from docs/developer-guide/code-path-analysis/loop-event-example-while-1.svg
rename to docs/src/developer-guide/code-path-analysis/loop-event-example-while-1.svg
diff --git a/docs/developer-guide/code-path-analysis/loop-event-example-while-2.svg b/docs/src/developer-guide/code-path-analysis/loop-event-example-while-2.svg
similarity index 100%
rename from docs/developer-guide/code-path-analysis/loop-event-example-while-2.svg
rename to docs/src/developer-guide/code-path-analysis/loop-event-example-while-2.svg
diff --git a/docs/developer-guide/code-path-analysis/loop-event-example-while-3.svg b/docs/src/developer-guide/code-path-analysis/loop-event-example-while-3.svg
similarity index 100%
rename from docs/developer-guide/code-path-analysis/loop-event-example-while-3.svg
rename to docs/src/developer-guide/code-path-analysis/loop-event-example-while-3.svg
diff --git a/docs/developer-guide/contributing/README.md b/docs/src/developer-guide/contributing/README.md
similarity index 100%
rename from docs/developer-guide/contributing/README.md
rename to docs/src/developer-guide/contributing/README.md
diff --git a/docs/developer-guide/contributing/changes.md b/docs/src/developer-guide/contributing/changes.md
similarity index 100%
rename from docs/developer-guide/contributing/changes.md
rename to docs/src/developer-guide/contributing/changes.md
diff --git a/docs/developer-guide/contributing/new-rules.md b/docs/src/developer-guide/contributing/new-rules.md
similarity index 100%
rename from docs/developer-guide/contributing/new-rules.md
rename to docs/src/developer-guide/contributing/new-rules.md
diff --git a/docs/developer-guide/contributing/pull-requests.md b/docs/src/developer-guide/contributing/pull-requests.md
similarity index 100%
rename from docs/developer-guide/contributing/pull-requests.md
rename to docs/src/developer-guide/contributing/pull-requests.md
diff --git a/docs/developer-guide/contributing/reporting-bugs.md b/docs/src/developer-guide/contributing/reporting-bugs.md
similarity index 100%
rename from docs/developer-guide/contributing/reporting-bugs.md
rename to docs/src/developer-guide/contributing/reporting-bugs.md
diff --git a/docs/developer-guide/contributing/rule-changes.md b/docs/src/developer-guide/contributing/rule-changes.md
similarity index 100%
rename from docs/developer-guide/contributing/rule-changes.md
rename to docs/src/developer-guide/contributing/rule-changes.md
diff --git a/docs/developer-guide/contributing/working-on-issues.md b/docs/src/developer-guide/contributing/working-on-issues.md
similarity index 100%
rename from docs/developer-guide/contributing/working-on-issues.md
rename to docs/src/developer-guide/contributing/working-on-issues.md
diff --git a/docs/developer-guide/development-environment.md b/docs/src/developer-guide/development-environment.md
similarity index 100%
rename from docs/developer-guide/development-environment.md
rename to docs/src/developer-guide/development-environment.md
diff --git a/docs/developer-guide/nodejs-api.md b/docs/src/developer-guide/nodejs-api.md
similarity index 100%
rename from docs/developer-guide/nodejs-api.md
rename to docs/src/developer-guide/nodejs-api.md
diff --git a/docs/developer-guide/scope-manager-interface.md b/docs/src/developer-guide/scope-manager-interface.md
similarity index 100%
rename from docs/developer-guide/scope-manager-interface.md
rename to docs/src/developer-guide/scope-manager-interface.md
diff --git a/docs/developer-guide/selectors.md b/docs/src/developer-guide/selectors.md
similarity index 100%
rename from docs/developer-guide/selectors.md
rename to docs/src/developer-guide/selectors.md
diff --git a/docs/developer-guide/shareable-configs.md b/docs/src/developer-guide/shareable-configs.md
similarity index 100%
rename from docs/developer-guide/shareable-configs.md
rename to docs/src/developer-guide/shareable-configs.md
diff --git a/docs/developer-guide/source-code.md b/docs/src/developer-guide/source-code.md
similarity index 100%
rename from docs/developer-guide/source-code.md
rename to docs/src/developer-guide/source-code.md
diff --git a/docs/developer-guide/unit-tests.md b/docs/src/developer-guide/unit-tests.md
similarity index 100%
rename from docs/developer-guide/unit-tests.md
rename to docs/src/developer-guide/unit-tests.md
diff --git a/docs/developer-guide/working-with-custom-formatters.md b/docs/src/developer-guide/working-with-custom-formatters.md
similarity index 100%
rename from docs/developer-guide/working-with-custom-formatters.md
rename to docs/src/developer-guide/working-with-custom-formatters.md
diff --git a/docs/developer-guide/working-with-custom-parsers.md b/docs/src/developer-guide/working-with-custom-parsers.md
similarity index 100%
rename from docs/developer-guide/working-with-custom-parsers.md
rename to docs/src/developer-guide/working-with-custom-parsers.md
diff --git a/docs/developer-guide/working-with-plugins.md b/docs/src/developer-guide/working-with-plugins.md
similarity index 100%
rename from docs/developer-guide/working-with-plugins.md
rename to docs/src/developer-guide/working-with-plugins.md
diff --git a/docs/developer-guide/working-with-rules-deprecated.md b/docs/src/developer-guide/working-with-rules-deprecated.md
similarity index 100%
rename from docs/developer-guide/working-with-rules-deprecated.md
rename to docs/src/developer-guide/working-with-rules-deprecated.md
diff --git a/docs/developer-guide/working-with-rules.md b/docs/src/developer-guide/working-with-rules.md
similarity index 100%
rename from docs/developer-guide/working-with-rules.md
rename to docs/src/developer-guide/working-with-rules.md
diff --git a/docs/maintainer-guide/README.md b/docs/src/maintainer-guide/README.md
similarity index 100%
rename from docs/maintainer-guide/README.md
rename to docs/src/maintainer-guide/README.md
diff --git a/docs/maintainer-guide/governance.md b/docs/src/maintainer-guide/governance.md
similarity index 100%
rename from docs/maintainer-guide/governance.md
rename to docs/src/maintainer-guide/governance.md
diff --git a/docs/maintainer-guide/issues.md b/docs/src/maintainer-guide/issues.md
similarity index 100%
rename from docs/maintainer-guide/issues.md
rename to docs/src/maintainer-guide/issues.md
diff --git a/docs/maintainer-guide/pullrequests.md b/docs/src/maintainer-guide/pullrequests.md
similarity index 100%
rename from docs/maintainer-guide/pullrequests.md
rename to docs/src/maintainer-guide/pullrequests.md
diff --git a/docs/maintainer-guide/releases.md b/docs/src/maintainer-guide/releases.md
similarity index 100%
rename from docs/maintainer-guide/releases.md
rename to docs/src/maintainer-guide/releases.md
diff --git a/docs/maintainer-guide/working-groups.md b/docs/src/maintainer-guide/working-groups.md
similarity index 100%
rename from docs/maintainer-guide/working-groups.md
rename to docs/src/maintainer-guide/working-groups.md
diff --git a/docs/README.md b/docs/src/pages/index.md
similarity index 100%
rename from docs/README.md
rename to docs/src/pages/index.md
diff --git a/docs/rules/accessor-pairs.md b/docs/src/rules/accessor-pairs.md
similarity index 100%
rename from docs/rules/accessor-pairs.md
rename to docs/src/rules/accessor-pairs.md
diff --git a/docs/rules/array-bracket-newline.md b/docs/src/rules/array-bracket-newline.md
similarity index 100%
rename from docs/rules/array-bracket-newline.md
rename to docs/src/rules/array-bracket-newline.md
diff --git a/docs/rules/array-bracket-spacing.md b/docs/src/rules/array-bracket-spacing.md
similarity index 100%
rename from docs/rules/array-bracket-spacing.md
rename to docs/src/rules/array-bracket-spacing.md
diff --git a/docs/rules/array-callback-return.md b/docs/src/rules/array-callback-return.md
similarity index 100%
rename from docs/rules/array-callback-return.md
rename to docs/src/rules/array-callback-return.md
diff --git a/docs/rules/array-element-newline.md b/docs/src/rules/array-element-newline.md
similarity index 100%
rename from docs/rules/array-element-newline.md
rename to docs/src/rules/array-element-newline.md
diff --git a/docs/rules/arrow-body-style.md b/docs/src/rules/arrow-body-style.md
similarity index 100%
rename from docs/rules/arrow-body-style.md
rename to docs/src/rules/arrow-body-style.md
diff --git a/docs/rules/arrow-parens.md b/docs/src/rules/arrow-parens.md
similarity index 100%
rename from docs/rules/arrow-parens.md
rename to docs/src/rules/arrow-parens.md
diff --git a/docs/rules/arrow-spacing.md b/docs/src/rules/arrow-spacing.md
similarity index 100%
rename from docs/rules/arrow-spacing.md
rename to docs/src/rules/arrow-spacing.md
diff --git a/docs/rules/block-scoped-var.md b/docs/src/rules/block-scoped-var.md
similarity index 100%
rename from docs/rules/block-scoped-var.md
rename to docs/src/rules/block-scoped-var.md
diff --git a/docs/rules/block-spacing.md b/docs/src/rules/block-spacing.md
similarity index 100%
rename from docs/rules/block-spacing.md
rename to docs/src/rules/block-spacing.md
diff --git a/docs/rules/brace-style.md b/docs/src/rules/brace-style.md
similarity index 100%
rename from docs/rules/brace-style.md
rename to docs/src/rules/brace-style.md
diff --git a/docs/rules/callback-return.md b/docs/src/rules/callback-return.md
similarity index 100%
rename from docs/rules/callback-return.md
rename to docs/src/rules/callback-return.md
diff --git a/docs/rules/camelcase.md b/docs/src/rules/camelcase.md
similarity index 100%
rename from docs/rules/camelcase.md
rename to docs/src/rules/camelcase.md
diff --git a/docs/rules/capitalized-comments.md b/docs/src/rules/capitalized-comments.md
similarity index 100%
rename from docs/rules/capitalized-comments.md
rename to docs/src/rules/capitalized-comments.md
diff --git a/docs/rules/class-methods-use-this.md b/docs/src/rules/class-methods-use-this.md
similarity index 100%
rename from docs/rules/class-methods-use-this.md
rename to docs/src/rules/class-methods-use-this.md
diff --git a/docs/rules/comma-dangle.md b/docs/src/rules/comma-dangle.md
similarity index 100%
rename from docs/rules/comma-dangle.md
rename to docs/src/rules/comma-dangle.md
diff --git a/docs/rules/comma-spacing.md b/docs/src/rules/comma-spacing.md
similarity index 100%
rename from docs/rules/comma-spacing.md
rename to docs/src/rules/comma-spacing.md
diff --git a/docs/rules/comma-style.md b/docs/src/rules/comma-style.md
similarity index 100%
rename from docs/rules/comma-style.md
rename to docs/src/rules/comma-style.md
diff --git a/docs/rules/complexity.md b/docs/src/rules/complexity.md
similarity index 100%
rename from docs/rules/complexity.md
rename to docs/src/rules/complexity.md
diff --git a/docs/rules/computed-property-spacing.md b/docs/src/rules/computed-property-spacing.md
similarity index 100%
rename from docs/rules/computed-property-spacing.md
rename to docs/src/rules/computed-property-spacing.md
diff --git a/docs/rules/consistent-return.md b/docs/src/rules/consistent-return.md
similarity index 100%
rename from docs/rules/consistent-return.md
rename to docs/src/rules/consistent-return.md
diff --git a/docs/rules/consistent-this.md b/docs/src/rules/consistent-this.md
similarity index 100%
rename from docs/rules/consistent-this.md
rename to docs/src/rules/consistent-this.md
diff --git a/docs/rules/constructor-super.md b/docs/src/rules/constructor-super.md
similarity index 100%
rename from docs/rules/constructor-super.md
rename to docs/src/rules/constructor-super.md
diff --git a/docs/rules/curly.md b/docs/src/rules/curly.md
similarity index 100%
rename from docs/rules/curly.md
rename to docs/src/rules/curly.md
diff --git a/docs/rules/default-case-last.md b/docs/src/rules/default-case-last.md
similarity index 100%
rename from docs/rules/default-case-last.md
rename to docs/src/rules/default-case-last.md
diff --git a/docs/rules/default-case.md b/docs/src/rules/default-case.md
similarity index 100%
rename from docs/rules/default-case.md
rename to docs/src/rules/default-case.md
diff --git a/docs/rules/default-param-last.md b/docs/src/rules/default-param-last.md
similarity index 100%
rename from docs/rules/default-param-last.md
rename to docs/src/rules/default-param-last.md
diff --git a/docs/rules/dot-location.md b/docs/src/rules/dot-location.md
similarity index 100%
rename from docs/rules/dot-location.md
rename to docs/src/rules/dot-location.md
diff --git a/docs/rules/dot-notation.md b/docs/src/rules/dot-notation.md
similarity index 100%
rename from docs/rules/dot-notation.md
rename to docs/src/rules/dot-notation.md
diff --git a/docs/rules/eol-last.md b/docs/src/rules/eol-last.md
similarity index 100%
rename from docs/rules/eol-last.md
rename to docs/src/rules/eol-last.md
diff --git a/docs/rules/eqeqeq.md b/docs/src/rules/eqeqeq.md
similarity index 100%
rename from docs/rules/eqeqeq.md
rename to docs/src/rules/eqeqeq.md
diff --git a/docs/rules/for-direction.md b/docs/src/rules/for-direction.md
similarity index 100%
rename from docs/rules/for-direction.md
rename to docs/src/rules/for-direction.md
diff --git a/docs/rules/func-call-spacing.md b/docs/src/rules/func-call-spacing.md
similarity index 100%
rename from docs/rules/func-call-spacing.md
rename to docs/src/rules/func-call-spacing.md
diff --git a/docs/rules/func-name-matching.md b/docs/src/rules/func-name-matching.md
similarity index 100%
rename from docs/rules/func-name-matching.md
rename to docs/src/rules/func-name-matching.md
diff --git a/docs/rules/func-names.md b/docs/src/rules/func-names.md
similarity index 100%
rename from docs/rules/func-names.md
rename to docs/src/rules/func-names.md
diff --git a/docs/rules/func-style.md b/docs/src/rules/func-style.md
similarity index 100%
rename from docs/rules/func-style.md
rename to docs/src/rules/func-style.md
diff --git a/docs/rules/function-call-argument-newline.md b/docs/src/rules/function-call-argument-newline.md
similarity index 100%
rename from docs/rules/function-call-argument-newline.md
rename to docs/src/rules/function-call-argument-newline.md
diff --git a/docs/rules/function-paren-newline.md b/docs/src/rules/function-paren-newline.md
similarity index 100%
rename from docs/rules/function-paren-newline.md
rename to docs/src/rules/function-paren-newline.md
diff --git a/docs/rules/generator-star-spacing.md b/docs/src/rules/generator-star-spacing.md
similarity index 100%
rename from docs/rules/generator-star-spacing.md
rename to docs/src/rules/generator-star-spacing.md
diff --git a/docs/rules/generator-star.md b/docs/src/rules/generator-star.md
similarity index 100%
rename from docs/rules/generator-star.md
rename to docs/src/rules/generator-star.md
diff --git a/docs/rules/getter-return.md b/docs/src/rules/getter-return.md
similarity index 100%
rename from docs/rules/getter-return.md
rename to docs/src/rules/getter-return.md
diff --git a/docs/rules/global-require.md b/docs/src/rules/global-require.md
similarity index 100%
rename from docs/rules/global-require.md
rename to docs/src/rules/global-require.md
diff --git a/docs/rules/global-strict.md b/docs/src/rules/global-strict.md
similarity index 100%
rename from docs/rules/global-strict.md
rename to docs/src/rules/global-strict.md
diff --git a/docs/rules/grouped-accessor-pairs.md b/docs/src/rules/grouped-accessor-pairs.md
similarity index 100%
rename from docs/rules/grouped-accessor-pairs.md
rename to docs/src/rules/grouped-accessor-pairs.md
diff --git a/docs/rules/guard-for-in.md b/docs/src/rules/guard-for-in.md
similarity index 100%
rename from docs/rules/guard-for-in.md
rename to docs/src/rules/guard-for-in.md
diff --git a/docs/rules/handle-callback-err.md b/docs/src/rules/handle-callback-err.md
similarity index 100%
rename from docs/rules/handle-callback-err.md
rename to docs/src/rules/handle-callback-err.md
diff --git a/docs/rules/id-blacklist.md b/docs/src/rules/id-blacklist.md
similarity index 100%
rename from docs/rules/id-blacklist.md
rename to docs/src/rules/id-blacklist.md
diff --git a/docs/rules/id-denylist.md b/docs/src/rules/id-denylist.md
similarity index 100%
rename from docs/rules/id-denylist.md
rename to docs/src/rules/id-denylist.md
diff --git a/docs/rules/id-length.md b/docs/src/rules/id-length.md
similarity index 100%
rename from docs/rules/id-length.md
rename to docs/src/rules/id-length.md
diff --git a/docs/rules/id-match.md b/docs/src/rules/id-match.md
similarity index 100%
rename from docs/rules/id-match.md
rename to docs/src/rules/id-match.md
diff --git a/docs/rules/implicit-arrow-linebreak.md b/docs/src/rules/implicit-arrow-linebreak.md
similarity index 100%
rename from docs/rules/implicit-arrow-linebreak.md
rename to docs/src/rules/implicit-arrow-linebreak.md
diff --git a/docs/rules/indent-legacy.md b/docs/src/rules/indent-legacy.md
similarity index 100%
rename from docs/rules/indent-legacy.md
rename to docs/src/rules/indent-legacy.md
diff --git a/docs/rules/indent.md b/docs/src/rules/indent.md
similarity index 100%
rename from docs/rules/indent.md
rename to docs/src/rules/indent.md
diff --git a/docs/rules/init-declarations.md b/docs/src/rules/init-declarations.md
similarity index 100%
rename from docs/rules/init-declarations.md
rename to docs/src/rules/init-declarations.md
diff --git a/docs/rules/jsx-quotes.md b/docs/src/rules/jsx-quotes.md
similarity index 100%
rename from docs/rules/jsx-quotes.md
rename to docs/src/rules/jsx-quotes.md
diff --git a/docs/rules/key-spacing.md b/docs/src/rules/key-spacing.md
similarity index 100%
rename from docs/rules/key-spacing.md
rename to docs/src/rules/key-spacing.md
diff --git a/docs/rules/keyword-spacing.md b/docs/src/rules/keyword-spacing.md
similarity index 100%
rename from docs/rules/keyword-spacing.md
rename to docs/src/rules/keyword-spacing.md
diff --git a/docs/rules/line-comment-position.md b/docs/src/rules/line-comment-position.md
similarity index 100%
rename from docs/rules/line-comment-position.md
rename to docs/src/rules/line-comment-position.md
diff --git a/docs/rules/linebreak-style.md b/docs/src/rules/linebreak-style.md
similarity index 100%
rename from docs/rules/linebreak-style.md
rename to docs/src/rules/linebreak-style.md
diff --git a/docs/rules/lines-around-comment.md b/docs/src/rules/lines-around-comment.md
similarity index 100%
rename from docs/rules/lines-around-comment.md
rename to docs/src/rules/lines-around-comment.md
diff --git a/docs/rules/lines-around-directive.md b/docs/src/rules/lines-around-directive.md
similarity index 100%
rename from docs/rules/lines-around-directive.md
rename to docs/src/rules/lines-around-directive.md
diff --git a/docs/rules/lines-between-class-members.md b/docs/src/rules/lines-between-class-members.md
similarity index 100%
rename from docs/rules/lines-between-class-members.md
rename to docs/src/rules/lines-between-class-members.md
diff --git a/docs/rules/max-classes-per-file.md b/docs/src/rules/max-classes-per-file.md
similarity index 100%
rename from docs/rules/max-classes-per-file.md
rename to docs/src/rules/max-classes-per-file.md
diff --git a/docs/rules/max-depth.md b/docs/src/rules/max-depth.md
similarity index 100%
rename from docs/rules/max-depth.md
rename to docs/src/rules/max-depth.md
diff --git a/docs/rules/max-len.md b/docs/src/rules/max-len.md
similarity index 100%
rename from docs/rules/max-len.md
rename to docs/src/rules/max-len.md
diff --git a/docs/rules/max-lines-per-function.md b/docs/src/rules/max-lines-per-function.md
similarity index 100%
rename from docs/rules/max-lines-per-function.md
rename to docs/src/rules/max-lines-per-function.md
diff --git a/docs/rules/max-lines.md b/docs/src/rules/max-lines.md
similarity index 100%
rename from docs/rules/max-lines.md
rename to docs/src/rules/max-lines.md
diff --git a/docs/rules/max-nested-callbacks.md b/docs/src/rules/max-nested-callbacks.md
similarity index 100%
rename from docs/rules/max-nested-callbacks.md
rename to docs/src/rules/max-nested-callbacks.md
diff --git a/docs/rules/max-params.md b/docs/src/rules/max-params.md
similarity index 100%
rename from docs/rules/max-params.md
rename to docs/src/rules/max-params.md
diff --git a/docs/rules/max-statements-per-line.md b/docs/src/rules/max-statements-per-line.md
similarity index 100%
rename from docs/rules/max-statements-per-line.md
rename to docs/src/rules/max-statements-per-line.md
diff --git a/docs/rules/max-statements.md b/docs/src/rules/max-statements.md
similarity index 100%
rename from docs/rules/max-statements.md
rename to docs/src/rules/max-statements.md
diff --git a/docs/rules/multiline-comment-style.md b/docs/src/rules/multiline-comment-style.md
similarity index 100%
rename from docs/rules/multiline-comment-style.md
rename to docs/src/rules/multiline-comment-style.md
diff --git a/docs/rules/multiline-ternary.md b/docs/src/rules/multiline-ternary.md
similarity index 100%
rename from docs/rules/multiline-ternary.md
rename to docs/src/rules/multiline-ternary.md
diff --git a/docs/rules/new-cap.md b/docs/src/rules/new-cap.md
similarity index 100%
rename from docs/rules/new-cap.md
rename to docs/src/rules/new-cap.md
diff --git a/docs/rules/new-parens.md b/docs/src/rules/new-parens.md
similarity index 100%
rename from docs/rules/new-parens.md
rename to docs/src/rules/new-parens.md
diff --git a/docs/rules/newline-after-var.md b/docs/src/rules/newline-after-var.md
similarity index 100%
rename from docs/rules/newline-after-var.md
rename to docs/src/rules/newline-after-var.md
diff --git a/docs/rules/newline-before-return.md b/docs/src/rules/newline-before-return.md
similarity index 100%
rename from docs/rules/newline-before-return.md
rename to docs/src/rules/newline-before-return.md
diff --git a/docs/rules/newline-per-chained-call.md b/docs/src/rules/newline-per-chained-call.md
similarity index 100%
rename from docs/rules/newline-per-chained-call.md
rename to docs/src/rules/newline-per-chained-call.md
diff --git a/docs/rules/no-alert.md b/docs/src/rules/no-alert.md
similarity index 100%
rename from docs/rules/no-alert.md
rename to docs/src/rules/no-alert.md
diff --git a/docs/rules/no-array-constructor.md b/docs/src/rules/no-array-constructor.md
similarity index 100%
rename from docs/rules/no-array-constructor.md
rename to docs/src/rules/no-array-constructor.md
diff --git a/docs/rules/no-arrow-condition.md b/docs/src/rules/no-arrow-condition.md
similarity index 100%
rename from docs/rules/no-arrow-condition.md
rename to docs/src/rules/no-arrow-condition.md
diff --git a/docs/rules/no-async-promise-executor.md b/docs/src/rules/no-async-promise-executor.md
similarity index 100%
rename from docs/rules/no-async-promise-executor.md
rename to docs/src/rules/no-async-promise-executor.md
diff --git a/docs/rules/no-await-in-loop.md b/docs/src/rules/no-await-in-loop.md
similarity index 100%
rename from docs/rules/no-await-in-loop.md
rename to docs/src/rules/no-await-in-loop.md
diff --git a/docs/rules/no-bitwise.md b/docs/src/rules/no-bitwise.md
similarity index 100%
rename from docs/rules/no-bitwise.md
rename to docs/src/rules/no-bitwise.md
diff --git a/docs/rules/no-buffer-constructor.md b/docs/src/rules/no-buffer-constructor.md
similarity index 100%
rename from docs/rules/no-buffer-constructor.md
rename to docs/src/rules/no-buffer-constructor.md
diff --git a/docs/rules/no-caller.md b/docs/src/rules/no-caller.md
similarity index 100%
rename from docs/rules/no-caller.md
rename to docs/src/rules/no-caller.md
diff --git a/docs/rules/no-case-declarations.md b/docs/src/rules/no-case-declarations.md
similarity index 100%
rename from docs/rules/no-case-declarations.md
rename to docs/src/rules/no-case-declarations.md
diff --git a/docs/rules/no-catch-shadow.md b/docs/src/rules/no-catch-shadow.md
similarity index 100%
rename from docs/rules/no-catch-shadow.md
rename to docs/src/rules/no-catch-shadow.md
diff --git a/docs/rules/no-class-assign.md b/docs/src/rules/no-class-assign.md
similarity index 100%
rename from docs/rules/no-class-assign.md
rename to docs/src/rules/no-class-assign.md
diff --git a/docs/rules/no-comma-dangle.md b/docs/src/rules/no-comma-dangle.md
similarity index 100%
rename from docs/rules/no-comma-dangle.md
rename to docs/src/rules/no-comma-dangle.md
diff --git a/docs/rules/no-compare-neg-zero.md b/docs/src/rules/no-compare-neg-zero.md
similarity index 100%
rename from docs/rules/no-compare-neg-zero.md
rename to docs/src/rules/no-compare-neg-zero.md
diff --git a/docs/rules/no-cond-assign.md b/docs/src/rules/no-cond-assign.md
similarity index 100%
rename from docs/rules/no-cond-assign.md
rename to docs/src/rules/no-cond-assign.md
diff --git a/docs/rules/no-confusing-arrow.md b/docs/src/rules/no-confusing-arrow.md
similarity index 100%
rename from docs/rules/no-confusing-arrow.md
rename to docs/src/rules/no-confusing-arrow.md
diff --git a/docs/rules/no-console.md b/docs/src/rules/no-console.md
similarity index 100%
rename from docs/rules/no-console.md
rename to docs/src/rules/no-console.md
diff --git a/docs/rules/no-const-assign.md b/docs/src/rules/no-const-assign.md
similarity index 100%
rename from docs/rules/no-const-assign.md
rename to docs/src/rules/no-const-assign.md
diff --git a/docs/rules/no-constant-condition.md b/docs/src/rules/no-constant-condition.md
similarity index 100%
rename from docs/rules/no-constant-condition.md
rename to docs/src/rules/no-constant-condition.md
diff --git a/docs/rules/no-constructor-return.md b/docs/src/rules/no-constructor-return.md
similarity index 100%
rename from docs/rules/no-constructor-return.md
rename to docs/src/rules/no-constructor-return.md
diff --git a/docs/rules/no-continue.md b/docs/src/rules/no-continue.md
similarity index 100%
rename from docs/rules/no-continue.md
rename to docs/src/rules/no-continue.md
diff --git a/docs/rules/no-control-regex.md b/docs/src/rules/no-control-regex.md
similarity index 100%
rename from docs/rules/no-control-regex.md
rename to docs/src/rules/no-control-regex.md
diff --git a/docs/rules/no-debugger.md b/docs/src/rules/no-debugger.md
similarity index 100%
rename from docs/rules/no-debugger.md
rename to docs/src/rules/no-debugger.md
diff --git a/docs/rules/no-delete-var.md b/docs/src/rules/no-delete-var.md
similarity index 100%
rename from docs/rules/no-delete-var.md
rename to docs/src/rules/no-delete-var.md
diff --git a/docs/rules/no-div-regex.md b/docs/src/rules/no-div-regex.md
similarity index 100%
rename from docs/rules/no-div-regex.md
rename to docs/src/rules/no-div-regex.md
diff --git a/docs/rules/no-dupe-args.md b/docs/src/rules/no-dupe-args.md
similarity index 100%
rename from docs/rules/no-dupe-args.md
rename to docs/src/rules/no-dupe-args.md
diff --git a/docs/rules/no-dupe-class-members.md b/docs/src/rules/no-dupe-class-members.md
similarity index 100%
rename from docs/rules/no-dupe-class-members.md
rename to docs/src/rules/no-dupe-class-members.md
diff --git a/docs/rules/no-dupe-else-if.md b/docs/src/rules/no-dupe-else-if.md
similarity index 100%
rename from docs/rules/no-dupe-else-if.md
rename to docs/src/rules/no-dupe-else-if.md
diff --git a/docs/rules/no-dupe-keys.md b/docs/src/rules/no-dupe-keys.md
similarity index 100%
rename from docs/rules/no-dupe-keys.md
rename to docs/src/rules/no-dupe-keys.md
diff --git a/docs/rules/no-duplicate-case.md b/docs/src/rules/no-duplicate-case.md
similarity index 100%
rename from docs/rules/no-duplicate-case.md
rename to docs/src/rules/no-duplicate-case.md
diff --git a/docs/rules/no-duplicate-imports.md b/docs/src/rules/no-duplicate-imports.md
similarity index 100%
rename from docs/rules/no-duplicate-imports.md
rename to docs/src/rules/no-duplicate-imports.md
diff --git a/docs/rules/no-else-return.md b/docs/src/rules/no-else-return.md
similarity index 100%
rename from docs/rules/no-else-return.md
rename to docs/src/rules/no-else-return.md
diff --git a/docs/rules/no-empty-character-class.md b/docs/src/rules/no-empty-character-class.md
similarity index 100%
rename from docs/rules/no-empty-character-class.md
rename to docs/src/rules/no-empty-character-class.md
diff --git a/docs/rules/no-empty-class.md b/docs/src/rules/no-empty-class.md
similarity index 100%
rename from docs/rules/no-empty-class.md
rename to docs/src/rules/no-empty-class.md
diff --git a/docs/rules/no-empty-function.md b/docs/src/rules/no-empty-function.md
similarity index 100%
rename from docs/rules/no-empty-function.md
rename to docs/src/rules/no-empty-function.md
diff --git a/docs/rules/no-empty-label.md b/docs/src/rules/no-empty-label.md
similarity index 100%
rename from docs/rules/no-empty-label.md
rename to docs/src/rules/no-empty-label.md
diff --git a/docs/rules/no-empty-pattern.md b/docs/src/rules/no-empty-pattern.md
similarity index 100%
rename from docs/rules/no-empty-pattern.md
rename to docs/src/rules/no-empty-pattern.md
diff --git a/docs/rules/no-empty.md b/docs/src/rules/no-empty.md
similarity index 100%
rename from docs/rules/no-empty.md
rename to docs/src/rules/no-empty.md
diff --git a/docs/rules/no-eq-null.md b/docs/src/rules/no-eq-null.md
similarity index 100%
rename from docs/rules/no-eq-null.md
rename to docs/src/rules/no-eq-null.md
diff --git a/docs/rules/no-eval.md b/docs/src/rules/no-eval.md
similarity index 100%
rename from docs/rules/no-eval.md
rename to docs/src/rules/no-eval.md
diff --git a/docs/rules/no-ex-assign.md b/docs/src/rules/no-ex-assign.md
similarity index 100%
rename from docs/rules/no-ex-assign.md
rename to docs/src/rules/no-ex-assign.md
diff --git a/docs/rules/no-extend-native.md b/docs/src/rules/no-extend-native.md
similarity index 100%
rename from docs/rules/no-extend-native.md
rename to docs/src/rules/no-extend-native.md
diff --git a/docs/rules/no-extra-bind.md b/docs/src/rules/no-extra-bind.md
similarity index 100%
rename from docs/rules/no-extra-bind.md
rename to docs/src/rules/no-extra-bind.md
diff --git a/docs/rules/no-extra-boolean-cast.md b/docs/src/rules/no-extra-boolean-cast.md
similarity index 100%
rename from docs/rules/no-extra-boolean-cast.md
rename to docs/src/rules/no-extra-boolean-cast.md
diff --git a/docs/rules/no-extra-label.md b/docs/src/rules/no-extra-label.md
similarity index 100%
rename from docs/rules/no-extra-label.md
rename to docs/src/rules/no-extra-label.md
diff --git a/docs/rules/no-extra-parens.md b/docs/src/rules/no-extra-parens.md
similarity index 100%
rename from docs/rules/no-extra-parens.md
rename to docs/src/rules/no-extra-parens.md
diff --git a/docs/rules/no-extra-semi.md b/docs/src/rules/no-extra-semi.md
similarity index 100%
rename from docs/rules/no-extra-semi.md
rename to docs/src/rules/no-extra-semi.md
diff --git a/docs/rules/no-extra-strict.md b/docs/src/rules/no-extra-strict.md
similarity index 100%
rename from docs/rules/no-extra-strict.md
rename to docs/src/rules/no-extra-strict.md
diff --git a/docs/rules/no-fallthrough.md b/docs/src/rules/no-fallthrough.md
similarity index 100%
rename from docs/rules/no-fallthrough.md
rename to docs/src/rules/no-fallthrough.md
diff --git a/docs/rules/no-floating-decimal.md b/docs/src/rules/no-floating-decimal.md
similarity index 100%
rename from docs/rules/no-floating-decimal.md
rename to docs/src/rules/no-floating-decimal.md
diff --git a/docs/rules/no-func-assign.md b/docs/src/rules/no-func-assign.md
similarity index 100%
rename from docs/rules/no-func-assign.md
rename to docs/src/rules/no-func-assign.md
diff --git a/docs/rules/no-global-assign.md b/docs/src/rules/no-global-assign.md
similarity index 100%
rename from docs/rules/no-global-assign.md
rename to docs/src/rules/no-global-assign.md
diff --git a/docs/rules/no-implicit-coercion.md b/docs/src/rules/no-implicit-coercion.md
similarity index 100%
rename from docs/rules/no-implicit-coercion.md
rename to docs/src/rules/no-implicit-coercion.md
diff --git a/docs/rules/no-implicit-globals.md b/docs/src/rules/no-implicit-globals.md
similarity index 100%
rename from docs/rules/no-implicit-globals.md
rename to docs/src/rules/no-implicit-globals.md
diff --git a/docs/rules/no-implied-eval.md b/docs/src/rules/no-implied-eval.md
similarity index 100%
rename from docs/rules/no-implied-eval.md
rename to docs/src/rules/no-implied-eval.md
diff --git a/docs/rules/no-import-assign.md b/docs/src/rules/no-import-assign.md
similarity index 100%
rename from docs/rules/no-import-assign.md
rename to docs/src/rules/no-import-assign.md
diff --git a/docs/rules/no-inline-comments.md b/docs/src/rules/no-inline-comments.md
similarity index 100%
rename from docs/rules/no-inline-comments.md
rename to docs/src/rules/no-inline-comments.md
diff --git a/docs/rules/no-inner-declarations.md b/docs/src/rules/no-inner-declarations.md
similarity index 100%
rename from docs/rules/no-inner-declarations.md
rename to docs/src/rules/no-inner-declarations.md
diff --git a/docs/rules/no-invalid-regexp.md b/docs/src/rules/no-invalid-regexp.md
similarity index 100%
rename from docs/rules/no-invalid-regexp.md
rename to docs/src/rules/no-invalid-regexp.md
diff --git a/docs/rules/no-invalid-this.md b/docs/src/rules/no-invalid-this.md
similarity index 100%
rename from docs/rules/no-invalid-this.md
rename to docs/src/rules/no-invalid-this.md
diff --git a/docs/rules/no-irregular-whitespace.md b/docs/src/rules/no-irregular-whitespace.md
similarity index 100%
rename from docs/rules/no-irregular-whitespace.md
rename to docs/src/rules/no-irregular-whitespace.md
diff --git a/docs/rules/no-iterator.md b/docs/src/rules/no-iterator.md
similarity index 100%
rename from docs/rules/no-iterator.md
rename to docs/src/rules/no-iterator.md
diff --git a/docs/rules/no-label-var.md b/docs/src/rules/no-label-var.md
similarity index 100%
rename from docs/rules/no-label-var.md
rename to docs/src/rules/no-label-var.md
diff --git a/docs/rules/no-labels.md b/docs/src/rules/no-labels.md
similarity index 100%
rename from docs/rules/no-labels.md
rename to docs/src/rules/no-labels.md
diff --git a/docs/rules/no-lone-blocks.md b/docs/src/rules/no-lone-blocks.md
similarity index 100%
rename from docs/rules/no-lone-blocks.md
rename to docs/src/rules/no-lone-blocks.md
diff --git a/docs/rules/no-lonely-if.md b/docs/src/rules/no-lonely-if.md
similarity index 100%
rename from docs/rules/no-lonely-if.md
rename to docs/src/rules/no-lonely-if.md
diff --git a/docs/rules/no-loop-func.md b/docs/src/rules/no-loop-func.md
similarity index 100%
rename from docs/rules/no-loop-func.md
rename to docs/src/rules/no-loop-func.md
diff --git a/docs/rules/no-loss-of-precision.md b/docs/src/rules/no-loss-of-precision.md
similarity index 100%
rename from docs/rules/no-loss-of-precision.md
rename to docs/src/rules/no-loss-of-precision.md
diff --git a/docs/rules/no-magic-numbers.md b/docs/src/rules/no-magic-numbers.md
similarity index 100%
rename from docs/rules/no-magic-numbers.md
rename to docs/src/rules/no-magic-numbers.md
diff --git a/docs/rules/no-misleading-character-class.md b/docs/src/rules/no-misleading-character-class.md
similarity index 100%
rename from docs/rules/no-misleading-character-class.md
rename to docs/src/rules/no-misleading-character-class.md
diff --git a/docs/rules/no-mixed-operators.md b/docs/src/rules/no-mixed-operators.md
similarity index 100%
rename from docs/rules/no-mixed-operators.md
rename to docs/src/rules/no-mixed-operators.md
diff --git a/docs/rules/no-mixed-requires.md b/docs/src/rules/no-mixed-requires.md
similarity index 100%
rename from docs/rules/no-mixed-requires.md
rename to docs/src/rules/no-mixed-requires.md
diff --git a/docs/rules/no-mixed-spaces-and-tabs.md b/docs/src/rules/no-mixed-spaces-and-tabs.md
similarity index 100%
rename from docs/rules/no-mixed-spaces-and-tabs.md
rename to docs/src/rules/no-mixed-spaces-and-tabs.md
diff --git a/docs/rules/no-multi-assign.md b/docs/src/rules/no-multi-assign.md
similarity index 100%
rename from docs/rules/no-multi-assign.md
rename to docs/src/rules/no-multi-assign.md
diff --git a/docs/rules/no-multi-spaces.md b/docs/src/rules/no-multi-spaces.md
similarity index 100%
rename from docs/rules/no-multi-spaces.md
rename to docs/src/rules/no-multi-spaces.md
diff --git a/docs/rules/no-multi-str.md b/docs/src/rules/no-multi-str.md
similarity index 100%
rename from docs/rules/no-multi-str.md
rename to docs/src/rules/no-multi-str.md
diff --git a/docs/rules/no-multiple-empty-lines.md b/docs/src/rules/no-multiple-empty-lines.md
similarity index 100%
rename from docs/rules/no-multiple-empty-lines.md
rename to docs/src/rules/no-multiple-empty-lines.md
diff --git a/docs/rules/no-native-reassign.md b/docs/src/rules/no-native-reassign.md
similarity index 100%
rename from docs/rules/no-native-reassign.md
rename to docs/src/rules/no-native-reassign.md
diff --git a/docs/rules/no-negated-condition.md b/docs/src/rules/no-negated-condition.md
similarity index 100%
rename from docs/rules/no-negated-condition.md
rename to docs/src/rules/no-negated-condition.md
diff --git a/docs/rules/no-negated-in-lhs.md b/docs/src/rules/no-negated-in-lhs.md
similarity index 100%
rename from docs/rules/no-negated-in-lhs.md
rename to docs/src/rules/no-negated-in-lhs.md
diff --git a/docs/rules/no-nested-ternary.md b/docs/src/rules/no-nested-ternary.md
similarity index 100%
rename from docs/rules/no-nested-ternary.md
rename to docs/src/rules/no-nested-ternary.md
diff --git a/docs/rules/no-new-func.md b/docs/src/rules/no-new-func.md
similarity index 100%
rename from docs/rules/no-new-func.md
rename to docs/src/rules/no-new-func.md
diff --git a/docs/rules/no-new-object.md b/docs/src/rules/no-new-object.md
similarity index 100%
rename from docs/rules/no-new-object.md
rename to docs/src/rules/no-new-object.md
diff --git a/docs/rules/no-new-require.md b/docs/src/rules/no-new-require.md
similarity index 100%
rename from docs/rules/no-new-require.md
rename to docs/src/rules/no-new-require.md
diff --git a/docs/rules/no-new-symbol.md b/docs/src/rules/no-new-symbol.md
similarity index 100%
rename from docs/rules/no-new-symbol.md
rename to docs/src/rules/no-new-symbol.md
diff --git a/docs/rules/no-new-wrappers.md b/docs/src/rules/no-new-wrappers.md
similarity index 100%
rename from docs/rules/no-new-wrappers.md
rename to docs/src/rules/no-new-wrappers.md
diff --git a/docs/rules/no-new.md b/docs/src/rules/no-new.md
similarity index 100%
rename from docs/rules/no-new.md
rename to docs/src/rules/no-new.md
diff --git a/docs/rules/no-nonoctal-decimal-escape.md b/docs/src/rules/no-nonoctal-decimal-escape.md
similarity index 100%
rename from docs/rules/no-nonoctal-decimal-escape.md
rename to docs/src/rules/no-nonoctal-decimal-escape.md
diff --git a/docs/rules/no-obj-calls.md b/docs/src/rules/no-obj-calls.md
similarity index 100%
rename from docs/rules/no-obj-calls.md
rename to docs/src/rules/no-obj-calls.md
diff --git a/docs/rules/no-octal-escape.md b/docs/src/rules/no-octal-escape.md
similarity index 100%
rename from docs/rules/no-octal-escape.md
rename to docs/src/rules/no-octal-escape.md
diff --git a/docs/rules/no-octal.md b/docs/src/rules/no-octal.md
similarity index 100%
rename from docs/rules/no-octal.md
rename to docs/src/rules/no-octal.md
diff --git a/docs/rules/no-param-reassign.md b/docs/src/rules/no-param-reassign.md
similarity index 100%
rename from docs/rules/no-param-reassign.md
rename to docs/src/rules/no-param-reassign.md
diff --git a/docs/rules/no-path-concat.md b/docs/src/rules/no-path-concat.md
similarity index 100%
rename from docs/rules/no-path-concat.md
rename to docs/src/rules/no-path-concat.md
diff --git a/docs/rules/no-plusplus.md b/docs/src/rules/no-plusplus.md
similarity index 100%
rename from docs/rules/no-plusplus.md
rename to docs/src/rules/no-plusplus.md
diff --git a/docs/rules/no-process-env.md b/docs/src/rules/no-process-env.md
similarity index 100%
rename from docs/rules/no-process-env.md
rename to docs/src/rules/no-process-env.md
diff --git a/docs/rules/no-process-exit.md b/docs/src/rules/no-process-exit.md
similarity index 100%
rename from docs/rules/no-process-exit.md
rename to docs/src/rules/no-process-exit.md
diff --git a/docs/rules/no-promise-executor-return.md b/docs/src/rules/no-promise-executor-return.md
similarity index 100%
rename from docs/rules/no-promise-executor-return.md
rename to docs/src/rules/no-promise-executor-return.md
diff --git a/docs/rules/no-proto.md b/docs/src/rules/no-proto.md
similarity index 100%
rename from docs/rules/no-proto.md
rename to docs/src/rules/no-proto.md
diff --git a/docs/rules/no-prototype-builtins.md b/docs/src/rules/no-prototype-builtins.md
similarity index 100%
rename from docs/rules/no-prototype-builtins.md
rename to docs/src/rules/no-prototype-builtins.md
diff --git a/docs/rules/no-redeclare.md b/docs/src/rules/no-redeclare.md
similarity index 100%
rename from docs/rules/no-redeclare.md
rename to docs/src/rules/no-redeclare.md
diff --git a/docs/rules/no-regex-spaces.md b/docs/src/rules/no-regex-spaces.md
similarity index 100%
rename from docs/rules/no-regex-spaces.md
rename to docs/src/rules/no-regex-spaces.md
diff --git a/docs/rules/no-reserved-keys.md b/docs/src/rules/no-reserved-keys.md
similarity index 100%
rename from docs/rules/no-reserved-keys.md
rename to docs/src/rules/no-reserved-keys.md
diff --git a/docs/rules/no-restricted-exports.md b/docs/src/rules/no-restricted-exports.md
similarity index 100%
rename from docs/rules/no-restricted-exports.md
rename to docs/src/rules/no-restricted-exports.md
diff --git a/docs/rules/no-restricted-globals.md b/docs/src/rules/no-restricted-globals.md
similarity index 100%
rename from docs/rules/no-restricted-globals.md
rename to docs/src/rules/no-restricted-globals.md
diff --git a/docs/rules/no-restricted-imports.md b/docs/src/rules/no-restricted-imports.md
similarity index 100%
rename from docs/rules/no-restricted-imports.md
rename to docs/src/rules/no-restricted-imports.md
diff --git a/docs/rules/no-restricted-modules.md b/docs/src/rules/no-restricted-modules.md
similarity index 100%
rename from docs/rules/no-restricted-modules.md
rename to docs/src/rules/no-restricted-modules.md
diff --git a/docs/rules/no-restricted-properties.md b/docs/src/rules/no-restricted-properties.md
similarity index 100%
rename from docs/rules/no-restricted-properties.md
rename to docs/src/rules/no-restricted-properties.md
diff --git a/docs/rules/no-restricted-syntax.md b/docs/src/rules/no-restricted-syntax.md
similarity index 100%
rename from docs/rules/no-restricted-syntax.md
rename to docs/src/rules/no-restricted-syntax.md
diff --git a/docs/rules/no-return-assign.md b/docs/src/rules/no-return-assign.md
similarity index 100%
rename from docs/rules/no-return-assign.md
rename to docs/src/rules/no-return-assign.md
diff --git a/docs/rules/no-return-await.md b/docs/src/rules/no-return-await.md
similarity index 100%
rename from docs/rules/no-return-await.md
rename to docs/src/rules/no-return-await.md
diff --git a/docs/rules/no-script-url.md b/docs/src/rules/no-script-url.md
similarity index 100%
rename from docs/rules/no-script-url.md
rename to docs/src/rules/no-script-url.md
diff --git a/docs/rules/no-self-assign.md b/docs/src/rules/no-self-assign.md
similarity index 100%
rename from docs/rules/no-self-assign.md
rename to docs/src/rules/no-self-assign.md
diff --git a/docs/rules/no-self-compare.md b/docs/src/rules/no-self-compare.md
similarity index 100%
rename from docs/rules/no-self-compare.md
rename to docs/src/rules/no-self-compare.md
diff --git a/docs/rules/no-sequences.md b/docs/src/rules/no-sequences.md
similarity index 100%
rename from docs/rules/no-sequences.md
rename to docs/src/rules/no-sequences.md
diff --git a/docs/rules/no-setter-return.md b/docs/src/rules/no-setter-return.md
similarity index 100%
rename from docs/rules/no-setter-return.md
rename to docs/src/rules/no-setter-return.md
diff --git a/docs/rules/no-shadow-restricted-names.md b/docs/src/rules/no-shadow-restricted-names.md
similarity index 100%
rename from docs/rules/no-shadow-restricted-names.md
rename to docs/src/rules/no-shadow-restricted-names.md
diff --git a/docs/rules/no-shadow.md b/docs/src/rules/no-shadow.md
similarity index 100%
rename from docs/rules/no-shadow.md
rename to docs/src/rules/no-shadow.md
diff --git a/docs/rules/no-space-before-semi.md b/docs/src/rules/no-space-before-semi.md
similarity index 100%
rename from docs/rules/no-space-before-semi.md
rename to docs/src/rules/no-space-before-semi.md
diff --git a/docs/rules/no-spaced-func.md b/docs/src/rules/no-spaced-func.md
similarity index 100%
rename from docs/rules/no-spaced-func.md
rename to docs/src/rules/no-spaced-func.md
diff --git a/docs/rules/no-sparse-arrays.md b/docs/src/rules/no-sparse-arrays.md
similarity index 100%
rename from docs/rules/no-sparse-arrays.md
rename to docs/src/rules/no-sparse-arrays.md
diff --git a/docs/rules/no-sync.md b/docs/src/rules/no-sync.md
similarity index 100%
rename from docs/rules/no-sync.md
rename to docs/src/rules/no-sync.md
diff --git a/docs/rules/no-tabs.md b/docs/src/rules/no-tabs.md
similarity index 100%
rename from docs/rules/no-tabs.md
rename to docs/src/rules/no-tabs.md
diff --git a/docs/rules/no-template-curly-in-string.md b/docs/src/rules/no-template-curly-in-string.md
similarity index 100%
rename from docs/rules/no-template-curly-in-string.md
rename to docs/src/rules/no-template-curly-in-string.md
diff --git a/docs/rules/no-ternary.md b/docs/src/rules/no-ternary.md
similarity index 100%
rename from docs/rules/no-ternary.md
rename to docs/src/rules/no-ternary.md
diff --git a/docs/rules/no-this-before-super.md b/docs/src/rules/no-this-before-super.md
similarity index 100%
rename from docs/rules/no-this-before-super.md
rename to docs/src/rules/no-this-before-super.md
diff --git a/docs/rules/no-throw-literal.md b/docs/src/rules/no-throw-literal.md
similarity index 100%
rename from docs/rules/no-throw-literal.md
rename to docs/src/rules/no-throw-literal.md
diff --git a/docs/rules/no-trailing-spaces.md b/docs/src/rules/no-trailing-spaces.md
similarity index 100%
rename from docs/rules/no-trailing-spaces.md
rename to docs/src/rules/no-trailing-spaces.md
diff --git a/docs/rules/no-undef-init.md b/docs/src/rules/no-undef-init.md
similarity index 100%
rename from docs/rules/no-undef-init.md
rename to docs/src/rules/no-undef-init.md
diff --git a/docs/rules/no-undef.md b/docs/src/rules/no-undef.md
similarity index 100%
rename from docs/rules/no-undef.md
rename to docs/src/rules/no-undef.md
diff --git a/docs/rules/no-undefined.md b/docs/src/rules/no-undefined.md
similarity index 100%
rename from docs/rules/no-undefined.md
rename to docs/src/rules/no-undefined.md
diff --git a/docs/rules/no-underscore-dangle.md b/docs/src/rules/no-underscore-dangle.md
similarity index 100%
rename from docs/rules/no-underscore-dangle.md
rename to docs/src/rules/no-underscore-dangle.md
diff --git a/docs/rules/no-unexpected-multiline.md b/docs/src/rules/no-unexpected-multiline.md
similarity index 100%
rename from docs/rules/no-unexpected-multiline.md
rename to docs/src/rules/no-unexpected-multiline.md
diff --git a/docs/rules/no-unmodified-loop-condition.md b/docs/src/rules/no-unmodified-loop-condition.md
similarity index 100%
rename from docs/rules/no-unmodified-loop-condition.md
rename to docs/src/rules/no-unmodified-loop-condition.md
diff --git a/docs/rules/no-unneeded-ternary.md b/docs/src/rules/no-unneeded-ternary.md
similarity index 100%
rename from docs/rules/no-unneeded-ternary.md
rename to docs/src/rules/no-unneeded-ternary.md
diff --git a/docs/rules/no-unreachable-loop.md b/docs/src/rules/no-unreachable-loop.md
similarity index 100%
rename from docs/rules/no-unreachable-loop.md
rename to docs/src/rules/no-unreachable-loop.md
diff --git a/docs/rules/no-unreachable.md b/docs/src/rules/no-unreachable.md
similarity index 100%
rename from docs/rules/no-unreachable.md
rename to docs/src/rules/no-unreachable.md
diff --git a/docs/rules/no-unsafe-finally.md b/docs/src/rules/no-unsafe-finally.md
similarity index 100%
rename from docs/rules/no-unsafe-finally.md
rename to docs/src/rules/no-unsafe-finally.md
diff --git a/docs/rules/no-unsafe-negation.md b/docs/src/rules/no-unsafe-negation.md
similarity index 100%
rename from docs/rules/no-unsafe-negation.md
rename to docs/src/rules/no-unsafe-negation.md
diff --git a/docs/rules/no-unsafe-optional-chaining.md b/docs/src/rules/no-unsafe-optional-chaining.md
similarity index 100%
rename from docs/rules/no-unsafe-optional-chaining.md
rename to docs/src/rules/no-unsafe-optional-chaining.md
diff --git a/docs/rules/no-unused-expressions.md b/docs/src/rules/no-unused-expressions.md
similarity index 100%
rename from docs/rules/no-unused-expressions.md
rename to docs/src/rules/no-unused-expressions.md
diff --git a/docs/rules/no-unused-labels.md b/docs/src/rules/no-unused-labels.md
similarity index 100%
rename from docs/rules/no-unused-labels.md
rename to docs/src/rules/no-unused-labels.md
diff --git a/docs/rules/no-unused-private-class-members.md b/docs/src/rules/no-unused-private-class-members.md
similarity index 100%
rename from docs/rules/no-unused-private-class-members.md
rename to docs/src/rules/no-unused-private-class-members.md
diff --git a/docs/rules/no-unused-vars.md b/docs/src/rules/no-unused-vars.md
similarity index 100%
rename from docs/rules/no-unused-vars.md
rename to docs/src/rules/no-unused-vars.md
diff --git a/docs/rules/no-use-before-define.md b/docs/src/rules/no-use-before-define.md
similarity index 100%
rename from docs/rules/no-use-before-define.md
rename to docs/src/rules/no-use-before-define.md
diff --git a/docs/rules/no-useless-backreference.md b/docs/src/rules/no-useless-backreference.md
similarity index 100%
rename from docs/rules/no-useless-backreference.md
rename to docs/src/rules/no-useless-backreference.md
diff --git a/docs/rules/no-useless-call.md b/docs/src/rules/no-useless-call.md
similarity index 100%
rename from docs/rules/no-useless-call.md
rename to docs/src/rules/no-useless-call.md
diff --git a/docs/rules/no-useless-catch.md b/docs/src/rules/no-useless-catch.md
similarity index 100%
rename from docs/rules/no-useless-catch.md
rename to docs/src/rules/no-useless-catch.md
diff --git a/docs/rules/no-useless-computed-key.md b/docs/src/rules/no-useless-computed-key.md
similarity index 100%
rename from docs/rules/no-useless-computed-key.md
rename to docs/src/rules/no-useless-computed-key.md
diff --git a/docs/rules/no-useless-concat.md b/docs/src/rules/no-useless-concat.md
similarity index 100%
rename from docs/rules/no-useless-concat.md
rename to docs/src/rules/no-useless-concat.md
diff --git a/docs/rules/no-useless-constructor.md b/docs/src/rules/no-useless-constructor.md
similarity index 100%
rename from docs/rules/no-useless-constructor.md
rename to docs/src/rules/no-useless-constructor.md
diff --git a/docs/rules/no-useless-escape.md b/docs/src/rules/no-useless-escape.md
similarity index 100%
rename from docs/rules/no-useless-escape.md
rename to docs/src/rules/no-useless-escape.md
diff --git a/docs/rules/no-useless-rename.md b/docs/src/rules/no-useless-rename.md
similarity index 100%
rename from docs/rules/no-useless-rename.md
rename to docs/src/rules/no-useless-rename.md
diff --git a/docs/rules/no-useless-return.md b/docs/src/rules/no-useless-return.md
similarity index 100%
rename from docs/rules/no-useless-return.md
rename to docs/src/rules/no-useless-return.md
diff --git a/docs/rules/no-var.md b/docs/src/rules/no-var.md
similarity index 100%
rename from docs/rules/no-var.md
rename to docs/src/rules/no-var.md
diff --git a/docs/rules/no-void.md b/docs/src/rules/no-void.md
similarity index 100%
rename from docs/rules/no-void.md
rename to docs/src/rules/no-void.md
diff --git a/docs/rules/no-warning-comments.md b/docs/src/rules/no-warning-comments.md
similarity index 100%
rename from docs/rules/no-warning-comments.md
rename to docs/src/rules/no-warning-comments.md
diff --git a/docs/rules/no-whitespace-before-property.md b/docs/src/rules/no-whitespace-before-property.md
similarity index 100%
rename from docs/rules/no-whitespace-before-property.md
rename to docs/src/rules/no-whitespace-before-property.md
diff --git a/docs/rules/no-with.md b/docs/src/rules/no-with.md
similarity index 100%
rename from docs/rules/no-with.md
rename to docs/src/rules/no-with.md
diff --git a/docs/rules/no-wrap-func.md b/docs/src/rules/no-wrap-func.md
similarity index 100%
rename from docs/rules/no-wrap-func.md
rename to docs/src/rules/no-wrap-func.md
diff --git a/docs/rules/nonblock-statement-body-position.md b/docs/src/rules/nonblock-statement-body-position.md
similarity index 100%
rename from docs/rules/nonblock-statement-body-position.md
rename to docs/src/rules/nonblock-statement-body-position.md
diff --git a/docs/rules/object-curly-newline.md b/docs/src/rules/object-curly-newline.md
similarity index 100%
rename from docs/rules/object-curly-newline.md
rename to docs/src/rules/object-curly-newline.md
diff --git a/docs/rules/object-curly-spacing.md b/docs/src/rules/object-curly-spacing.md
similarity index 100%
rename from docs/rules/object-curly-spacing.md
rename to docs/src/rules/object-curly-spacing.md
diff --git a/docs/rules/object-property-newline.md b/docs/src/rules/object-property-newline.md
similarity index 100%
rename from docs/rules/object-property-newline.md
rename to docs/src/rules/object-property-newline.md
diff --git a/docs/rules/object-shorthand.md b/docs/src/rules/object-shorthand.md
similarity index 100%
rename from docs/rules/object-shorthand.md
rename to docs/src/rules/object-shorthand.md
diff --git a/docs/rules/one-var-declaration-per-line.md b/docs/src/rules/one-var-declaration-per-line.md
similarity index 100%
rename from docs/rules/one-var-declaration-per-line.md
rename to docs/src/rules/one-var-declaration-per-line.md
diff --git a/docs/rules/one-var.md b/docs/src/rules/one-var.md
similarity index 100%
rename from docs/rules/one-var.md
rename to docs/src/rules/one-var.md
diff --git a/docs/rules/operator-assignment.md b/docs/src/rules/operator-assignment.md
similarity index 100%
rename from docs/rules/operator-assignment.md
rename to docs/src/rules/operator-assignment.md
diff --git a/docs/rules/operator-linebreak.md b/docs/src/rules/operator-linebreak.md
similarity index 100%
rename from docs/rules/operator-linebreak.md
rename to docs/src/rules/operator-linebreak.md
diff --git a/docs/rules/padded-blocks.md b/docs/src/rules/padded-blocks.md
similarity index 100%
rename from docs/rules/padded-blocks.md
rename to docs/src/rules/padded-blocks.md
diff --git a/docs/rules/padding-line-between-statements.md b/docs/src/rules/padding-line-between-statements.md
similarity index 100%
rename from docs/rules/padding-line-between-statements.md
rename to docs/src/rules/padding-line-between-statements.md
diff --git a/docs/rules/prefer-arrow-callback.md b/docs/src/rules/prefer-arrow-callback.md
similarity index 100%
rename from docs/rules/prefer-arrow-callback.md
rename to docs/src/rules/prefer-arrow-callback.md
diff --git a/docs/rules/prefer-const.md b/docs/src/rules/prefer-const.md
similarity index 100%
rename from docs/rules/prefer-const.md
rename to docs/src/rules/prefer-const.md
diff --git a/docs/rules/prefer-destructuring.md b/docs/src/rules/prefer-destructuring.md
similarity index 100%
rename from docs/rules/prefer-destructuring.md
rename to docs/src/rules/prefer-destructuring.md
diff --git a/docs/rules/prefer-exponentiation-operator.md b/docs/src/rules/prefer-exponentiation-operator.md
similarity index 100%
rename from docs/rules/prefer-exponentiation-operator.md
rename to docs/src/rules/prefer-exponentiation-operator.md
diff --git a/docs/rules/prefer-named-capture-group.md b/docs/src/rules/prefer-named-capture-group.md
similarity index 100%
rename from docs/rules/prefer-named-capture-group.md
rename to docs/src/rules/prefer-named-capture-group.md
diff --git a/docs/rules/prefer-numeric-literals.md b/docs/src/rules/prefer-numeric-literals.md
similarity index 100%
rename from docs/rules/prefer-numeric-literals.md
rename to docs/src/rules/prefer-numeric-literals.md
diff --git a/docs/rules/prefer-object-has-own.md b/docs/src/rules/prefer-object-has-own.md
similarity index 100%
rename from docs/rules/prefer-object-has-own.md
rename to docs/src/rules/prefer-object-has-own.md
diff --git a/docs/rules/prefer-object-spread.md b/docs/src/rules/prefer-object-spread.md
similarity index 100%
rename from docs/rules/prefer-object-spread.md
rename to docs/src/rules/prefer-object-spread.md
diff --git a/docs/rules/prefer-promise-reject-errors.md b/docs/src/rules/prefer-promise-reject-errors.md
similarity index 100%
rename from docs/rules/prefer-promise-reject-errors.md
rename to docs/src/rules/prefer-promise-reject-errors.md
diff --git a/docs/rules/prefer-reflect.md b/docs/src/rules/prefer-reflect.md
similarity index 100%
rename from docs/rules/prefer-reflect.md
rename to docs/src/rules/prefer-reflect.md
diff --git a/docs/rules/prefer-regex-literals.md b/docs/src/rules/prefer-regex-literals.md
similarity index 100%
rename from docs/rules/prefer-regex-literals.md
rename to docs/src/rules/prefer-regex-literals.md
diff --git a/docs/rules/prefer-rest-params.md b/docs/src/rules/prefer-rest-params.md
similarity index 100%
rename from docs/rules/prefer-rest-params.md
rename to docs/src/rules/prefer-rest-params.md
diff --git a/docs/rules/prefer-spread.md b/docs/src/rules/prefer-spread.md
similarity index 100%
rename from docs/rules/prefer-spread.md
rename to docs/src/rules/prefer-spread.md
diff --git a/docs/rules/prefer-template.md b/docs/src/rules/prefer-template.md
similarity index 100%
rename from docs/rules/prefer-template.md
rename to docs/src/rules/prefer-template.md
diff --git a/docs/rules/quote-props.md b/docs/src/rules/quote-props.md
similarity index 100%
rename from docs/rules/quote-props.md
rename to docs/src/rules/quote-props.md
diff --git a/docs/rules/quotes.md b/docs/src/rules/quotes.md
similarity index 100%
rename from docs/rules/quotes.md
rename to docs/src/rules/quotes.md
diff --git a/docs/rules/radix.md b/docs/src/rules/radix.md
similarity index 100%
rename from docs/rules/radix.md
rename to docs/src/rules/radix.md
diff --git a/docs/rules/require-atomic-updates.md b/docs/src/rules/require-atomic-updates.md
similarity index 100%
rename from docs/rules/require-atomic-updates.md
rename to docs/src/rules/require-atomic-updates.md
diff --git a/docs/rules/require-await.md b/docs/src/rules/require-await.md
similarity index 100%
rename from docs/rules/require-await.md
rename to docs/src/rules/require-await.md
diff --git a/docs/rules/require-jsdoc.md b/docs/src/rules/require-jsdoc.md
similarity index 100%
rename from docs/rules/require-jsdoc.md
rename to docs/src/rules/require-jsdoc.md
diff --git a/docs/rules/require-unicode-regexp.md b/docs/src/rules/require-unicode-regexp.md
similarity index 100%
rename from docs/rules/require-unicode-regexp.md
rename to docs/src/rules/require-unicode-regexp.md
diff --git a/docs/rules/require-yield.md b/docs/src/rules/require-yield.md
similarity index 100%
rename from docs/rules/require-yield.md
rename to docs/src/rules/require-yield.md
diff --git a/docs/rules/rest-spread-spacing.md b/docs/src/rules/rest-spread-spacing.md
similarity index 100%
rename from docs/rules/rest-spread-spacing.md
rename to docs/src/rules/rest-spread-spacing.md
diff --git a/docs/rules/semi-spacing.md b/docs/src/rules/semi-spacing.md
similarity index 100%
rename from docs/rules/semi-spacing.md
rename to docs/src/rules/semi-spacing.md
diff --git a/docs/rules/semi-style.md b/docs/src/rules/semi-style.md
similarity index 100%
rename from docs/rules/semi-style.md
rename to docs/src/rules/semi-style.md
diff --git a/docs/rules/semi.md b/docs/src/rules/semi.md
similarity index 100%
rename from docs/rules/semi.md
rename to docs/src/rules/semi.md
diff --git a/docs/rules/sort-imports.md b/docs/src/rules/sort-imports.md
similarity index 100%
rename from docs/rules/sort-imports.md
rename to docs/src/rules/sort-imports.md
diff --git a/docs/rules/sort-keys.md b/docs/src/rules/sort-keys.md
similarity index 100%
rename from docs/rules/sort-keys.md
rename to docs/src/rules/sort-keys.md
diff --git a/docs/rules/sort-vars.md b/docs/src/rules/sort-vars.md
similarity index 100%
rename from docs/rules/sort-vars.md
rename to docs/src/rules/sort-vars.md
diff --git a/docs/rules/space-after-function-name.md b/docs/src/rules/space-after-function-name.md
similarity index 100%
rename from docs/rules/space-after-function-name.md
rename to docs/src/rules/space-after-function-name.md
diff --git a/docs/rules/space-after-keywords.md b/docs/src/rules/space-after-keywords.md
similarity index 100%
rename from docs/rules/space-after-keywords.md
rename to docs/src/rules/space-after-keywords.md
diff --git a/docs/rules/space-before-blocks.md b/docs/src/rules/space-before-blocks.md
similarity index 100%
rename from docs/rules/space-before-blocks.md
rename to docs/src/rules/space-before-blocks.md
diff --git a/docs/rules/space-before-function-paren.md b/docs/src/rules/space-before-function-paren.md
similarity index 100%
rename from docs/rules/space-before-function-paren.md
rename to docs/src/rules/space-before-function-paren.md
diff --git a/docs/rules/space-before-function-parentheses.md b/docs/src/rules/space-before-function-parentheses.md
similarity index 100%
rename from docs/rules/space-before-function-parentheses.md
rename to docs/src/rules/space-before-function-parentheses.md
diff --git a/docs/rules/space-before-keywords.md b/docs/src/rules/space-before-keywords.md
similarity index 100%
rename from docs/rules/space-before-keywords.md
rename to docs/src/rules/space-before-keywords.md
diff --git a/docs/rules/space-in-brackets.md b/docs/src/rules/space-in-brackets.md
similarity index 100%
rename from docs/rules/space-in-brackets.md
rename to docs/src/rules/space-in-brackets.md
diff --git a/docs/rules/space-in-parens.md b/docs/src/rules/space-in-parens.md
similarity index 100%
rename from docs/rules/space-in-parens.md
rename to docs/src/rules/space-in-parens.md
diff --git a/docs/rules/space-infix-ops.md b/docs/src/rules/space-infix-ops.md
similarity index 100%
rename from docs/rules/space-infix-ops.md
rename to docs/src/rules/space-infix-ops.md
diff --git a/docs/rules/space-return-throw-case.md b/docs/src/rules/space-return-throw-case.md
similarity index 100%
rename from docs/rules/space-return-throw-case.md
rename to docs/src/rules/space-return-throw-case.md
diff --git a/docs/rules/space-unary-ops.md b/docs/src/rules/space-unary-ops.md
similarity index 100%
rename from docs/rules/space-unary-ops.md
rename to docs/src/rules/space-unary-ops.md
diff --git a/docs/rules/space-unary-word-ops.md b/docs/src/rules/space-unary-word-ops.md
similarity index 100%
rename from docs/rules/space-unary-word-ops.md
rename to docs/src/rules/space-unary-word-ops.md
diff --git a/docs/rules/spaced-comment.md b/docs/src/rules/spaced-comment.md
similarity index 100%
rename from docs/rules/spaced-comment.md
rename to docs/src/rules/spaced-comment.md
diff --git a/docs/rules/spaced-line-comment.md b/docs/src/rules/spaced-line-comment.md
similarity index 100%
rename from docs/rules/spaced-line-comment.md
rename to docs/src/rules/spaced-line-comment.md
diff --git a/docs/rules/strict.md b/docs/src/rules/strict.md
similarity index 100%
rename from docs/rules/strict.md
rename to docs/src/rules/strict.md
diff --git a/docs/rules/switch-colon-spacing.md b/docs/src/rules/switch-colon-spacing.md
similarity index 100%
rename from docs/rules/switch-colon-spacing.md
rename to docs/src/rules/switch-colon-spacing.md
diff --git a/docs/rules/symbol-description.md b/docs/src/rules/symbol-description.md
similarity index 100%
rename from docs/rules/symbol-description.md
rename to docs/src/rules/symbol-description.md
diff --git a/docs/rules/template-curly-spacing.md b/docs/src/rules/template-curly-spacing.md
similarity index 100%
rename from docs/rules/template-curly-spacing.md
rename to docs/src/rules/template-curly-spacing.md
diff --git a/docs/rules/template-tag-spacing.md b/docs/src/rules/template-tag-spacing.md
similarity index 100%
rename from docs/rules/template-tag-spacing.md
rename to docs/src/rules/template-tag-spacing.md
diff --git a/docs/rules/unicode-bom.md b/docs/src/rules/unicode-bom.md
similarity index 100%
rename from docs/rules/unicode-bom.md
rename to docs/src/rules/unicode-bom.md
diff --git a/docs/rules/use-isnan.md b/docs/src/rules/use-isnan.md
similarity index 100%
rename from docs/rules/use-isnan.md
rename to docs/src/rules/use-isnan.md
diff --git a/docs/rules/valid-jsdoc.md b/docs/src/rules/valid-jsdoc.md
similarity index 100%
rename from docs/rules/valid-jsdoc.md
rename to docs/src/rules/valid-jsdoc.md
diff --git a/docs/rules/valid-typeof.md b/docs/src/rules/valid-typeof.md
similarity index 100%
rename from docs/rules/valid-typeof.md
rename to docs/src/rules/valid-typeof.md
diff --git a/docs/rules/vars-on-top.md b/docs/src/rules/vars-on-top.md
similarity index 100%
rename from docs/rules/vars-on-top.md
rename to docs/src/rules/vars-on-top.md
diff --git a/docs/rules/wrap-iife.md b/docs/src/rules/wrap-iife.md
similarity index 100%
rename from docs/rules/wrap-iife.md
rename to docs/src/rules/wrap-iife.md
diff --git a/docs/rules/wrap-regex.md b/docs/src/rules/wrap-regex.md
similarity index 100%
rename from docs/rules/wrap-regex.md
rename to docs/src/rules/wrap-regex.md
diff --git a/docs/rules/yield-star-spacing.md b/docs/src/rules/yield-star-spacing.md
similarity index 100%
rename from docs/rules/yield-star-spacing.md
rename to docs/src/rules/yield-star-spacing.md
diff --git a/docs/rules/yoda.md b/docs/src/rules/yoda.md
similarity index 100%
rename from docs/rules/yoda.md
rename to docs/src/rules/yoda.md
diff --git a/docs/user-guide/README.md b/docs/src/user-guide/README.md
similarity index 100%
rename from docs/user-guide/README.md
rename to docs/src/user-guide/README.md
diff --git a/docs/user-guide/command-line-interface.md b/docs/src/user-guide/command-line-interface.md
similarity index 100%
rename from docs/user-guide/command-line-interface.md
rename to docs/src/user-guide/command-line-interface.md
diff --git a/docs/user-guide/configuring/README.md b/docs/src/user-guide/configuring/README.md
similarity index 100%
rename from docs/user-guide/configuring/README.md
rename to docs/src/user-guide/configuring/README.md
diff --git a/docs/user-guide/configuring/configuration-files.md b/docs/src/user-guide/configuring/configuration-files.md
similarity index 100%
rename from docs/user-guide/configuring/configuration-files.md
rename to docs/src/user-guide/configuring/configuration-files.md
diff --git a/docs/user-guide/configuring/ignoring-code.md b/docs/src/user-guide/configuring/ignoring-code.md
similarity index 100%
rename from docs/user-guide/configuring/ignoring-code.md
rename to docs/src/user-guide/configuring/ignoring-code.md
diff --git a/docs/user-guide/configuring/language-options.md b/docs/src/user-guide/configuring/language-options.md
similarity index 100%
rename from docs/user-guide/configuring/language-options.md
rename to docs/src/user-guide/configuring/language-options.md
diff --git a/docs/user-guide/configuring/plugins.md b/docs/src/user-guide/configuring/plugins.md
similarity index 100%
rename from docs/user-guide/configuring/plugins.md
rename to docs/src/user-guide/configuring/plugins.md
diff --git a/docs/user-guide/configuring/rules.md b/docs/src/user-guide/configuring/rules.md
similarity index 100%
rename from docs/user-guide/configuring/rules.md
rename to docs/src/user-guide/configuring/rules.md
diff --git a/docs/user-guide/getting-started.md b/docs/src/user-guide/getting-started.md
similarity index 100%
rename from docs/user-guide/getting-started.md
rename to docs/src/user-guide/getting-started.md
diff --git a/docs/user-guide/integrations.md b/docs/src/user-guide/integrations.md
similarity index 100%
rename from docs/user-guide/integrations.md
rename to docs/src/user-guide/integrations.md
diff --git a/docs/user-guide/migrating-from-jscs.md b/docs/src/user-guide/migrating-from-jscs.md
similarity index 100%
rename from docs/user-guide/migrating-from-jscs.md
rename to docs/src/user-guide/migrating-from-jscs.md
diff --git a/docs/user-guide/migrating-to-1.0.0.md b/docs/src/user-guide/migrating-to-1.0.0.md
similarity index 100%
rename from docs/user-guide/migrating-to-1.0.0.md
rename to docs/src/user-guide/migrating-to-1.0.0.md
diff --git a/docs/user-guide/migrating-to-2.0.0.md b/docs/src/user-guide/migrating-to-2.0.0.md
similarity index 100%
rename from docs/user-guide/migrating-to-2.0.0.md
rename to docs/src/user-guide/migrating-to-2.0.0.md
diff --git a/docs/user-guide/migrating-to-3.0.0.md b/docs/src/user-guide/migrating-to-3.0.0.md
similarity index 100%
rename from docs/user-guide/migrating-to-3.0.0.md
rename to docs/src/user-guide/migrating-to-3.0.0.md
diff --git a/docs/user-guide/migrating-to-4.0.0.md b/docs/src/user-guide/migrating-to-4.0.0.md
similarity index 100%
rename from docs/user-guide/migrating-to-4.0.0.md
rename to docs/src/user-guide/migrating-to-4.0.0.md
diff --git a/docs/user-guide/migrating-to-5.0.0.md b/docs/src/user-guide/migrating-to-5.0.0.md
similarity index 100%
rename from docs/user-guide/migrating-to-5.0.0.md
rename to docs/src/user-guide/migrating-to-5.0.0.md
diff --git a/docs/user-guide/migrating-to-6.0.0.md b/docs/src/user-guide/migrating-to-6.0.0.md
similarity index 100%
rename from docs/user-guide/migrating-to-6.0.0.md
rename to docs/src/user-guide/migrating-to-6.0.0.md
diff --git a/docs/user-guide/migrating-to-7.0.0.md b/docs/src/user-guide/migrating-to-7.0.0.md
similarity index 100%
rename from docs/user-guide/migrating-to-7.0.0.md
rename to docs/src/user-guide/migrating-to-7.0.0.md
diff --git a/docs/user-guide/migrating-to-8.0.0.md b/docs/src/user-guide/migrating-to-8.0.0.md
similarity index 100%
rename from docs/user-guide/migrating-to-8.0.0.md
rename to docs/src/user-guide/migrating-to-8.0.0.md
diff --git a/docs/user-guide/rule-deprecation.md b/docs/src/user-guide/rule-deprecation.md
similarity index 100%
rename from docs/user-guide/rule-deprecation.md
rename to docs/src/user-guide/rule-deprecation.md
diff --git a/lib/rules/no-eval.js b/lib/rules/no-eval.js
index dab04dd77..7af8dfac7 100644
--- a/lib/rules/no-eval.js
+++ b/lib/rules/no-eval.js
@@ -72,15 +72,18 @@ 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 = {
@@ -97,7 +100,7 @@ module.exports = {
          * Pops a variable scope from the stack.
          * @returns {void}
          */
-        function exitVarScope() {
+        function exitThisScope() {
             funcInfo = funcInfo.upper;
         }
 
@@ -239,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")) {
diff --git a/lib/rules/operator-assignment.js b/lib/rules/operator-assignment.js
index d20081163..50cdff9f9 100644
--- a/lib/rules/operator-assignment.js
+++ b/lib/rules/operator-assignment.js
@@ -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 }
                     });
                 }
             }


Test patch:
diff --git a/tests/lib/rules/no-eval.js b/tests/lib/rules/no-eval.js
index fdd961f65..840bcb20f 100644
--- a/tests/lib/rules/no-eval.js
+++ b/tests/lib/rules/no-eval.js
@@ -48,6 +48,9 @@ ruleTester.run("no-eval", rule, {
         { 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 } },
@@ -95,6 +98,10 @@ ruleTester.run("no-eval", rule, {
         { 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 }] },
diff --git a/tests/lib/rules/operator-assignment.js b/tests/lib/rules/operator-assignment.js
index 8f814840e..50229af49 100644
--- a/tests/lib/rules/operator-assignment.js
+++ b/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: "+=" } }]
     }
 
     ]