mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-26 11:38:51 +01:00
Cleaner API to query tasks
This commit is contained in:
@@ -132,7 +132,7 @@ export function createApiFactory(
|
||||
const extHostLanguages = new ExtHostLanguages(rpcProtocol);
|
||||
|
||||
// Register API-ish commands
|
||||
ExtHostApiCommands.register(extHostCommands);
|
||||
ExtHostApiCommands.register(extHostCommands, extHostWorkspace);
|
||||
|
||||
return function (extension: IExtensionDescription): typeof vscode {
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
|
||||
import URI from 'vs/base/common/uri';
|
||||
import { TPromise } from 'vs/base/common/winjs.base';
|
||||
import * as Objects from 'vs/base/common/objects';
|
||||
import { IDisposable } from 'vs/base/common/lifecycle';
|
||||
import * as vscode from 'vscode';
|
||||
import * as typeConverters from 'vs/workbench/api/node/extHostTypeConverters';
|
||||
@@ -18,18 +19,21 @@ import { IWorkspaceSymbolProvider } from 'vs/workbench/parts/search/common/searc
|
||||
import { Position as EditorPosition, ITextEditorOptions } from 'vs/platform/editor/common/editor';
|
||||
import { CustomCodeAction } from 'vs/workbench/api/node/extHostLanguageFeatures';
|
||||
import * as TaskSystem from 'vs/workbench/parts/tasks/common/tasks';
|
||||
import { ExtHostWorkspace } from './extHostWorkspace';
|
||||
|
||||
export class ExtHostApiCommands {
|
||||
|
||||
static register(commands: ExtHostCommands) {
|
||||
return new ExtHostApiCommands(commands).registerCommands();
|
||||
static register(commands: ExtHostCommands, workspace: ExtHostWorkspace) {
|
||||
return new ExtHostApiCommands(commands, workspace).registerCommands();
|
||||
}
|
||||
|
||||
private _commands: ExtHostCommands;
|
||||
private _workspace: ExtHostWorkspace;
|
||||
private _disposables: IDisposable[] = [];
|
||||
|
||||
private constructor(commands: ExtHostCommands) {
|
||||
private constructor(commands: ExtHostCommands, workspace: ExtHostWorkspace) {
|
||||
this._commands = commands;
|
||||
this._workspace = workspace;
|
||||
}
|
||||
|
||||
registerCommands() {
|
||||
@@ -472,16 +476,25 @@ export class ExtHostApiCommands {
|
||||
.then(tryMapWith(typeConverters.DocumentLink.to));
|
||||
}
|
||||
|
||||
private _executeTaskProvider(): Thenable<vscode.TaskHandle[]> {
|
||||
return this._commands.executeCommand<TaskSystem.TaskHandleTransfer[]>('_executeTaskProvider').then<vscode.TaskHandle[]>((values) => {
|
||||
private _executeTaskProvider(): Thenable<vscode.TaskItem[]> {
|
||||
return this._commands.executeCommand<TaskSystem.TaskItemTransfer[]>('_executeTaskProvider').then<vscode.TaskItem[]>((values) => {
|
||||
let workspace = this._workspace;
|
||||
return values.map(handle => {
|
||||
return {
|
||||
id: handle.id,
|
||||
label: handle.label,
|
||||
workspaceFolder: {
|
||||
name: handle.workspaceFolder.name,
|
||||
index: handle.workspaceFolder.index,
|
||||
uri: URI.revive(handle.workspaceFolder.uri)
|
||||
let definition: vscode.TaskDefinition = Objects.assign(Object.create(null), handle.definition);
|
||||
delete definition._key;
|
||||
let uri = URI.revive(handle.workspaceFolderUri);
|
||||
return new class {
|
||||
get id(): string {
|
||||
return handle.id;
|
||||
}
|
||||
get label(): string {
|
||||
return handle.label;
|
||||
}
|
||||
get definition(): vscode.TaskDefinition {
|
||||
return definition;
|
||||
}
|
||||
get workspaceFolder(): vscode.WorkspaceFolder {
|
||||
return uri ? workspace.resolveWorkspaceFolder(uri) : undefined;
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
@@ -125,6 +125,10 @@ class ExtHostWorkspaceImpl extends Workspace {
|
||||
}
|
||||
return this._structure.findSubstr(uri.toString());
|
||||
}
|
||||
|
||||
resolveWorkspaceFolder(uri: URI): vscode.WorkspaceFolder {
|
||||
return this._structure.get(uri.toString());
|
||||
}
|
||||
}
|
||||
|
||||
export class ExtHostWorkspace implements ExtHostWorkspaceShape {
|
||||
@@ -239,6 +243,13 @@ export class ExtHostWorkspace implements ExtHostWorkspaceShape {
|
||||
return this._actualWorkspace.getWorkspaceFolder(uri, resolveParent);
|
||||
}
|
||||
|
||||
resolveWorkspaceFolder(uri: vscode.Uri): vscode.WorkspaceFolder {
|
||||
if (!this._actualWorkspace) {
|
||||
return undefined;
|
||||
}
|
||||
return this._actualWorkspace.resolveWorkspaceFolder(uri);
|
||||
}
|
||||
|
||||
getPath(): string {
|
||||
|
||||
// this is legacy from the days before having
|
||||
|
||||
Reference in New Issue
Block a user