✨ feat(vscode): 代码阅读认出代码里起的中文名(Annotated[…, Comment("…")]、@Comment 装饰器、行尾 # @Comment、docstring / JSDoc 的参数说明),预览里定义和用到它的各处都写中文名,悬停看原名,定义处后面淡淡写原名
This commit is contained in:
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
|
||||
}
|
||||
Reference in new issue
Block a user