import { Injector } from '@opensumi/di'; import { Disposable, Emitter, Event } from '@opensumi/ide-core-browser'; import { ICodeEditor, ITextModel, Range, Selection } from '@opensumi/ide-monaco'; import { ISettableObservable } from '@opensumi/ide-monaco/lib/common/observable'; import { LineRange } from '@opensumi/monaco-editor-core/esm/vs/editor/common/core/lineRange'; import { LineTokens } from '@opensumi/monaco-editor-core/esm/vs/editor/common/tokens/lineTokens'; import { UndoRedoGroup } from '@opensumi/monaco-editor-core/esm/vs/platform/undoRedo/common/undoRedo'; import { LivePreviewDiffDecorationModel } from './live-preview.decoration'; import type { IDiffPreviewerOptions, IInlineDiffPreviewerNode } from '../inline-diff/inline-diff-previewer'; interface IRangeChangeData { removedTextLines: string[]; removedLinesOriginalRange: LineRange; addedRange: LineRange; relativeInnerChanges: { originalRange: Range; modifiedRange: Range; }[] | undefined; } export interface IComputeDiffData { newFullRangeTextLines: string[]; changes: IRangeChangeData[]; activeLine: number; pendingRange: LineRange; } export declare enum EComputerMode { legacy = "legacy", default = "default" } /** * Abstract base class for inline streaming diff handlers */ export declare abstract class BaseInlineStreamDiffHandler extends Disposable implements IInlineDiffPreviewerNode { protected readonly monacoEditor: ICodeEditor; protected readonly injector: Injector; protected readonly _onDidEditChange: Emitter; readonly onDidEditChange: Event; protected readonly onDiffFinishedEmitter: Emitter; readonly onDiffFinished: Event; previewerOptions: IDiffPreviewerOptions; protected savedModel: ITextModel; protected virtualModel: ITextModel; protected rawSavedTextLines: string[]; protected rawOriginTextLinesTokens: LineTokens[] | undefined; protected undoRedoGroup: UndoRedoGroup; protected readonly finallyDiffModel: ISettableObservable; livePreviewDiffDecorationModel: LivePreviewDiffDecorationModel; get uri(): import("@opensumi/ide-monaco").Uri; constructor(monacoEditor: ICodeEditor); setPreviewerOptions(options: IDiffPreviewerOptions): void; abstract initialize(selection: Selection): void; getVirtualModelValue(): string; getOriginModelValue(): string; get onPartialEditWidgetListChange(): Event; protected computeDiff(originalTextLines: string[], newTextLines: string[], computerMode?: EComputerMode): IComputeDiffData; private calculateAddedDecorationCollectionState; private renderPartialEditWidgets; private renderAddedRangeDecoration; private renderRemovedRangeDecoration; /** * Get the original model for diff operations */ protected abstract getOriginalModel(): ITextModel; /** * 令当前的 inline diff 在流式渲染过程当中使用 pushEditOperations 进行编辑的操作都放在同一组 undo/redo 堆栈里 * 一旦撤销到最顶层则关闭当前的 inline diff */ private pushStackElement; protected renderDiffEdits(diffModel: IComputeDiffData): void; recompute(computerMode: EComputerMode, content?: string): IComputeDiffData; protected currentEditLine: number; protected isEditing: boolean; protected abstract processDiffComputation(currentText: string[], computerMode?: EComputerMode): IComputeDiffData; rateRenderEditController(): Promise; addLinesToDiff(newText: string, computerMode?: EComputerMode): void; pushRateFinallyDiffStack(diffModel: IComputeDiffData): void; finallyRender(diffModel: IComputeDiffData): void; hide(): void; resume(): void; acceptAll(): void; rejectAll(): void; revealFirstDiff(): void; getZone(): LineRange; getTotalCodeInfo(): import("./live-preview.decoration").ITotalCodeInfo; } /** * Regular inline stream diff handler (non-reverse mode) */ export declare class InlineStreamDiffHandler extends BaseInlineStreamDiffHandler { initialize(selection: Selection): void; protected processDiffComputation(currentText: string[], computerMode?: EComputerMode): IComputeDiffData; protected getOriginalModel(): ITextModel; } /** * Reverse inline stream diff handler * In reverse mode, the roles of savedModel and virtualModel are swapped */ export declare class ReverseInlineStreamDiffHandler extends BaseInlineStreamDiffHandler { recompute(computerMode: EComputerMode, content?: string): IComputeDiffData; initialize(): void; protected getOriginalModel(): ITextModel; protected processDiffComputation(currentText: string[], computerMode?: EComputerMode): IComputeDiffData; } export {}; //# sourceMappingURL=inline-stream-diff.handler.d.ts.map