mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-26 03:29:00 +01:00
🎨 unhook scm from marshalling
This commit is contained in:
@@ -23,11 +23,16 @@ interface CommandHandler {
|
||||
description: ICommandHandlerDescription;
|
||||
}
|
||||
|
||||
export interface ArgumentProcessor {
|
||||
processArgument(arg: any): any;
|
||||
}
|
||||
|
||||
export class ExtHostCommands extends ExtHostCommandsShape {
|
||||
|
||||
private _commands = new Map<string, CommandHandler>();
|
||||
private _proxy: MainThreadCommandsShape;
|
||||
private _converter: CommandsConverter;
|
||||
private _argumentProcessors: ArgumentProcessor[] = [];
|
||||
|
||||
constructor(
|
||||
threadService: IThreadService,
|
||||
@@ -42,6 +47,10 @@ export class ExtHostCommands extends ExtHostCommandsShape {
|
||||
return this._converter;
|
||||
}
|
||||
|
||||
registerArgumentProcessor(processor: ArgumentProcessor): void {
|
||||
this._argumentProcessors.push(processor);
|
||||
}
|
||||
|
||||
registerCommand(id: string, callback: <T>(...args: any[]) => T | Thenable<T>, thisArg?: any, description?: ICommandHandlerDescription): extHostTypes.Disposable {
|
||||
|
||||
if (!id.trim().length) {
|
||||
@@ -110,6 +119,8 @@ export class ExtHostCommands extends ExtHostCommandsShape {
|
||||
}
|
||||
}
|
||||
|
||||
args = args.map(arg => this._argumentProcessors.reduce((r, p) => p.processArgument(r), arg));
|
||||
|
||||
try {
|
||||
let result = callback.apply(thisArg, args);
|
||||
return TPromise.as(result);
|
||||
|
||||
@@ -12,7 +12,6 @@ import { IThreadService } from 'vs/workbench/services/thread/common/threadServic
|
||||
import { ExtHostCommands, CommandsConverter } from 'vs/workbench/api/node/extHostCommands';
|
||||
import { MainContext, MainThreadSCMShape, SCMRawResource } from './extHost.protocol';
|
||||
import * as vscode from 'vscode';
|
||||
import * as marshalling from 'vs/base/common/marshalling';
|
||||
|
||||
function getIconPath(decorations: vscode.SourceControlResourceThemableDecorations) {
|
||||
if (!decorations) {
|
||||
@@ -241,16 +240,21 @@ export class ExtHostSCM {
|
||||
this._proxy = threadService.get(MainContext.MainThreadSCM);
|
||||
this._inputBox = new ExtHostSCMInputBox(this._proxy);
|
||||
|
||||
// TODO@joao HACK
|
||||
marshalling.ResolverRegistry[3] = value => {
|
||||
const sourceControl = this._sourceControls.get(value.sourceControlHandle);
|
||||
_commands.registerArgumentProcessor({
|
||||
processArgument: arg => {
|
||||
if (arg && arg.$mid === 3) {
|
||||
const sourceControl = this._sourceControls.get(arg.sourceControlHandle);
|
||||
|
||||
if (!sourceControl) {
|
||||
return value;
|
||||
if (!sourceControl) {
|
||||
return arg;
|
||||
}
|
||||
|
||||
return sourceControl.getResourceState(arg.groupHandle, arg.handle);
|
||||
}
|
||||
|
||||
return arg;
|
||||
}
|
||||
|
||||
return sourceControl.getResourceState(value.groupHandle, value.handle);
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
createSourceControl(id: string, label: string): vscode.SourceControl {
|
||||
|
||||
Reference in New Issue
Block a user