mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-15 10:58:31 -05:00
Merge from vscode 79a1f5a5ca0c6c53db617aa1fa5a2396d2caebe2
This commit is contained in:
@@ -113,12 +113,12 @@ interface IRawConfig {
|
||||
|
||||
const DEFAULT_EOL = (platform.isLinux || platform.isMacintosh) ? DefaultEndOfLine.LF : DefaultEndOfLine.CRLF;
|
||||
|
||||
interface EditStackPastFutureElements {
|
||||
export interface EditStackPastFutureElements {
|
||||
past: EditStackElement[];
|
||||
future: EditStackElement[];
|
||||
}
|
||||
|
||||
function isEditStackPastFutureElements(undoElements: IPastFutureElements): undoElements is EditStackPastFutureElements {
|
||||
export function isEditStackPastFutureElements(undoElements: IPastFutureElements): undoElements is EditStackPastFutureElements {
|
||||
return (isEditStackElements(undoElements.past) && isEditStackElements(undoElements.future));
|
||||
}
|
||||
|
||||
|
||||
66
src/vs/editor/common/services/modelUndoRedoParticipant.ts
Normal file
66
src/vs/editor/common/services/modelUndoRedoParticipant.ts
Normal file
@@ -0,0 +1,66 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { IModelService } from 'vs/editor/common/services/modelService';
|
||||
import { ITextModelService } from 'vs/editor/common/services/resolverService';
|
||||
import { Disposable, IDisposable, dispose } from 'vs/base/common/lifecycle';
|
||||
import { IUndoRedoService, UndoRedoElementType } from 'vs/platform/undoRedo/common/undoRedo';
|
||||
import { isEditStackPastFutureElements } from 'vs/editor/common/services/modelServiceImpl';
|
||||
import { IUndoRedoDelegate, MultiModelEditStackElement } from 'vs/editor/common/model/editStack';
|
||||
|
||||
export class ModelUndoRedoParticipant extends Disposable implements IUndoRedoDelegate {
|
||||
constructor(
|
||||
@IModelService private readonly _modelService: IModelService,
|
||||
@ITextModelService private readonly _textModelService: ITextModelService,
|
||||
@IUndoRedoService private readonly _undoRedoService: IUndoRedoService,
|
||||
) {
|
||||
super();
|
||||
this._register(this._modelService.onModelRemoved((model) => {
|
||||
// a model will get disposed, so let's check if the undo redo stack is maintained
|
||||
const elements = this._undoRedoService.getElements(model.uri);
|
||||
if (elements.past.length === 0 && elements.future.length === 0) {
|
||||
return;
|
||||
}
|
||||
if (!isEditStackPastFutureElements(elements)) {
|
||||
return;
|
||||
}
|
||||
for (const element of elements.past) {
|
||||
if (element.type === UndoRedoElementType.Workspace) {
|
||||
element.setDelegate(this);
|
||||
}
|
||||
}
|
||||
for (const element of elements.future) {
|
||||
if (element.type === UndoRedoElementType.Workspace) {
|
||||
element.setDelegate(this);
|
||||
}
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
public prepareUndoRedo(element: MultiModelEditStackElement): IDisposable | Promise<IDisposable> {
|
||||
// Load all the needed text models
|
||||
const missingModels = element.getMissingModels();
|
||||
if (missingModels.length === 0) {
|
||||
// All models are available!
|
||||
return Disposable.None;
|
||||
}
|
||||
|
||||
const disposablesPromises = missingModels.map(async (uri) => {
|
||||
try {
|
||||
const reference = await this._textModelService.createModelReference(uri);
|
||||
return <IDisposable>reference;
|
||||
} catch (err) {
|
||||
// This model could not be loaded, maybe it was deleted in the meantime?
|
||||
return Disposable.None;
|
||||
}
|
||||
});
|
||||
|
||||
return Promise.all(disposablesPromises).then(disposables => {
|
||||
return {
|
||||
dispose: () => dispose(disposables)
|
||||
};
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -26,9 +26,9 @@ export interface ITextModelService {
|
||||
registerTextModelContentProvider(scheme: string, provider: ITextModelContentProvider): IDisposable;
|
||||
|
||||
/**
|
||||
* Check if a provider for the given `scheme` exists
|
||||
* Check if the given resource can be resolved to a text model.
|
||||
*/
|
||||
hasTextModelContentProvider(scheme: string): boolean;
|
||||
canHandleResource(resource: URI): boolean;
|
||||
}
|
||||
|
||||
export interface ITextModelContentProvider {
|
||||
|
||||
Reference in New Issue
Block a user