提交 2e6578fc 编写于 作者: J Johannes Rieken

native json for exthost/mainthread-workspace, #40169

上级 e20f08b2
...@@ -48,7 +48,6 @@ import { ITreeItem } from 'vs/workbench/common/views'; ...@@ -48,7 +48,6 @@ import { ITreeItem } from 'vs/workbench/common/views';
import { ThemeColor } from 'vs/platform/theme/common/themeService'; import { ThemeColor } from 'vs/platform/theme/common/themeService';
import { IDisposable } from 'vs/base/common/lifecycle'; import { IDisposable } from 'vs/base/common/lifecycle';
import { SerializedError } from 'vs/base/common/errors'; import { SerializedError } from 'vs/base/common/errors';
import { IWorkspaceFolderData } from 'vs/platform/workspace/common/workspace';
import { IStat, IFileChange } from 'vs/platform/files/common/files'; import { IStat, IFileChange } from 'vs/platform/files/common/files';
import { ConfigurationScope } from 'vs/platform/configuration/common/configurationRegistry'; import { ConfigurationScope } from 'vs/platform/configuration/common/configurationRegistry';
import { ParsedArgs } from 'vs/platform/environment/common/environment'; import { ParsedArgs } from 'vs/platform/environment/common/environment';
...@@ -68,7 +67,7 @@ export interface IEnvironment { ...@@ -68,7 +67,7 @@ export interface IEnvironment {
export interface IWorkspaceData { export interface IWorkspaceData {
id: string; id: string;
name: string; name: string;
folders: IWorkspaceFolderData[]; folders: { uri: UriComponents, name: string, index: number }[];
} }
export interface IInitData { export interface IInitData {
...@@ -686,7 +685,7 @@ export const MainContext = { ...@@ -686,7 +685,7 @@ export const MainContext = {
MainThreadStorage: createMainId<MainThreadStorageShape>('MainThreadStorage'), MainThreadStorage: createMainId<MainThreadStorageShape>('MainThreadStorage'),
MainThreadTelemetry: createMainId<MainThreadTelemetryShape>('MainThreadTelemetry'), MainThreadTelemetry: createMainId<MainThreadTelemetryShape>('MainThreadTelemetry'),
MainThreadTerminalService: createMainId<MainThreadTerminalServiceShape>('MainThreadTerminalService'), MainThreadTerminalService: createMainId<MainThreadTerminalServiceShape>('MainThreadTerminalService'),
MainThreadWorkspace: createMainId<MainThreadWorkspaceShape>('MainThreadWorkspace', ProxyType.CustomMarshaller), MainThreadWorkspace: createMainId<MainThreadWorkspaceShape>('MainThreadWorkspace'),
MainThreadFileSystem: createMainId<MainThreadFileSystemShape>('MainThreadFileSystem'), MainThreadFileSystem: createMainId<MainThreadFileSystemShape>('MainThreadFileSystem'),
MainThreadExtensionService: createMainId<MainThreadExtensionServiceShape>('MainThreadExtensionService'), MainThreadExtensionService: createMainId<MainThreadExtensionServiceShape>('MainThreadExtensionService'),
MainThreadSCM: createMainId<MainThreadSCMShape>('MainThreadSCM', ProxyType.CustomMarshaller), MainThreadSCM: createMainId<MainThreadSCMShape>('MainThreadSCM', ProxyType.CustomMarshaller),
...@@ -715,6 +714,6 @@ export const ExtHostContext = { ...@@ -715,6 +714,6 @@ export const ExtHostContext = {
ExtHostTerminalService: createExtId<ExtHostTerminalServiceShape>('ExtHostTerminalService'), ExtHostTerminalService: createExtId<ExtHostTerminalServiceShape>('ExtHostTerminalService'),
ExtHostSCM: createExtId<ExtHostSCMShape>('ExtHostSCM', ProxyType.CustomMarshaller), ExtHostSCM: createExtId<ExtHostSCMShape>('ExtHostSCM', ProxyType.CustomMarshaller),
ExtHostTask: createExtId<ExtHostTaskShape>('ExtHostTask', ProxyType.CustomMarshaller), ExtHostTask: createExtId<ExtHostTaskShape>('ExtHostTask', ProxyType.CustomMarshaller),
ExtHostWorkspace: createExtId<ExtHostWorkspaceShape>('ExtHostWorkspace', ProxyType.CustomMarshaller), ExtHostWorkspace: createExtId<ExtHostWorkspaceShape>('ExtHostWorkspace'),
ExtHostWindow: createExtId<ExtHostWindowShape>('ExtHostWindow'), ExtHostWindow: createExtId<ExtHostWindowShape>('ExtHostWindow'),
}; };
...@@ -18,14 +18,23 @@ import { TernarySearchTree } from 'vs/base/common/map'; ...@@ -18,14 +18,23 @@ import { TernarySearchTree } from 'vs/base/common/map';
class Workspace2 extends Workspace { class Workspace2 extends Workspace {
static fromData(data: IWorkspaceData) { static fromData(data: IWorkspaceData) {
return data ? new Workspace2(data) : null; if (!data) {
return null;
} else {
const { id, name, folders } = data;
return new Workspace2(
id,
name,
folders.map(({ uri, name, index }) => new WorkspaceFolder({ name, index, uri: URI.revive(uri) }))
);
}
} }
private readonly _workspaceFolders: vscode.WorkspaceFolder[] = []; private readonly _workspaceFolders: vscode.WorkspaceFolder[] = [];
private readonly _structure = TernarySearchTree.forPaths<vscode.WorkspaceFolder>(); private readonly _structure = TernarySearchTree.forPaths<vscode.WorkspaceFolder>();
private constructor(data: IWorkspaceData) { private constructor(id: string, name: string, folders: WorkspaceFolder[]) {
super(data.id, data.name, data.folders.map(folder => new WorkspaceFolder(folder))); super(id, name, folders);
// setup the workspace folder data structure // setup the workspace folder data structure
this.folders.forEach(({ name, uri, index }) => { this.folders.forEach(({ name, uri, index }) => {
......
...@@ -26,6 +26,7 @@ import { IDisposable, dispose } from 'vs/base/common/lifecycle'; ...@@ -26,6 +26,7 @@ import { IDisposable, dispose } from 'vs/base/common/lifecycle';
import { ILogService } from 'vs/platform/log/common/log'; import { ILogService } from 'vs/platform/log/common/log';
import { IMessagePassingProtocol } from 'vs/base/parts/ipc/common/ipc'; import { IMessagePassingProtocol } from 'vs/base/parts/ipc/common/ipc';
import { RPCProtocol } from 'vs/workbench/services/extensions/node/rpcProtocol'; import { RPCProtocol } from 'vs/workbench/services/extensions/node/rpcProtocol';
import URI from 'vs/base/common/uri';
// const nativeExit = process.exit.bind(process); // const nativeExit = process.exit.bind(process);
function patchProcess(allowExit: boolean) { function patchProcess(allowExit: boolean) {
...@@ -234,7 +235,7 @@ export class ExtensionHostMain { ...@@ -234,7 +235,7 @@ export class ExtensionHostMain {
// find exact path // find exact path
for (const { uri } of this._workspace.folders) { for (const { uri } of this._workspace.folders) {
if (await pfs.exists(join(uri.fsPath, fileName))) { if (await pfs.exists(join(URI.revive(uri).fsPath, fileName))) {
// the file was found // the file was found
return ( return (
this._extensionService.activateById(extensionId, new ExtensionActivatedByEvent(true, `workspaceContains:${fileName}`)) this._extensionService.activateById(extensionId, new ExtensionActivatedByEvent(true, `workspaceContains:${fileName}`))
...@@ -261,7 +262,7 @@ export class ExtensionHostMain { ...@@ -261,7 +262,7 @@ export class ExtensionHostMain {
includes[globPattern] = true; includes[globPattern] = true;
}); });
const folderQueries = this._workspace.folders.map(folder => ({ folder: folder.uri })); const folderQueries = this._workspace.folders.map(folder => ({ folder: URI.revive(folder.uri) }));
const config = this._extHostConfiguration.getConfiguration('search'); const config = this._extHostConfiguration.getConfiguration('search');
const useRipgrep = config.get('useRipgrep', true); const useRipgrep = config.get('useRipgrep', true);
const followSymlinks = config.get('followSymlinks', true); const followSymlinks = config.get('followSymlinks', true);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册