Skip to content

Commit b1cffad

Browse files
authored
Fixing incorrect color range calculation (microsoft#200626)
* fixing incorrect color new range calculation
1 parent cb0ff84 commit b1cffad

File tree

1 file changed

+8
-19
lines changed

1 file changed

+8
-19
lines changed

src/vs/editor/contrib/colorPicker/browser/colorHoverParticipant.ts

Lines changed: 8 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { AsyncIterableObject } from 'vs/base/common/async';
77
import { CancellationToken } from 'vs/base/common/cancellation';
88
import { Color, RGBA } from 'vs/base/common/color';
99
import { Disposable, DisposableStore, IDisposable } from 'vs/base/common/lifecycle';
10-
import { ICodeEditor } from 'vs/editor/browser/editorBrowser';
10+
import { IActiveCodeEditor, ICodeEditor } from 'vs/editor/browser/editorBrowser';
1111
import { EditorOption } from 'vs/editor/common/config/editorOptions';
1212
import { Range } from 'vs/editor/common/core/range';
1313
import { IModelDecoration, ITextModel, TrackedRangeStickiness } from 'vs/editor/common/model';
@@ -207,7 +207,7 @@ function renderHoverParts(participant: ColorHoverParticipant | StandaloneColorPi
207207
disposables.add(model.onColorFlushed(async (color: Color) => {
208208
await _updateColorPresentations(editorModel, model, color, range, colorHover);
209209
editorUpdatedByColorPicker = true;
210-
range = _updateEditorModel(editor, range, model, context);
210+
range = _updateEditorModel(editor, range, model);
211211
}));
212212
}
213213
disposables.add(model.onDidChangeColor((color: Color) => {
@@ -224,30 +224,19 @@ function renderHoverParts(participant: ColorHoverParticipant | StandaloneColorPi
224224
return disposables;
225225
}
226226

227-
function _updateEditorModel(editor: ICodeEditor, range: Range, model: ColorPickerModel, context?: IEditorHoverRenderContext) {
228-
let newRange: Range;
227+
function _updateEditorModel(editor: IActiveCodeEditor, range: Range, model: ColorPickerModel): Range {
229228
const textEdits: ISingleEditOperation[] = [];
230-
if (model.presentation.textEdit) {
231-
textEdits.push(model.presentation.textEdit);
232-
newRange = new Range(
233-
model.presentation.textEdit.range.startLineNumber,
234-
model.presentation.textEdit.range.startColumn,
235-
model.presentation.textEdit.range.endLineNumber,
236-
model.presentation.textEdit.range.endColumn
237-
);
238-
const trackedRange = editor.getModel()!._setTrackedRange(null, newRange, TrackedRangeStickiness.GrowsOnlyWhenTypingAfter);
239-
newRange = editor.getModel()!._getTrackedRange(trackedRange) || newRange;
240-
} else {
241-
textEdits.push({ range, text: model.presentation.label, forceMoveMarkers: false });
242-
newRange = range.setEndPosition(range.endLineNumber, range.startColumn + model.presentation.label.length);
243-
}
229+
const edit = model.presentation.textEdit ?? { range, text: model.presentation.label, forceMoveMarkers: false };
230+
textEdits.push(edit);
244231

245232
if (model.presentation.additionalTextEdits) {
246233
textEdits.push(...model.presentation.additionalTextEdits);
247234
}
235+
const replaceRange = Range.lift(edit.range);
236+
const trackedRange = editor.getModel()._setTrackedRange(null, replaceRange, TrackedRangeStickiness.GrowsOnlyWhenTypingAfter);
248237
editor.executeEdits('colorpicker', textEdits);
249238
editor.pushUndoStop();
250-
return newRange;
239+
return editor.getModel()._getTrackedRange(trackedRange) ?? replaceRange;
251240
}
252241

253242
async function _updateColorPresentations(editorModel: ITextModel, colorPickerModel: ColorPickerModel, color: Color, range: Range, colorHover: ColorHover | StandaloneColorPickerHover) {

0 commit comments

Comments
 (0)