Merge from vscode 1b314ab317fbff7d799b21754326b7d849889ceb

This commit is contained in:
ADS Merger
2020-07-15 23:51:18 +00:00
parent aae013d498
commit 9d3f12d0b7
554 changed files with 15159 additions and 8223 deletions

View File

@@ -36,13 +36,13 @@ export interface IDraggedResource {
isExternal: boolean;
}
interface ISerializedDraggedResource {
resource: string;
}
export class DraggedEditorIdentifier {
constructor(private _identifier: IEditorIdentifier) { }
get identifier(): IEditorIdentifier {
return this._identifier;
}
constructor(public readonly identifier: IEditorIdentifier) { }
}
export class DraggedEditorGroupIdentifier {
@@ -50,20 +50,16 @@ export class DraggedEditorGroupIdentifier {
constructor(public readonly identifier: GroupIdentifier) { }
}
export interface IDraggedEditor extends IDraggedResource {
content?: string;
interface IDraggedEditorProps {
dirtyContent?: string;
encoding?: string;
mode?: string;
options?: ITextEditorOptions;
}
export interface ISerializedDraggedEditor {
resource: string;
content?: string;
encoding?: string;
mode?: string;
options?: ITextEditorOptions;
}
export interface IDraggedEditor extends IDraggedResource, IDraggedEditorProps { }
export interface ISerializedDraggedEditor extends ISerializedDraggedResource, IDraggedEditorProps { }
export const CodeDataTransfers = {
EDITORS: 'CodeEditors',
@@ -85,7 +81,7 @@ export function extractResources(e: DragEvent, externalOnly?: boolean): Array<ID
draggedEditors.forEach(draggedEditor => {
resources.push({
resource: URI.parse(draggedEditor.resource),
content: draggedEditor.content,
dirtyContent: draggedEditor.dirtyContent,
options: draggedEditor.options,
encoding: draggedEditor.encoding,
mode: draggedEditor.mode,
@@ -182,13 +178,12 @@ export class ResourcesDropHandler {
// Check for special things being dropped
const isWorkspaceOpening = await this.doHandleDrop(untitledOrFileResources);
if (isWorkspaceOpening) {
return; // return early if the drop operation resulted in this window changing to a workspace
}
// Add external ones to recently open list unless dropped resource is a workspace
const recentFiles: IRecentFile[] = untitledOrFileResources.filter(d => d.isExternal && d.resource.scheme === Schemas.file).map(d => ({ fileUri: d.resource }));
const recentFiles: IRecentFile[] = untitledOrFileResources.filter(untitledOrFileResource => untitledOrFileResource.isExternal && untitledOrFileResource.resource.scheme === Schemas.file).map(d => ({ fileUri: d.resource }));
if (recentFiles.length) {
this.workspacesService.addRecentlyOpened(recentFiles);
}
@@ -215,15 +210,15 @@ export class ResourcesDropHandler {
private async doHandleDrop(untitledOrFileResources: Array<IDraggedResource | IDraggedEditor>): Promise<boolean> {
// Check for dirty editors being dropped
const resourcesWithContent: IDraggedEditor[] = untitledOrFileResources.filter(resource => !resource.isExternal && !!(resource as IDraggedEditor).content);
if (resourcesWithContent.length > 0) {
await Promise.all(resourcesWithContent.map(resourceWithContent => this.handleDirtyEditorDrop(resourceWithContent)));
const dirtyEditors: IDraggedEditor[] = untitledOrFileResources.filter(untitledOrFileResource => !untitledOrFileResource.isExternal && typeof (untitledOrFileResource as IDraggedEditor).dirtyContent === 'string');
if (dirtyEditors.length > 0) {
await Promise.all(dirtyEditors.map(dirtyEditor => this.handleDirtyEditorDrop(dirtyEditor)));
return false;
}
// Check for workspace file being dropped if we are allowed to do so
if (this.options.allowWorkspaceOpen) {
const externalFileOnDiskResources = untitledOrFileResources.filter(d => d.isExternal && d.resource.scheme === Schemas.file).map(d => d.resource);
const externalFileOnDiskResources = untitledOrFileResources.filter(untitledOrFileResource => untitledOrFileResource.isExternal && untitledOrFileResource.resource.scheme === Schemas.file).map(d => d.resource);
if (externalFileOnDiskResources.length > 0) {
return this.handleWorkspaceFileDrop(externalFileOnDiskResources);
}
@@ -249,9 +244,9 @@ export class ResourcesDropHandler {
// If the dropped editor is dirty with content we simply take that
// content and turn it into a backup so that it loads the contents
if (droppedDirtyEditor.content) {
if (typeof droppedDirtyEditor.dirtyContent === 'string') {
try {
await this.backupFileService.backup(droppedDirtyEditor.resource, stringToSnapshot(droppedDirtyEditor.content));
await this.backupFileService.backup(droppedDirtyEditor.resource, stringToSnapshot(droppedDirtyEditor.dirtyContent));
} catch (e) {
// Ignore error
}
@@ -331,9 +326,9 @@ export function fillResourceDataTransfers(accessor: ServicesAccessor, resources:
}
// Resource URLs: allows to drop multiple resources to a target in VS Code (not directories)
const files = sources.filter(s => !s.isDirectory);
const files = sources.filter(source => !source.isDirectory);
if (files.length) {
event.dataTransfer.setData(DataTransfers.RESOURCES, JSON.stringify(files.map(f => f.resource.toString())));
event.dataTransfer.setData(DataTransfers.RESOURCES, JSON.stringify(files.map(file => file.resource.toString())));
}
// Editors: enables cross window DND of tabs into the editor area
@@ -380,13 +375,13 @@ export function fillResourceDataTransfers(accessor: ServicesAccessor, resources:
// If the resource is dirty or untitled, send over its content
// to restore dirty state. Get that from the text model directly
let content: string | undefined = undefined;
let dirtyContent: string | undefined = undefined;
if (model?.isDirty()) {
content = model.textEditorModel.getValue();
dirtyContent = model.textEditorModel.getValue();
}
// Add as dragged editor
draggedEditors.push({ resource: file.resource.toString(), content, options, encoding, mode });
draggedEditors.push({ resource: file.resource.toString(), dirtyContent, options, encoding, mode });
});
if (draggedEditors.length) {