✨ feat(vscode): 「未提交的更改」分暂存区两组、单文件暂存、隐藏测试文件

- 照源代码管理视图分「暂存的更改」「更改」两组(空的不摆,分组行写文件数),部分暂存的文件两组都有
- 「更改」组的文件行上加「暂存」按钮,走 git 扩展的 repository.add
- 标题栏「隐藏测试文件 / 显示测试文件」开关,按工作区记住,藏了几个写在标题后面;测试文件的判断集中在 isTestFile
- 以上只在「未提交的更改」里有:普通文件树、审查模式的行和菜单不变
This commit is contained in:
cruldra committed 2026-09-30 06:30:54 +08:00
1 parent a3b04a443b
commit 87d4360704
14 files changed
+528 -129

No files matched your search

+60 -15
View File
@@ -115,6 +115,24 @@
"category": "代码阅读",
"icon": "$(git-commit)"
},
{
"command": "superpowers.codeReader.hideTests",
"title": "隐藏测试文件",
"category": "代码阅读",
"icon": "$(beaker-stop)"
},
{
"command": "superpowers.codeReader.showTests",
"title": "显示测试文件",
"category": "代码阅读",
"icon": "$(beaker)"
},
{
"command": "superpowers.codeReader.stage",
"title": "暂存",
"category": "代码阅读",
"icon": "$(add)"
},
{
"command": "superpowers.codeReader.showAllFiles",
"title": "显示全部",
@@ -215,7 +233,7 @@
"superpowers.codeReader.copy": [
{
"command": "superpowers.codeReader.copyFileName",
"when": "view == superpowers.codeReader.files && viewItem =~ /^file( noted)?$/",
"when": "view == superpowers.codeReader.files && viewItem =~ /^file( unstaged)?( noted)?$/",
"group": "copy@1"
},
{
@@ -225,17 +243,17 @@
},
{
"command": "superpowers.codeReader.copyFileStem",
"when": "view == superpowers.codeReader.files && viewItem =~ /^file( noted)?$/",
"when": "view == superpowers.codeReader.files && viewItem =~ /^file( unstaged)?( noted)?$/",
"group": "copy@2"
},
{
"command": "superpowers.codeReader.copyRelativePath",
"when": "view == superpowers.codeReader.files && viewItem =~ /^(file|folder)( noted)?$/",
"when": "view == superpowers.codeReader.files && viewItem =~ /^(file( unstaged)?|folder)( noted)?$/",
"group": "copy@3"
},
{
"command": "superpowers.codeReader.copyAbsolutePath",
"when": "view == superpowers.codeReader.files && viewItem =~ /^(file|folder)( noted)?$/",
"when": "view == superpowers.codeReader.files && viewItem =~ /^(file( unstaged)?|folder)( noted)?$/",
"group": "copy@4"
}
],
@@ -265,36 +283,51 @@
"when": "view == superpowers.codeReader.files",
"group": "navigation@2"
},
{
"command": "superpowers.codeReader.hideTests",
"when": "view == superpowers.codeReader.files && superpowers.codeReader.filter == uncommitted && !superpowers.codeReader.testsHidden",
"group": "navigation@3"
},
{
"command": "superpowers.codeReader.showTests",
"when": "view == superpowers.codeReader.files && superpowers.codeReader.filter == uncommitted && superpowers.codeReader.testsHidden",
"group": "navigation@3"
},
{
"command": "superpowers.codeReader.showAllFiles",
"when": "view == superpowers.codeReader.files && superpowers.codeReader.filter",
"group": "navigation@3"
"group": "navigation@4"
},
{
"command": "superpowers.codeReader.refresh",
"when": "view == superpowers.codeReader.files",
"group": "navigation@4"
"group": "navigation@5"
}
],
"view/item/context": [
{
"submenu": "superpowers.codeReader.copy",
"when": "view == superpowers.codeReader.files && viewItem =~ /^(file|folder)( noted)?$/",
"when": "view == superpowers.codeReader.files && viewItem =~ /^(file( unstaged)?|folder)( noted)?$/",
"group": "inline@1"
},
{
"command": "superpowers.codeReader.addNote",
"when": "view == superpowers.codeReader.files && superpowers.codeReader.filter != review && viewItem =~ /^(file|folder)$/",
"when": "view == superpowers.codeReader.files && superpowers.codeReader.filter != review && viewItem =~ /^(file( unstaged)?|folder)$/",
"group": "inline@2"
},
{
"command": "superpowers.codeReader.editNote",
"when": "view == superpowers.codeReader.files && superpowers.codeReader.filter != review && viewItem =~ /^(file|folder) noted$/",
"when": "view == superpowers.codeReader.files && superpowers.codeReader.filter != review && viewItem =~ /^(file( unstaged)?|folder) noted$/",
"group": "inline@2"
},
{
"command": "superpowers.codeReader.stage",
"when": "view == superpowers.codeReader.files && superpowers.codeReader.filter == uncommitted && viewItem =~ /^file unstaged( noted)?$/",
"group": "inline@3"
},
{
"command": "superpowers.codeReader.copyFileName",
"when": "view == superpowers.codeReader.files && viewItem =~ /^file( noted)?$/",
"when": "view == superpowers.codeReader.files && viewItem =~ /^file( unstaged)?( noted)?$/",
"group": "copy@1"
},
{
@@ -304,27 +337,27 @@
},
{
"command": "superpowers.codeReader.copyFileStem",
"when": "view == superpowers.codeReader.files && viewItem =~ /^file( noted)?$/",
"when": "view == superpowers.codeReader.files && viewItem =~ /^file( unstaged)?( noted)?$/",
"group": "copy@2"
},
{
"command": "superpowers.codeReader.copyRelativePath",
"when": "view == superpowers.codeReader.files && viewItem =~ /^(file|folder)( noted)?$/",
"when": "view == superpowers.codeReader.files && viewItem =~ /^(file( unstaged)?|folder)( noted)?$/",
"group": "copy@3"
},
{
"command": "superpowers.codeReader.copyAbsolutePath",
"when": "view == superpowers.codeReader.files && viewItem =~ /^(file|folder)( noted)?$/",
"when": "view == superpowers.codeReader.files && viewItem =~ /^(file( unstaged)?|folder)( noted)?$/",
"group": "copy@4"
},
{
"command": "superpowers.codeReader.addNote",
"when": "view == superpowers.codeReader.files && superpowers.codeReader.filter != review && viewItem =~ /^(file|folder)$/",
"when": "view == superpowers.codeReader.files && superpowers.codeReader.filter != review && viewItem =~ /^(file( unstaged)?|folder)$/",
"group": "notes"
},
{
"command": "superpowers.codeReader.editNote",
"when": "view == superpowers.codeReader.files && superpowers.codeReader.filter != review && viewItem =~ /^(file|folder) noted$/",
"when": "view == superpowers.codeReader.files && superpowers.codeReader.filter != review && viewItem =~ /^(file( unstaged)?|folder) noted$/",
"group": "notes"
}
],
@@ -349,6 +382,18 @@
"command": "superpowers.codeReader.showAllFiles",
"when": "superpowers.codeReader.filter"
},
{
"command": "superpowers.codeReader.hideTests",
"when": "superpowers.codeReader.filter == uncommitted && !superpowers.codeReader.testsHidden"
},
{
"command": "superpowers.codeReader.showTests",
"when": "superpowers.codeReader.filter == uncommitted && superpowers.codeReader.testsHidden"
},
{
"command": "superpowers.codeReader.stage",
"when": "false"
},
{
"command": "superpowers.codeReader.showPreview",
"when": "activeEditor == workbench.editors.files.textFileEditor && (resourceLangId =~ /^(typescript|typescriptreact|javascript|javascriptreact|python|shellscript|dockerfile)$/ || resourceLangId in superpowers.codeReader.languageIds)"