@@ -2,7 +2,8 @@ import * as Diff from 'diff'
22
33import type { Change } from 'diff'
44
5- type Type = 'prev' | 'current' | 'unified'
5+ type Type = 'split' | 'unified'
6+ type Role = 'prev' | 'current' | 'unified'
67
78interface Line {
89 type : 'added' | 'removed' | 'equal' ;
@@ -68,14 +69,16 @@ const renderCurrent = (diffs: Array<Change>) => {
6869
6970 diffs . map ( ( diff , index ) => {
7071 const type = getDiffType ( diff )
72+ const prevDiff = index > 0 ? diffs [ index - 1 ] : null
7173 const nextDiff = index < diffs . length - 1 ? diffs [ index + 1 ] : null
74+ const isModifiedLine = prevDiff && diff . count === 1 && prevDiff . count === 1 && type === 'added' && prevDiff . removed
75+ const isUnuseLine = nextDiff && diff . count === 1 && nextDiff . count === 1 && type === 'removed' && nextDiff . added
7276
73- if ( nextDiff && type === 'removed' && nextDiff . added ) {
74- if ( diff . count === 1 && nextDiff . count === 1 ) {
75- const diffWords = Diff . diffWords ( nextDiff . value , diff . value )
76- diff . value = renderLine ( diffWords )
77- return
78- }
77+ if ( isUnuseLine ) return
78+
79+ if ( isModifiedLine ) {
80+ const diffWords = Diff . diffWords ( ( prevDiff as Change ) . value , diff . value )
81+ diff . value = renderLine ( diffWords )
7982 }
8083
8184 diff . value . replace ( / \n $ / , '' ) . split ( '\n' ) . map ( ( value ) => {
@@ -100,15 +103,17 @@ const renderUnified = (diffs: Array<Change>) => {
100103 console . log ( diffs )
101104}
102105
103- const renderLines = ( type : Type , diffs : Array < Change > ) => {
104- if ( type === 'prev' ) {
105- return renderPrev ( [ ...diffs ] )
106- } else if ( type === 'current' ) {
107- return renderCurrent ( [ ...diffs ] )
108- } else if ( type === 'unified' ) {
109- return renderUnified ( [ ...diffs ] )
106+ const renderLines = ( role : Role , diffs : Array < Change > ) => {
107+ const deepCopy = JSON . parse ( JSON . stringify ( diffs ) )
108+
109+ if ( role === 'prev' ) {
110+ return renderPrev ( deepCopy )
111+ } else if ( role === 'current' ) {
112+ return renderCurrent ( deepCopy )
113+ } else if ( role === 'unified' ) {
114+ return renderUnified ( deepCopy )
110115 }
111116}
112117
113118export { renderLines }
114- export type { Type , Change , Line }
119+ export type { Type , Role , Change , Line }
0 commit comments