From a8b63d8dee8bf76715550c4b99ac785f2e961a86 Mon Sep 17 00:00:00 2001 From: DmitryAnansky Date: Tue, 7 Apr 2026 19:20:16 +0300 Subject: [PATCH 1/9] docs: describe type hints and migration from cursor context --- docs/vscode/type-hints-migration.md | 45 ++++++++++++++++++ docs/vscode/type-hints.md | 23 +++++++++ ...penapi-vscode-cursor-context-migration.png | Bin 0 -> 60507 bytes .../vscode/openapi-vscode-type-hints.png | Bin 0 -> 15719 bytes 4 files changed, 68 insertions(+) create mode 100644 docs/vscode/type-hints-migration.md create mode 100644 docs/vscode/type-hints.md create mode 100644 static/images/vscode/openapi-vscode-cursor-context-migration.png create mode 100644 static/images/vscode/openapi-vscode-type-hints.png diff --git a/docs/vscode/type-hints-migration.md b/docs/vscode/type-hints-migration.md new file mode 100644 index 00000000..caa5e750 --- /dev/null +++ b/docs/vscode/type-hints-migration.md @@ -0,0 +1,45 @@ +# Migrating from Cursor context to Type hints + +The Redocly OpenAPI VS Code extension now includes [Type hints](./type-hints.md), a lightweight alternative to [Cursor context](./cursor-context.md) for identifying node types. + +Type hints let you find the `subject` and `property` values you need for [configurable rules](https://redocly.com/docs/cli/rules/configurable-rules#configurable-rules) by simply hovering over any node in your API description (OpenAPI, AsyncAPI, Arazzo, and others). + +## Example: enforcing snake_case operation IDs + +Suppose you need to change all operation IDs to use snake_case instead of camelCase. To avoid missing any operation, let's create a configurable linting rule that checks every operation ID in the OpenAPI document. + +When writing your rule, you need to target a specific [node](https://redocly.com/learn/openapi/openapi-visual-reference/openapi-node-types) with the `subject` and `property` to which the rule applies. Below are two ways to find those values. + +### Using [Cursor context](./cursor-context.md) + +1. Place your cursor on `operationId`. +2. Open the Cursor context panel. +3. Find `subject` and `property` in the panel. + +![cursor-context-panel](../../static/images/vscode/openapi-vscode-cursor-context-migration.png) + +### Using [Type hints](./type-hints.md) + +1. Hover over `operationId`. +2. Read `subject` and `property` directly from the tooltip. + +![type-hints-tooltip](../../static/images/vscode/openapi-vscode-type-hints.png) + +### Rule configuration + +```yaml +extends: + - recommended +rules: + struct: error + rule/id-casing: + subject: + type: Operation + property: operationId + assertions: + casing: snake_case +``` + +## Summary + +Type hints provide a lighter and faster way to identify the node you need to target in your rule -- just hover instead of opening a separate panel. diff --git a/docs/vscode/type-hints.md b/docs/vscode/type-hints.md new file mode 100644 index 00000000..4811f169 --- /dev/null +++ b/docs/vscode/type-hints.md @@ -0,0 +1,23 @@ +# Type hints + +Type hints is an easy-to-use hover feature that helps you identify the correct [node types](https://redocly.com/learn/openapi/openapi-visual-reference/openapi-node-types) used in [configurable rules](https://redocly.com/docs/cli/rules/configurable-rules#subject-object) and [custom plugins](https://redocly.com/docs/cli/custom-plugins) for writing rules or decorators. + +When you hover over a node in your API description, a tooltip displays the node type, a short description, and a link to the corresponding documentation section. + +## Type hints example + +![type-hints](../../static/images/vscode/openapi-vscode-type-hints.png) + + +## Type hints structure + +```md +type [subject.type] › property [subject.property] + +[Documentation link when available] + +paths › [node tree path] + +[description] +``` + diff --git a/static/images/vscode/openapi-vscode-cursor-context-migration.png b/static/images/vscode/openapi-vscode-cursor-context-migration.png new file mode 100644 index 0000000000000000000000000000000000000000..ab0c54cb5aa4cbc448c56d230f8b4e02bbb0dc6c GIT binary patch literal 60507 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 literal 0 HcmV?d00001 diff --git a/static/images/vscode/openapi-vscode-type-hints.png b/static/images/vscode/openapi-vscode-type-hints.png new file mode 100644 index 0000000000000000000000000000000000000000..e6ef553fa47d9d80fee4201b35e4706bf5c7f057 GIT binary patch literal 15719 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 literal 0 HcmV?d00001 From ef5cff721d4ca85afc46c4ed7092b6c071c365e5 Mon Sep 17 00:00:00 2001 From: DmitryAnansky Date: Tue, 7 Apr 2026 19:25:04 +0300 Subject: [PATCH 2/9] chore: update sidebar --- docs-vs-code.sidebars.yaml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs-vs-code.sidebars.yaml b/docs-vs-code.sidebars.yaml index 17052147..97666ce8 100644 --- a/docs-vs-code.sidebars.yaml +++ b/docs-vs-code.sidebars.yaml @@ -12,5 +12,9 @@ items: - label: Cursor context page: docs/vscode/cursor-context.md + - label: Type hints + page: docs/vscode/type-hints.md + - label: Migration from Cursor context + page: docs/vscode/type-hints-migration.md - label: Live documentation preview - page: docs/vscode/live-preview.md + page: docs/vscode/live-preview.md \ No newline at end of file From 41e6e13cbcdc1e50527385f54c30c0dfe7b5f443 Mon Sep 17 00:00:00 2001 From: DmitryAnansky Date: Tue, 7 Apr 2026 22:35:04 +0300 Subject: [PATCH 3/9] chore: changes after review --- docs-vs-code.sidebars.yaml | 8 ++++---- docs/vscode/type-hints-migration.md | 2 +- docs/vscode/type-hints.md | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs-vs-code.sidebars.yaml b/docs-vs-code.sidebars.yaml index 97666ce8..fb8a0234 100644 --- a/docs-vs-code.sidebars.yaml +++ b/docs-vs-code.sidebars.yaml @@ -12,9 +12,9 @@ items: - label: Cursor context page: docs/vscode/cursor-context.md - - label: Type hints - page: docs/vscode/type-hints.md + - label: Live documentation preview + page: docs/vscode/live-preview.md - label: Migration from Cursor context page: docs/vscode/type-hints-migration.md - - label: Live documentation preview - page: docs/vscode/live-preview.md \ No newline at end of file + - label: Type hints + page: docs/vscode/type-hints.md \ No newline at end of file diff --git a/docs/vscode/type-hints-migration.md b/docs/vscode/type-hints-migration.md index caa5e750..288182b0 100644 --- a/docs/vscode/type-hints-migration.md +++ b/docs/vscode/type-hints-migration.md @@ -42,4 +42,4 @@ rules: ## Summary -Type hints provide a lighter and faster way to identify the node you need to target in your rule -- just hover instead of opening a separate panel. +Type hints provide a lighter and faster way to identify the node you need to target in your rule - just hover instead of opening a separate panel. diff --git a/docs/vscode/type-hints.md b/docs/vscode/type-hints.md index 4811f169..1de49feb 100644 --- a/docs/vscode/type-hints.md +++ b/docs/vscode/type-hints.md @@ -1,6 +1,6 @@ # Type hints -Type hints is an easy-to-use hover feature that helps you identify the correct [node types](https://redocly.com/learn/openapi/openapi-visual-reference/openapi-node-types) used in [configurable rules](https://redocly.com/docs/cli/rules/configurable-rules#subject-object) and [custom plugins](https://redocly.com/docs/cli/custom-plugins) for writing rules or decorators. +Type hints is an easy-to-use hover feature that helps you identify the correct [node types](https://redocly.com/learn/openapi/openapi-visual-reference/openapi-node-types) used in [configurable rules](https://redocly.com/docs/cli/rules/configurable-rules#configurable-rules) and [custom plugins](https://redocly.com/docs/cli/custom-plugins) for writing rules or decorators. When you hover over a node in your API description, a tooltip displays the node type, a short description, and a link to the corresponding documentation section. From 4f8150eed85110892cfe2af9870460244a27927c Mon Sep 17 00:00:00 2001 From: DmitryAnansky Date: Tue, 7 Apr 2026 23:03:24 +0300 Subject: [PATCH 4/9] chore: change links --- docs/vscode/type-hints-migration.md | 4 ++-- docs/vscode/type-hints.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/vscode/type-hints-migration.md b/docs/vscode/type-hints-migration.md index 288182b0..a7b0327e 100644 --- a/docs/vscode/type-hints-migration.md +++ b/docs/vscode/type-hints-migration.md @@ -2,13 +2,13 @@ The Redocly OpenAPI VS Code extension now includes [Type hints](./type-hints.md), a lightweight alternative to [Cursor context](./cursor-context.md) for identifying node types. -Type hints let you find the `subject` and `property` values you need for [configurable rules](https://redocly.com/docs/cli/rules/configurable-rules#configurable-rules) by simply hovering over any node in your API description (OpenAPI, AsyncAPI, Arazzo, and others). +Type hints let you find the `subject` and `property` values you need for [configurable rules](../cli/rules/configurable-rules#configurable-rules) by simply hovering over any node in your API description (OpenAPI, AsyncAPI, Arazzo, and others). ## Example: enforcing snake_case operation IDs Suppose you need to change all operation IDs to use snake_case instead of camelCase. To avoid missing any operation, let's create a configurable linting rule that checks every operation ID in the OpenAPI document. -When writing your rule, you need to target a specific [node](https://redocly.com/learn/openapi/openapi-visual-reference/openapi-node-types) with the `subject` and `property` to which the rule applies. Below are two ways to find those values. +When writing your rule, you need to target a specific [node](../../learn/openapi/openapi-visual-reference/openapi-node-types) with the `subject` and `property` to which the rule applies. Below are two ways to find those values. ### Using [Cursor context](./cursor-context.md) diff --git a/docs/vscode/type-hints.md b/docs/vscode/type-hints.md index 1de49feb..7f2a0beb 100644 --- a/docs/vscode/type-hints.md +++ b/docs/vscode/type-hints.md @@ -1,6 +1,6 @@ # Type hints -Type hints is an easy-to-use hover feature that helps you identify the correct [node types](https://redocly.com/learn/openapi/openapi-visual-reference/openapi-node-types) used in [configurable rules](https://redocly.com/docs/cli/rules/configurable-rules#configurable-rules) and [custom plugins](https://redocly.com/docs/cli/custom-plugins) for writing rules or decorators. +Type hints is an easy-to-use hover feature that helps you identify the correct [node types](../../learn/openapi/openapi-visual-reference/openapi-node-types) used in [configurable rules](../cli/rules/configurable-rules#configurable-rules) and [custom plugins](../cli/custom-plugins#custom-plugins) for writing rules or decorators. When you hover over a node in your API description, a tooltip displays the node type, a short description, and a link to the corresponding documentation section. From d696d8102844a5b198c76e99338ebe559bca8410 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacek=20=C5=81=C4=99kawa?= <164185257+JLekawa@users.noreply.github.com> Date: Wed, 8 Apr 2026 11:48:44 +0200 Subject: [PATCH 5/9] Apply suggestions from code review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Jacek Łękawa <164185257+JLekawa@users.noreply.github.com> --- docs/vscode/type-hints-migration.md | 20 +++++++++++--------- docs/vscode/type-hints.md | 2 +- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/docs/vscode/type-hints-migration.md b/docs/vscode/type-hints-migration.md index a7b0327e..211c5752 100644 --- a/docs/vscode/type-hints-migration.md +++ b/docs/vscode/type-hints-migration.md @@ -1,16 +1,19 @@ # Migrating from Cursor context to Type hints The Redocly OpenAPI VS Code extension now includes [Type hints](./type-hints.md), a lightweight alternative to [Cursor context](./cursor-context.md) for identifying node types. - -Type hints let you find the `subject` and `property` values you need for [configurable rules](../cli/rules/configurable-rules#configurable-rules) by simply hovering over any node in your API description (OpenAPI, AsyncAPI, Arazzo, and others). +With type hints you can find the `subject` and `property` values you need for [configurable rules](../cli/rules/configurable-rules#configurable-rules) by hovering over any node in your API description (OpenAPI, AsyncAPI, Arazzo, and others). ## Example: enforcing snake_case operation IDs -Suppose you need to change all operation IDs to use snake_case instead of camelCase. To avoid missing any operation, let's create a configurable linting rule that checks every operation ID in the OpenAPI document. +Suppose you need to change all operation IDs to use snake_case instead of camelCase. +To avoid missing any operation, let's create a configurable linting rule that checks every operation ID in the OpenAPI document. + +When writing your rule, you need to target a specific [node](../../learn/openapi/openapi-visual-reference/openapi-node-types) with the `subject` and `property` to which the rule applies. +To find these values, you can either use Cursor context or type hints. -When writing your rule, you need to target a specific [node](../../learn/openapi/openapi-visual-reference/openapi-node-types) with the `subject` and `property` to which the rule applies. Below are two ways to find those values. +### Use Cursor context -### Using [Cursor context](./cursor-context.md) +To use [Cursor context](./cursor-context.md) to find the values of `subject` and `property`: 1. Place your cursor on `operationId`. 2. Open the Cursor context panel. @@ -18,7 +21,9 @@ When writing your rule, you need to target a specific [node](../../learn/openapi ![cursor-context-panel](../../static/images/vscode/openapi-vscode-cursor-context-migration.png) -### Using [Type hints](./type-hints.md) +### Use [Type hints](./type-hints.md) + +To use [type hints](./type-hints.md) to find the values of `subject` and `property`: 1. Hover over `operationId`. 2. Read `subject` and `property` directly from the tooltip. @@ -40,6 +45,3 @@ rules: casing: snake_case ``` -## Summary - -Type hints provide a lighter and faster way to identify the node you need to target in your rule - just hover instead of opening a separate panel. diff --git a/docs/vscode/type-hints.md b/docs/vscode/type-hints.md index 7f2a0beb..25a8a248 100644 --- a/docs/vscode/type-hints.md +++ b/docs/vscode/type-hints.md @@ -1,6 +1,6 @@ # Type hints -Type hints is an easy-to-use hover feature that helps you identify the correct [node types](../../learn/openapi/openapi-visual-reference/openapi-node-types) used in [configurable rules](../cli/rules/configurable-rules#configurable-rules) and [custom plugins](../cli/custom-plugins#custom-plugins) for writing rules or decorators. +Type hints is a hover feature that helps you identify the correct [node types](../../learn/openapi/openapi-visual-reference/openapi-node-types) used in [configurable rules](../cli/rules/configurable-rules#configurable-rules) and [custom plugins](../cli/custom-plugins#custom-plugins) for writing rules or decorators. When you hover over a node in your API description, a tooltip displays the node type, a short description, and a link to the corresponding documentation section. From b3c49e027b67092a24876697dffa0959f3a0bc4a Mon Sep 17 00:00:00 2001 From: JLekawa Date: Wed, 8 Apr 2026 18:04:57 +0200 Subject: [PATCH 6/9] docs(other): update type hints and cli sidebar --- docs-vs-code.sidebars.yaml | 9 +++--- ...ion.md => type-hints-vs-cursor-context.md} | 29 ++++++++++--------- 2 files changed, 20 insertions(+), 18 deletions(-) rename docs/vscode/{type-hints-migration.md => type-hints-vs-cursor-context.md} (78%) diff --git a/docs-vs-code.sidebars.yaml b/docs-vs-code.sidebars.yaml index fb8a0234..93760d5d 100644 --- a/docs-vs-code.sidebars.yaml +++ b/docs-vs-code.sidebars.yaml @@ -10,11 +10,12 @@ - group: Usage page: docs/vscode/using-redocly-vscode.md items: + - label: Type hints + page: docs/vscode/type-hints.md - label: Cursor context page: docs/vscode/cursor-context.md + - label: Type hints vs Cursor context + page: docs/vscode/type-hints-migration.md - label: Live documentation preview page: docs/vscode/live-preview.md - - label: Migration from Cursor context - page: docs/vscode/type-hints-migration.md - - label: Type hints - page: docs/vscode/type-hints.md \ No newline at end of file + diff --git a/docs/vscode/type-hints-migration.md b/docs/vscode/type-hints-vs-cursor-context.md similarity index 78% rename from docs/vscode/type-hints-migration.md rename to docs/vscode/type-hints-vs-cursor-context.md index 211c5752..fb76bbe9 100644 --- a/docs/vscode/type-hints-migration.md +++ b/docs/vscode/type-hints-vs-cursor-context.md @@ -1,4 +1,4 @@ -# Migrating from Cursor context to Type hints +# Type hints Cursor context The Redocly OpenAPI VS Code extension now includes [Type hints](./type-hints.md), a lightweight alternative to [Cursor context](./cursor-context.md) for identifying node types. With type hints you can find the `subject` and `property` values you need for [configurable rules](../cli/rules/configurable-rules#configurable-rules) by hovering over any node in your API description (OpenAPI, AsyncAPI, Arazzo, and others). @@ -9,26 +9,28 @@ Suppose you need to change all operation IDs to use snake_case instead of camelC To avoid missing any operation, let's create a configurable linting rule that checks every operation ID in the OpenAPI document. When writing your rule, you need to target a specific [node](../../learn/openapi/openapi-visual-reference/openapi-node-types) with the `subject` and `property` to which the rule applies. -To find these values, you can either use Cursor context or type hints. +To find these values, you can either use Cursor context or Type hints. -### Use Cursor context +### Use [Type hints](./type-hints.md) -To use [Cursor context](./cursor-context.md) to find the values of `subject` and `property`: +To use [Type hints](./type-hints.md) to find the values of `subject` and `property`: -1. Place your cursor on `operationId`. -2. Open the Cursor context panel. -3. Find `subject` and `property` in the panel. +1. Hover over `operationId`. +1. Read `subject` and `property` directly from the tooltip. -![cursor-context-panel](../../static/images/vscode/openapi-vscode-cursor-context-migration.png) +![type-hints-tooltip](../../static/images/vscode/openapi-vscode-type-hints.png) -### Use [Type hints](./type-hints.md) +This approach requires fewer steps and keeps you inside the immediate context of your work, without affecting your focus. -To use [type hints](./type-hints.md) to find the values of `subject` and `property`: +### Use Cursor context -1. Hover over `operationId`. -2. Read `subject` and `property` directly from the tooltip. +To use [Cursor context](./cursor-context.md) to find the values of `subject` and `property`: -![type-hints-tooltip](../../static/images/vscode/openapi-vscode-type-hints.png) +1. Place your cursor on `operationId`. +1. Open the Cursor context panel. +1. Find `subject` and `property` in the panel. + +![cursor-context-panel](../../static/images/vscode/openapi-vscode-cursor-context-migration.png) ### Rule configuration @@ -44,4 +46,3 @@ rules: assertions: casing: snake_case ``` - From a3a9fe08b37b1e6a5530fec47dbb79685b67d014 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacek=20=C5=81=C4=99kawa?= <164185257+JLekawa@users.noreply.github.com> Date: Wed, 8 Apr 2026 18:28:12 +0200 Subject: [PATCH 7/9] Apply suggestion from @JLekawa --- docs-vs-code.sidebars.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs-vs-code.sidebars.yaml b/docs-vs-code.sidebars.yaml index 93760d5d..530b2155 100644 --- a/docs-vs-code.sidebars.yaml +++ b/docs-vs-code.sidebars.yaml @@ -15,7 +15,7 @@ - label: Cursor context page: docs/vscode/cursor-context.md - label: Type hints vs Cursor context - page: docs/vscode/type-hints-migration.md + page: docs/vscode/type-hints-vs-cursor-context.md - label: Live documentation preview page: docs/vscode/live-preview.md From f53e33caaa95771dc94f1a1fe5c7d8a6c4c36eb4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacek=20=C5=81=C4=99kawa?= <164185257+JLekawa@users.noreply.github.com> Date: Wed, 8 Apr 2026 18:32:12 +0200 Subject: [PATCH 8/9] Apply suggestion from @JLekawa --- docs/vscode/type-hints-vs-cursor-context.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/vscode/type-hints-vs-cursor-context.md b/docs/vscode/type-hints-vs-cursor-context.md index fb76bbe9..6813c439 100644 --- a/docs/vscode/type-hints-vs-cursor-context.md +++ b/docs/vscode/type-hints-vs-cursor-context.md @@ -1,4 +1,4 @@ -# Type hints Cursor context +# Type hints vs Cursor context The Redocly OpenAPI VS Code extension now includes [Type hints](./type-hints.md), a lightweight alternative to [Cursor context](./cursor-context.md) for identifying node types. With type hints you can find the `subject` and `property` values you need for [configurable rules](../cli/rules/configurable-rules#configurable-rules) by hovering over any node in your API description (OpenAPI, AsyncAPI, Arazzo, and others). From 564785cbeb7dd3bf8a116b1d053ac2e3b41b2677 Mon Sep 17 00:00:00 2001 From: DmitryAnansky Date: Wed, 8 Apr 2026 21:25:04 +0300 Subject: [PATCH 9/9] chore: remove extra spaces --- docs/vscode/type-hints.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/vscode/type-hints.md b/docs/vscode/type-hints.md index 25a8a248..6b0d76c0 100644 --- a/docs/vscode/type-hints.md +++ b/docs/vscode/type-hints.md @@ -8,7 +8,6 @@ When you hover over a node in your API description, a tooltip displays the node ![type-hints](../../static/images/vscode/openapi-vscode-type-hints.png) - ## Type hints structure ```md @@ -20,4 +19,3 @@ paths › [node tree path] [description] ``` -