mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-23 10:08:49 +01:00
Merge remote-tracking branch 'origin/main' into rebornix/controller-connection
This commit is contained in:
@@ -451,7 +451,8 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I
|
||||
return extHostLanguages.changeLanguage(document.uri, languageId);
|
||||
},
|
||||
match(selector: vscode.DocumentSelector, document: vscode.TextDocument): number {
|
||||
return score(typeConverters.LanguageSelector.from(selector), document.uri, document.languageId, true, document.notebook?.notebookType);
|
||||
const notebook = extHostDocuments.getDocumentData(document.uri)?.notebook;
|
||||
return score(typeConverters.LanguageSelector.from(selector), document.uri, document.languageId, true, notebook?.uri, notebook?.notebookType);
|
||||
},
|
||||
registerCodeActionsProvider(selector: vscode.DocumentSelector, provider: vscode.CodeActionProvider, metadata?: vscode.CodeActionProviderMetadata): vscode.Disposable {
|
||||
return extHostLanguageFeatures.registerCodeActionProvider(extension, checkSelector(selector), provider, metadata);
|
||||
@@ -567,9 +568,9 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I
|
||||
createLanguageStatusItem(id: string, selector: vscode.DocumentSelector): vscode.LanguageStatusItem {
|
||||
return extHostLanguages.createLanguageStatusItem(extension, id, selector);
|
||||
},
|
||||
registerDocumentOnDropProvider(selector: vscode.DocumentSelector, provider: vscode.DocumentOnDropProvider): vscode.Disposable {
|
||||
registerDocumentOnDropEditProvider(selector: vscode.DocumentSelector, provider: vscode.DocumentOnDropEditProvider): vscode.Disposable {
|
||||
checkProposedApiEnabled(extension, 'textEditorDrop');
|
||||
return extHostLanguageFeatures.registerDocumentOnDropProvider(extension, selector, provider);
|
||||
return extHostLanguageFeatures.registerDocumentOnDropEditProvider(extension, selector, provider);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1315,6 +1316,7 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I
|
||||
NotebookCellStatusBarItem: extHostTypes.NotebookCellStatusBarItem,
|
||||
NotebookControllerAffinity: extHostTypes.NotebookControllerAffinity,
|
||||
NotebookControllerState: extHostTypes.NotebookControllerState,
|
||||
NotebookEdit: extHostTypes.NotebookEdit,
|
||||
PortAttributes: extHostTypes.PortAttributes,
|
||||
LinkedEditingRanges: extHostTypes.LinkedEditingRanges,
|
||||
TestResultState: extHostTypes.TestResultState,
|
||||
|
||||
@@ -392,7 +392,7 @@ export interface MainThreadLanguageFeaturesShape extends IDisposable {
|
||||
$registerSelectionRangeProvider(handle: number, selector: IDocumentFilterDto[]): void;
|
||||
$registerCallHierarchyProvider(handle: number, selector: IDocumentFilterDto[]): void;
|
||||
$registerTypeHierarchyProvider(handle: number, selector: IDocumentFilterDto[]): void;
|
||||
$registerDocumentOnDropProvider(handle: number, selector: IDocumentFilterDto[]): void;
|
||||
$registerDocumentOnDropEditProvider(handle: number, selector: IDocumentFilterDto[]): void;
|
||||
$resolveDocumentOnDropFileData(handle: number, requestId: number, dataIndex: number): Promise<VSBuffer>;
|
||||
$setLanguageConfiguration(handle: number, languageId: string, configuration: ILanguageConfigurationDto): void;
|
||||
}
|
||||
|
||||
@@ -37,7 +37,7 @@ export class ExtHostDocumentData extends MirrorTextModel {
|
||||
uri: URI, lines: string[], eol: string, versionId: number,
|
||||
private _languageId: string,
|
||||
private _isDirty: boolean,
|
||||
private readonly _notebook?: vscode.NotebookDocument | undefined
|
||||
public readonly notebook?: vscode.NotebookDocument | undefined
|
||||
) {
|
||||
super(uri, lines, eol, versionId);
|
||||
}
|
||||
@@ -66,7 +66,6 @@ export class ExtHostDocumentData extends MirrorTextModel {
|
||||
get version() { return that._versionId; },
|
||||
get isClosed() { return that._isDisposed; },
|
||||
get isDirty() { return that._isDirty; },
|
||||
get notebook() { return that._notebook; },
|
||||
save() { return that._save(); },
|
||||
getText(range?) { return range ? that._getTextInRange(range) : that.getText(); },
|
||||
get eol() { return that._eol === '\n' ? EndOfLine.LF : EndOfLine.CRLF; },
|
||||
|
||||
@@ -1745,12 +1745,12 @@ class TypeHierarchyAdapter {
|
||||
}
|
||||
}
|
||||
|
||||
class DocumentOnDropAdapter {
|
||||
class DocumentOnDropEditAdapter {
|
||||
|
||||
constructor(
|
||||
private readonly _proxy: extHostProtocol.MainThreadLanguageFeaturesShape,
|
||||
private readonly _documents: ExtHostDocuments,
|
||||
private readonly _provider: vscode.DocumentOnDropProvider,
|
||||
private readonly _provider: vscode.DocumentOnDropEditProvider,
|
||||
private readonly _handle: number,
|
||||
) { }
|
||||
|
||||
@@ -1778,7 +1778,7 @@ type Adapter = DocumentSymbolAdapter | CodeLensAdapter | DefinitionAdapter | Hov
|
||||
| DocumentSemanticTokensAdapter | DocumentRangeSemanticTokensAdapter
|
||||
| EvaluatableExpressionAdapter | InlineValuesAdapter
|
||||
| LinkedEditingRangeAdapter | InlayHintsAdapter | InlineCompletionAdapter | InlineCompletionAdapterNew
|
||||
| DocumentOnDropAdapter;
|
||||
| DocumentOnDropEditAdapter;
|
||||
|
||||
class AdapterData {
|
||||
constructor(
|
||||
@@ -2402,15 +2402,15 @@ export class ExtHostLanguageFeatures implements extHostProtocol.ExtHostLanguageF
|
||||
|
||||
// --- Document on drop
|
||||
|
||||
registerDocumentOnDropProvider(extension: IExtensionDescription, selector: vscode.DocumentSelector, provider: vscode.DocumentOnDropProvider) {
|
||||
registerDocumentOnDropEditProvider(extension: IExtensionDescription, selector: vscode.DocumentSelector, provider: vscode.DocumentOnDropEditProvider) {
|
||||
const handle = this._nextHandle();
|
||||
this._adapter.set(handle, new AdapterData(new DocumentOnDropAdapter(this._proxy, this._documents, provider, handle), extension));
|
||||
this._proxy.$registerDocumentOnDropProvider(handle, this._transformDocumentSelector(selector));
|
||||
this._adapter.set(handle, new AdapterData(new DocumentOnDropEditAdapter(this._proxy, this._documents, provider, handle), extension));
|
||||
this._proxy.$registerDocumentOnDropEditProvider(handle, this._transformDocumentSelector(selector));
|
||||
return this._createDisposable(handle);
|
||||
}
|
||||
|
||||
$provideDocumentOnDropEdits(handle: number, requestId: number, resource: UriComponents, position: IPosition, dataTransferDto: DataTransferDTO, token: CancellationToken): Promise<Dto<languages.SnippetTextEdit> | undefined> {
|
||||
return this._withAdapter(handle, DocumentOnDropAdapter, adapter =>
|
||||
return this._withAdapter(handle, DocumentOnDropEditAdapter, adapter =>
|
||||
Promise.resolve(adapter.provideDocumentOnDropEdits(requestId, URI.revive(resource), position, dataTransferDto, token)), undefined, undefined);
|
||||
}
|
||||
|
||||
|
||||
@@ -105,6 +105,15 @@ export class ExtHostNotebookEditor {
|
||||
get document() {
|
||||
return that.notebookData.apiNotebook;
|
||||
},
|
||||
get notebook() {
|
||||
return that.notebookData.apiNotebook;
|
||||
},
|
||||
get selection() {
|
||||
return that._selections[0];
|
||||
},
|
||||
set selection(selection: vscode.NotebookRange) {
|
||||
this.selections = [selection];
|
||||
},
|
||||
get selections() {
|
||||
return that._selections;
|
||||
},
|
||||
|
||||
@@ -25,7 +25,7 @@ import { Command } from 'vs/editor/common/languages';
|
||||
import { DataTransferConverter, DataTransferDTO } from 'vs/workbench/api/common/shared/dataTransfer';
|
||||
import { ITreeViewsService, TreeviewsService } from 'vs/workbench/services/views/common/treeViewsService';
|
||||
import { checkProposedApiEnabled } from 'vs/workbench/services/extensions/common/extensions';
|
||||
import { IDataTransfer } from 'vs/editor/common/dnd';
|
||||
import { IDataTransfer } from 'vs/base/common/dataTransfer';
|
||||
|
||||
type TreeItemHandle = string;
|
||||
|
||||
|
||||
@@ -598,6 +598,55 @@ export class TextEdit {
|
||||
}
|
||||
}
|
||||
|
||||
@es5ClassCompat
|
||||
export class NotebookEdit implements vscode.NotebookEdit {
|
||||
|
||||
static isNotebookCellEdit(thing: any): thing is NotebookEdit {
|
||||
if (thing instanceof NotebookEdit) {
|
||||
return true;
|
||||
}
|
||||
if (!thing) {
|
||||
return false;
|
||||
}
|
||||
return NotebookRange.isNotebookRange((<NotebookEdit>thing))
|
||||
&& Array.isArray((<NotebookEdit>thing).newCells);
|
||||
}
|
||||
|
||||
static replaceCells(range: NotebookRange, newCells: NotebookCellData[]): NotebookEdit {
|
||||
return new NotebookEdit(range, newCells);
|
||||
}
|
||||
|
||||
static insertCells(index: number, newCells: vscode.NotebookCellData[]): vscode.NotebookEdit {
|
||||
return new NotebookEdit(new NotebookRange(index, index), newCells);
|
||||
}
|
||||
|
||||
static deleteCells(range: NotebookRange): NotebookEdit {
|
||||
return new NotebookEdit(range, []);
|
||||
}
|
||||
|
||||
static updateCellMetadata(index: number, newMetadata: { [key: string]: any }): NotebookEdit {
|
||||
const edit = new NotebookEdit(new NotebookRange(index, index), []);
|
||||
edit.newCellMetadata = newMetadata;
|
||||
return edit;
|
||||
}
|
||||
|
||||
static updateNotebookMetadata(newMetadata: { [key: string]: any }): NotebookEdit {
|
||||
const edit = new NotebookEdit(new NotebookRange(0, 0), []);
|
||||
edit.newNotebookMetadata = newMetadata;
|
||||
return edit;
|
||||
}
|
||||
|
||||
range: NotebookRange;
|
||||
newCells: NotebookCellData[];
|
||||
newCellMetadata?: { [key: string]: any };
|
||||
newNotebookMetadata?: { [key: string]: any };
|
||||
|
||||
constructor(range: NotebookRange, newCells: NotebookCellData[]) {
|
||||
this.range = range;
|
||||
this.newCells = newCells;
|
||||
}
|
||||
}
|
||||
|
||||
export class SnippetTextEdit implements vscode.SnippetTextEdit {
|
||||
|
||||
range: vscode.Range;
|
||||
@@ -741,7 +790,7 @@ export class WorkspaceEdit implements vscode.WorkspaceEdit {
|
||||
return this._edits.some(edit => edit._type === FileEditType.Text && edit.uri.toString() === uri.toString());
|
||||
}
|
||||
|
||||
set(uri: URI, edits: TextEdit[]): void {
|
||||
set(uri: URI, edits: TextEdit[] | unknown): void {
|
||||
if (!edits) {
|
||||
// remove all text edits for `uri`
|
||||
for (let i = 0; i < this._edits.length; i++) {
|
||||
@@ -753,9 +802,17 @@ export class WorkspaceEdit implements vscode.WorkspaceEdit {
|
||||
coalesceInPlace(this._edits);
|
||||
} else {
|
||||
// append edit to the end
|
||||
for (const edit of edits) {
|
||||
for (const edit of edits as TextEdit[] | NotebookEdit[]) {
|
||||
if (edit) {
|
||||
this._edits.push({ _type: FileEditType.Text, uri, edit });
|
||||
if (NotebookEdit.isNotebookCellEdit(edit)) {
|
||||
if (edit.newCellMetadata) {
|
||||
this.replaceNotebookCellMetadata(uri, edit.range.start, edit.newCellMetadata);
|
||||
} else {
|
||||
this.replaceNotebookCells(uri, edit.range, edit.newCells);
|
||||
}
|
||||
} else {
|
||||
this._edits.push({ _type: FileEditType.Text, uri, edit });
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
import { once } from 'vs/base/common/functional';
|
||||
import { URI, UriComponents } from 'vs/base/common/uri';
|
||||
import { IDataTransfer, IDataTransferItem } from 'vs/editor/common/dnd';
|
||||
import { IDataTransfer, IDataTransferItem } from 'vs/base/common/dataTransfer';
|
||||
|
||||
export interface IDataTransferFileDTO {
|
||||
readonly name: string;
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { VSBuffer } from 'vs/base/common/buffer';
|
||||
import { IDataTransfer, IDataTransferItem } from 'vs/editor/common/dnd';
|
||||
import { IDataTransfer, IDataTransferItem } from 'vs/base/common/dataTransfer';
|
||||
|
||||
export class DataTransferCache {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user