✨ feat(vscode): 新增「了解一块代码」:AI 找功能代码占一栏,对话里接着改

主栏标题栏的放大镜问要了解哪一块,占一个栏位建一栏(和收藏共用 30 个栏位,视图改名 slot1..30,按 slotKindN 分收藏 / 功能挂标题栏按钮),同时开对话页让 Claude 只读地在全部工作区文件夹里找,按 --json-schema 交回环节 → 文件 + 符号 + 一句话。
对话复用预览顶部的聊天(CodeQa.askTop:会话续接、进行中的一轮、记录存 workspaceState);结构不合格算这一轮没答成、留着能再画出来。
条目每次画、点时按眼下的代码找:有语言插件的解析成代码块按「类名.方法名」找,没有的问 VS Code 文档符号;找不到画成灰的。
This commit is contained in:
cruldra committed 2026-10-12 15:48:54 +11:00
1 parent 16d27004d8
commit 880bf7fc57
38 files changed
+3386 -378

No files matched your search

@@ -0,0 +1,21 @@
import type { DocumentSymbol, Range } from 'vscode'
import type { SourceRange } from '../contract'
import type { SymbolNode } from '../symbolLinks'
import { commands, Uri, workspace } from 'vscode'
/**
* 一个文件的文档符号(`vscode.executeDocumentSymbolProvider`,由这种语言的扩展给):先把文件读进来(不显示),范围换成那个文件里的下标。
* 没装这种语言的扩展时是空的。注释里的仓库链接、「了解一块代码」在没有语言插件的文件里找符号都用它。
*/
export async function documentSymbolNodes(uri: string): Promise<SymbolNode[]> {
const doc = await workspace.openTextDocument(Uri.parse(uri))
const symbols = await commands.executeCommand<DocumentSymbol[] | undefined>('vscode.executeDocumentSymbolProvider', doc.uri)
const span = (range: Range): SourceRange => ({ startIndex: doc.offsetAt(range.start), endIndex: doc.offsetAt(range.end) })
const node = (symbol: DocumentSymbol): SymbolNode => ({
name: symbol.name,
range: span(symbol.range),
selection: span(symbol.selectionRange),
children: (symbol.children ?? []).map(node),
})
return Array.isArray(symbols) ? symbols.map(node) : []
}