Skip to content

DiffViewer ​

只读的代码 diff:按文件展示路径、增删行数和 hunks,支持统一视图、分栏视图和行内高亮。

导入 ​

ts
import { createDiffFile, DiffViewer, parseUnifiedDiff } from '@astryx-vue/lab'

属性 ​

名称类型默认值说明
fileDiffViewerFile必填要展示的文件。用 parseUnifiedDiff 或 createDiffFile 生成。
viewMode'unified' | 'split''unified'单列展示,或旧文件/新文件左右分栏。
languagestring按扩展名推断语法高亮语言;未知扩展名按纯文本展示。
hasLineNumbersbooleantrue显示旧文件和新文件的行号列。
isWrappedbooleanfalse长行换行,而不是横向滚动。
inlineHighlight'word' | 'char' | 'none''word'成对删除/新增行内按词或按字符高亮变化。
isCollapsiblebooleantrue让文件头成为可折叠开关;需要文件路径来命名控件。
isCollapsedboolean非受控受控的折叠状态。
defaultIsCollapsedbooleanfalse非受控时的初始折叠状态。
maxHeightnumber | stringundefined代码区最大高度,超出后滚动。
syntaxThemeSyntaxThemeDefinitionundefined只给这个实例使用的语法主题。
labelstring'Diff'没有文件路径时,代码区的无障碍名称。
renderLineAnnotation(ref) => VNodeChildundefined在某一行下方渲染整行内容,例如评审评论;分栏时放在该行自己的一侧。

事件 ​

名称参数说明
collapsedChange(isCollapsed: boolean)文件头折叠状态变化。
update:isCollapsed(isCollapsed: boolean)支持 v-model:isCollapsed。
lineNumberClick(ref: DiffViewerLineRef, event: MouseEvent)行号被点击。只有行锚点一侧的数字是按钮。

插槽 ​

名称说明
headerEnd文件头右侧内容,例如“已查看”复选框。

工具函数 ​

ts
const files = parseUnifiedDiff(patch) // 一个文件一条记录
const file = createDiffFile({
  path: 'src/app.ts',
  oldValue: before,
  newValue: after,
  contextLines: 3,
})

parseUnifiedDiff 接受 git diff、diff -u 和单独的 hunk,读不出来时返回空数组,不会抛错。createDiffFile 用 Myers 行级 diff 从两段文本生成同一种 DiffViewerFile;contextLines 默认 3,可以用 oldPath: null 或 newPath: null 标记新增/删除文件。