✨ feat(vscode): 注释卡片可按规范重写注释

This commit is contained in:
cruldra committed 2026-10-03 03:22:20 +08:00
1 parent 724c81188c
commit 299acb979f
11 files changed
+717 -5

No files matched your search

@@ -1,23 +1,43 @@
import type { ReactElement } from 'react'
import { Eye, Pencil, Sparkles } from 'lucide-react'
import { Eye, LoaderCircle, Pencil, RefreshCw, Sparkles } from 'lucide-react'
/**
* 块右上角的一排图标按钮(普通块、属性表、库规则的卡片共用):只放图标,名字写在悬停提示(data-tooltip)和读屏用的 aria-label 里。
* 「按注释规范重写」:只给注释块。点了用写注释的技能重写这一段并写回文件;正在重写时转圈,不能再点。
* 「问 AI」:点开 / 收起块下面的问答区,展开时带按下的底色。
* 「编辑 / 预览」切换:预览时是铅笔「编辑」,编辑时是眼睛「预览」、带按下的底色。
*/
export function BlockTools({ editing, onToggleEdit, asking, onToggleAsk }: {
export function BlockTools({ editing, onToggleEdit, asking, onToggleAsk, rewriting, onRewrite }: {
editing: boolean
onToggleEdit: () => void
/** 块下面的问答区展开着 */
asking?: boolean
/** 没给就不显示「问 AI」(文件不在工作区文件夹里,问答没地方存) */
onToggleAsk?: () => void
/** 这段注释正在重写 */
rewriting?: boolean
/** 没给就不显示「按注释规范重写」(不是注释块) */
onRewrite?: () => void
}): ReactElement {
const label = editing ? '预览' : '编辑'
const Icon = editing ? Eye : Pencil
return (
<div className="flex h-5 shrink-0 items-center gap-0.5" role="group" aria-label="块操作">
{onRewrite && (
<button
type="button"
className="cr-tool flex h-5 w-6 items-center justify-center rounded"
data-tooltip="按注释规范重写"
aria-label="按注释规范重写"
aria-busy={rewriting === true}
disabled={rewriting === true}
onClick={onRewrite}
>
{rewriting
? <LoaderCircle size={14} strokeWidth={1.8} className="cr-qa-spin" aria-hidden />
: <RefreshCw size={14} strokeWidth={1.8} aria-hidden />}
</button>
)}
{onToggleAsk && (
<button
type="button"