✨ feat(vscode): 代码阅读认出代码里起的中文名(Annotated[…, Comment("…")]、@Comment 装饰器、行尾 # @Comment、docstring / JSDoc 的参数说明),预览里定义和用到它的各处都写中文名,悬停看原名,定义处后面淡淡写原名

This commit is contained in:
cruldra committed 2026-09-27 00:56:39 +08:00
1 parent 1b1299dc1f
commit 44c221ea2b
45 files changed
+1685 -128

No files matched your search

@@ -1,3 +1,4 @@
import type { DisplayName } from '../contract'
import type { CodeReaderRegistry } from '../registry'
import type { TreeSitterRuntime } from '../runtime'
import type { DocumentMessage } from './messages'
@@ -11,13 +12,19 @@ export interface DocumentSnapshot {
getText: () => string
}
/** 发给预览的文档,和这份源码里起了中文名的定义(扩展端接着找用到它们的各处)。 */
export interface DocumentRead {
message: DocumentMessage
displayNames: DisplayName[]
}
/** 当前文档 → 发给预览的 document 消息;语言不支持或解析失败时带 error,blocks 为空。库规则出错不算失败,交给 report 记下。 */
export async function documentMessage(
document: DocumentSnapshot,
registry: Pick<CodeReaderRegistry, 'languageFor' | 'translatorsFor' | 'selectedTranslator' | 'rulesFor'>,
runtime: Pick<TreeSitterRuntime, 'parse'>,
report: (message: string) => void,
): Promise<DocumentMessage> {
): Promise<DocumentRead> {
const { languageId, version } = document
const source = document.getText()
const translator = registry.selectedTranslator(languageId)
@@ -29,15 +36,16 @@ export async function documentMessage(
attributes: [],
translators: registry.translatorsFor(languageId).map(({ id, label }) => ({ id, label })),
translatorId: translator?.id ?? '',
names: [],
}
const adapter = registry.languageFor(languageId)
if (!adapter)
return { ...message, error: `代码阅读还不支持「${languageId}」这种语言` }
return { message: { ...message, error: `代码阅读还不支持「${languageId}」这种语言` }, displayNames: [] }
try {
const blocks = await readBlockViews(runtime, adapter, translator, languageId, source, { rules: registry.rulesFor(languageId), report })
return { ...message, blocks, attributes: fileAttributes(blocks, translator?.attributeNames) }
const { blocks, displayNames } = await readBlockViews(runtime, adapter, translator, languageId, source, { rules: registry.rulesFor(languageId), report })
return { message: { ...message, blocks, attributes: fileAttributes(blocks, translator?.attributeNames) }, displayNames }
}
catch (err) {
return { ...message, error: err instanceof Error ? err.message : String(err) }
return { message: { ...message, error: err instanceof Error ? err.message : String(err) }, displayNames: [] }
}
}