✨ feat(vscode): 审查视图也能隐藏测试文件,和未提交的更改共用一个开关
This commit is contained in:
1 parent
851be48c43
commit
78d5748b81
12 files changed
+139
-53
No files matched your search
@@ -157,12 +157,13 @@ describe('筛选(审查工单、未提交的更改)', () => {
|
||||
expect(whenOf(command)).not.toContain(FILTER)
|
||||
})
|
||||
|
||||
it('隐藏 / 显示测试文件只在未提交的更改时有,按是否隐藏着换着显示', () => {
|
||||
expect(whenOf(HIDE_TESTS)).toBe(`view == superpowers.codeReader.files && ${FILTER} == uncommitted && !${TESTS_HIDDEN}`)
|
||||
expect(whenOf(SHOW_TESTS)).toBe(`view == superpowers.codeReader.files && ${FILTER} == uncommitted && ${TESTS_HIDDEN}`)
|
||||
it('隐藏 / 显示测试文件在未提交的更改和审查时都有(同一个开关),按是否隐藏着换着显示,整棵项目树上没有', () => {
|
||||
const listing = `(${FILTER} == uncommitted || ${FILTER} == review)`
|
||||
expect(whenOf(HIDE_TESTS)).toBe(`view == superpowers.codeReader.files && ${listing} && !${TESTS_HIDDEN}`)
|
||||
expect(whenOf(SHOW_TESTS)).toBe(`view == superpowers.codeReader.files && ${listing} && ${TESTS_HIDDEN}`)
|
||||
const palette = new Map(menus.commandPalette.map(item => [item.command, item.when]))
|
||||
expect(palette.get(HIDE_TESTS)).toBe(`${FILTER} == uncommitted && !${TESTS_HIDDEN}`)
|
||||
expect(palette.get(SHOW_TESTS)).toBe(`${FILTER} == uncommitted && ${TESTS_HIDDEN}`)
|
||||
expect(palette.get(HIDE_TESTS)).toBe(`${listing} && !${TESTS_HIDDEN}`)
|
||||
expect(palette.get(SHOW_TESTS)).toBe(`${listing} && ${TESTS_HIDDEN}`)
|
||||
})
|
||||
|
||||
it('「暂存」只在未提交的更改时挂在「更改」组的文件行上,命令面板里藏起来', () => {
|
||||
|
||||
@@ -1,10 +1,14 @@
|
||||
import type { Event, TreeView, Uri } from 'vscode'
|
||||
import type { Event, Memento, TreeView, Uri } from 'vscode'
|
||||
import type { DiffBase } from '../diff/diffBase'
|
||||
import type { FileTreeProvider, TreeNode } from './fileTree'
|
||||
import { commands, Disposable, EventEmitter } from 'vscode'
|
||||
|
||||
/** 上下文键:侧栏树开着哪种筛选,没设是全部文件。标题栏的「显示全部」、行上的注释按钮按它显示 / 藏起来。 */
|
||||
const FILTER_CONTEXT = 'superpowers.codeReader.filter'
|
||||
/** workspaceState:隐藏测试文件。几种筛选共用这一个开关。 */
|
||||
const HIDE_TESTS_KEY = 'superpowers.codeReader.hideTests'
|
||||
/** 上下文键:隐藏着测试文件。标题栏的「隐藏测试文件 / 显示测试文件」按它换着显示。 */
|
||||
const TESTS_HIDDEN_CONTEXT = 'superpowers.codeReader.testsHidden'
|
||||
|
||||
/** 侧栏树的筛选:review 审查工单(只摆 PR 改过的文件),uncommitted 未提交的更改(只摆各仓库里没提交的文件)。 */
|
||||
export type TreeFilterKind = 'review' | 'uncommitted'
|
||||
@@ -17,12 +21,15 @@ export interface TreeFilter {
|
||||
exit: () => Promise<void>
|
||||
/** 开着这种筛选时 uri 这个文件的预览对比什么(见 DiffBase);不在这种筛选管的范围里(仓库外、工作副本外)时没有 */
|
||||
diffBase: (uri: Uri) => DiffBase | undefined
|
||||
/** 开着这种筛选时隐藏测试文件的开关换了:按 TreeFilters.testsHidden 马上重摆树 */
|
||||
testsToggled: () => void
|
||||
}
|
||||
|
||||
/**
|
||||
* 侧栏树上的几种筛选,同时只开一种:开一种时别的都退出;上下文键跟着开着的那种。
|
||||
* 筛选开起来时自己换上树、标题后面的字(description)、标题下面的一行(message);退出时由这里回到工作区文件树。
|
||||
* 开着的筛选也定打开着的预览对比什么(diffBase),换了筛选、基准变了都通知预览重新比。
|
||||
* 隐藏测试文件的开关也在这里:几种筛选共用一个、按工作区记住,换了只叫开着的那种重摆。
|
||||
*/
|
||||
export class TreeFilters {
|
||||
private readonly filters: TreeFilter[] = []
|
||||
@@ -30,8 +37,28 @@ export class TreeFilters {
|
||||
private readonly baseChange = new EventEmitter<void>()
|
||||
/** 开着的筛选换了(开了、换了、关了),或它的对比基准变了(git 状态变了、审查重读了 PR):打开着的预览照 diffBase 重新比 */
|
||||
readonly onDidChangeDiffBase: Event<void> = this.baseChange.event
|
||||
private hideTests: boolean
|
||||
|
||||
constructor(private readonly files: FileTreeProvider, private readonly view: TreeView<TreeNode>) {}
|
||||
/** state 是 workspaceState:隐藏测试文件的开关记在这里。 */
|
||||
constructor(private readonly files: FileTreeProvider, private readonly view: TreeView<TreeNode>, private readonly state: Memento) {
|
||||
this.hideTests = state.get<boolean>(HIDE_TESTS_KEY) ?? false
|
||||
void commands.executeCommand('setContext', TESTS_HIDDEN_CONTEXT, this.hideTests)
|
||||
}
|
||||
|
||||
/** 隐藏着测试文件:筛选摆树时把测试文件剔掉 */
|
||||
get testsHidden(): boolean {
|
||||
return this.hideTests
|
||||
}
|
||||
|
||||
/** 标题栏的「隐藏 / 显示测试文件」:换开关、按工作区记住,开着的筛选马上按新开关重摆。 */
|
||||
async setTestsHidden(hidden: boolean): Promise<void> {
|
||||
this.hideTests = hidden
|
||||
this.current?.testsToggled()
|
||||
await Promise.all([
|
||||
commands.executeCommand('setContext', TESTS_HIDDEN_CONTEXT, hidden),
|
||||
this.state.update(HIDE_TESTS_KEY, hidden || undefined),
|
||||
])
|
||||
}
|
||||
|
||||
/** 开着的筛选下 uri 这个文件的预览对比什么;没开筛选(全部文件)时没有,预览不标差异。 */
|
||||
diffBase(uri: Uri): DiffBase | undefined {
|
||||
|
||||
Reference in new issue
Block a user