@@ -105,6 +105,10 @@ interface IItemHeightChangeParams {
105
105
height : number ;
106
106
}
107
107
108
+ interface IChatMarkdownRenderResult extends IMarkdownRenderResult {
109
+ codeBlockCount : number ;
110
+ }
111
+
108
112
const forceVerboseLayoutTracing = false ;
109
113
110
114
export interface IChatRendererDelegate {
@@ -481,11 +485,12 @@ export class ChatListItemRenderer extends Disposable implements ITreeRenderer<Ch
481
485
this . renderContentReferencesIfNeeded ( element , templateData , templateData . elementDisposables ) ;
482
486
483
487
let fileTreeIndex = 0 ;
488
+ let codeBlockIndex = 0 ;
484
489
value . forEach ( ( data , index ) => {
485
490
const result = data . kind === 'treeData'
486
491
? this . renderTreeData ( data . treeData , element , templateData , fileTreeIndex ++ )
487
492
: data . kind === 'markdownContent'
488
- ? this . renderMarkdown ( data . content , element , templateData , fillInIncompleteTokens )
493
+ ? this . renderMarkdown ( data . content , element , templateData , fillInIncompleteTokens , codeBlockIndex )
489
494
: data . kind === 'progressMessage' && onlyProgressMessagesAfterI ( value , index ) ? this . renderProgressMessage ( data , false ) // TODO render command
490
495
: data . kind === 'progressTask' ? this . renderProgressTask ( data , false , element , templateData )
491
496
: data . kind === 'command' ? this . renderCommandButton ( element , data )
@@ -497,6 +502,10 @@ export class ChatListItemRenderer extends Disposable implements ITreeRenderer<Ch
497
502
if ( result ) {
498
503
templateData . value . appendChild ( result . element ) ;
499
504
templateData . elementDisposables . add ( result ) ;
505
+
506
+ if ( 'codeBlockCount' in result ) {
507
+ codeBlockIndex += ( result as IChatMarkdownRenderResult ) . codeBlockCount ;
508
+ }
500
509
}
501
510
} ) ;
502
511
@@ -1119,13 +1128,13 @@ export class ChatListItemRenderer extends Disposable implements ITreeRenderer<Ch
1119
1128
} ;
1120
1129
}
1121
1130
1122
- private renderMarkdown ( markdown : IMarkdownString , element : ChatTreeItem , templateData : IChatListItemTemplate , fillInIncompleteTokens = false ) : IMarkdownRenderResult {
1131
+ private renderMarkdown ( markdown : IMarkdownString , element : ChatTreeItem , templateData : IChatListItemTemplate , fillInIncompleteTokens = false , codeBlockStartIndex = 0 ) : IChatMarkdownRenderResult {
1123
1132
const disposables = new DisposableStore ( ) ;
1124
1133
1125
1134
// We release editors in order so that it's more likely that the same editor will be assigned if this element is re-rendered right away, like it often is during progressive rendering
1126
1135
const orderedDisposablesList : IDisposable [ ] = [ ] ;
1127
1136
const codeblocks : IChatCodeBlockInfo [ ] = [ ] ;
1128
- let codeBlockIndex = 0 ;
1137
+ let codeBlockIndex = codeBlockStartIndex ;
1129
1138
const result = this . renderer . render ( markdown , {
1130
1139
fillInIncompleteTokens,
1131
1140
codeBlockRendererSync : ( languageId , text ) => {
@@ -1193,6 +1202,7 @@ export class ChatListItemRenderer extends Disposable implements ITreeRenderer<Ch
1193
1202
1194
1203
orderedDisposablesList . reverse ( ) . forEach ( d => disposables . add ( d ) ) ;
1195
1204
return {
1205
+ codeBlockCount : codeBlockIndex - codeBlockStartIndex ,
1196
1206
element : result . element ,
1197
1207
dispose ( ) {
1198
1208
result . dispose ( ) ;
0 commit comments