@@ -105,6 +105,10 @@ interface IItemHeightChangeParams {
105105 height : number ;
106106}
107107
108+ interface IChatMarkdownRenderResult extends IMarkdownRenderResult {
109+ codeBlockCount : number ;
110+ }
111+
108112const forceVerboseLayoutTracing = false ;
109113
110114export interface IChatRendererDelegate {
@@ -481,11 +485,12 @@ export class ChatListItemRenderer extends Disposable implements ITreeRenderer<Ch
481485 this . renderContentReferencesIfNeeded ( element , templateData , templateData . elementDisposables ) ;
482486
483487 let fileTreeIndex = 0 ;
488+ let codeBlockIndex = 0 ;
484489 value . forEach ( ( data , index ) => {
485490 const result = data . kind === 'treeData'
486491 ? this . renderTreeData ( data . treeData , element , templateData , fileTreeIndex ++ )
487492 : data . kind === 'markdownContent'
488- ? this . renderMarkdown ( data . content , element , templateData , fillInIncompleteTokens )
493+ ? this . renderMarkdown ( data . content , element , templateData , fillInIncompleteTokens , codeBlockIndex )
489494 : data . kind === 'progressMessage' && onlyProgressMessagesAfterI ( value , index ) ? this . renderProgressMessage ( data , false ) // TODO render command
490495 : data . kind === 'progressTask' ? this . renderProgressTask ( data , false , element , templateData )
491496 : data . kind === 'command' ? this . renderCommandButton ( element , data )
@@ -497,6 +502,10 @@ export class ChatListItemRenderer extends Disposable implements ITreeRenderer<Ch
497502 if ( result ) {
498503 templateData . value . appendChild ( result . element ) ;
499504 templateData . elementDisposables . add ( result ) ;
505+
506+ if ( 'codeBlockCount' in result ) {
507+ codeBlockIndex += ( result as IChatMarkdownRenderResult ) . codeBlockCount ;
508+ }
500509 }
501510 } ) ;
502511
@@ -1119,13 +1128,13 @@ export class ChatListItemRenderer extends Disposable implements ITreeRenderer<Ch
11191128 } ;
11201129 }
11211130
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 {
11231132 const disposables = new DisposableStore ( ) ;
11241133
11251134 // 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
11261135 const orderedDisposablesList : IDisposable [ ] = [ ] ;
11271136 const codeblocks : IChatCodeBlockInfo [ ] = [ ] ;
1128- let codeBlockIndex = 0 ;
1137+ let codeBlockIndex = codeBlockStartIndex ;
11291138 const result = this . renderer . render ( markdown , {
11301139 fillInIncompleteTokens,
11311140 codeBlockRendererSync : ( languageId , text ) => {
@@ -1193,6 +1202,7 @@ export class ChatListItemRenderer extends Disposable implements ITreeRenderer<Ch
11931202
11941203 orderedDisposablesList . reverse ( ) . forEach ( d => disposables . add ( d ) ) ;
11951204 return {
1205+ codeBlockCount : codeBlockIndex - codeBlockStartIndex ,
11961206 element : result . element ,
11971207 dispose ( ) {
11981208 result . dispose ( ) ;
0 commit comments