✨ feat(vscode): 代码阅读预览顶部加块筛选栏
语言插件按和语言无关的 id 报块属性(通用的由宿主从 facts 推),翻译插件起名,webview 只按 id 筛; 筛选整个工作区共用、记在 workspaceState;JavaScript 不再显示「抽象:否」「仅类型:否」
This commit is contained in:
1 parent
4eaf2ae11d
commit
1c7e31c51a
29 files changed
+1364
-319
No files matched your search
@@ -7,20 +7,23 @@ export interface BlockBox {
|
||||
bottom: number
|
||||
}
|
||||
|
||||
/** 视口顶部那块的起始行 + 视口顶部在块内往下偏了多少像素;按块对不上时退回 scrollTop。 */
|
||||
/**
|
||||
* 视口顶部那块的起始行 + 视口顶部在块内往下偏了多少像素;按块对不上时退回 scrollTop。
|
||||
* 「视口顶部」指露出块的那部分的顶部,也就是钉住的筛选栏的下沿;scrollTop 是它在页面里的位置。
|
||||
*/
|
||||
export interface ScrollAnchor {
|
||||
line: number
|
||||
offset: number
|
||||
scrollTop: number
|
||||
}
|
||||
|
||||
/** 视口顶部那块:第一个下边还在视口顶部以下的块;全都滚过去了就取最后一块。没有块时没有位置可记。 */
|
||||
/** 视口顶部(scrollTop,见 ScrollAnchor)那块:第一个下边还在视口顶部以下的块;全都滚过去了就取最后一块。没有块时没有位置可记。 */
|
||||
export function anchorAt(boxes: readonly BlockBox[], scrollTop: number): ScrollAnchor | undefined {
|
||||
const box = boxes.find(b => b.bottom > scrollTop) ?? boxes.at(-1)
|
||||
return box && { line: box.line, offset: scrollTop - box.top, scrollTop }
|
||||
}
|
||||
|
||||
/** 恢复时的 scrollTop:起始行还是那一行的块还在就对齐到它,否则用原来的 scrollTop。 */
|
||||
/** 恢复时视口顶部要在的位置(见 ScrollAnchor):起始行还是那一行的块还在就对齐到它,否则用原来的 scrollTop。 */
|
||||
export function scrollTopFor(boxes: readonly BlockBox[], anchor: ScrollAnchor): number {
|
||||
const box = boxes.find(b => b.line === anchor.line)
|
||||
return box ? box.top + anchor.offset : anchor.scrollTop
|
||||
|
||||
Reference in new issue
Block a user