mirror of
https://github.com/microsoft/vscode.git
synced 2026-03-03 15:29:23 +00:00
native json for exthost/mainthread-workspace, #40169
This commit is contained in:
@@ -48,7 +48,6 @@ import { ITreeItem } from 'vs/workbench/common/views';
|
||||
import { ThemeColor } from 'vs/platform/theme/common/themeService';
|
||||
import { IDisposable } from 'vs/base/common/lifecycle';
|
||||
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 { ConfigurationScope } from 'vs/platform/configuration/common/configurationRegistry';
|
||||
import { ParsedArgs } from 'vs/platform/environment/common/environment';
|
||||
@@ -68,7 +67,7 @@ export interface IEnvironment {
|
||||
export interface IWorkspaceData {
|
||||
id: string;
|
||||
name: string;
|
||||
folders: IWorkspaceFolderData[];
|
||||
folders: { uri: UriComponents, name: string, index: number }[];
|
||||
}
|
||||
|
||||
export interface IInitData {
|
||||
@@ -686,7 +685,7 @@ export const MainContext = {
|
||||
MainThreadStorage: createMainId<MainThreadStorageShape>('MainThreadStorage'),
|
||||
MainThreadTelemetry: createMainId<MainThreadTelemetryShape>('MainThreadTelemetry'),
|
||||
MainThreadTerminalService: createMainId<MainThreadTerminalServiceShape>('MainThreadTerminalService'),
|
||||
MainThreadWorkspace: createMainId<MainThreadWorkspaceShape>('MainThreadWorkspace', ProxyType.CustomMarshaller),
|
||||
MainThreadWorkspace: createMainId<MainThreadWorkspaceShape>('MainThreadWorkspace'),
|
||||
MainThreadFileSystem: createMainId<MainThreadFileSystemShape>('MainThreadFileSystem'),
|
||||
MainThreadExtensionService: createMainId<MainThreadExtensionServiceShape>('MainThreadExtensionService'),
|
||||
MainThreadSCM: createMainId<MainThreadSCMShape>('MainThreadSCM', ProxyType.CustomMarshaller),
|
||||
@@ -715,6 +714,6 @@ export const ExtHostContext = {
|
||||
ExtHostTerminalService: createExtId<ExtHostTerminalServiceShape>('ExtHostTerminalService'),
|
||||
ExtHostSCM: createExtId<ExtHostSCMShape>('ExtHostSCM', ProxyType.CustomMarshaller),
|
||||
ExtHostTask: createExtId<ExtHostTaskShape>('ExtHostTask', ProxyType.CustomMarshaller),
|
||||
ExtHostWorkspace: createExtId<ExtHostWorkspaceShape>('ExtHostWorkspace', ProxyType.CustomMarshaller),
|
||||
ExtHostWorkspace: createExtId<ExtHostWorkspaceShape>('ExtHostWorkspace'),
|
||||
ExtHostWindow: createExtId<ExtHostWindowShape>('ExtHostWindow'),
|
||||
};
|
||||
|
||||
@@ -18,14 +18,23 @@ import { TernarySearchTree } from 'vs/base/common/map';
|
||||
class Workspace2 extends Workspace {
|
||||
|
||||
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 _structure = TernarySearchTree.forPaths<vscode.WorkspaceFolder>();
|
||||
|
||||
private constructor(data: IWorkspaceData) {
|
||||
super(data.id, data.name, data.folders.map(folder => new WorkspaceFolder(folder)));
|
||||
private constructor(id: string, name: string, folders: WorkspaceFolder[]) {
|
||||
super(id, name, folders);
|
||||
|
||||
// setup the workspace folder data structure
|
||||
this.folders.forEach(({ name, uri, index }) => {
|
||||
|
||||
@@ -26,6 +26,7 @@ import { IDisposable, dispose } from 'vs/base/common/lifecycle';
|
||||
import { ILogService } from 'vs/platform/log/common/log';
|
||||
import { IMessagePassingProtocol } from 'vs/base/parts/ipc/common/ipc';
|
||||
import { RPCProtocol } from 'vs/workbench/services/extensions/node/rpcProtocol';
|
||||
import URI from 'vs/base/common/uri';
|
||||
|
||||
// const nativeExit = process.exit.bind(process);
|
||||
function patchProcess(allowExit: boolean) {
|
||||
@@ -234,7 +235,7 @@ export class ExtensionHostMain {
|
||||
// find exact path
|
||||
|
||||
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
|
||||
return (
|
||||
this._extensionService.activateById(extensionId, new ExtensionActivatedByEvent(true, `workspaceContains:${fileName}`))
|
||||
@@ -261,7 +262,7 @@ export class ExtensionHostMain {
|
||||
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 useRipgrep = config.get('useRipgrep', true);
|
||||
const followSymlinks = config.get('followSymlinks', true);
|
||||
|
||||
Reference in New Issue
Block a user