🐛 fix(vscode): 切走标签再回来,调用树棵数不用重算,开着的弹框和选中的入口照旧
This commit is contained in:
1 parent
6cf053dcd0
commit
32018e71f1
9 files changed
+542
-110
No files matched your search
@@ -3,7 +3,8 @@ import type { BlockView, OpenedFrom } from './types'
|
||||
|
||||
/**
|
||||
* 标签页切走时 VS Code 会销毁 webview、切回来重新加载,靠它恢复:哪些块停在「编辑」、
|
||||
* 用户把哪些块、属性行和子行折叠 / 展开了(块 id 是它在树里的位置,文档刷新后照旧对得上;属性行、子行 id 见 [propertyRowId]、[propertyItemId]),以及滚到了哪。
|
||||
* 用户把哪些块、属性行和子行折叠 / 展开了(块 id 是它在树里的位置,文档刷新后照旧对得上;属性行、子行 id 见 [propertyRowId]、[propertyItemId]),滚到了哪,
|
||||
* 以及开着哪一块的调用树弹框、选中第几个入口。
|
||||
* VS Code 重启后恢复标签页时也带着它,这个标签页是从哪儿打开的靠它报回扩展端。
|
||||
*/
|
||||
export interface ViewState {
|
||||
@@ -13,6 +14,14 @@ export interface ViewState {
|
||||
scroll?: ScrollAnchor
|
||||
/** 这个标签页是从哪儿打开的,扩展端告诉的;新开的页面还没记 */
|
||||
openedFrom?: OpenedFrom
|
||||
/** 开着的调用树弹框;关着是没有 */
|
||||
callTree?: CallTreeView
|
||||
}
|
||||
|
||||
/** 开着的调用树弹框:哪一块(anchor),选中第几个入口(从 0 起)。 */
|
||||
export interface CallTreeView {
|
||||
anchor: string
|
||||
entry: number
|
||||
}
|
||||
|
||||
export interface ViewStateStorage {
|
||||
@@ -59,9 +68,14 @@ function readViewState(saved: unknown): ViewState {
|
||||
folds,
|
||||
...(isScrollAnchor(state.scroll) && { scroll: state.scroll }),
|
||||
...((state.openedFrom === 'uncommitted' || state.openedFrom === 'other') && { openedFrom: state.openedFrom }),
|
||||
...(isCallTreeView(state.callTree) && { callTree: state.callTree }),
|
||||
}
|
||||
}
|
||||
|
||||
function isCallTreeView(value: unknown): value is CallTreeView {
|
||||
return isRecord(value) && typeof value.anchor === 'string' && Number.isInteger(value.entry) && (value.entry as number) >= 0
|
||||
}
|
||||
|
||||
/**
|
||||
* 块默认折叠吗:函数、类、枚举、异常块和库规则的卡片收起子块(属性表照常显示),其余块展开。属性行和带下一层的子行默认都展开。
|
||||
* 挂在父卡片子行上、点子行才展开的子块(BlockSlot)默认收着:它折叠着就是整张不画。
|
||||
|
||||
Reference in new issue
Block a user