Skip to content

Commit

Permalink
Fix default copy paste (#150495)
Browse files Browse the repository at this point in the history
Currently `editor.experimental.pasteActions.enabled` breaks pasting in editors that don't have a paste provider

This change fixes this by:

- Fix the `defaultPasteEditProvider` to return edits with the correct type
- Don't actually register `defaultPasteEditProvider`. This means that we can skip a bunch of logic if only the `defaultPasteEditProvider` is active for an editor
  • Loading branch information
mjbvz committed May 27, 2022
1 parent 6428d0f commit 5c77ef5
Showing 1 changed file with 8 additions and 8 deletions.
16 changes: 8 additions & 8 deletions src/vs/editor/contrib/copyPaste/browser/copyPasteController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import { Mimes } from 'vs/base/common/mime';
import { generateUuid } from 'vs/base/common/uuid';
import { toVSDataTransfer } from 'vs/editor/browser/dnd';
import { ICodeEditor } from 'vs/editor/browser/editorBrowser';
import { IBulkEditService, ResourceEdit, ResourceTextEdit } from 'vs/editor/browser/services/bulkEditService';
import { IBulkEditService, ResourceEdit } from 'vs/editor/browser/services/bulkEditService';
import { Selection } from 'vs/editor/common/core/selection';
import { IEditorContribution } from 'vs/editor/common/editorCommon';
import { DocumentPasteEditProvider, SnippetTextEdit, WorkspaceEdit } from 'vs/editor/common/languages';
Expand All @@ -25,20 +25,22 @@ import { IConfigurationService } from 'vs/platform/configuration/common/configur

const vscodeClipboardMime = 'application/vnd.code.copyId';

class DefaultPasteEditProvider implements DocumentPasteEditProvider {

const defaultPasteEditProvider = new class implements DocumentPasteEditProvider {
async provideDocumentPasteEdits(model: ITextModel, selection: Selection, dataTransfer: VSDataTransfer, _token: CancellationToken): Promise<WorkspaceEdit | undefined> {
const textDataTransfer = dataTransfer.get(Mimes.text) ?? dataTransfer.get('text');
if (textDataTransfer) {
const text = await textDataTransfer.asString();
return {
edits: [new ResourceTextEdit(model.uri, { range: selection, text })]
edits: [{
resource: model.uri,
edit: { range: selection, text },
}]
};
}

return undefined;
}
}
};

export class CopyPasteController extends Disposable implements IEditorContribution {

Expand Down Expand Up @@ -66,8 +68,6 @@ export class CopyPasteController extends Disposable implements IEditorContributi

this._editor = editor;

this._languageFeaturesService.documentPasteEditProvider.register('*', new DefaultPasteEditProvider());

const container = editor.getContainerDomNode();

this._register(addDisposableListener(container, 'copy', (e: ClipboardEvent) => {
Expand Down Expand Up @@ -162,7 +162,7 @@ export class CopyPasteController extends Disposable implements IEditorContributi

dataTransfer.delete(vscodeClipboardMime);

for (const provider of providers) {
for (const provider of [...providers, defaultPasteEditProvider]) {
const edit = await provider.provideDocumentPasteEdits(model, selection, dataTransfer, tokenSource.token);
if (originalDocVersion !== model.getVersionId()) {
return;
Expand Down

0 comments on commit 5c77ef5

Please sign in to comment.