@@ -90,7 +90,7 @@ export class LivePreviewDiffDecorationModel extends Disposable {
9090 // Parts that require snapshots
9191 private addedRangeDec : EnhanceDecorationsCollection ;
9292 private partialEditWidgetList : AcceptPartialEditWidget [ ] = [ ] ;
93- private removedZoneWidgets : Array < RemovedZoneWidget > = [ ] ;
93+ private removedZoneWidgets : RemovedZoneWidget [ ] = [ ] ;
9494 private zone : LineRange ;
9595
9696 constructor ( private readonly monacoEditor : ICodeEditor ) {
@@ -515,17 +515,29 @@ export class LivePreviewDiffDecorationModel extends Disposable {
515515 return newElement ;
516516 }
517517
518- /**
519- * 获取当前编辑器的代码采纳状态
520- * 1. 已经采纳的代码信息
521- * 2. 还未处理的代码信息
522- */
523- getTotalCodeInfo ( ) : ITotalCodeInfo {
524- const resolvedList = this . partialEditWidgetList . filter ( ( w ) => w . isAccepted ) ;
525- const unresolvedList = this . partialEditWidgetList . filter ( ( w ) => w . isPending ) ;
526-
527- const resolvedStatus = caculate ( resolvedList ) ;
528- const unresolvedStatus = caculate ( unresolvedList ) ;
518+ static computeCodeInfo (
519+ partialEditWidgetList : AcceptPartialEditWidget [ ] ,
520+ addedDecList : IEnhanceModelDeltaDecoration [ ] ,
521+ removedWidgetList : RemovedZoneWidget [ ] ,
522+ ) : ITotalCodeInfo {
523+ // 代码除了新增和删除行,还需要统计变更行
524+ // 1. 新增 N 行 => N
525+ // 2. 删除 N 行 => N
526+ // 3. 新增 M 行,删除 N 行 => max(M, N)
527+ // 综上所述,变更行数 = sum(list.map(item => max(新增行数, 删除行数)))
528+ const resolvedStatus = caculate ( partialEditWidgetList ) ;
529+ const unresolvedStatus = { added : 0 , deleted : 0 , changed : 0 } ;
530+ partialEditWidgetList . forEach ( ( v , idx ) => {
531+ if ( v . status === 'pending' ) {
532+ const addedDec = addedDecList [ idx ] ;
533+ const removedWidget = removedWidgetList [ idx ] ;
534+ const addedLinesCount = addedDec ?. length || 0 ;
535+ const deletedLinesCount = removedWidget ?. height || 0 ;
536+ unresolvedStatus . added += addedLinesCount ;
537+ unresolvedStatus . deleted += deletedLinesCount ;
538+ unresolvedStatus . changed += Math . max ( addedLinesCount , deletedLinesCount ) ;
539+ }
540+ } ) ;
529541
530542 return {
531543 totalAddedLinesCount : resolvedStatus . added ,
@@ -536,11 +548,6 @@ export class LivePreviewDiffDecorationModel extends Disposable {
536548 unresolvedChangedLinesCount : unresolvedStatus . changed ,
537549 } ;
538550
539- // 代码除了新增和删除行,还需要统计变更行
540- // 1. 新增 N 行 => N
541- // 2. 删除 N 行 => N
542- // 3. 新增 M 行,删除 N 行 => max(M, N)
543- // 综上所述,变更行数 = sum(list.map(item => max(新增行数, 删除行数)))
544551 function caculate ( list : AcceptPartialEditWidget [ ] ) {
545552 const result = { added : 0 , deleted : 0 , changed : 0 } ;
546553 list . forEach ( ( widget ) => {
@@ -554,6 +561,19 @@ export class LivePreviewDiffDecorationModel extends Disposable {
554561 }
555562 }
556563
564+ /**
565+ * 获取当前编辑器的代码采纳状态
566+ * 1. 已经采纳的代码信息
567+ * 2. 还未处理的代码信息
568+ */
569+ getTotalCodeInfo ( ) : ITotalCodeInfo {
570+ const partialEditWidgetList = this . partialEditWidgetList ;
571+ const addedDecList = this . addedRangeDec . getDecorations ( ) ;
572+ const removedWidgetList = this . removedZoneWidgets ;
573+
574+ return LivePreviewDiffDecorationModel . computeCodeInfo ( partialEditWidgetList , addedDecList , removedWidgetList ) ;
575+ }
576+
557577 /**
558578 * 记录 partial edit widget 与 added range 的映射关系(主要用于位置计算)
559579 */
0 commit comments