✨ feat(vscode): 代码阅读的 React 钩子统一成一张钩子卡片,照签名排参数和返回,自定义钩子有自己的卡片

This commit is contained in:
cruldra committed 2026-10-16 20:18:21 +11:00
1 parent 78d0c9dada
commit e7059bcc73
17 files changed
+1409 -589

No files matched your search

+17 -2
View File
@@ -1043,7 +1043,8 @@ export interface ThemeColor { dark: string, light: string }
* 种类图标:插件自己定义的一组 lucide 图标(https://lucide.dev/icons 上的 kebab-case 名字)。前 26 个给内置种类(几种共用一个:
* 命令、管道、执行共用 square-terminal,解释器、解析指令共用 terminal,选项、设置、编译属性共用 sliders-horizontal,字段、标签共用 tag),
* 宿主标的入口块也用这组里的 play(entries/entryMarks.ts 的 ENTRY_CONCEPT),
* 后面的给库规则的种类(React 的组件、状态、引用、数据源、派生值、副作用、事件处理函数、渲染输出也在里面);库规则的种类(KindBadge.icon)只能从这组里挑,要新图标就加进这组(webview 的 kindIcons.tsx 同时给它配上图标),
* 后面的给库规则的种类和规则另认的概念(React 的组件、钩子、钩子的七种作用、事件处理函数、渲染输出也在里面);库规则的种类(KindBadge.icon)、概念(BlockConcept.icon)只能从这组里挑,
* 要新图标就加进这组(webview 的 kindIcons.tsx 同时给它配上图标),
* 没有按任意名字找图标的路。
*/
export const KIND_ICON_NAMES = [
@@ -1084,9 +1085,11 @@ export const KIND_ICON_NAMES = [
'mouse-pointer-click',
'toggle-right',
'anchor',
'download',
'sigma',
'layout-template',
'fishing-hook',
'share-2',
'hourglass',
] as const
export type KindIconName = (typeof KIND_ICON_NAMES)[number]
@@ -1179,6 +1182,18 @@ export interface RuleCard {
* 不改筛选的种类,也不改卡片边框色(仍是 badge)。
*/
concepts?: BlockConcept[]
/**
* 填 `false` 时卡片左边不带语言认的概念(常量、语句这些种类的图标),从这个种类([RuleCard.badge])画起:
* React 钩子卡片左边第一个是钩子图标,不是它所在那句常量、语句的图标。不填就带上。
*/
languageConcepts?: false
/** 卡片的淡底用这个颜色,不填就用种类色([RuleCard.badge] 的颜色);边框仍是种类色。React 钩子卡片的描边都是钩子紫,淡底按钩子从哪来分。 */
tint?: ThemeColor
/**
* 卡片能看调用树,查的是源码里这个名字被谁调用:钩子卡片查返回的函数(`const [open, setOpen] = useState()` 的 `setOpen`),
* 自定义钩子的卡片查钩子自己。不填就没有调用树按钮(讲 HTTP 接口的卡片另见 [RuleCard.endpoint])。
*/
calls?: SourceRange
rows: PropertyRow[]
/** 块自己的名字(类名)在源码里的范围:跳到的定义就是它时闪整块。 */
defines?: SourceRange