Skip to content

Commit 48d1ad4

Browse files
authored
Uses diff editor v2 in inline chat. (microsoft#187928)
1 parent 80b3fcc commit 48d1ad4

File tree

4 files changed

+57
-6
lines changed

4 files changed

+57
-6
lines changed

src/vs/editor/browser/widget/diffEditorWidget2/diffEditorWidget2.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,10 @@ export class DiffEditorWidget2 extends DelegatingEditor implements IDiffEditor {
220220
}));
221221
}
222222

223+
public getContentHeight() {
224+
return this._editors.modified.getContentHeight();
225+
}
226+
223227
protected _createInnerEditor(instantiationService: IInstantiationService, container: HTMLElement, options: Readonly<IEditorConstructionOptions>, editorWidgetOptions: ICodeEditorWidgetOptions): CodeEditorWidget {
224228
const editor = instantiationService.createInstance(CodeEditorWidget, container, options, editorWidgetOptions);
225229
return editor;

src/vs/editor/browser/widget/embeddedCodeEditorWidget.ts

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService
2020
import { IEditorProgressService } from 'vs/platform/progress/common/progress';
2121
import { ILanguageConfigurationService } from 'vs/editor/common/languages/languageConfigurationRegistry';
2222
import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures';
23+
import { DiffEditorWidget2 } from 'vs/editor/browser/widget/diffEditorWidget2/diffEditorWidget2';
2324

2425
export class EmbeddedCodeEditorWidget extends CodeEditorWidget {
2526

@@ -67,6 +68,9 @@ export class EmbeddedCodeEditorWidget extends CodeEditorWidget {
6768
}
6869
}
6970

71+
/**
72+
* @deprecated Use EmbeddedDiffEditorWidget2 instead.
73+
*/
7074
export class EmbeddedDiffEditorWidget extends DiffEditorWidget {
7175

7276
private readonly _parentEditor: ICodeEditor;
@@ -111,3 +115,46 @@ export class EmbeddedDiffEditorWidget extends DiffEditorWidget {
111115
super.updateOptions(this._overwriteOptions);
112116
}
113117
}
118+
119+
/**
120+
* TODO: Rename to EmbeddedDiffEditorWidget once EmbeddedDiffEditorWidget is removed.
121+
*/
122+
export class EmbeddedDiffEditorWidget2 extends DiffEditorWidget2 {
123+
124+
private readonly _parentEditor: ICodeEditor;
125+
private readonly _overwriteOptions: IDiffEditorOptions;
126+
127+
constructor(
128+
domElement: HTMLElement,
129+
options: Readonly<IDiffEditorConstructionOptions>,
130+
codeEditorWidgetOptions: IDiffCodeEditorWidgetOptions,
131+
parentEditor: ICodeEditor,
132+
@IContextKeyService contextKeyService: IContextKeyService,
133+
@IInstantiationService instantiationService: IInstantiationService,
134+
@ICodeEditorService codeEditorService: ICodeEditorService,
135+
) {
136+
super(domElement, parentEditor.getRawOptions(), codeEditorWidgetOptions, contextKeyService, instantiationService, codeEditorService);
137+
138+
this._parentEditor = parentEditor;
139+
this._overwriteOptions = options;
140+
141+
// Overwrite parent's options
142+
super.updateOptions(this._overwriteOptions);
143+
144+
this._register(parentEditor.onDidChangeConfiguration(e => this._onParentConfigurationChanged(e)));
145+
}
146+
147+
getParentEditor(): ICodeEditor {
148+
return this._parentEditor;
149+
}
150+
151+
private _onParentConfigurationChanged(e: ConfigurationChangedEvent): void {
152+
super.updateOptions(this._parentEditor.getRawOptions());
153+
super.updateOptions(this._overwriteOptions);
154+
}
155+
156+
override updateOptions(newOptions: IEditorOptions): void {
157+
objects.mixin(this._overwriteOptions, newOptions, true);
158+
super.updateOptions(this._overwriteOptions);
159+
}
160+
}

src/vs/workbench/contrib/inlineChat/browser/inlineChatLivePreviewWidget.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { Dimension, h } from 'vs/base/browser/dom';
77
import { DisposableStore, MutableDisposable } from 'vs/base/common/lifecycle';
88
import { assertType } from 'vs/base/common/types';
99
import { ICodeEditor, IDiffEditor } from 'vs/editor/browser/editorBrowser';
10-
import { EmbeddedCodeEditorWidget, EmbeddedDiffEditorWidget } from 'vs/editor/browser/widget/embeddedCodeEditorWidget';
10+
import { EmbeddedCodeEditorWidget, EmbeddedDiffEditorWidget2 } from 'vs/editor/browser/widget/embeddedCodeEditorWidget';
1111
import { EditorOption } from 'vs/editor/common/config/editorOptions';
1212
import { Range } from 'vs/editor/common/core/range';
1313
import { ITextModel } from 'vs/editor/common/model';
@@ -62,7 +62,7 @@ export class InlineChatLivePreviewWidget extends ZoneWidget {
6262
.getEditorContributions()
6363
.filter(c => c.id !== INLINE_CHAT_ID && c.id !== FoldingController.ID);
6464

65-
this._diffEditor = instantiationService.createInstance(EmbeddedDiffEditorWidget, this._elements.domNode, {
65+
this._diffEditor = instantiationService.createInstance(EmbeddedDiffEditorWidget2, this._elements.domNode, {
6666
scrollbar: { useShadows: false, alwaysConsumeMouseWheel: false },
6767
scrollBeyondLastLine: false,
6868
renderMarginRevertIcon: true,

src/vs/workbench/contrib/inlineChat/browser/inlineChatWidget.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import { EditorExtensionsRegistry } from 'vs/editor/browser/editorExtensions';
2222
import { SnippetController2 } from 'vs/editor/contrib/snippet/browser/snippetController2';
2323
import { IModelService } from 'vs/editor/common/services/model';
2424
import { URI } from 'vs/base/common/uri';
25-
import { EmbeddedCodeEditorWidget, EmbeddedDiffEditorWidget } from 'vs/editor/browser/widget/embeddedCodeEditorWidget';
25+
import { EmbeddedCodeEditorWidget, EmbeddedDiffEditorWidget2 } from 'vs/editor/browser/widget/embeddedCodeEditorWidget';
2626
import { HiddenItemStrategy, MenuWorkbenchToolBar } from 'vs/platform/actions/browser/toolbar';
2727
import { ProgressBar } from 'vs/base/browser/ui/progressbar/progressbar';
2828
import { SuggestController } from 'vs/editor/contrib/suggest/browser/suggestController';
@@ -164,7 +164,7 @@ export class InlineChatWidget {
164164

165165
private readonly _progressBar: ProgressBar;
166166

167-
private readonly _previewDiffEditor: IdleValue<EmbeddedDiffEditorWidget>;
167+
private readonly _previewDiffEditor: IdleValue<EmbeddedDiffEditorWidget2>;
168168
private readonly _previewDiffModel = this._store.add(new MutableDisposable());
169169

170170
private readonly _previewCreateTitle: ResourceLabel;
@@ -329,7 +329,7 @@ export class InlineChatWidget {
329329
this._store.add(feedbackToolbar);
330330

331331
// preview editors
332-
this._previewDiffEditor = new IdleValue(() => this._store.add(_instantiationService.createInstance(EmbeddedDiffEditorWidget, this._elements.previewDiff, _previewEditorEditorOptions, { modifiedEditor: codeEditorWidgetOptions, originalEditor: codeEditorWidgetOptions }, parentEditor)));
332+
this._previewDiffEditor = new IdleValue(() => this._store.add(_instantiationService.createInstance(EmbeddedDiffEditorWidget2, this._elements.previewDiff, _previewEditorEditorOptions, { modifiedEditor: codeEditorWidgetOptions, originalEditor: codeEditorWidgetOptions }, parentEditor)));
333333

334334
this._previewCreateTitle = this._store.add(_instantiationService.createInstance(ResourceLabel, this._elements.previewCreateTitle, { supportIcons: true }));
335335
this._previewCreateEditor = new IdleValue(() => this._store.add(_instantiationService.createInstance(EmbeddedCodeEditorWidget, this._elements.previewCreate, _previewEditorEditorOptions, codeEditorWidgetOptions, parentEditor)));
@@ -408,7 +408,7 @@ export class InlineChatWidget {
408408
const base = getTotalHeight(this._elements.progress) + getTotalHeight(this._elements.status);
409409
const editorHeight = this._inputEditor.getContentHeight() + 12 /* padding and border */;
410410
const markdownMessageHeight = getTotalHeight(this._elements.markdownMessage);
411-
const previewDiffHeight = this._previewDiffEditor.value.getModel().modified ? 12 + Math.min(300, Math.max(0, this._previewDiffEditor.value.getContentHeight())) : 0;
411+
const previewDiffHeight = this._previewDiffEditor.value.getModel() ? 12 + Math.min(300, Math.max(0, this._previewDiffEditor.value.getContentHeight())) : 0;
412412
const previewCreateTitleHeight = getTotalHeight(this._elements.previewCreateTitle);
413413
const previewCreateHeight = this._previewCreateEditor.value.getModel() ? 18 + Math.min(300, Math.max(0, this._previewCreateEditor.value.getContentHeight())) : 0;
414414
return base + editorHeight + markdownMessageHeight + previewDiffHeight + previewCreateTitleHeight + previewCreateHeight + 18 /* padding */ + 8 /*shadow*/;

0 commit comments

Comments
 (0)