feat(vscode): 「改动」tab 重做为整 PR 聚合的主从式内联 diff(git-diff-view)

- 左树右 diff:左栏全 PR 文件树 + 统计条(共改 N · +X−Y · 已查看 M/N),右栏选中单文件内联 diff
- 用 @git-diff-view/react 只渲染当前选中文件,绕开上万行全量渲染的性能坑
- gitea 新增 listPullRequestFiles、getPullRequest 取 merge_base/head,按需回两版原文
- diff 走 merge_base→head 三点口径(与 Gitea 网页一致),getRawFile 404 兜底成全增/全删/改名
- 已查看态按 head sha 落盘、新 push 自然重置;去掉提交列表、原生 diff 与 spx-gitea 虚拟文档 provider
This commit is contained in:
2026-06-29 10:52:36 +08:00
parent ceea62ed16
commit fb505d59c5
18 changed files with 1149 additions and 1127 deletions
+13 -17
View File
@@ -11,18 +11,16 @@ export interface ToastLink {
url: string
}
/** PR 提交的精简视图(提交列表渲染用)。 */
export interface PrCommit {
sha: string
message: string
authorName: string
date: string
}
/** 提交内单个文件改动:status 取 added/modified/deleted/renamed/copied 等。 */
export interface PrCommitFile {
/**
* PR 改动里的一个文件:status 取 added/modified/deleted/renamed/copied 等,
* additions/deletions 求和成统计条,previousFilename 在改名时给出旧路径。
*/
export interface PrFile {
path: string
status: string
additions: number
deletions: number
previousFilename?: string
}
export type ToastLevel = 'info' | 'success' | 'error'
@@ -117,8 +115,8 @@ export type ExtensionToWebview
| { type: 'issue/remove', issueNumber: number }
| { type: 'profiles/show', data: ProfilesData }
| { type: 'managed-sessions/show', data: ManagedSessionsData }
| { type: 'pr-commits/show', issueNumber: number, commits: PrCommit[], confirmedCommits: string[], error?: string }
| { type: 'pr-commit-files/show', issueNumber: number, sha: string, parentSha?: string, files: PrCommitFile[], confirmed: string[], error?: string }
| { type: 'pr-files/show', issueNumber: number, headSha: string, mergeBase: string, files: PrFile[], confirmed: string[], error?: string }
| { type: 'pr-file-diff/show', issueNumber: number, path: string, oldContent: string, newContent: string, oldLang?: string, newLang?: string, error?: string }
export type WebviewToExtension
= | { type: 'issues/refresh' }
@@ -189,8 +187,6 @@ export type WebviewToExtension
| { type: 'managed-sessions/resume', sessionId: string }
| { type: 'managed-sessions/delete', sessionId: string }
| { type: 'managed-sessions/close-tab', sessionId: string }
| { type: 'pr-commits/get', issueNumber: number }
| { type: 'pr-commit-files/get', issueNumber: number, sha: string }
| { type: 'pr-commit-diff/open', issueNumber: number, sha: string, parentSha?: string, path: string, status: string }
| { type: 'pr-review/set', issueNumber: number, sha: string, confirmed: string[] }
| { type: 'pr-review/set-commits', issueNumber: number, confirmed: string[] }
| { type: 'pr-files/get', issueNumber: number }
| { type: 'pr-file-diff/get', issueNumber: number, path: string, previousPath?: string }
| { type: 'pr-review/set', issueNumber: number, headSha: string, confirmed: string[] }