✨ 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

@@ -0,0 +1,34 @@
import type { Segment, ShownName } from './types'
import { createContext } from 'react'
/** 页面上这个版本的中文名:下标 → 显示成什么。 */
export type NameMap = ReadonlyMap<number, ShownName>
/** 眼下页面上显示成中文名的名字,SegmentText 按它换字。 */
export const DisplayNameContext = createContext<NameMap>(new Map())
/** 某个文档版本的中文名。 */
export interface VersionNames {
version: number
names: NameMap
}
export function nameMap(names: readonly ShownName[]): NameMap {
return new Map(names.map(name => [name.offset, name]))
}
/** 收到新文档:换成它带来的中文名(上一版查到的跟着改动挪过位置的,或这一版查过的)。 */
export function documentNames(version: number, names: readonly ShownName[]): VersionNames {
return { version, names: nameMap(names) }
}
/** 收到查到的中文名:是页面上这个版本的才换上,迟到的旧版本的不理。 */
export function acceptNames(current: VersionNames | undefined, version: number, names: readonly ShownName[]): VersionNames | undefined {
return current?.version === version ? { version, names: nameMap(names) } : current
}
/** 这段名字显示成什么中文名:照抄自源码、下标和长度都对得上才算。 */
export function shownName(segment: Segment, names: NameMap): ShownName | undefined {
const shown = segment.offset === undefined ? undefined : names.get(segment.offset)
return shown?.length === segment.text.length ? shown : undefined
}