Skip to content

Commit 89de5a8

Browse files
authored
Count codeblocks correctly in basicRenderElement (#214180)
Not trying to fix progressive rendering here Better fix for #214071
1 parent 0964d9a commit 89de5a8

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

src/vs/workbench/contrib/chat/browser/chatListRenderer.ts

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,10 @@ interface IItemHeightChangeParams {
105105
height: number;
106106
}
107107

108+
interface IChatMarkdownRenderResult extends IMarkdownRenderResult {
109+
codeBlockCount: number;
110+
}
111+
108112
const forceVerboseLayoutTracing = false;
109113

110114
export 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

Comments
 (0)