Repository: eslint-stylistic/eslint-stylistic
Pull request #862 (2025-07-03 14:30:11)

feat(object-curly-spacing): support `ImportAttribute`
<!-- DO NOT IGNORE THE TEMPLATE!

Thank you for contributing!

Before submitting the PR, please make sure you do the following:

- Read the [Contributing Guide](https://eslint.style/contribute/guide).
- Check that there isn't already a PR that solves the problem the same way to avoid creating a duplicate.
- Provide a description in this PR that addresses **what** the PR is solving, or reference the issue that it solves (e.g. `fixes #123`).
- Ideally, include relevant tests that fail without this PR but pass with it.

-->

### Description

<!-- Please insert your description here and provide especially info about the "what" this PR is solving -->

### Linked Issues

### Additional context

<!-- e.g. is there anything you'd like reviewers to focus on? -->


codecov[bot]: ## [Bundle](https://app.codecov.io/gh/eslint-stylistic/eslint-stylistic/pull/862?dropdown=bundle) Report

Changes will increase total bundle size by 277 bytes (0.04%) :arrow_up:. This is within the [configured](https://docs.codecov.com/docs/javascript-bundle-analysis#main-features) threshold :white_check_mark:

<details><summary>Detailed changes</summary>

| Bundle name | Size | Change |
| ----------- | ---- | ------ |
| @stylistic/eslint-plugin-esm | 771.43kB | 277 bytes (0.04%) :arrow_up: |

</details>

### Affected Assets, Files, and Routes:

<details>
<summary>view changes for bundle: @stylistic/eslint-plugin-esm</summary>

#### **Assets Changed:**
| Asset Name | Size Change | Total Size | Change (%) |
| ---------- | ----------- | ---------- | ---------- |
| ```rules/object-curly-spacing.js``` | 277 bytes | 9.19kB | 3.11%  |


**Files in** **```rules/object-curly-spacing.js```**:

- ```./rules/object-curly-spacing/object-curly-spacing.ts``` → Total Size: **9.03kB**





</details>

codecov[bot]: ## [Codecov](https://app.codecov.io/gh/eslint-stylistic/eslint-stylistic/pull/862?dropdown=coverage&src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=eslint-stylistic) Report
All modified and coverable lines are covered by tests :white_check_mark:
> Project coverage is 99.68%. Comparing base [(`ddd14c8`)](https://app.codecov.io/gh/eslint-stylistic/eslint-stylistic/commit/ddd14c83cf77344a1775df745b1abca01543f5d6?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=eslint-stylistic) to head [(`449cf3d`)](https://app.codecov.io/gh/eslint-stylistic/eslint-stylistic/commit/449cf3d74407cb4208ae6515882e16811078f6bc?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=eslint-stylistic).

<details><summary>Additional details and impacted files</summary>


```diff
@@           Coverage Diff           @@
##             main     #862   +/-   ##
=======================================
  Coverage   99.68%   99.68%           
=======================================
  Files          95       95           
  Lines       18090    18102   +12     
  Branches     4675     4680    +5     
=======================================
+ Hits        18033    18045   +12     
  Misses         57       57           
```

</details>

[:umbrella: View full report in Codecov by Sentry](https://app.codecov.io/gh/eslint-stylistic/eslint-stylistic/pull/862?dropdown=coverage&src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=eslint-stylistic).   
:loudspeaker: Have feedback on the report? [Share it here](https://about.codecov.io/codecov-pr-comment-feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=eslint-stylistic).

<details><summary> :rocket: New features to boost your workflow: </summary>

- :snowflake: [Test Analytics](https://docs.codecov.com/docs/test-analytics): Detect flaky tests, report on failures, and find test suite problems.
</details>

Patch:
diff --git a/packages/eslint-plugin/rules/comma-dangle/README.md b/packages/eslint-plugin/rules/comma-dangle/README.md
index 2f66adeb..f2574fcd 100644
--- a/packages/eslint-plugin/rules/comma-dangle/README.md
+++ b/packages/eslint-plugin/rules/comma-dangle/README.md
@@ -20,20 +20,20 @@ Another argument in favor of trailing commas is that it improves the clarity of
 Less clear:
 
 ```diff
- var foo = {
+var foo = {
 -    bar: "baz",
 -    qux: "quux"
 +    bar: "baz"
- };
+};
 ```
 
 More clear:
 
 ```diff
- var foo = {
-     bar: "baz",
--    qux: "quux",
- };
+var foo = {
+    bar: "baz",
+-   qux: "quux",
+};
 ```
 
 ## Rule Details
@@ -55,7 +55,10 @@ This rule has a string option or an object option:
         "exports": "never",
         "functions": "never",
         "importAttributes": "never",
-        "dynamicImports": "never"
+        "dynamicImports": "never",
+        "enums": "never",
+        "generics": "never",
+        "tuples": "never"
     }]
 }
 ```
@@ -78,6 +81,9 @@ The default for each option is `"never"` unless otherwise specified.
 - `importAttributes` is for import attributes. (e.g. `import foo from "foo" with { type: "json", };`)
 - `dynamicImports` is for dynamic import calls. (e.g. `import(a,);`)
   - `dynamicImports` should only be enabled when linting ECMAScript 2025 or higher.
+- `"enums"` is for trailing comma in enum. (e.g. `enum Foo = {Bar,}`)
+- `"generics"` is for trailing comma in generic. (e.g. `function foo<T,>() {}`)
+- `"tuples"` is for trailing comma in tuple. (e.g. `type Foo = [string,]`)
 
 ### never
 
@@ -368,12 +374,6 @@ new foo(a, b,);
 
 :::
 
-## TypeScript Specific Options
-
-- `"enums"` is for trailing comma in enum. (e.g. `enum Foo = {Bar,}`)
-- `"generics"` is for trailing comma in generic. (e.g. `function foo<T,>() {}`)
-- `"tuples"` is for trailing comma in tuple. (e.g. `type Foo = [string,]`)
-
 ## When Not To Use It
 
 You can turn this rule off if you are not concerned with dangling commas.
diff --git a/packages/eslint-plugin/rules/comma-style/README.md b/packages/eslint-plugin/rules/comma-style/README.md
index 396a135c..0a934948 100644
--- a/packages/eslint-plugin/rules/comma-style/README.md
+++ b/packages/eslint-plugin/rules/comma-style/README.md
@@ -69,7 +69,7 @@ This rule also accepts an additional `exceptions` object:
   - `"TSTypeParameterDeclaration": true` ignores comma style in the type parameters of TypeScript type parameter declarations
   - `"TSTypeParameterInstantiation": true` ignores comma style in the type arguments of TypeScript type parameter instantiations
 
-A way to determine the node types as defined by [ESTree](https://github.com/estree/estree) and [@typescript-eslint/parser](https://typescript-eslint.io/packages/parser/) is to use [AST Explorer](https://astexplorer.net/) with the espree parser or @typescript-eslint/parser.
+A way to determine the node types as defined by [ESTree](https://github.com/estree/estree) and [@typescript-eslint/parser](https://typescript-eslint.io/packages/parser/) is to use [AST Explorer](https://ast-explorer.dev/) with the espree parser or @typescript-eslint/parser.
 
 ### last
 
diff --git a/packages/eslint-plugin/rules/eol-last/README.md b/packages/eslint-plugin/rules/eol-last/README.md
index 6d3858c3..e973c551 100644
--- a/packages/eslint-plugin/rules/eol-last/README.md
+++ b/packages/eslint-plugin/rules/eol-last/README.md
@@ -57,4 +57,4 @@ This rule has a string option:
 - `"unix"` (deprecated) is identical to "always"
 - `"windows"` (deprecated) is identical to "always", but will use a CRLF character when autofixing
 
-**Deprecated:** The options `"unix"` and `"windows"` are deprecated. If you need to enforce a specific linebreak style, use this rule in conjunction with `linebreak-style`.
+**Deprecated:** The options `"unix"` and `"windows"` are deprecated. If you need to enforce a specific linebreak style, use this rule in conjunction with [`linebreak-style`](linebreak-style).
diff --git a/packages/eslint-plugin/rules/indent/README.md b/packages/eslint-plugin/rules/indent/README.md
index 3441e3cd..958939b5 100644
--- a/packages/eslint-plugin/rules/indent/README.md
+++ b/packages/eslint-plugin/rules/indent/README.md
@@ -200,7 +200,7 @@ bar();
 
 :::
 
-All AST node types can be found at [ESTree](https://github.com/estree/estree) specification. You can use [AST Explorer](https://astexplorer.net/) with the espree parser to examine AST tree of a code snippet.
+All AST node types can be found at [ESTree](https://github.com/estree/estree) specification. You can use [AST Explorer](https://ast-explorer.dev/) with the espree parser to examine AST tree of a code snippet.
 
 ### SwitchCase
 
diff --git a/packages/eslint-plugin/rules/jsx-curly-newline/README.md b/packages/eslint-plugin/rules/jsx-curly-newline/README.md
index d3f694ee..a9f92db4 100644
--- a/packages/eslint-plugin/rules/jsx-curly-newline/README.md
+++ b/packages/eslint-plugin/rules/jsx-curly-newline/README.md
@@ -129,7 +129,7 @@ Examples of **correct** code for this rule:
 
 :::
 
-## require
+### require
 
 Examples of **incorrect** code for this rule, when configured with `{ multiline: "require", singleline: "require" }`:
 
diff --git a/packages/eslint-plugin/rules/jsx-sort-props/README.md b/packages/eslint-plugin/rules/jsx-sort-props/README.md
index d89fe39c..b6e0e84a 100644
--- a/packages/eslint-plugin/rules/jsx-sort-props/README.md
+++ b/packages/eslint-plugin/rules/jsx-sort-props/README.md
@@ -252,7 +252,7 @@ These will respect the order specified in the array:
 
 Defaults to `"auto"`, meaning, the locale of the current environment.
 
-Any other string provided here may be passed to `String.prototype.localeCompare` - note that an unknown or invalid locale may throw an exception and crash.
+Any other string provided here may be passed to [`String.prototype.localeCompare`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare) - note that an unknown or invalid locale may throw an exception and crash.
 
 ## When Not To Use It
 
diff --git a/packages/eslint-plugin/rules/key-spacing/README.md b/packages/eslint-plugin/rules/key-spacing/README.md
index 81ab47fb..f5709c4a 100644
--- a/packages/eslint-plugin/rules/key-spacing/README.md
+++ b/packages/eslint-plugin/rules/key-spacing/README.md
@@ -28,7 +28,7 @@ This rule has an object option:
   - `"value"`: enforces horizontal alignment of values in object literals.
   - `"colon"` enforces horizontal alignment of both colons and values in object literals.
 - `"align"` with an object value allows for fine-grained spacing when values are being aligned in object literals.
-- `"ignoredNodes"` can be used to disable spacing checking for the AST node. It can be used to resolve conflicts with [`type-annotation-spacing`](../ts/type-annotation-spacing).
+- `"ignoredNodes"` can be used to disable spacing checking for the AST node. It can be used to resolve conflicts with [`type-annotation-spacing`](type-annotation-spacing).
 - `"singleLine"` specifies a spacing style for single-line object literals.
 - `"multiLine"` specifies a spacing style for multi-line object literals.
 
diff --git a/packages/eslint-plugin/rules/lines-around-comment/README.md b/packages/eslint-plugin/rules/lines-around-comment/README.md
index 084e93b3..7b9cabfc 100644
--- a/packages/eslint-plugin/rules/lines-around-comment/README.md
+++ b/packages/eslint-plugin/rules/lines-around-comment/README.md
@@ -31,6 +31,14 @@ This rule has an object option:
 - `"allowArrayEnd": true` allows comments to appear at the end of array literals
 - `"allowClassStart": true` allows comments to appear at the start of classes
 - `"allowClassEnd": true` allows comments to appear at the end of classes
+- `"allowEnumEnd": true` doesn't require a blank line after an enum body block end
+- `"allowEnumStart": true` doesn't require a blank line before an enum body block start
+- `"allowInterfaceEnd": true` doesn't require a blank line before an interface body block end
+- `"allowInterfaceStart": true` doesn't require a blank line after an interface body block start
+- `"allowModuleEnd": true` doesn't require a blank line before a module body block end
+- `"allowModuleStart": true` doesn't require a blank line after a module body block start
+- `"allowTypeEnd": true` doesn't require a blank line before a type literal block end
+- `"allowTypeStart": true` doesn't require a blank line after a type literal block start
 - `"applyDefaultIgnorePatterns"` enables or disables the default comment patterns to be ignored by the rule
 - `"ignorePattern"` custom patterns to be ignored by the rule
 - `"afterHashbangComment": true` requires an empty line after hashbang comments
@@ -750,17 +758,6 @@ var day = "great"
 
 :::
 
-## TypeScript Specific Options
-
-- `allowEnumEnd: true` doesn't require a blank line after an enum body block end
-- `allowEnumStart: true` doesn't require a blank line before an enum body block start
-- `allowInterfaceEnd: true` doesn't require a blank line before an interface body block end
-- `allowInterfaceStart: true` doesn't require a blank line after an interface body block start
-- `allowModuleEnd: true` doesn't require a blank line before a module body block end
-- `allowModuleStart: true` doesn't require a blank line after a module body block start
-- `allowTypeEnd: true` doesn't require a blank line before a type literal block end
-- `allowTypeStart: true` doesn't require a blank line after a type literal block start
-
 ## When Not To Use It
 
 Many people enjoy a terser code style and don't mind comments bumping up against code. If you fall into that category this rule is not for you.
diff --git a/packages/eslint-plugin/rules/lines-between-class-members/README.md b/packages/eslint-plugin/rules/lines-between-class-members/README.md
index 86afc873..b197afd0 100644
--- a/packages/eslint-plugin/rules/lines-between-class-members/README.md
+++ b/packages/eslint-plugin/rules/lines-between-class-members/README.md
@@ -67,7 +67,7 @@ class MyClass {
 
 :::
 
-### Options
+## Options
 
 This rule has two options, first option can be string or object, second option is object.
 
@@ -85,6 +85,8 @@ Second option is an object with a property named `exceptAfterSingleLine`:
 
 - `"exceptAfterSingleLine": false`(default) **do not** skip checking empty lines after single-line class members
 - `"exceptAfterSingleLine": true` skip checking empty lines after single-line class members
+- `"exceptAfterOverload": true` (default) - Skip checking empty lines after overload class members
+- `"exceptAfterOverload": false` - **do not** skip checking empty lines after overload class members
 
 Examples of **incorrect** code for this rule with the string option:
 
@@ -339,17 +341,6 @@ class MyClass {
 
 :::
 
-## TypeScript Specific Options
-
-- Object option:
-
-  - `"exceptAfterOverload": true` (default) - Skip checking empty lines after overload class members
-  - `"exceptAfterOverload": false` - **do not** skip checking empty lines after overload class members
-
-- [See the other options allowed](https://github.com/eslint/eslint/blob/main/docs/src/rules/lines-between-class-members.md#options)
-
-### `exceptAfterOverload: true`
-
 Examples of **correct** code for the `{ "exceptAfterOverload": true }` option:
 
 ::: correct
@@ -370,7 +361,7 @@ class foo {
 
 :::
 
-### `exceptAfterOverload: false`
+### exceptAfterOverload
 
 Examples of **correct** code for the `{ "exceptAfterOverload": false }` option:
 
diff --git a/packages/eslint-plugin/rules/multiline-comment-style/README.md b/packages/eslint-plugin/rules/multiline-comment-style/README.md
index 17da0559..b2a20be9 100644
--- a/packages/eslint-plugin/rules/multiline-comment-style/README.md
+++ b/packages/eslint-plugin/rules/multiline-comment-style/README.md
@@ -11,7 +11,7 @@ Many style guides require a particular style for comments that span multiple lin
 
 This rule aims to enforce a particular style for multiline comments.
 
-### Options
+## Options
 
 This rule has a string option, which can have one of the following values:
 
diff --git a/packages/eslint-plugin/rules/no-multi-spaces/README.md b/packages/eslint-plugin/rules/no-multi-spaces/README.md
index 9173fac1..039f5072 100644
--- a/packages/eslint-plugin/rules/no-multi-spaces/README.md
+++ b/packages/eslint-plugin/rules/no-multi-spaces/README.md
@@ -136,7 +136,7 @@ var x = 5;      /* multiline
 
 To avoid contradictions with other rules that require multiple spaces, this rule has an `exceptions` option to ignore certain nodes.
 
-This option is an object that expects property names to be AST node types as defined by [ESTree](https://github.com/estree/estree). The easiest way to determine the node types for `exceptions` is to use [AST Explorer](https://astexplorer.net/) with the espree parser.
+This option is an object that expects property names to be AST node types as defined by [ESTree](https://github.com/estree/estree). The easiest way to determine the node types for `exceptions` is to use [AST Explorer](https://ast-explorer.dev/) with the espree parser.
 
 The `Property` and `ImportAttribute` node types are ignored by default, because for the [key-spacing](key-spacing) rule some alignment options require multiple spaces in properties of object literals and import attributes.
 
diff --git a/packages/eslint-plugin/rules/no-tabs/README.md b/packages/eslint-plugin/rules/no-tabs/README.md
index f16c1f37..695aa2c3 100644
--- a/packages/eslint-plugin/rules/no-tabs/README.md
+++ b/packages/eslint-plugin/rules/no-tabs/README.md
@@ -49,7 +49,7 @@ var x = 1; // test
 
 :::
 
-### Options
+## Options
 
 This rule has an optional object option with the following properties:
 
diff --git a/packages/eslint-plugin/rules/nonblock-statement-body-position/README.md b/packages/eslint-plugin/rules/nonblock-statement-body-position/README.md
index 74e5e2c6..c72ac953 100644
--- a/packages/eslint-plugin/rules/nonblock-statement-body-position/README.md
+++ b/packages/eslint-plugin/rules/nonblock-statement-body-position/README.md
@@ -36,7 +36,7 @@ This rule aims to enforce a consistent location for single-line statements.
 
 Note that this rule does not enforce the usage of single-line statements in general. If you would like to disallow single-line statements, use the [`curly`](https://eslint.org/docs/latest/rules/curly) rule instead.
 
-### Options
+## Options
 
 This rule accepts a string option:
 
diff --git a/packages/eslint-plugin/rules/object-curly-spacing/object-curly-spacing.ts b/packages/eslint-plugin/rules/object-curly-spacing/object-curly-spacing.ts
index ed0957f8..dbd5251f 100644
--- a/packages/eslint-plugin/rules/object-curly-spacing/object-curly-spacing.ts
+++ b/packages/eslint-plugin/rules/object-curly-spacing/object-curly-spacing.ts
@@ -6,6 +6,7 @@ import {
   isClosingBraceToken,
   isClosingBracketToken,
   isNotCommaToken,
+  isOpeningBraceToken,
   isTokenOnSameLine,
 } from '#utils/ast'
 import { createRule } from '#utils/create-rule'
@@ -254,7 +255,7 @@ export default createRule<RuleOptions, MessageIds>({
 
       const closeToken = sourceCode.getTokenAfter(properties.at(-1)!, isClosingBraceToken)!
 
-      const openingToken = sourceCode.getFirstToken(node)!
+      const openingToken = sourceCode.getTokenBefore(properties[0], isOpeningBraceToken)!
 
       validateBraceSpacing(node, openingToken, closeToken)
     }
@@ -308,9 +309,23 @@ export default createRule<RuleOptions, MessageIds>({
         checkForObjectLike(node, node.properties)
       },
       // import {y} from 'x';
-      ImportDeclaration: checkForImport,
+      ImportDeclaration(node) {
+        checkForImport(node)
+
+        if (node.attributes)
+          checkForObjectLike(node, node.attributes)
+      },
       // export {name} from 'yo';
-      ExportNamedDeclaration: checkForExport,
+      ExportNamedDeclaration(node) {
+        checkForExport(node)
+
+        if (node.attributes)
+          checkForObjectLike(node, node.attributes)
+      },
+      ExportAllDeclaration(node) {
+        if (node.attributes)
+          checkForObjectLike(node, node.attributes)
+      },
       TSMappedType(node) {
         const openingToken = sourceCode.getFirstToken(node)!
         const closeToken = sourceCode.getLastToken(node)!
diff --git a/packages/eslint-plugin/rules/operator-linebreak/README.md b/packages/eslint-plugin/rules/operator-linebreak/README.md
index 90ac3f53..71b37b28 100644
--- a/packages/eslint-plugin/rules/operator-linebreak/README.md
+++ b/packages/eslint-plugin/rules/operator-linebreak/README.md
@@ -36,6 +36,7 @@ String option:
 - `"after"` requires linebreaks to be placed after the operator
 - `"before"` requires linebreaks to be placed before the operator
 - `"none"` disallows linebreaks on either side of the operator
+- `"ignore"` ignores linebreaks on either side of the operator (only in `overrides`)
 
 Object option:
 
diff --git a/packages/eslint-plugin/rules/padding-line-between-statements/README.md b/packages/eslint-plugin/rules/padding-line-between-statements/README.md
index 8c77b86b..4c43c757 100644
--- a/packages/eslint-plugin/rules/padding-line-between-statements/README.md
+++ b/packages/eslint-plugin/rules/padding-line-between-statements/README.md
@@ -93,6 +93,10 @@ You can supply any number of configurations. If a statement pair matches multipl
   - `"var"` is `var` variable declarations, both single-line and multiline.
   - `"while"` is `while` loop statements.
   - `"with"` is `with` statements.
+  - `enum`
+  - `interface`
+  - `type`
+  - `function-overload`
 
 ## Examples
 
@@ -141,7 +145,7 @@ function foo2() {
 
 ---
 
-This configuration would require blank lines after every sequence of variable declarations, like the [newline-after-var](newline-after-var) rule.
+This configuration would require blank lines after every sequence of variable declarations, like the [newline-after-var](https://eslint.org/docs/latest/rules/newline-after-var) rule.
 
 Examples of **incorrect** code for the `[{ blankLine: "always", prev: ["const", "let", "var"], next: "*"}, { blankLine: "any", prev: ["const", "let", "var"], next: ["const", "let", "var"]}]` configuration:
 
@@ -225,7 +229,7 @@ class C {
 
 ---
 
-This configuration would require blank lines after all directive prologues, like the [lines-around-directive](lines-around-directive) rule.
+This configuration would require blank lines after all directive prologues, like the [lines-around-directive](https://eslint.org/docs/latest/rules/lines-around-directive) rule.
 
 Examples of **incorrect** code for the `[{ blankLine: "always", prev: "directive", next: "*" }, { blankLine: "any", prev: "directive", next: "directive" }]` configuration:
 
@@ -320,43 +324,6 @@ switch (foo) {
 
 :::
 
-## TypeScript Specific Options
-
-- `enum`
-- `interface`
-- `type`
-- `function-overload`
-
-For example, to add blank lines before enums, interfaces and type definitions:
-
-```jsonc
-{
-  "@stylistic/padding-line-between-statements": [
-    "error",
-    {
-      "blankLine": "always",
-      "prev": "*",
-      "next": ["enum", "interface", "type"]
-    }
-  ]
-}
-```
-
-To avoid blank lines between function overloads and the function body:
-
-```jsonc
-{
-  "@stylistic/padding-line-between-statements": [
-    "error",
-    {
-      "blankLine": "never",
-      "prev": "function-overload",
-      "next": "function"
-    }
-  ]
-}
-```
-
 ## When Not To Use It
 
 If you don't want to notify warnings about linebreaks, then it's safe to disable this rule.
diff --git a/packages/eslint-plugin/rules/quotes/README.md b/packages/eslint-plugin/rules/quotes/README.md
index 9c6bcffd..e5ec57a2 100644
--- a/packages/eslint-plugin/rules/quotes/README.md
+++ b/packages/eslint-plugin/rules/quotes/README.md
@@ -200,7 +200,7 @@ var single = `single`;
 
 :::
 
-`{ "allowTemplateLiterals": false }` will not disallow the usage of all template literals. If you want to forbid any instance of template literals, use [no-restricted-syntax](no-restricted-syntax) and target the `TemplateLiteral` selector.
+`{ "allowTemplateLiterals": false }` will not disallow the usage of all template literals. If you want to forbid any instance of template literals, use [no-restricted-syntax](https://eslint.org/docs/latest/rules/no-restricted-syntax) and target the `TemplateLiteral` selector.
 
 ## When Not To Use It
 
diff --git a/packages/eslint-plugin/rules/rest-spread-spacing/README.md b/packages/eslint-plugin/rules/rest-spread-spacing/README.md
index 9c4b3e48..7a7781cd 100644
--- a/packages/eslint-plugin/rules/rest-spread-spacing/README.md
+++ b/packages/eslint-plugin/rules/rest-spread-spacing/README.md
@@ -58,7 +58,7 @@ This rule aims to enforce consistent spacing between rest and spread operators a
 }
 ```
 
-Please read the user guide's section on [configuring parser options](../use/configure#specifying-parser-options) to learn more.
+Please read the user guide's section on [configuring parser options](https://eslint.org/docs/latest/use/configure/parser#configure-parser-options) to learn more.
 
 ## Options
 
diff --git a/packages/eslint-plugin/rules/semi-spacing/README.md b/packages/eslint-plugin/rules/semi-spacing/README.md
index 49f74358..146a21f8 100644
--- a/packages/eslint-plugin/rules/semi-spacing/README.md
+++ b/packages/eslint-plugin/rules/semi-spacing/README.md
@@ -29,7 +29,7 @@ This rule doesn't check spacing in the following cases:
 
 - The spacing after the semicolon if it is the first token in the line.
 
-- The spacing before the semicolon if it is after an opening parenthesis (`(` or `{`), or the spacing after the semicolon if it is before a closing parenthesis (`)` or `}`). That spacing is checked by `space-in-parens` or `block-spacing`.
+- The spacing before the semicolon if it is after an opening parenthesis (`(` or `{`), or the spacing after the semicolon if it is before a closing parenthesis (`)` or `}`). That spacing is checked by [`space-in-parens`](space-in-parens) or [`block-spacing`](block-spacing).
 
 - The spacing around the semicolon in a for loop with an empty condition (`for(;;)`).
 
diff --git a/packages/eslint-plugin/rules/semi/README.md b/packages/eslint-plugin/rules/semi/README.md
index d1030834..14a4f8cd 100644
--- a/packages/eslint-plugin/rules/semi/README.md
+++ b/packages/eslint-plugin/rules/semi/README.md
@@ -42,7 +42,7 @@ return;
 }
 ```
 
-Effectively, a semicolon is inserted after the `return` statement, causing the code below it (a labeled literal inside a block) to be unreachable. This rule and the [no-unreachable](no-unreachable) rule will protect your code from such cases.
+Effectively, a semicolon is inserted after the `return` statement, causing the code below it (a labeled literal inside a block) to be unreachable. This rule and the [no-unreachable](https://eslint.org/docs/latest/rules/no-unreachable) rule will protect your code from such cases.
 
 On the other side of the argument are those who say that since semicolons are inserted automatically, they are optional and do not need to be inserted manually. However, the ASI mechanism can also be tricky to people who don't use semicolons. For example, consider this code:
 
diff --git a/packages/eslint-plugin/rules/space-before-blocks/README.md b/packages/eslint-plugin/rules/space-before-blocks/README.md
index b1230a0b..25bcafae 100644
--- a/packages/eslint-plugin/rules/space-before-blocks/README.md
+++ b/packages/eslint-plugin/rules/space-before-blocks/README.md
@@ -20,9 +20,9 @@ Having an inconsistent style distracts the reader from seeing the important part
 
 This rule will enforce consistency of spacing before blocks. It is only applied on blocks that don’t begin on a new line.
 
-- This rule ignores spacing which is between `=>` and a block. The spacing is handled by the `arrow-spacing` rule.
-- This rule ignores spacing which is between a keyword (e.g. `catch`) and a block. The spacing is handled by the `keyword-spacing` rule.
-- This rule ignores spacing which is between `:` of a switch case and a block. The spacing is handled by the `switch-colon-spacing` rule.
+- This rule ignores spacing which is between `=>` and a block. The spacing is handled by the [`arrow-spacing`](arrow-spacing) rule.
+- This rule ignores spacing which is between a keyword (e.g. `catch`) and a block. The spacing is handled by the [`keyword-spacing`](keyword-spacing) rule.
+- This rule ignores spacing which is between `:` of a switch case and a block. The spacing is handled by the [`switch-colon-spacing`](switch-colon-spacing) rule.
 
 ## Options
 
diff --git a/packages/eslint-plugin/rules/space-infix-ops/README.md b/packages/eslint-plugin/rules/space-infix-ops/README.md
index fb0ec808..a3b2a819 100644
--- a/packages/eslint-plugin/rules/space-infix-ops/README.md
+++ b/packages/eslint-plugin/rules/space-infix-ops/README.md
@@ -85,14 +85,6 @@ function foo(a = 0) { }
 
 :::
 
-## TypeScript Specific Options
-
-This rule accepts the same options as the base rule plus the an option to disable type checking:
-
-```json
-"space-infix-ops": ["error", { "int32Hint": false, "ignoreTypes": false }]
-```
-
 ### `ignoreTypes`
 
 Set the `ignoreTypes` option to `true` (default is `false`) to allow write `string|number` without space.
diff --git a/packages/eslint-plugin/rules/switch-colon-spacing/README.md b/packages/eslint-plugin/rules/switch-colon-spacing/README.md
index 16194c00..353bef27 100644
--- a/packages/eslint-plugin/rules/switch-colon-spacing/README.md
+++ b/packages/eslint-plugin/rules/switch-colon-spacing/README.md
@@ -12,6 +12,8 @@ Spacing around colons improves readability of `case`/`default` clauses.
 This rule controls spacing around colons of `case` and `default` clauses in `switch` statements.
 This rule does the check only if the consecutive tokens exist on the same line.
 
+## Options
+
 This rule has 2 options that are boolean value.
 
 ```json


Test patch:
diff --git a/packages/eslint-plugin/rules/object-curly-spacing/object-curly-spacing._ts_.test.ts b/packages/eslint-plugin/rules/object-curly-spacing/object-curly-spacing._ts_.test.ts
index bcc6ad92..8b6704be 100644
--- a/packages/eslint-plugin/rules/object-curly-spacing/object-curly-spacing._ts_.test.ts
+++ b/packages/eslint-plugin/rules/object-curly-spacing/object-curly-spacing._ts_.test.ts
@@ -315,6 +315,17 @@ run<RuleOptions, MessageIds>({
       code: 'enum Foo {ONE, TWO,}',
       options: ['never'],
     },
+    {
+      code: `import pkgJson from 'package.json' with {type: 'json'}`,
+    },
+    {
+      code: `export { name } from 'package.json' with { type: 'json' }`,
+      options: ['always'],
+    },
+    {
+      code: `export * from 'package.json' with {type: 'json'}`,
+      options: ['never'],
+    },
   ],
 
   invalid: [
@@ -467,5 +478,31 @@ run<RuleOptions, MessageIds>({
         { messageId: 'requireSpaceBefore' },
       ],
     },
+    {
+      code: `import pkgJson from 'package.json' with { type: 'json' }`,
+      output: `import pkgJson from 'package.json' with {type: 'json'}`,
+      errors: [
+        { messageId: 'unexpectedSpaceAfter' },
+        { messageId: 'unexpectedSpaceBefore' },
+      ],
+    },
+    {
+      code: `export { name } from 'package.json' with {type: 'json'}`,
+      output: `export { name } from 'package.json' with { type: 'json' }`,
+      options: ['always'],
+      errors: [
+        { messageId: 'requireSpaceAfter' },
+        { messageId: 'requireSpaceBefore' },
+      ],
+    },
+    {
+      code: `export * from 'package.json' with { type: 'json' }`,
+      output: `export * from 'package.json' with {type: 'json'}`,
+      options: ['never'],
+      errors: [
+        { messageId: 'unexpectedSpaceAfter' },
+        { messageId: 'unexpectedSpaceBefore' },
+      ],
+    },
   ],
 })