提交 8e746dfd 编写于 作者: J Johannes Rieken

very first proposed API for multiple roots, #28526

上级 264b773b
......@@ -7,6 +7,13 @@
declare module 'vscode' {
export namespace workspace {
export const onDidChangeWorkspaceFolders: Event<Uri[] | undefined>;
export let workspaceFolders: Uri[] | undefined;
}
/**
* Controls the behaviour of the terminal's visibility.
*/
......
......@@ -54,6 +54,12 @@ export interface IExtensionApiFactory {
(extension: IExtensionDescription): typeof vscode;
}
function assertProposedApi(extension: IExtensionDescription): void {
if (!extension.enableProposedApi) {
throw new Error(`[${extension.id}]: Proposed API is only available when running out of dev or with the following command line switch: --enable-proposed-api ${extension.id}`);
}
}
function proposedApiFunction<T>(extension: IExtensionDescription, fn: T): T {
if (extension.enableProposedApi) {
return fn;
......@@ -348,6 +354,13 @@ export function createApiFactory(
set rootPath(value) {
throw errors.readonly();
},
get workspaceFolders() {
assertProposedApi(extension);
return extHostWorkspace.getRoots();
},
onDidChangeWorkspaceFolders: proposedApiFunction(extension, (listener, thisArgs?, disposables?) => {
return extHostWorkspace.onDidChangeWorkspace(listener, thisArgs, disposables);
}),
asRelativePath: (pathOrUri) => {
return extHostWorkspace.getRelativePath(pathOrUri);
},
......
......@@ -21,11 +21,11 @@ export class ExtHostWorkspace extends ExtHostWorkspaceShape {
private static _requestIdPool = 0;
private readonly _onDidChangeWorkspace = new Emitter<this>();
private readonly _onDidChangeWorkspace = new Emitter<URI[]>();
private readonly _proxy: MainThreadWorkspaceShape;
private _workspace: Workspace;
readonly onDidChangeWorkspace: Event<this> = this._onDidChangeWorkspace.event;
readonly onDidChangeWorkspace: Event<URI[]> = this._onDidChangeWorkspace.event;
constructor(threadService: IThreadService, data: IWorkspaceData) {
super();
......@@ -35,8 +35,12 @@ export class ExtHostWorkspace extends ExtHostWorkspaceShape {
// --- workspace ---
get workspace(): Workspace {
return this._workspace;
getRoots(): URI[] {
if (!this._workspace) {
return undefined;
} else {
return this._workspace.roots.slice(0);
}
}
getPath(): string {
......@@ -85,7 +89,7 @@ export class ExtHostWorkspace extends ExtHostWorkspaceShape {
$acceptWorkspaceData(data: IWorkspaceData): void {
this._workspace = data ? new Workspace(data.id, data.name, data.roots) : null;
this._onDidChangeWorkspace.fire(this);
this._onDidChangeWorkspace.fire(this.getRoots());
}
// --- search ---
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册