mirror of
https://github.com/microsoft/vscode.git
synced 2026-07-07 15:26:49 +01:00
Remove Inline Edit accept partial flow (#244968)
This commit is contained in:
committed by
GitHub
parent
328c1974fb
commit
3dcca830e6
@@ -261,25 +261,6 @@ export class JumpToNextInlineEdit extends EditorAction {
|
||||
}
|
||||
}
|
||||
|
||||
export class AcceptNextInlineEditPart extends EditorAction {
|
||||
constructor() {
|
||||
super({
|
||||
id: 'editor.action.inlineSuggest.acceptNextInlineEditPart',
|
||||
label: nls.localize2('action.inlineSuggest.acceptNextInlineEditPart', "Accept Next Inline Edit Part"),
|
||||
precondition: ContextKeyExpr.and(EditorContextKeys.writable, InlineCompletionContextKeys.inlineEditVisible),
|
||||
kbOpts: {
|
||||
weight: KeybindingWeight.EditorContrib + 1,
|
||||
kbExpr: ContextKeyExpr.and(EditorContextKeys.writable, InlineCompletionContextKeys.inlineEditVisible),
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
public async run(accessor: ServicesAccessor | undefined, editor: ICodeEditor): Promise<void> {
|
||||
const controller = InlineCompletionsController.get(editor);
|
||||
await controller?.model.get()?.acceptNextInlineEditPart(controller.editor);
|
||||
}
|
||||
}
|
||||
|
||||
export class HideInlineCompletion extends EditorAction {
|
||||
public static ID = hideInlineCompletionId;
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ import { registerAction2 } from '../../../../platform/actions/common/actions.js'
|
||||
import { wrapInHotClass1 } from '../../../../platform/observable/common/wrapInHotClass.js';
|
||||
import { EditorContributionInstantiation, registerEditorAction, registerEditorCommand, registerEditorContribution } from '../../../browser/editorExtensions.js';
|
||||
import { HoverParticipantRegistry } from '../../hover/browser/hoverTypes.js';
|
||||
import { AcceptInlineCompletion, AcceptNextLineOfInlineCompletion, AcceptNextWordOfInlineCompletion, DevExtractReproSample, HideInlineCompletion, JumpToNextInlineEdit, ShowNextInlineSuggestionAction, ShowPreviousInlineSuggestionAction, ToggleAlwaysShowInlineSuggestionToolbar, ExplicitTriggerInlineEditAction, TriggerInlineSuggestionAction, TriggerInlineEditAction, ToggleInlineCompletionShowCollapsed, AcceptNextInlineEditPart } from './controller/commands.js';
|
||||
import { AcceptInlineCompletion, AcceptNextLineOfInlineCompletion, AcceptNextWordOfInlineCompletion, DevExtractReproSample, HideInlineCompletion, JumpToNextInlineEdit, ShowNextInlineSuggestionAction, ShowPreviousInlineSuggestionAction, ToggleAlwaysShowInlineSuggestionToolbar, ExplicitTriggerInlineEditAction, TriggerInlineSuggestionAction, TriggerInlineEditAction, ToggleInlineCompletionShowCollapsed } from './controller/commands.js';
|
||||
import { InlineCompletionsController } from './controller/inlineCompletionsController.js';
|
||||
import { InlineCompletionsHoverParticipant } from './hintsWidget/hoverParticipant.js';
|
||||
import { InlineCompletionsAccessibleView } from './inlineCompletionsAccessibleView.js';
|
||||
@@ -29,7 +29,6 @@ registerEditorAction(AcceptNextLineOfInlineCompletion);
|
||||
registerEditorAction(AcceptInlineCompletion);
|
||||
registerEditorAction(ToggleInlineCompletionShowCollapsed);
|
||||
registerEditorAction(HideInlineCompletion);
|
||||
registerEditorAction(AcceptNextInlineEditPart);
|
||||
registerEditorAction(JumpToNextInlineEdit);
|
||||
registerAction2(ToggleAlwaysShowInlineSuggestionToolbar);
|
||||
registerEditorAction(DevExtractReproSample);
|
||||
|
||||
@@ -33,7 +33,7 @@ import { TextModelText } from '../../../../common/model/textModelText.js';
|
||||
import { IFeatureDebounceInformation } from '../../../../common/services/languageFeatureDebounce.js';
|
||||
import { IModelContentChangedEvent } from '../../../../common/textModelEvents.js';
|
||||
import { SnippetController2 } from '../../../snippet/browser/snippetController2.js';
|
||||
import { addPositions, getEndPositionsAfterApplying, getModifiedRangesAfterApplying, substringPos, subtractPositions } from '../utils.js';
|
||||
import { addPositions, getEndPositionsAfterApplying, substringPos, subtractPositions } from '../utils.js';
|
||||
import { AnimatedValue, easeOutCubic, ObservableAnimatedValue } from './animation.js';
|
||||
import { computeGhostText } from './computeGhostText.js';
|
||||
import { GhostText, GhostTextOrReplacement, ghostTextOrReplacementEquals, ghostTextsOrReplacementsEqual } from './ghostText.js';
|
||||
@@ -339,7 +339,6 @@ export class InlineCompletionsModel extends Disposable {
|
||||
}
|
||||
}
|
||||
|
||||
this._inAcceptPartialFlow.set(false, tx);
|
||||
this._isActive.set(false, tx);
|
||||
this._source.clear(tx);
|
||||
});
|
||||
@@ -674,12 +673,6 @@ export class InlineCompletionsModel extends Disposable {
|
||||
throw new BugIndicatingError();
|
||||
}
|
||||
|
||||
if (this._inAcceptPartialFlow.get()) {
|
||||
this._inAcceptPartialFlow.set(false, undefined);
|
||||
this.jump();
|
||||
return;
|
||||
}
|
||||
|
||||
let completionWithUpdatedRange: InlineCompletionWithUpdatedRange;
|
||||
|
||||
const state = this.state.get();
|
||||
@@ -851,68 +844,6 @@ export class InlineCompletionsModel extends Disposable {
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: clean this up if we keep it
|
||||
private readonly _inAcceptPartialFlow = observableValue(this, false);
|
||||
public readonly inPartialAcceptFlow: IObservable<boolean> = this._inAcceptPartialFlow;
|
||||
public async acceptNextInlineEditPart(editor: ICodeEditor): Promise<void> {
|
||||
if (editor.getModel() !== this.textModel) {
|
||||
throw new BugIndicatingError();
|
||||
}
|
||||
|
||||
const state = this.inlineEditState.get();
|
||||
const updatedEdit = state?.inlineCompletion.updatedEdit.get();
|
||||
const completion = state?.inlineCompletion.toInlineCompletion(undefined);
|
||||
if (!updatedEdit || updatedEdit.isEmpty || !completion) {
|
||||
return;
|
||||
}
|
||||
|
||||
const nextPart = updatedEdit.edits[0];
|
||||
|
||||
const edit = new SingleTextEdit(Range.fromPositions(
|
||||
this.textModel.getPositionAt(nextPart.replaceRange.start),
|
||||
this.textModel.getPositionAt(nextPart.replaceRange.endExclusive)
|
||||
), nextPart.newText);
|
||||
|
||||
const cursorAtStartPosition = this._editor.getSelection()?.getStartPosition().equals(edit.range.getStartPosition());
|
||||
if (!cursorAtStartPosition || !this._inAcceptPartialFlow.get()) {
|
||||
this._inAcceptPartialFlow.set(true, undefined);
|
||||
this.jump();
|
||||
return;
|
||||
}
|
||||
|
||||
const partToJumpToNext = updatedEdit.edits[1] ?? undefined;
|
||||
const editToJumpToNext = partToJumpToNext ? new SingleTextEdit(Range.fromPositions(
|
||||
this.textModel.getPositionAt(partToJumpToNext.replaceRange.start),
|
||||
this.textModel.getPositionAt(partToJumpToNext.replaceRange.endExclusive)
|
||||
), partToJumpToNext.newText) : undefined;
|
||||
|
||||
// Executing the edit might free the completion, so we have to hold a reference on it.
|
||||
completion.source.addRef();
|
||||
try {
|
||||
this._isAcceptingPartially = true;
|
||||
try {
|
||||
editor.pushUndoStop();
|
||||
|
||||
let selections;
|
||||
if (editToJumpToNext) {
|
||||
const [_, rangeOfEditToJumpTo] = getModifiedRangesAfterApplying([edit, editToJumpToNext]);
|
||||
selections = [Selection.fromPositions(rangeOfEditToJumpTo.getStartPosition())];
|
||||
} else {
|
||||
selections = getEndPositionsAfterApplying([edit]).map(p => Selection.fromPositions(p));
|
||||
}
|
||||
|
||||
const edits = [edit];
|
||||
editor.executeEdits('inlineSuggestion.accept', edits.map(edit => EditOperation.replace(edit.range, edit.text)));
|
||||
editor.setSelections(selections, 'inlineCompletionPartialAccept');
|
||||
editor.revealPositionInCenterIfOutsideViewport(editor.getPosition()!, ScrollType.Immediate);
|
||||
} finally {
|
||||
this._isAcceptingPartially = false;
|
||||
}
|
||||
} finally {
|
||||
completion.source.removeRef();
|
||||
}
|
||||
}
|
||||
|
||||
public handleSuggestAccepted(item: SuggestItemInfo) {
|
||||
const itemEdit = singleTextRemoveCommonPrefix(item.toSingleTextEdit(), this.textModel);
|
||||
const augmentedCompletion = this._computeAugmentation(itemEdit, undefined);
|
||||
|
||||
@@ -57,14 +57,12 @@ export class InlineEditModel implements IInlineEditModel {
|
||||
export class InlineEditHost implements IInlineEditHost {
|
||||
readonly onDidAccept: Event<void>;
|
||||
readonly inAcceptFlow: IObservable<boolean>;
|
||||
readonly inPartialAcceptFlow: IObservable<boolean>;
|
||||
|
||||
constructor(
|
||||
private readonly _model: InlineCompletionsModel,
|
||||
) {
|
||||
this.onDidAccept = this._model.onDidAccept;
|
||||
this.inAcceptFlow = this._model.inAcceptFlow;
|
||||
this.inPartialAcceptFlow = this._model.inPartialAcceptFlow;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -296,12 +296,7 @@ export class InlineEditsView extends Disposable {
|
||||
));
|
||||
|
||||
private getCacheId(model: IInlineEditModel) {
|
||||
const inlineEdit = model.inlineEdit;
|
||||
if (this._host.get()?.inPartialAcceptFlow.get()) {
|
||||
return `${inlineEdit.inlineCompletion.id}_${inlineEdit.edit.edits.map(innerEdit => innerEdit.range.toString() + innerEdit.text).join(',')}`;
|
||||
}
|
||||
|
||||
return inlineEdit.inlineCompletion.id;
|
||||
return model.inlineEdit.inlineCompletion.id;
|
||||
}
|
||||
|
||||
private determineView(model: IInlineEditModel, reader: IReader, diff: DetailedLineRangeMapping[], newText: StringText, originalDisplayRange: LineRange): string {
|
||||
|
||||
-1
@@ -22,7 +22,6 @@ export interface IInlineEditsView {
|
||||
|
||||
export interface IInlineEditHost {
|
||||
inAcceptFlow: IObservable<boolean>;
|
||||
inPartialAcceptFlow: IObservable<boolean>;
|
||||
}
|
||||
|
||||
export interface IInlineEditModel {
|
||||
|
||||
+1
-2
@@ -36,8 +36,7 @@ export class InlineEditsViewAndDiffProducer extends Disposable { // TODO: This c
|
||||
const editOffset = model.inlineEditState.get()?.inlineCompletion.updatedEdit.read(reader);
|
||||
if (!editOffset) { return undefined; }
|
||||
|
||||
const offsetEdits = model.inPartialAcceptFlow.read(reader) ? [editOffset.edits[0]] : editOffset.edits;
|
||||
const edits = offsetEdits.map(e => {
|
||||
const edits = editOffset.edits.map(e => {
|
||||
const innerEditRange = Range.fromPositions(
|
||||
textModel.getPositionAt(e.replaceRange.start),
|
||||
textModel.getPositionAt(e.replaceRange.endExclusive)
|
||||
|
||||
Reference in New Issue
Block a user