Files
supabase/apps/studio/components/interfaces/Linter/Linter.constants.ts
Ali Waseem 6f88585a7e feat(studio): add keyboard shortcuts for Advisors (#46238)
## Summary

Adds discoverable keyboard shortcuts for the Advisors area, covering
both navigation between advisor sub-pages and in-page actions on the
Security/Performance Advisor pages. Built on the shared shortcut
registry (`apps/studio/state/shortcuts/`) so they show up in the command
menu and follow the existing chord conventions (`V` for adVisor,
mirroring auth-nav / database-nav).

Linear: [FE-3413](https://linear.app/supabase/issue/FE-3413)

### Shortcuts

| Shortcut | Action | Scope |
| --- | --- | --- |
| `V` then `S` | Go to Security Advisor | Anywhere under
`/project/<ref>/advisors/*` |
| `V` then `P` | Go to Performance Advisor | Anywhere under
`/project/<ref>/advisors/*` |
| `V` then `R` | Go to Advisor Settings (Rules) | Anywhere under
`/project/<ref>/advisors/*` |
| `1` | Switch to Errors tab | Security / Performance Advisor page |
| `2` | Switch to Warnings tab | Security / Performance Advisor page |
| `3` | Switch to Info tab | Security / Performance Advisor page |
| `Shift+R` | Refresh / rerun the advisor | Security / Performance
Advisor page |
| `Escape` | Close lint details panel | When a lint row is selected |

## Test plan

- [x] From anywhere in Advisors, `V S` / `V P` / `V R` route to Security
/ Performance / Rules
- [x] On Security and Performance Advisor pages, `1` / `2` / `3` switch
tabs and update the `preset` query param
- [x] `Shift+R` reruns the linter (disabled while a refresh is
in-flight)
- [x] `Escape` closes the lint details side panel when a lint is
selected
- [x] Digit shortcuts do not fire while typing in inputs (`ignoreInputs:
true`)
- [x] Shortcuts appear in the command menu under the Advisors group

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Added keyboard shortcuts for Advisors (tab navigation, refresh/rerun,
close detail) with visible shortcut hints on tabs, refresh/rerun
buttons, close controls, and the Advisors menu; pages wire shortcuts to
tab switching, refresh, and close actions.

* **Chores**
* Registered Advisors shortcuts globally and added an Advisors
navigation group for discovery in the shortcuts reference.

<!-- review_stack_entry_start -->

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/supabase/supabase/pull/46238?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack)

<!-- review_stack_entry_end -->
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Danny White <3104761+dnywh@users.noreply.github.com>
2026-05-22 14:46:59 +00:00

51 lines
1.4 KiB
TypeScript

import { ReactNode } from 'react'
import { Lint } from '@/data/lint/lint-query'
import { SHORTCUT_IDS, type ShortcutId } from '@/state/shortcuts/registry'
export enum LINTER_LEVELS {
ERROR = 'ERROR',
WARN = 'WARN',
INFO = 'INFO',
}
export type LintInfo = {
name: string
title: string
icon: ReactNode
link: (args: { projectRef: string; metadata: Lint['metadata'] }) => string
linkText: string
docsLink: string
category: 'security' | 'performance'
}
export const LINT_TABS: ReadonlyArray<{
id: LINTER_LEVELS
label: string
description: string
descriptionShort: string
shortcutId: ShortcutId
}> = [
{
id: LINTER_LEVELS.ERROR,
label: 'Errors',
description: 'You should consider these issues urgent and fix them as soon as you can.',
descriptionShort: 'Require immediate attention',
shortcutId: SHORTCUT_IDS.ADVISORS_TAB_ERRORS,
},
{
id: LINTER_LEVELS.WARN,
label: 'Warnings',
description: 'You should try and read through these issues and fix them if necessary.',
descriptionShort: 'To resolve only if necessary',
shortcutId: SHORTCUT_IDS.ADVISORS_TAB_WARNINGS,
},
{
id: LINTER_LEVELS.INFO,
label: 'Info',
description: 'You should read through these suggestions and consider implementing them.',
descriptionShort: 'For consideration to implement',
shortcutId: SHORTCUT_IDS.ADVISORS_TAB_INFO,
},
]