✨ feat(vscode): 代码阅读的词可以讲源码里别处的名字(Segment.refers):FastAPI 路径里的 {user_id} 讲函数的参数,单击参数时跟着高亮,⌘ + 点击跳到参数

This commit is contained in:
cruldra committed 2026-09-27 21:18:19 +08:00
1 parent 25569fa506
commit 15790ce7c8
9 files changed
+82 -22

No files matched your search

@@ -8,7 +8,7 @@ export function occurrenceStyle(kind: Occurrence['kind']): OccurrenceStyle {
}
/**
* 一段文字画不画高亮、画哪种:它照抄自源码,在源码里占 [offset, offset + 字数),和哪处出现重叠就画,
* 一段文字画不画高亮、画哪种:它讲的名字(sourceOf)和哪处出现重叠就画,
* 同时碰上写入和读取的按写入画。没有下标的(译词、提示词、编辑状态的源码)不画。
*/
export function segmentOccurrence(segment: Segment, occurrences: readonly Occurrence[]): OccurrenceStyle | undefined {
@@ -23,10 +23,20 @@ export function segmentOccurrence(segment: Segment, occurrences: readonly Occurr
return style
}
/** 段照抄自源码、在源码里占的 [offset, offset + 字数) 和这处出现重叠;没有下标的段不算。 */
/**
* 段讲的是源码里哪个名字,[start, end):讲别处名字的段(refers,写在字符串里的参数名)是那个名字,照抄自源码的段是它自己占的
* [offset, offset + 字数);没有下标的段(译词、提示词)没有。跳到定义、单击高亮、各处出现画在哪都按它。
*/
export function sourceOf(segment: Segment): { start: number, end: number } | undefined {
if (segment.refers)
return { start: segment.refers.startIndex, end: segment.refers.endIndex }
return segment.offset === undefined ? undefined : { start: segment.offset, end: segment.offset + segment.text.length }
}
/** 段讲的名字(sourceOf)和这处出现重叠;没有下标的段不算。 */
export function overlaps(segment: Segment, occurrence: Occurrence): boolean {
const { offset } = segment
return offset !== undefined && occurrence.start < offset + segment.text.length && offset < occurrence.end
const source = sourceOf(segment)
return source !== undefined && occurrence.start < source.end && source.start < occurrence.end
}
/** 文字里(连框里)有段和这处出现重叠。 */