✨ feat(vscode): 代码阅读的注释挂到它讲的代码块上成「注释」一行,重写注释改用技能一句话加结构化结果
- 普通注释不再单独成卡片:同一层挂到后面最近的块(隔空行也算),后面没有挂到前面那块,整层没代码挂到父块;只有文件开头隔着空行的注释、模块 docstring、//!、@file 单独成「文件开头的说明」 - 各语言(Python、TypeScript、Rust、Shell、Dockerfile)建好树后统一调 attachComments;块的编辑范围连着挂上的注释,差异、跳转、钉住卡片都按它 - 宿主统一给每张卡片(语言卡片、翻译插件的属性表、库规则卡片、一行译文的语句卡片)插「注释」一行,排在名称、说明后面 - TypeScript 的 JSDoc 也能当常量、变量的说明;sqlx、React 不再单独处理前面的注释 - 「重写注释」每块都有:提示只发 /ecc:writing-code-comments 路径:起-止,模型只读、按 --json-schema 交 body,没交结构化正文就失败不写;扩展换掉块前面的注释或在块上面新写一段
This commit is contained in:
1 parent
335cf9ca9f
commit
582ac4c987
49 files changed
+1730
-757
No files matched your search
@@ -1,41 +1,55 @@
|
||||
import type { ReactElement } from 'react'
|
||||
import { Eye, MessageSquareText, Pencil, Sparkles } from 'lucide-react'
|
||||
|
||||
/** 「重写注释」按钮的样子和动作:fresh 是块还没有注释、点了新写一段;正在重写时不能再点。 */
|
||||
export interface RewriteTool {
|
||||
fresh: boolean
|
||||
rewriting: boolean
|
||||
onRewrite: () => void
|
||||
}
|
||||
|
||||
/**
|
||||
* 「按注释规范重写」:用写注释的技能重写这块代码的注释并写回文件(块还没有注释时是「按注释规范写注释」,新写一段);正在重写时不能再点。
|
||||
* 只有图标(注释),名字在悬停提示和 aria-label 里。卡片有「注释」一行时画在那一行上,没有时排在右上角那排按钮里。
|
||||
*/
|
||||
export function RewriteButton({ tool }: { tool: RewriteTool }): ReactElement {
|
||||
const label = tool.fresh ? '按注释规范写注释' : '按注释规范重写'
|
||||
return (
|
||||
<button
|
||||
type="button"
|
||||
className="cr-tool flex h-5 w-6 shrink-0 items-center justify-center rounded"
|
||||
data-tooltip={label}
|
||||
aria-label={label}
|
||||
aria-busy={tool.rewriting}
|
||||
disabled={tool.rewriting}
|
||||
onClick={tool.onRewrite}
|
||||
>
|
||||
<MessageSquareText size={14} strokeWidth={1.8} aria-hidden />
|
||||
</button>
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* 块右上角的一排图标按钮(普通块、属性表、库规则的卡片共用):只放图标,名字写在悬停提示(data-tooltip)和读屏用的 aria-label 里。
|
||||
* 「按注释规范重写」:只给注释块。点了用写注释的技能重写这一段并写回文件;正在重写时不能再点。图标是注释。
|
||||
* 「按注释规范重写」(见 RewriteButton):卡片没有「注释」一行时排在这里。
|
||||
* 「问 AI」:点开 / 收起块下面的问答区,展开时带按下的底色。
|
||||
* 「编辑 / 预览」切换:预览时是铅笔「编辑」,编辑时是眼睛「预览」、带按下的底色。
|
||||
*/
|
||||
export function BlockTools({ editing, onToggleEdit, asking, onToggleAsk, rewriting, onRewrite }: {
|
||||
export function BlockTools({ editing, onToggleEdit, asking, onToggleAsk, rewrite }: {
|
||||
editing: boolean
|
||||
onToggleEdit: () => void
|
||||
/** 块下面的问答区展开着 */
|
||||
asking?: boolean
|
||||
/** 没给就不显示「问 AI」(文件不在工作区文件夹里,问答没地方存) */
|
||||
onToggleAsk?: () => void
|
||||
/** 这段注释正在重写 */
|
||||
rewriting?: boolean
|
||||
/** 没给就不显示「按注释规范重写」(不是注释块) */
|
||||
onRewrite?: () => void
|
||||
/** 没给就不显示「按注释规范重写」(不能写注释,或按钮画在「注释」一行上) */
|
||||
rewrite?: RewriteTool
|
||||
}): 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}
|
||||
>
|
||||
<MessageSquareText size={14} strokeWidth={1.8} aria-hidden />
|
||||
</button>
|
||||
)}
|
||||
{rewrite && <RewriteButton tool={rewrite} />}
|
||||
{onToggleAsk && (
|
||||
<button
|
||||
type="button"
|
||||
|
||||
Reference in new issue
Block a user